前の記事で
「次の記事ではもう少しジェットコースターっぽい挙動にします」
と約束したな。アレは嘘だ。
はじめに
昨年の8月に↓の記事でUE4+Oculusについて色々まとめを書きましたが、
流石に色々と情報が古くなっているので、自分用も兼ねて色々情報をまとめてみます。
UE4+OculusRift DK2で75fps安定させるまでにしたこと - ぼっちプログラマのメモ
準備周りだけでも長くなったので、記事を分割します。
- 準備編 :ここ
- 高速化編:http://pafuhana1213.hatenablog.com/entry/2015/02/01/202330
- Tips編 :工事中
バージョン
Oculus SDK :0.4.4
Oculus Fireware :2.1.2
UE4: 4.7Preview
後述しますが、「VRPreview」という神機能が4.7から追加されたので、
今後UE4+Oculusで作る人は、4.7マジオススメです。
参考記事
- Epic社のシモダさん(@junyash)の記事
Unreal Engine 4 (UE4) でOculusを使うための手順 - Qiita
Oculus向けのコンテンツをUE4で制作するためのノウハウ共有♪(Oculus向けの最適化とか品質向上とか) - Qiita
- 栗坂こなべさん(@kurisaka_konabe)の記事
UE4 Oculus Rift DK2『ねこのるんば』をデジゲー博にて出展しました : ラビットガーデン(うさぎでもわかるUE4)
UE4でOculus Riftコンテンツを作る入門記事「この通りにやれば、ほぼねこのるんばが完成する筈」 : ラビットガーデン(うさぎでもわかるUE4)
セットアップ
手抜きですが、以下の記事が参考になります。
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クリックで確認できるようになりました!
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表示
まずは、Oculus画面上でfpsを確認できるようにします。
やり方は2種類あります。
コンソールコマンド「stat fps」を入力
UE4にはコンソールコマンドを入力することで、各便利機能を使うことができます。
fps表示の場合は、「stat fps」です。
コンソールコマンドの使い方に関しては、↓のヒストリアさんの記事が参考になります。
[UE4] コンソールコマンドの使い方&よく使うコマンド一覧 | historia Inc - 株式会社ヒストリア
ちなみに、Oculus上でもコンソールコマンドは問題なく入力できます。
少し感覚的に面白いので、試してみることオススメです。
GPUプロファイラー
UE4+Oculusでボトルネックとなるのは、主にGPU(描画処理)です。
UE4には各GPU処理の処理時間を計測できる「ProfileGPU」機能があります。
「HZBとPostProcessingの処理時間が目立つなぁ…」という感じで
ボトルネックを調査して、その部分に対して高速化対応していきます。
「ProfileGPU」もコンソールコマンドの1つなので、使い方は「stat fps」と
同じです。
※追記
ProfileGPU中のSlateUIという謎項目(5~10ms食ってる)に悩まされているそこのあなた、fps表示を一度切ってみましょう。または、他のプロファイル用の表示を切ってみましょう。ほらね、簡単でしょ
(←さっき気づいた馬鹿) #UE4Study
— おかず (@pafuhana1213) February 1, 2015
ライトの影響範囲の可視化
GPU処理の中でもライティング(特にシャドウ)は結構重い処理です。
可能な限り無駄なライティング処理は削減して、高速化を図りたい所です。
そこで役立つのが、「show shadowfrustums」による
ライトの影響範囲の可視化です。
赤い線で引かれた範囲がライトの影響範囲です。高速化対応を行う際は、
この範囲を可能な限り少なく、または狭くする必要があります。
「show shadowfrustums」もコンソールコマンドの1つなので、以下略
高速化に対しての下準備はこんな感じです。
実際の高速化対応に関しては、次の記事で書きます。今度は本当です。
下準備 その他
パッケージ化時の画面最大化
package化するとAlt+Enterが利きません(shippingの場合)
UE4でOculus Riftコンテンツを作る入門記事「この通りにやれば、ほぼねこのるんばが完成する筈」 : ラビットガーデン(うさぎでもわかるUE4)
なので、最大化させる処理をBPに書く必要があります。
続きは、↑の記事で。
また、実行ファイルのコマンドライン引数で「-FULLSCREEN」を
使うことで、最大化した状態で起動することもできます。
コマンドライン引数
Unreal Engine | Command-Line Arguments
最後に
準備編はここまでです。次回は、高速化編です。
(新情報や抜けがあれば、その都度追加します。ご指摘大歓迎です)
ちなみに、次々回はUE4+Oculusコンテンツを制作する上での
BPに関するTipsを書く予定。