ぼっちプログラマのメモ

UE4とかVRとかについて書いたり書かなかったり。

自分用も兼ねて、UE4+Oculusについて色々纏めてみる -準備編- (2015/02/01)

前の記事
「次の記事ではもう少しジェットコースターっぽい挙動にします」
と約束したな。アレは嘘だ。

はじめに

昨年の8月に↓の記事でUE4+Oculusについて色々まとめを書きましたが、
流石に色々と情報が古くなっているので、自分用も兼ねて色々情報をまとめてみます。
UE4+OculusRift DK2で75fps安定させるまでにしたこと - ぼっちプログラマのメモ

準備周りだけでも長くなったので、記事を分割します。

バージョン

Oculus SDK   :0.4.4
Oculus Fireware :2.1.2
UE4: 4.7Preview

後述しますが、「VRPreview」という神機能が4.7から追加されたので、
今後UE4+Oculusで作る人は、4.7マジオススメです。

セットアップ

手抜きですが、以下の記事が参考になります。
OculusSDKのバージョンに関しては、UE4が未対応バージョンと組み合わせると
クラッシュの原因になりますので、十分に注意して下さい。

2015/01/31現在で推奨されるバージョンは「0.4.4-beta」です。
Unreal Engine 4 (UE4) でOculusを使うための手順 - Qiita


OculusSDKはバージョンアップの度に、結構な高速化対応が入ってくるので
なるべく最新の組み合わせで開発したい所です。

今後予定している高速化対応に関しては、↓の@izmさんの記事がオススメです。
Mastering the Oculus SDK日本語解説 - izm_11's blog
AsynchronousTimewarpの導入、楽しみだなぁ…
(GearVR版では導入済み。酔い軽減にかなりの効果があります)

OculusのDisplayMode設定について

「Direct HMD Access from Apps」「Extend Desktop to the HND」、
どちらでも正常に動作します。ただし処理速度の関係で、Directモード推奨です。

…某Optimus使いな方はExtendモード推奨です。
その辺りについては、↓の@izmさんの記事がおすすめです。
2014/11現在のDK2設定、バージョン違い等の最適解情報まとめ - izm_11's blog

※注意
UE4のエディター起動後は、DisplayMode設定の変更は行わないで下さい!
エディターを再起動するまで、Oculus表示が正常に動作しなくなります。

Oculus上でゲームを確認する方法

UE4の4.6以前では、「スタンドアローンゲーム」で実行して(数分間ビルド待ち)
エディター最小化して、Alt+Enterで拡大…という手順を踏む必要がありましたが、
4.7では
VRPreview
という神機能のおかげで、1クリックで確認できるようになりました!

f:id:pafuhana1213:20150131234434j:plain

UE4の記事で書くのもアレな気はしなくはないですが、Unityの場合は
@izmさんのエディタ拡張を導入すると、Oculus上での確認が楽になります。
OculusRift DK2(0.4.2-0.4.4)をUnity(windows)でデバッグする時に楽できるエディタ拡張を作った - izm_11's blog


高速化対応する前の下準備

Oculusと言えば高速化対応、高速化対応といえばOculusです。
UE4+Oculusで75fpsキープを実現するためには、色々と頑張る必要があります。
そして頑張るためには、色々と準備が必要です。

※75fpsを維持できなかったらどうなるの?
ほぼ100%酔います。トラッキングと描画(視界)のズレによる違和感が原因です。
この辺りは調べると色んな解説があるので、探ってみると面白いです


…実は、OculusSDK 0.4.3以降では
75fpsが維持できなければ60fpsで固定、60fpsを維持できなければ37.5fpsで固定、
という処理が導入されています。

この機能により、「以前と比べれば」fps低下時の酔いは軽減されます。
が、違和感・酔いは依然としてあるので、75fpsキープは必須です。

fps表示

f:id:pafuhana1213:20150201005852j:plain
まずは、Oculus画面上でfpsを確認できるようにします。
やり方は2種類あります。

コンソールコマンド「stat fps」を入力

UE4にはコンソールコマンドを入力することで、各便利機能を使うことができます。
fps表示の場合は、「stat fpsです。
コンソールコマンドの使い方に関しては、↓のヒストリアさんの記事が参考になります。
[UE4] コンソールコマンドの使い方&よく使うコマンド一覧 | historia Inc - 株式会社ヒストリア

ちなみに、Oculus上でもコンソールコマンドは問題なく入力できます。
少し感覚的に面白いので、試してみることオススメです。

↑の処理をBPで書く

確認の度に「stat fpsを打つは正直面倒です。鳥頭な僕はコマンドを忘れます。
そこで、キー入力で「stat fpsが実行できるよう、BPに処理を書きましょう。
f:id:pafuhana1213:20150201005322j:plain
(Fキーの入力イベントが来ると、コンソールコマンド「stat fps」を実行)

↑の処理はレベルBPかGameModeBPで書くのが、無難かなと思います。
もちろん「ExcuteConsoleCommand」は他のコンソールコマンドでも使えます。

GPUプロファイラー

UE4+Oculusでボトルネックとなるのは、主にGPU(描画処理)です。
UE4には各GPU処理の処理時間を計測できる「ProfileGPU」機能があります。
f:id:pafuhana1213:20150201010726j:plain

「HZBとPostProcessingの処理時間が目立つなぁ…」という感じで
ボトルネックを調査して、その部分に対して高速化対応していきます。

「ProfileGPU」もコンソールコマンドの1つなので、使い方は「stat fps
同じです。

※追記

ライトの影響範囲の可視化

GPU処理の中でもライティング(特にシャドウ)は結構重い処理です。
可能な限り無駄なライティング処理は削減して、高速化を図りたい所です。

そこで役立つのが、「show shadowfrustums」による
ライトの影響範囲の可視化です。
f:id:pafuhana1213:20150201012407g:plain
赤い線で引かれた範囲がライトの影響範囲です。高速化対応を行う際は、
この範囲を可能な限り少なく、または狭くする必要があります。

「show shadowfrustums」もコンソールコマンドの1つなので、以下略


高速化に対しての下準備はこんな感じです。
実際の高速化対応に関しては、次の記事で書きます。今度は本当です。

下準備 その他

パッケージ化時の画面最大化

package化するとAlt+Enterが利きません(shippingの場合)
UE4でOculus Riftコンテンツを作る入門記事「この通りにやれば、ほぼねこのるんばが完成する筈」 : ラビットガーデン(うさぎでもわかるUE4)

なので、最大化させる処理をBPに書く必要があります。
続きは、↑の記事で。

また、実行ファイルのコマンドライン引数で「-FULLSCREEN」を
使うことで、最大化した状態で起動することもできます。
f:id:pafuhana1213:20150201015057j:plain
コマンドライン引数
Unreal Engine | Command-Line Arguments

最後に

準備編はここまでです。次回は、高速化編です。
(新情報や抜けがあれば、その都度追加します。ご指摘大歓迎です)

ちなみに、次々回はUE4+Oculusコンテンツを制作する上での
BPに関するTipsを書く予定。