Unreal Engine 4 (UE4) Advent Calendar 2014の8日目の記事です。
今回はUE4でOculus Rift 展示をするにあたって直面した色々な問題を取り留めもなく書き留めます。
今までGondolus、ねこのるんば、学園追放の3本をUE4で作って展示してきました。

ちなみに使用マシンはドスパラのGTX870MのWindows8.1モデルです

※ちょくちょく思い出したことを追記、修正していきます

 クレジットカードなしで Unreal Engine 4 を購入して使う方法 #UE4
 
UE4でOculus Rift  大雑把なやり方(という名のリンク集)

  1. プレイボタンの▼の中「スタンドアローンゲーム」で起動
  2. Alt+EnterでOculus Rift側に映す
これだけ!超簡単!(負荷軽減の為、エディタは最小化しよう)
サンプルゲームの大半(3D)もこれでOculus Riftで遊べます。
(ただし、そのままだと十分な速度は出ない)

Unreal Engine 4 (UE4) でOculusを使うための手順 by @junyash on @Qiita 
Oculus向けのコンテンツをUE4で制作するためのノウハウ共有♪(Oculus向けの最適化とか品質向上とか) by @junyash on @Qiita 

↑詳しくは下田さんのを読んで頂くと手っ取り早いです(丸投げ)。
起動そのものは簡単なので、あとは75fpsを出すためのチューニングとの闘いになります。

UE4+OculusRift DK2で75fps安定させるまでにしたこと ぼっちプログラマのメモ @pafuhana1213

UE4(4.4.3)+Oculus Rift DK2(0.4.2b)で75fpsを出すために試したこと

↑この辺りも非常に参考になります(丸投げ)

大雑把にスタンドアローンで200fps弱以上出ていたら、Oculus Rift上でも75fps出せる感じで、
かなりカリカリにチューニングしないと辛い感じです。

HMDの命令群

Oculus Rift等HMDの入力やら何やらを取得してゲームに反映させたい場合は
「head」で検索して出てくる(文脈依存のチェックは外す)この辺の命令を使うといいようです。
2014-12-08 18_32_19-

取り敢えずReset Orientation and Position による位置リセットと
Get Orientation and Position による角度と位置の取得を使えたらいいでしょう。
(ってかそれしか使ったことないです)
学園追放の項にて後述します。

LeapMotion(丸投げ)

LeapMotionプラグインについては@toorsooさんが非常に詳細な記事を書かれています
UE4でLeapmotionつかってみるついでに指からびーむだす(Leapmotion導入編)
UE4でLeapmotionつかってみるついでに指からびーむだす(指から弾を出す編)
UE4でLeapmotionつかってみるついでに指からびーむだす(パーティクル編)
UE4 Leapmotionで道具の情報取得
UE4 Leapmotionでもっと遊んでみた
UE4 Leapmotionプラグイン パッケージ化メモ


リセットの罠! Levelを都度保存せよ

まずこれを忘れない内に書き留めておきます。
レベルブループリントに書いとくとラクな設定
2014-12-08 21_05_07-GakuenTsuiho_Lv_BP
↑だいたいいつもこんな感じのことをレベルブループリントに書いてあるのですが…
Escキーでゲーム終了、Fキーでfps表示オンオフ、0キーでリセット
問題はリセットの方法。
レベル名を直に指定して読み込み(せめて現在のレベル名を取得したい)。
(あまり良い方方法ではない気がするんだけど、他にリセット相応の機能も見当たらず…)
この方法でリセットを呼び出すと、「最近保存した状態のレベル」が読み込まれる。
これが大きな罠。
っというのは、レベルを保存していなくても実行ボタンを押せば変更が反映された状態で起動する。
で、ゲームを作りかけの段階だと、
「ボタンを押したら敵と自分が動いてゲーム開始(それまでは停止状態)」
みたいな処理を後回しにして、起動すれば即動く状態→起動させてモタモタOculus Riftを被っている間に敵や自機が色々と動き出してしまっている→リセットボタンを押して初期位置に戻す→変更内容を確認する…みたいな制作方針に。
これで変更した内容を保存せずに実行すると、
「何故か変更が反映されていない!? んん なんでだ!? もっと○○の値を大きくしないと駄目か…あれぇ?全然駄目だぞ…どういうことだぁ?」
って具合に馬鹿みたいことに悩んで時間を取られるハメに。
このトラップを作る度に忘れて、毎回やらかしてしまうので、ブログに書き残すことで記憶しておきたい。
変更したらレベルを保存して実行。

あと、このリセット方法には重大な問題があって、パッケージ化すると何故か上手く動かず落ちます。
(別のprojectでテストしたら普通にパッケージ化したものでもリセット出来ました。原因調査中…)
(原因を特定できました!)
リセットにもっといい方法があればいいんですが…


FPSテンプレート万能説

以下の3本のソフトはこれしか使っていないです
ブルーマンのメッシュレンダリングを消したり、そのまま動く床に載せたり、移動速度やジャンプ力、摩擦を調整したり
元から入っている赤い照準が邪魔な場合は消しましょう


Gondolus

Unreal Engine 4 で Oculus Rift 初展示の感想と反省 in 2014年8月24日 OcuFes大阪 #UE4 #DK2

UE4の綺麗なグラフィックを堪能できたら何でもよかった

ブルーマンのメッシュのレンダリングをオフにしただけ。実は弾が発射できるし、船の内外を歩ける。
船は基本的に動く床です UE4 5分で作れてしまう動く床の作り方
これを船のメッシュに適用し、適当に揺らし、FPSテンプレートのブルーマンをただそのまま載せただけ。

●苦労話
これを作った頃はまだDK2のノウハウ情報が少なくて、かなり苦労した覚えがあります。
「UE4の美しいグラフィックを見せびらかそう」
という目的が先にあって、そこからゆったり遊覧するゴンドラになったという経緯です。
これでもかというほど派手なパーティクルやら何やら配置しまくっていたんですが、DK2に転送したときのfps低下が想像以上でかなり泣きをみました。
華美な要素を何もかも撤去して画質を落とせば速度は出せるんですが、それだと最早何のために作ったのか不明で、完全に絵作りの方向性を失敗しました。
妥協点を探して展示しましたが、fpsも画質も不十分で、出展を辞退しようかと直前まで悩んで、後ろめたい気持ちいっぱいのかなり消極的な呼び込みの展示になりました。
今のノウハウがあれば、もっといい作品に出来ると思うので、機会あればリニューアルしたいです。

ねこのるんば

UE4 Oculus Rift DK2『ねこのるんば』をデジゲー博にて出展しました
猫耳を付けられたら何でもよかった。

自動掃除機ロボに乗った猫を体験できるゲーム。
(何故か乗り物である掃除機だけが回転する問題にぶち当たりましたが、その件は上記リンク先に)

●カメラを猫視点で位置を低くしたい
→Architectureに元から入っているキャラクターにはカメラコンポーネントが見当たらんぞ→FPSテンプレートのBP MyCharacterを移行で持って来てぶち込んでプレイヤーに割り当て。

何か今一つ猫感が足りない…そうだ! スケール感だ! 周りの物を大きくしよう!
→全てのオブジェクトを選択して縦横2倍に拡大→色々と拡大漏れ?が出て不具合→地道に位置修正→Lightのズレや光量不足も修正→めっちゃ面倒だった
→もっといい方法はないのか→カメラの画角を弄ってもOculus Riftには反映されない…

ん?
2014-12-08 22_33_59-Architecture2 - アンリアル・エディタ

2014-12-08 22_34_20-Greenshot

ワールド設定→VR欄のWorld to Meters を弄るといいみたいです。
この数字を小さくすると小人寄り(周りが大きく)に、大きくすると巨人寄り(周りが小さく)見えるようになるようです。(10倍くらい極端にするとわかりやすいです)
こっちで弄っておけばよかった…orz
ちなみに、周りの物を直接大きくする方法にせよ、World to Metersを弄る方法にせよ、観測ポイントと見る角度を統一しないと、違いが判り難いので注意してください。

●ニコニコ立体さんことアリシアさんが公開されたので、入れてみる。
UE4とOculus Rift DK2を使ってニコニ立体ちゃんと戯れるデモを作ってみた その1 - As Sloth As Possible

ビューポートでプレイしていたときは問題なかったのに、DK2で見ると何故かパンツがダークゾーン!



学園追放
Oculus Riftで小動物になる展示『ねこのるんば』とエクステリア(後半に学園追放の記事)
アンジェラさんになれたらなんでもよかった

FPSテンプレートを改造しただけ。歩行速度やジャンプ、減速、摩擦を弄って慣性を強めに調整。

イルカフロートに乗ってアーハン気分に浸りたい!が先にあって、じゃあ操作方法どうしよう?
→ヘッドトラッキングをレバー代わりにして操作しよう!
→頭を前後左右に動かすのがレバー入力代わり
→上を見ながら頭の位置が上がればジャンプ
→ヘッドトラッキングの値ってどのくらい?リアルタイムで値を表示して確認したい
→HUDにリアルタイムで表示しよう

[UE4] HUD入門 historiaさま

2014-12-08 23_19_14-GakuenTsuiho - アンリアル・エディタ

こんな感じのブループリントをHUDに書いて
2014-12-08 23_25_08-GakuenTsuiho - アンリアル・エディタ

こんな感じ。Reset Orientation and Position でリセットした位置からの相対位置と角度が拾えます。
この数字を拾って
「頭をこれくらい動かせばこのくらいの値が返ってくるなぁ…じゃあ、このくらいの値で動くようにしよう」
みたいな調整がラクに

まとめ
UE4でOculus Rift !
色々とノウハウが各所から出てきているので、そろそろ移行してもいいと思うよ!
月額19ドルでフル機能!

明日9日は、 pafuhana1213さんの「UE4のポストマテリアルで色々してみた 応用編」です。
たのしみですね。