頭の悪いHMDのレビューをしてみる
はじめに
Oculus Rift Advent Calendar 2016の2日目です。
昨日は桜花一門さんのAllumetteが素敵な理由でした。
N回目のVR元年ということで、いろいろHMD(Head Mount Display)が出てきました。
気付いたらうちにもたくさん生えてきました。
ファッションVR勢です pic.twitter.com/KvhdHh6K33
— てんちょー (@shop_0761) October 22, 2016
ということで、これらのHMDのレビューでもしようかと思います。
と言ってもだいたいのレビューはあちこちですでになされているので、別の観点からします。
題して
一番寝心地のいいHMDはどれだ選手権!!
すでに皆さんも一度は被って寝落ちしているかと思いますし、僕自身も手元にあるHMDを被ったまま(意図して)寝たことがあります。 ですが改めて記事になっているものはなかったので、チャンスだと思いました。
注)別に各HMD、コンテンツを批判したいわけではありません。どれもいいものですし、お世話になってます。
事前知識
VRについて全くわからない方はこちらのリンクとかを見てみるといいかもです。一つ目の動画は割りとイメージつかみやすいかも。
評価
評価方法
実際に被って寝(落ち)ます。メガネかけてます。
Rift以外はヘッドホンを使います。
実験時間は寝てから起きるまで。最近あまり長く寝れないことが多いのでだいたい2-3時間です。
(そもそもほんとに眠いときは準備する気になれない)
評価基準
- 起きたときの没入感
- 寝返りのうちやすさ
- コンテンツの寝やすさ
- 被った状態での後頭部へのやさしさ
- 総合評価
をそれぞれ5段階で評価します。かなりアレなやつは☆になります。
結果
Rift
Mikulusの場合
mikulusについてはこちら。
膝枕をしてもらうかのように調整してみました。 他にもたくさんやっている方がいるので、写真は割愛します。
この辺でも覗いてみてください。
起きたときの没入感 ★★★★
目を開けたら目があった。 びっくりした。
寝返りのうちやすさ ★★★★
ヘッドホンが付いているので便利。 しかも軽いのがいいですね。
あまりゴロゴロするとヘッドホンの部分が壊れてしまいそうなので、おとなしくしてました。
コンテンツの寝やすさ ★★★★★
あの これ 呼吸音と心拍音がいい感じに落ち着く感じ非常に良い…
こう看取られてる気分ですね…(看取られたい
被った状態での後頭部へのやさしさ ★★★★★
Riftの後頭部のつくりは以外にもクッションが効いてて、あまり違和感がありませんでした。
後頭部にもセンサーがあるそうなので、これを使ってなにか作れないかなとか思ったり。
総合評価 ★★★★
最初は寝るのにちょうどいいコンテンツを思いつかなくてVirtualDesktopにでもしようかと思ったらMikulusがよさそうだったので選びました。
参考:
目をつぶってしまえば現段階での呼吸音の違和感もなにもなく快適でした。
というか呼吸音と心拍音が聞こえるだけの音声を聞けばいいのではという意見は受け付けません。
目を開けたらそこにいると思えるほうがいいのです。はい。
Riftだとメガネが厳しいHMDなので、そこさえなんとかなれば(というか被ってしまえば)意外とお布団でも使えることがわかりました。
HTC Vive(Pre)
The lab 丘の場合
The labについてはこちら。
丘で横になったときはこんな感じ。鳥が飛んでます。
起きたときの没入感 ★★★
起きて外した時にあれ部屋が狭い…?っと軽く思うくらいには没入していたようです。
まあ曇り空なんですが。
寝返りのうちやすさ ★★
ちょっと重いので頭が持って行かれます。出来なくはないですね。イヤホンにしたらもっといいかも。
コンテンツの寝やすさ ☆
Thelabの丘で寝ると上で鳥が飛んでいます。いい感じに環境音があって快適…かと思いきやタイミングやら位置やらが悪かったのか例のロボット犬が周囲で暴れまくっています。
いやあの、ほんと戯れる分にはいいんですよ… 寝るのにはうるs…(めっちゃギュインギュインしてた
ロボット犬 On/Offできると嬉しい。
被った状態での後頭部へのやさしさ ★★★★
Viveだと後頭部からまっすぐコードが伸びてます。
このためコードのことを思うと頭の下にそのままコードがくることになると思います。このためちょっと違和感があるかなという感じでした。
工夫次第でよくなるかもって感じです。
総合評価 ★★★
ぱっと思いついたコンテンツがコレだったのですが、犬が…犬が…という思いで完全に失敗しました。
といっても、他にこういうのが思いつかなかったのでオススメが知りたいです。
Viveは以前VirtualDesktopをしながら寝ていたこともあるのですが、如何せん重い…首が疲れます。
寝ているとそれは多少軽減されるのですが、ちょっとでも動くとぐいっと持っていかれる感じがします。
PSVR
サマーレッスンのひかりちゃんの部屋のベッドの場合
サマーレッスンについてはこちら。
ベッドの上に座った感じ
ベッドに寝っ転がった
起きたときの没入感 ★
そもそも寝れなかった 頭痛すぎ。
寝返りのうちやすさ ★
プレイエリアの外に出ると目を開けた時に気が散ってしまうので、なかなか動けません。 ヘッドホンをしているとさらに動けないです。イヤホンにしたらいいかも。
しかも全体的に大きめなので壊しそうであまり動けない。
コンテンツの寝やすさ ★★
まあ確かに誰かがいる部屋で寝てる感は出てるっぽいので、ぼちぼち。
どのタイミングで寝るかに迷うかも。(教えてる時、ハンコを押す前、押した後)
今回はハンコを押した後にしましたが、突然話しかけてきたりしてビビります。
教えてるときはBGMがかかってしまうのでやめました。ので、ハンコを押す前がいいかも。
場所を調整するのがかなり難しかったです。 なかなかベッドの位置に移動出来ないし(当たり前)、低すぎると暗転してしまいます。
被った状態での後頭部へのやさしさ ☆
良くない これは頭が痛い 後頭部のパーツが痛すぎる。
他のは薄めのバンドだったのにこれだけやたらしっかりしてるせいで、 寝っ転がった時にこの後頭部のパーツにばかり力がかかって痛い。
そのせいではずした後に頭が痛くなってしまった。
総合評価 ★
PSVRは寝るのに挑戦したのは3回ほどあります。一度だけ座椅子にもたれかかって寝ることに成功しましたが、 今回のように布団や床で寝ることを想定すると後頭部の出来のよさが仇になってしまっています。
後1回はAmazonPrimeVideoでアニメを見ていました。結局後頭部の痛みが気になり寝るにねれない状況でした。 よっぽど疲れている、眠い状況であれば寝付けるかもしれませんが、数時間でこのダメージなので ちょっと怖いですね…
番外編 GearVR + GalaxyS6 edge
niconicoVRの場合
起きたときの没入感 ★★★
まあ単に動画を見ていただけなので、特にやべえコレ みたいなことにはなりませんでした。
寝返りのうちやすさ ★★★★★
これは超いい ほんとにいい モバイルの良さを思い知らされました。
なにより軽い。余計なコードがない。寝返りがうてる。こんなに違うものかと…
思わずゴロゴロ転がってしまいました。
コンテンツの寝やすさ ★★★
眠くなる動画とか見ればいいのでは 終了。
被った状態での後頭部へのやさしさ ★★★★★
こいつもやわらかバンドなので違和感は無いに等しい。 頭が痛くないのはいいことですね。
総合評価 ★★★
手元にあってすぐ試せるniconicoVRにしてみましたが、割りとパフォーマンスがいいのか 3時間くらい持ちそうです。一回も落ちてないっぽい。2時間半くらいで100%→28%だった。
正直GearVRなので寝ろと言わんばかりに熱くなっておしまいかと思ったら 長持ちしてびっくりしました。
余談ですが、起きてからGear VR Cooler!(物理)と題して、雪を詰めた袋をくっつけるだけの 記事を書こうかと思いましたが5秒でやめました。
考察
ということで、今回はRiftが一番良さそうという結果になりました。 ヘッドホンよりイヤホンがいいかもと思ったので完全に選択ミスですね。動けない。
一応どのHMDでも(AmazonPrimeVideoのような)映像を見るだけのものが出来ますが、せっかくなら いいところでお昼寝したいです。欲を言えば寝ても覚めても被って生活したいです。
UE4で言えばKiteDemoのマップは寝心地よさそうな気がします。
参考: www.youtube.com
また今回は扱わなかったハコスコなどのモバイル系は一晩も使えないのがネックですね。
ダンボールだと固定できないので、どうしてもという場合のみアロンアルファで顔にくっつけてください。
参考
http://www.hashiyansoft.com/contents/dc/death.html
これからはVR Nevangelist(寝バンジェリスト)とでも名乗ってみようかな!!
ぜひこの記事を参考に寝心地のいいHMDを購入してみてはいかがでしょうか。
明日はnoshipuさんの「VRアプリ作って思った事とか書きます」です。
おまけ
ちなみにSAOのキリトくんが被っているナーブギア
ヘルメット系は詳しくないのですが、これとても首を痛めそうな気がします。
調べてみると、やっぱり何人かの方がヘルメットを被って寝たことがある模様。特に寝心地レビューみたいのが見当たらず残念。
アミュスフィアはこんな感じ
HoloLensに近い気がしますが、やはりPSVRの例から後頭部に優しくないのではと思ってしまいます。
なのでメディキュボイド型が最強なのでは!?!?
点滴してもらえそうだし。
やっぱりこっちのメガネも捨てきれませんね(もはやVRではない
こちらは確か作中では寝る時に外していたような気もします。
おまけ2
ちょっと調べてみるとこんなものがあったのを思い出しました。
確かに寝る分にはいいかもしれませんが、VR空間で寝たいのでうーんという思い。
【UE4】SaveとLoad時のUserIndexについて
はじめに
時々SaveとLoadに苦戦するのでよくお世話になっているほげたつさんのサイトです。
ここには
セーブデータにはスロット名とユーザーインデックスが指定できます。 スロット名はセーブデータの名前、ユーザーインデックスはその中でのIDみたいなものですね。 ドラクエの冒険の書1とか冒険の書2とかそんなイメージです。
とあります。
もちろんこちらにも。
For some platforms, master user index to identify the user doing the saving.
ただ実際に実装してみると、なにやら動作がおかしいので調べてみました。
ソースコード
ということで、Engineのソースコードを追います。UE4.13です。 ctrl+FとかでUserIndexをハイライトしておくと、見やすいかもしれません。
Runtime/Engine/Private/GameplayStatics.cpp
USaveGame* UGameplayStatics::LoadGameFromSlot(const FString& SlotName, const int32 UserIndex) { USaveGame* OutSaveGameObject = NULL; ISaveGameSystem* SaveSystem = IPlatformFeaturesModule::Get().GetSaveGameSystem(); // If we have a save system and a valid name.. if(SaveSystem && (SlotName.Len() > 0)) { // Load raw data from slot TArray<uint8> ObjectBytes; bool bSuccess = SaveSystem->LoadGame(false, *SlotName, UserIndex, ObjectBytes); if(bSuccess) { (省略)
bool UGameplayStatics::SaveGameToSlot(USaveGame* SaveGameObject, const FString& SlotName, const int32 UserIndex) { ISaveGameSystem* SaveSystem = IPlatformFeaturesModule::Get().GetSaveGameSystem(); // If we have a system and an object to save and a save name... if(SaveSystem && SaveGameObject && (SlotName.Len() > 0)) { (省略) // Stuff that data into the save system with the desired file name return SaveSystem->SaveGame(false, *SlotName, UserIndex, ObjectBytes); } return false; }
とSaveもLoadもUserIndexに関わる処理はSaveGame、LoadGameを呼び出しているのでそちらへ。
Runtime/Engine/Public/SaveGameSystem.h
virtual bool SaveGame(bool bAttemptToUseUI, const TCHAR* Name, const int32 UserIndex, const TArray<uint8>& Data) override { #if PLATFORM_HTML5_BROWSER return UE_SaveGame(TCHAR_TO_ANSI(Name),UserIndex,(char*)Data.GetData(),Data.Num()); #elif PLATFORM_HTML5_WIN32 FILE *fp; fp=fopen("c:\\test.sav", "wb"); fwrite((char*)Data.GetData(), sizeof(char), Data.Num(), fp); fclose(fp); return true; #else return FFileHelper::SaveArrayToFile(Data, *GetSaveGamePath(Name)); #endif }
virtual bool LoadGame(bool bAttemptToUseUI, const TCHAR* Name, const int32 UserIndex, TArray<uint8>& Data) override { #if PLATFORM_HTML5_BROWSER char* OutData; int Size; bool Result = UE_LoadGame(TCHAR_TO_ANSI(Name),UserIndex,&OutData,&Size); if (!Result) return false; Data.Append((uint8*)OutData,Size); ::free (OutData); return true; #elif PLATFORM_HTML5_WIN32 FILE *fp; fp=fopen("c:\\test.sav","rb"); if (!fp) return false; // obtain file size: fseek (fp, 0 , SEEK_END); int size = ftell (fp); fseek (fp, 0 , SEEK_SET); Data.AddUninitialized(size); int result = fread (Data.GetData(),1,size,fp); fclose(fp); return true; #else return FFileHelper::LoadFileToArray(Data, *GetSaveGamePath(Name)); #endif }
えーっとPlatformがHTML5のブラウザだけUserIndexを使っているように思います。
そしてこのUE_SaveGameとUE_LoadGameはこちらに。
Runtime/HTML5/HTML5JS/Private/HTML5JavaScriptFx.js
UE_SaveGame: function (name, userIndex, indata, insize) { // user index is not used. var _name = Pointer_stringify(name); var gamedata = Module.HEAPU8.subarray(indata, indata + insize); // local storage only takes strings, we need to convert string to base64 before storing. var b64encoded = base64EncArr(gamedata); $.jStorage.set(_name, b64encoded); return true; }, UE_LoadGame: function (name, userIndex, outdataptr, outsizeptr) { var _name = Pointer_stringify(name); // local storage only takes strings, we need to convert string to base64 before storing. var b64encoded = $.jStorage.get(_name); if (b64encoded === null) return false; var decodedArray = base64DecToArr(b64encoded); // copy back the decoded array. var outdata = Module._malloc(decodedArray.length); // view the allocated data as a HEAP8. var dest = Module.HEAPU8.subarray(outdata, outdata + decodedArray.length); // copy back. for (var i = 0; i < decodedArray.length; ++i) { dest[i] = decodedArray[i]; } Module.HEAP32[outsizeptr >> 2] = decodedArray.length; Module.HEAP32[outdataptr >> 2] = outdata; return true; },
いやあのこれ、UserIndex出番なくないですか…(引数として呼ばれているだけで未使用)
まとめ
現状だとUserIndexは出番がないようです。ちゃんと(?)設定していないはずのUserIndexでLoadしてもエラーが出ませんでした。
Forum等も漁りましたが、良さげな解答が見つからなかったので追ってみました。
どこか間違ってたり、新たに何か分かった時にはぜひ@shop_0761までお知らせください(更新します)
【UE4】自作アクションゲームにAutoPlayを仕込んでみた
はじめに
ぷちコンで作ったもろもろ紹介編2です。
元記事
今回はCEDECに行った際に聞いたAutoPlayのお話をもとに作ってみました。
講演はこちら。
資料はCEDiLにあります。
実際にAutoPlayしたものがこちら。
考え方
講演の内容をもとに(正確な内容はあやふやですが)AutoPlayの実装方法を簡単に説明します。
-------事前準備-------
マップにConeを置く
そのConeにはいくつかActionを登録しておく
-------実行時---------
ConeのActionを実行する
次のConeについたら上へ戻る
これだけです。AIは使わなくても実装できます。
Actionというのは絵に描いてあるような移動だったり、ジャンプだったりと なんでもいいわけです。
管理、保守など調整しやすいように難しいことはしません。
実装
実際に実装してみると、このConeのBPだけで大部分はまかなえてしまいました。
(あとはループ処理のためのConeManagerを作ったりしたくらい)
方針
ポイントを整理しておきます。
今回は予めConeを配置したあとにNextConeとして次のConeを登録しておく
今ActionをしているConeとNextConeのみCollisionを有効にする(例外あり)
くらいだと思います。
一つ目はConeと同じ型の変数を公開しておき、レベル上で設定していきます。
こんな感じ。
二つ目はそのほうが安全だよねってくらいです。
そして"例外あり"とは、スタート地点はCollisionを有効にしておかなきゃそもそも動かないのでという意味だったり、不具合対処の意味が大きいです。
この辺はまたあとで触れます。(※)
実際のBPはこちら(1-2日で作ったので一応整理したけど散らかっている感)
ConstractionScript
一応確実にジャンプして欲しい場面(大きな穴とか)があるので
全体像
BeginPlay
ここでCollisionの設定をしています。
BeginOverlap
NextConeのCollisionをEnableにしたあと、Wait秒待ちます。
落ち着いてジャンプしてもらうためです。
Debug用にPrintStringしてるだけです。Duration0は便利ですね。
到着判定
NextConeにたどり着いたかどうかをチェックします。
今回はVecLengthでやりましたが、2点間の距離でもいいと思います。
そして、先程の※のお話(ポイントの2つ目)がここで出てきます。
後述するRandomJumpを使っていたりすると、偶然Coneをスキップされてしまい、 Gateが開いたまま移動処理が残ったりする場面が多々ありました。
実装方法に問題があるのは分かっていますが、今回は一定距離が離れたりした場合でも到達したとみなして、処理を打ち切ることにしました。
Move
一応Axisの向きも内積でなんとなく求めておきます。
このMoveActionはキー入力の移動と同じ処理をするだけです。そのために追加したイベントです。
Jump
こちらのJumpは一度だけ確実にジャンプする必要があるときに使います。
JumpActionも先程のMoveActionと同じです。
RandomJump
適当なタイミングで適当に長押し(したフリをして)ジャンプします。
Reset
今回はループさせたかったので、Reset処理を追加しました。
ループさせる必要がないならDestroyしてしまってもいいかもしれません。
(そうするとさっきの※のお話はなくなるはず)
AutoPlayのメリット
最初は なんかすげぇでも作れそう とおもったので勉強がてら作りました。
何がいいかというとテストプレイ(周回系)が楽です。
- 実装に疲れたから、眺めて確認したい
- どうせちゃんと動くだろうから、操作したくない
- Twitterを見たい
などAutoPlayにしておけばこんなに便利です。
あとプレイ動画を撮るのも楽ですね。コミケ等の展示時に流していると面白いかもです。
まとめ
このくらいのスピード感で作ってました。
オートプレイ UE4なら作れるかもしれない
— てんちょー@9/30-10/2東京 (@shop_0761) 2016年8月26日
暇というわけではないけど、ぷちコンのオートプレイを作ってみよう
— てんちょー@9/30-10/2東京 (@shop_0761) 2016年8月28日
AutoPlayできたー
— てんちょー@9/30-10/2東京 (@shop_0761) 2016年8月28日
意外にあっさりできましたね。
ちなみに途中で操作介入できます。(意図的にジャンプさせたり)
なにかわからないことがあれば@shop_0761までお願いします。
【UE4】ParallaxOcclusionMappingで背景アセットを作ったお話【小ネタ】
はじめに
ぷちコンで作ったもろもろ紹介編1です。
元記事
HeightMapの描き方が分かりません。
けど、いい感じの背景アセットを手抜きで作りたい。
そんなこんなで出来たのが、これ。
意外に良くないですか 手抜きの割には。
作り方
Heightmapは描きました。手描き出来ます。
引っ込ませたい方を黒で塗ればいいんです。おわり。
あとはMaterialですが、ContentExampleにあったものを拝借してきただけです。
超お手軽ですね!!
深いことを考えなければ、パラメータはSampleそのまま使っていい気がします。
最初はalphaで抜こうか、なんて思ってた時期もありました。
ですが、シェーダ複雑度が真っ赤になったのでやめました。
これなら実質箱だけなので、描画負荷はalpha抜きに比べると軽いです。(上手くやれば赤いとこもなくなるはず)
試しにalpha抜きしてみました。(見栄えはおいておくとして
そりゃそうですねって感じです。
まとめ
ぱららっくすおくるーじょんまっぴんぐ ってカッコよかったので使いたかっただけです。
ContentExampleのは出来が良すぎて意味が分からなかったですが こんな手抜きの白黒絵を描いても使えるよ ということが言いたいだけです。
賞味20分くらい?だった気がします。
誰かもうちょっとまともな使い方の記事を書いて欲しいところですね。
【UE4】第6回ぷちコンに応募しました 【概要編】
はじめに
今回も2作品応募しました。
ぷちコンのページ
月にかえりたい
実行ファイル
カノトンボ
今回もまた作品概要だけをここで紹介してUE4の技術的なお話とかはまた別記事にします。(後々検索しやすくするため
月にかえりたい
この作品は某CMとか某映画が元ネタとなってます。知ってるとより楽しめるかと思います。(知らなかったら連絡ください こっそりお教えします)
今回はちゃんとコンセプトアートを書き、グレーボクシングをし、比較的ちゃんとまとまってから作り始めたので心に余裕がありました。(毎回すべきことなのに)
ちょくちょくコンセプトとずれそうになったりしました。(得点をScoreと英語にしてたり、小判ではなく札束にしようとしてたり)
ですがふとコンセプトアートを思い出して修正できました。描いておいてよかったです。
最終的にこの敵キャラのマスクも作れたのでよかったです。
絵作りの方は当初水彩っぽくしたかったんですが、調整してるうちに今のに落ち着きました。
これを使って調整しただけです。
今回のBGMはMusycというiOSのアプリで作りました。作ったといってもおもちゃみたいな感じなのでガチではありません。
すごい地味ですが、残り日数が短くなると徐々に早くなったりしてます。
プレイする人によって借金を返すのか、踏み倒すのかに差が出そうですね。
カノトンボ
こちらは完全に思いつきと勢いです。VR用になにか作ろうと思ってた時にやってきたアイディアです。
虫かごのフタだけモデリングしました。
ちょうどMMD版の中野シスターズが公開されて、目の構造が変わったらしかったので大抜擢です。
参考:
中野シスターズMMDモデルver1.1をリリースいたしました!不具合を幾つか修正しております。お手数ですがもう一度ダウンロードよろしくお願い致します!https://t.co/5ALxEOR5Dv
— ナカシス【代表】@MMDモデル配付中! (@nakasis_) September 1, 2016
DLパスワード nakasisu pic.twitter.com/8t5MfoCh5Q
あとはこれでカノちゃんのアニメーション、graymanのポーズを作りました。
スケール感的にはこのくらいです。(graymanは60倍くらい
UE4.13からのVRTemplateを使ったので他に変わったことはしてません。お手軽です。
昨日の23時半くらいから作ったので正真正銘のぷち作品です()
— てんちょー@9/30-10/2東京 (@shop_0761) September 18, 2016
(後悔はしていない#UE4 #UE4Study #ue4conhttps://t.co/NbrI9zlh1L
まとめ
なぜか締切が一日早い方に勘違いしていたので、はやく終わりました。
気持ちが楽になりました。チキンレース勢もいいですが、こっちはココロにやさしいです。
近々 月にかえりたい の方は実行ファイルを公開します。
【UE4】MayaLT2017でphysXを使って服を揺らす
はじめに
第6回ぷちコンにあわせて頓挫中だった3Dモデルを作りました。 その話は、また別の機会にするとして今回はワンピースをApexClothで揺らしてみたいと思います。
結論から言えば、微妙です。
あまり期待しないでください。
MayaLTも初心者ですのであしからず。
やるなら一通り読んでからのほうがいい気がします。
テスト環境
Maxでも出来ると思います。(未確認
手順
ApexCloth自体は最後にある参考サイトの@com04さんのサイトを見るといいかと思います。 以降はある程度知ってるものとして色々省略します。
基本的に参考を最後につけているのでそちらの動画(英語)を見ていただければ実際済むお話ですが、
つらい目にあったよってところも織り交ぜながら書いておきます。
それと、服のマテリアルは別にしておきましょう。そのほうが多分安全。
分けてなかった時
失敗例 pic.twitter.com/z4fNnBY6pK
— てんちょー@9/30-10/2東京 (@shop_0761) 2016年9月13日
服だけになりました。
ちなみに服には一切ボーンは入ってません。
プラグインを入れる
nvideaにログイン後、こちらのDownloadCenterからダウンロード出来ます。
手元のMayaのバージョン等に合わせてください。
Download Center | NVIDIA Developer
.msi形式なので、実行すれば導入自体は出来るかと。
そして、MayaLT上で言うとウィンドウ → 設定/プリファレンス →プラグインマネージャー からphysx.mllをロードすると
このように追加されます。
physX Clothingを作る
これを作るときにはジョイント(ボーン)が必要になるはずなので、準備しておきましょう。
対象のメッシュを選択して(今回はワンピース)、右から6つ目のスカートみたいなアイコンをクリックするか、上のメニューからphysX → physX Clothing → Create Clothingで作れます。
これを色々調整していく感じです。
ペイントする
スパナみたいなアイコンをクリックすると、このようにメニューが出ると思うのでPaintを選べば塗れます。
この時、マテリアルを設定していればこのように紫色になるかと思います。ならなかったら確認してみてください。
ちなみに僕は一旦ここでハマりました。
あれ なぜかマテリアルを適用しても表示されない(Maya
— てんちょー@9/30-10/2東京 (@shop_0761) 2016年9月10日
ぷちコン用のSceneで同じ手順で適用すればみれるのでSceneの問題っぽい…
— てんちょー@9/30-10/2東京 (@shop_0761) 2016年9月10日
??? 新規シーンに円柱追加して、マテリアルを適用しても変わらなかった…?
— てんちょー@9/30-10/2東京 (@shop_0761) 2016年9月10日
やり方が間違っている可能性()
@tarava777 @aizen76 と、思ってやってはみたもののやっぱりダメでした…
— てんちょー@9/30-10/2東京 (@shop_0761) 2016年9月10日
新たに追加した円柱とかに適用しても変わらなかったです(設定されてることにはなってた
@aizen76 @tarava777 正常に動いているっぽいぷちコン用のシーンにインポートしたら行けましたww(謎
— てんちょー@9/30-10/2東京 (@shop_0761) 2016年9月10日
意味がわからぬ
— てんちょー@9/30-10/2東京 (@shop_0761) 2016年9月10日
そして秘伝のタレのようにこのSceneをコピーして使っていくしか()
はい、原因不明ですが乗り切りました。
こんな感じで色々設定できます。
Attribute
4種類塗れます。
- maxDistances これがきっとメインになる塗り
- latchToNearest 動画だと服の裏地に塗ってました
あとのBackstop系はよくわからなかったです()
とりあえずmaxDistanceを揺らしたいところに強弱をつけて塗るみたいです。
参考までにこんな感じしたり。
裏も塗りました。
シュミレート自体は再生ボタンを押せば勝手にやってくれます。
ちなみにlatchToNearestを塗ると表と裏の生地が貫通したのでやめました。
RagDoll
服と体のコリジョンを作れます。
Bodyになるメッシュを選択後、藁人形みたいなアイコンをクリックしてCreate Kinematic RagDollで作成できます。
つよそう
でこのように選択して、不要なジョイントのところのコリジョンをRemoveできたりします。
個々のコリジョンを編集するには、上でジョイントを選択した後に下のshapeSetUpから目的のコリジョンを選択して、Selectすれば編集メニューがでます。
と普通に移動、回転、スケールができるみたいです。
なお
バグっぽいものに当たった
— てんちょー@9/30-10/2東京 (@shop_0761) 2016年9月13日
(コリジョン用のカプセルのサイズ調整したあとに実行するとサイズが変わる pic.twitter.com/Yg5ea1BR9u
こんな目に遭っているので様子見ながら調整しましょう。
出力する
一通りおわった(ことにした)ので、UE4用に出力します。
Create Clothingしたメッシュを選択して出力するだけです。
ポイントは
ファイルの種類をphysXにした後、ここを確認しましょう。
特にunitを間違えるとおかしなことになります。
エラーも出ずにApexが読み込めました(上手く言ったとはいっていない pic.twitter.com/8sDN6kpOS5
— てんちょー@9/30-10/2東京 (@shop_0761) 2016年9月10日
あとは.apxファイルが生成されるので適用するだけですね。
この辺はスクショでも貼って終了にします。
結果
とりあえず.apxファイルを適用することはできた pic.twitter.com/IFmBXkKOpd
— てんちょー@9/30-10/2東京 (@shop_0761) 2016年9月13日
正直これくらいしか差がない pic.twitter.com/4a5ubkpDRT
— てんちょー@9/30-10/2東京 (@shop_0761) 2016年9月13日
— てんちょー@9/30-10/2東京 (@shop_0761) 2016年9月13日
はい すごい微妙に変わります。
まとめ
ここまでやってこれだけ…しかも微妙って…
@tarava777 あ、ありがとうございます!!(すごい辛い道を歩もうとしている気がする
— てんちょー@9/30-10/2東京 (@shop_0761) 2016年9月13日
なので、現状はボーンを入れて、Anim Dynamicsで揺らすか手付けアニメーションにするかが最適解かもしれません。(けど面倒なのでやりたくない
余裕があれば髪もやります。
AnimDynamics
参考
CEDEC2016に行ってきた
はじめに
今回は特に行く予定がなかったのですが、急遽就活の関係で8/27に東京に行かなきゃならなくなったので
「CEDECいけるじゃん!!」
ってなったので行きました。
個人的によかった講演やらメモをまとめておこうかなというお話です。
資料はCEDiLに公開されていたりするので、そちらもできるだけリンクを貼ります。
CEDiLは会員登録が必要なのでそれだけご注意を。
順番は適当です。
手と指がVRの中にある:Oculus Touchのインタラクションデザイン
資料公開があると思うのですが、さすがにまだ見当たらず…
Youtubeの配信もあったし、主婦さんのツイートとかを見ていただいたほうが早いかも。
Touchは非常に良いコントローラーなので、よりよい体験のためにどうしたらいいか というような内容が中心で、 僕も気になったところをちょこちょこツイートしてました。
大根おろしみたいな親指置き場#CEDEC2016
— てんちょー@9/30-10/2東京 (@shop_0761) August 26, 2016
あんなに争奪戦だったBulletTrainが普通にできるのはおかしい()#CEDEC2016
— てんちょー@9/30-10/2東京 (@shop_0761) August 26, 2016
フライパンのようなちょっと重心がずれているものは違和感があるかも(逆手にとるのもあり#CEDEC2016
— てんちょー@9/30-10/2東京 (@shop_0761) August 26, 2016
Toyboxの当たり判定は握っている時にだけで、開いてる時は貫通する#CEDEC2016
— てんちょー@9/30-10/2東京 (@shop_0761) August 26, 2016
Toyboxのコリジョンの方向は手のベクトルと頭からのベクトルの中間を使ってる#CEDEC2016
— てんちょー@9/30-10/2東京 (@shop_0761) August 26, 2016
握り始めた瞬間と離しはじめた瞬間の時間とかを使う方がシャープ#CEDEC2016
— てんちょー@9/30-10/2東京 (@shop_0761) August 26, 2016
手を止めてからトリガーを離すケースもあるので、ちょっと前までの加速度とかでプレイヤーの救済をしたほうがよい#CEDEC2016
— てんちょー@9/30-10/2東京 (@shop_0761) August 26, 2016
BulletTrainの弾丸って最初の一瞬だけ遅くて、後から加速してるのか#CEDEC2016
— てんちょー@9/30-10/2東京 (@shop_0761) August 26, 2016
テスターがやってみて出来なかったことを実装してみる#CEDEC2016
— てんちょー@9/30-10/2東京 (@shop_0761) August 26, 2016
こんなところですかね。Touchが楽しみです。
『ベヨネッタ2』におけるゲーム品質を上げる為の自動化 ~オートプレイと継続的なパフォーマンス計測~
前回のぷちコンでプレイ動画を撮るのにすごい苦労したので興味がありました。
AutoPlayの実装方法について説明されているのですが、非常にイメージしやすく これならUE4でもぱぱっと作れそうという印象でした。
ざっくりした方法を紹介するなら、
- コーンと呼ばれるマーカーみたいなものをレベルに配置
- 一番近いコーンに移動
- Actionを実行
- 終わったら次のコーンへ
と2-4を繰り返すイメージです。 AIを使うわけではなくAutoPlayなのでパッド入力としてActionを行います。
Actionには移動、待機、ジャンプなどそれぞれセットするだけなので単純。
Aで攻撃して壁を壊したら、移動する ではなく「適当に10回くらいA連打、待機、移動」のような実装で十分だそうです。
パフォーマンス計測の方は専用のwebページを作って、グラフィカルに負荷をみれるようにというコンセプトで作られており
アーティストさんにもパッと見で改善されたかわかるようにとのことでした。
データベース化すると管理で死んでしまうので取ってきたデータの生XMLを置いてあるとかいうお話です。
Unreal Engine 4 のレンダリングフロー総おさらい
BPでロジック組むの大好きだったのでレンダリングはからっきしでしたが、非常にわかりやすかったです。
毎日見直してレンダリングの流れを頭に入れておきたいレベルです。
細かいことは中身を見たほうがよっぽどいいですw
www.slideshare.net
「VR ZONE Project i Can」の知見、全部吐き出します!
これはEvernoteにメモったものがあるのでそれを
VRの宣伝は人の反応を見せるほうがインパクトがある
身長が10倍になると怖さは1/10
現実との比較がないと驚きが少ない
コントローラに機体をAttachするとずれない
被写界深度を浅くすると酔わなくなる…?
完全再現ではなく厳選再現でおけ
錯覚 クロスモーダル現象 認識とか判断を端折りたい →いつものパターンは端折る →騙される
得た経験とか知識によるリアリティの感じ方に差が出る
共感力の増加
- 実際に経験豊富
- 妄想
- 楽しむ心 信じる心
減少
- VR擦れ
- 分析心
現実 実物は実在感が大事
物理法則のインタラクション大事 炎で熱いとか
複数の情報筋から得たいつものパターンつよい
映像 音 地響きのような複数インプットがあると信じる
VR
- 旅に出る 体験して感動
- 自分のからだ
- 自ら行動→行動制限不能
- 見回せる、歩ける
- 強烈な体験そのもの
- ゲームルールと面白さは別
ゲーム
- 旅番組を見る 感情移入して感動
- レバー ボタン
- 意思を伝える
- 作者の狙い通りに感動体験をした気分
面白い体験を発見すること
その場にいたら、本当に起こったら、を豊かに想像する力
アニメやゲームのシチュエーションはそもそもその場で体験したらすごい
百聞は一体験に如かず 開発者にも大事
リアル体験じゃないと得られない感動をコンテンツの中心におく
欧米で日本のゲームを成功させる方法 How to make Japanese games work in the West
同時通訳のせいで激辛セッションだった気がしますw
これもEvernoteのメモを
可愛らしい動物、アニメ的な簡単に描かれた顔、ファンタジー系、刀と銃の混在欧米ではない
欧米ではファンタジーは真剣に読んだりするものなのでアニメ的な絵などにすると子供向けに思われることも
アメリカ的にはシリアスなファンタジーのがよい
アメリカゲーマーは30-40代
アメリカとinterface(UI)が違う
アメリカではキャラになりきる、プレイヤーアバターのようなものが必要
PvPとPvEは混在させない
協力プレイがよい
アイテムを後から買うのはあまり受けない(ガチャとかガチャとかガチャとか
→時間をつぎ込むことで解禁できるように 他の手段でも獲得できるように
運によって差があると欧米ではマイナスな印象に(日本だとラッキーだねと割とプラスな印象に
探索可能、動機づけ(なぜ戦うのかなど)が大事
ポケモン的な感じが一番ウケがよく分かりやすい例(PvPとPvE、探索、ストーリーの動機付けなど)
まとめ
UE4のVRロードマップはだいたいリリースノートとかに書いてる感じだったので、資料を見ていただければいいかも。
下の2つは資料が公開されていないもののはずなので、なにか参考になればと。写真もちょっとあるので後で追記します。
ちなみにガチャは英語でGachaらしいです。
ネカフェで書いたので、帰ったあとに今回CEDECにかかった額の計算をしてみようかと思います。
(2016/08/28 追記
計算しました。 およそ84000yenですね(やばい) 全部自費です。
簡単な内訳としては
- 1daypass 2 expopass 1 33480
- 飛行機 19300
- Developer's Nightなどの懇親会費 12364
- 宿代(ネカフェ) 3 6480
残りは交通費やらですね。
食費ゴリゴリ削る人なので、一人で飲食したのはジュース1本と帰ってきてから新千歳で買ったお菓子くらいです。
Developer's Nightは5000円の烏龍茶とオレンジジュースでした()
きっと普通に食べたら9万コースですねきっと。
)
全体を通して(懇親会もほぼフル参加では)、かなり行ってよかったなと思いますが
遠方+学校の支援なしな学生にはCEDECはコスト的な意味できついですね!!
内容の質を学生向けに下げる必要は全くないと思いますので、そんな学生向けのパス代にしてくれると助かります()