ぼっちプログラマのメモ

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

UE4+OculusRift DK2で75fps安定させるまでにしたこと

※追記(2015/02/01)
UE4+Oculusのまとめ記事を更新しました!


UE4 4.4.1で、OculusRiftDK2(SDK 0.4.1)に対応したので
早速試してみました

UE4 4.4.1のインストール

いつものアップデート手順だと上手くいかないらしいので、
@aizen76さんのツイートを参考にアップデートを行います。


いつもありがとうございます…!

OculusRift側に表示させる方法

UE4はOculusRiftにプラグインで対応している為、Unityのように
シーンに何か配置したり、色々と設定をする必要はありません。

レベルエディター上部にある再生ボタン横の三角印から
スタンドアローンゲーム」を選択し、ゲーム起動後に「Alt+Enter」を押すと
Oculus Rift用の表示モードに移行します。
f:id:pafuhana1213:20140823181550j:plain

FPSテンプレートで試してみる…お、重い…

早速、FPS用テンプレートで動作を確認してみました
f:id:pafuhana1213:20140823181904j:plain
うんうん、動いてる動いて…
f:id:pafuhana1213:20140823182047j:plain
48.01 FPS /(^o^)\

※OculusRiftDK2は75fpsで稼働している為、ゲーム側はそれ以上のfps
 動作する必要があります。60fps動作でも軽く酔います

75fps安定動作までの道のり

まず、PCのスペックを晒しておきます。

  • CPU:Corei5-4670 3.40GHz
  • Mem:12.0 GB
  • GPUGeForce GTX770(4GB)

↑のスペックでの75fps安定動作なので、市販のノートPCなどでは
今回紹介する方法では足りないかもしれません…ご了承下さい…
(一応、超高速化手法はありますが…詳しくは記事後半で)

参考:
UE4シーンの高速化の話 - Togetterまとめ
Achieving good performance and high quality visuals in UE4 through optimization [Draft] - Google ドキュメント



ライトの設定をStaticにする

高速化のため、重そうな処理をOFFっていきます。


まずは、↑のツイートを参考にライトの設定をStaticに変更します。
FPS用テンプレートのライトの初期設定は、Stationaryです)
設定変更は、↓画像にある「可動性」で行います。
f:id:pafuhana1213:20140823190517j:plain

ライトの設定をStaticにすることで、私の環境では約10fps高速化することができました。
ただし、「事前焼付け」なので動的なオブジェクトの影は描画されません。
f:id:pafuhana1213:20140823191247j:plain
(左がStationary 右がStatic)

↑の画像の通り、見た目にかなり影響します。ゲーム内容によりますが
UE4シーンの高速化の話 - Togetterまとめにあるように
シャドウの影響範囲などを調整した方がいいかもしれません。

ただ、今回は75fps安定動作が目的なのでStaticでいきます。

※おまけ
DK2のライトマップ解像度は「2592x1458」らしい…crazy high resolution!
Teddy0k comments on UE4 Rollercoaster [Now with DK2 support]


Global PostProcessの削除

高速化のため、見た目をさらに犠牲にしていきます…!


ライトの次は↑のツイートに従い、ポストプロセス部分をOFFります。
※ポストプロセスって何?というUE4ユーザには、↓の@aizen76さんの記事がおすすめです
UE4 ポストプロセスエフェクトについて - Let's Enjoy Unreal Engine


今回は思い切って、シーン中の「Global PostProcess」を削除しました。
(=ポストプロセスOFF)
f:id:pafuhana1213:20140823193939j:plain
結果としては、数fps向上しました。しかし、何だか締りのない絵になりました…
今回のように削除するよりも、PostProcessVolumeの範囲を調整することで
処理速度の向上を図るべきだと思います。

削除…削除…削除…

この段階で60~70fpsで動作していました。
目標の75fpsに向けて、妨げになりそうな物を全て削除しました

この結果、目標の75fps動作を達成することができました!(少し不安定)
しかし、見た目は酷いといいいますか、とても質素なものに…(アカン…)

これでは使い物にならないので、根本的な部分を弄ります

魔法のコマンド「hmd sp 100」

どうにも、こうにも、どうにもならない時は、google先生に聞いてみます。

https://developer.oculusvr.com/forums/viewtopic.php?t=8032
https://forums.unrealengine.com/showthread.php?12859-Theoretical-Performance
https://forums.unrealengine.com/archive/index.php/t-23482.html
↑は、UE4+OculusRiftで処理速度を安定させる方法について
話し合いが行われているスレッドです。
(一番目のスレッドで公開されている「UE4 Rollercoaster」はオススメです)

スレッドを見てみると「hmd sp 100」という謎のコマンドがオススメされています。
早速、レベルのブループリントを以下のように弄って実行してみます。
f:id:pafuhana1213:20140823202728j:plain
注意
hmd sp」コマンドは、Alt+Enterを押す前に使用して下さい。
後で使用すると、Oculus側の表示がおかしくなります。
(私の環境だけかもしれませんが、念のため…)


実行してみると、あの不安定だったfpsが75fps安定という結果に…!
さらにシーンを初期状態に戻して試した所、約70fpsで動作するという驚きの結果に…!
今までの努力はいったい…orz

文章だけではよく分からないと思うので、
コマンドを実行した結果が分かりやすい動画を紹介(音量注意)

Getting Good FPS and Quality in UE4 Demos on ...


@aizen76さんに教えて頂いたのですが、「hmd sp」は
スクリーン解像度の比率設定を変更するコマンドのようです。
後ろの値を上げると高画質(処理重)に、下げると低画質(処理軽)になります。
(色々と後ろの値を変えてみたところ、80~100が画質と処理速度のバランス良さそう)

まとめっぽいまとめ

追記


ナ、ナンダッテー!