※追記(2015/02/01)
UE4+Oculusのまとめ記事を更新しました!
- 自分用も兼ねて、UE4+Oculusについて色々纏めてみる -準備編- (2015/02/01) - ぼっちプログラマのメモ
- 自分用も兼ねて、UE4+Oculusについて色々纏めてみる -高速化編- (2015/02/01) - ぼっちプログラマのメモ
UE4 4.4.1で、OculusRiftDK2(SDK 0.4.1)に対応したので
早速試してみました
UE4 4.4.1のインストール
いつものアップデート手順だと上手くいかないらしいので、
@aizen76さんのツイートを参考にアップデートを行います。
UE4.4.1のアップデート成功しました。ランチャーを右クリックのプロパティからリンク先の引数に "-AppLabel=Production-4.4.1HotfixPreview" と加えてあげる必要があります。 pic.twitter.com/jTlZmVAS47
— alwei (@aizen76) August 22, 2014
いつもありがとうございます…!
OculusRift側に表示させる方法
UE4はOculusRiftにプラグインで対応している為、Unityのように
シーンに何か配置したり、色々と設定をする必要はありません。
レベルエディター上部にある再生ボタン横の三角印から
「スタンドアローンゲーム」を選択し、ゲーム起動後に「Alt+Enter」を押すと
Oculus Rift用の表示モードに移行します。
FPSテンプレートで試してみる…お、重い…
早速、FPS用テンプレートで動作を確認してみました
うんうん、動いてる動いて…
48.01 FPS /(^o^)\
※OculusRiftDK2は75fpsで稼働している為、ゲーム側はそれ以上のfpsで
動作する必要があります。60fps動作でも軽く酔います
75fps安定動作までの道のり
まず、PCのスペックを晒しておきます。
↑のスペックでの75fps安定動作なので、市販のノートPCなどでは
今回紹介する方法では足りないかもしれません…ご了承下さい…
(一応、超高速化手法はありますが…詳しくは記事後半で)
参考:
UE4シーンの高速化の話 - Togetterまとめ
Achieving good performance and high quality visuals in UE4 through optimization [Draft] - Google ドキュメント
ライトの設定をStaticにする
高速化のため、重そうな処理をOFFっていきます。
UE4シーンの高速化4: Light周りのパフォーマンスを向上させるには極力動的にシャドウを落とすライトをシーン中に置かない。ライトはStatic(事前焼き付け)が一番軽く、次にStationary(事前ShadowMap生成)、一番重いのがMovable(動的Shadow生成)
— エピック・ゲームズ・ジャパンUE4ALL (@EpicGamesJapan) August 12, 2014
まずは、↑のツイートを参考にライトの設定をStaticに変更します。
(FPS用テンプレートのライトの初期設定は、Stationaryです)
設定変更は、↓画像にある「可動性」で行います。
ライトの設定をStaticにすることで、私の環境では約10fps高速化することができました。
ただし、「事前焼付け」なので動的なオブジェクトの影は描画されません。
(左がStationary 右がStatic)
↑の画像の通り、見た目にかなり影響します。ゲーム内容によりますが
UE4シーンの高速化の話 - Togetterまとめにあるように
シャドウの影響範囲などを調整した方がいいかもしれません。
ただ、今回は75fps安定動作が目的なのでStaticでいきます。
※おまけ
DK2のライトマップ解像度は「2592x1458」らしい…crazy high resolution!
Teddy0k comments on UE4 Rollercoaster [Now with DK2 support]
Global PostProcessの削除
高速化のため、見た目をさらに犠牲にしていきます…!
UE4シーンの高速化10: これらの事を行う事でLight周りは結構高速化できるはず。Light周りのボトルネックへの影響が少なくなってくると、ポストプロセス系の負荷が気になってくると思われるので、不要なものがありそうならオフにしたり、描画のScalability調整。
— エピック・ゲームズ・ジャパンUE4ALL (@EpicGamesJapan) August 12, 2014
ライトの次は↑のツイートに従い、ポストプロセス部分をOFFります。
※ポストプロセスって何?というUE4ユーザには、↓の@aizen76さんの記事がおすすめです
UE4 ポストプロセスエフェクトについて - Let's Enjoy Unreal Engine
今回は思い切って、シーン中の「Global PostProcess」を削除しました。
(=ポストプロセスOFF)
結果としては、数fps向上しました。しかし、何だか締りのない絵になりました…
今回のように削除するよりも、PostProcessVolumeの範囲を調整することで
処理速度の向上を図るべきだと思います。
削除…削除…削除…
この段階で60~70fpsで動作していました。
目標の75fpsに向けて、妨げになりそうな物を全て削除しました
- SphereReflectionCapture:Unreal Engine | 反射環境
- LightmassImportanceVolume:Unreal Engine | 間接ライティング キャッシュ
- AtmosphericFog:Unreal Engine | Atomospheric Fog に関するユーザーガイド
この結果、目標の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」という謎のコマンドがオススメされています。
早速、レベルのブループリントを以下のように弄って実行してみます。
注意
「hmd sp」コマンドは、Alt+Enterを押す前に使用して下さい。
後で使用すると、Oculus側の表示がおかしくなります。
(私の環境だけかもしれませんが、念のため…)
実行してみると、あの不安定だったfpsが75fps安定という結果に…!
さらにシーンを初期状態に戻して試した所、約70fpsで動作するという驚きの結果に…!
今までの努力はいったい…orz
文章だけではよく分からないと思うので、
コマンドを実行した結果が分かりやすい動画を紹介(音量注意)
Getting Good FPS and Quality in UE4 Demos on ...
@aizen76さんに教えて頂いたのですが、「hmd sp」は
スクリーン解像度の比率設定を変更するコマンドのようです。
後ろの値を上げると高画質(処理重)に、下げると低画質(処理軽)になります。
(色々と後ろの値を変えてみたところ、80~100が画質と処理速度のバランス良さそう)
まとめっぽいまとめ
- UE4でOculusRiftDK2を試すときは、とりあえず「hmd sp 100」コマンド
- UE4シーンの高速化の話 - Togetterまとめを参考に、高速化がんばろう
- 主に、ライト・ポストプロセス
追記
RT>UE4のhmd spは「スクリーンパーセンテージ」ですね。100だと等倍。0.4.xのSDK Renderingで素で綺麗になったのに、デフォルト設定が表示解像度よりも高解像度でレンダリングするようになってしまっているんですかね
— 野生の男 (@yasei_no_otoko) August 23, 2014
ナ、ナンダッテー!