せっかく毎月$19払っているのでUE4のきれいなデモをOculus Rift DK2で見てみたいと思い、おかず @pafuhana1213 さんのサイトを参考に自分の環境でも試してみました。

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

しかし”stat FPS”コマンドでFPSを見ていると35fpsから38fpsぐらいのところで張り付いている感じで、それ以上はどうにもFPSが上がらない状況でした(魔法の呪文”hmd sp 100″が効かない!!!)。

  • 実行環境
    • OS:Windows 7 Pro SP1
    • Memory: 32GB
    • GPU: GeForce GTX680
    • Unreal Engine: 4.4.3
    • Oculus Rift DK2: SDK0.4.2 beta

試しに”hmd vsync off”コマンドを実行すると80fpsとか100fpsとかでるので、CPU/GPS能力不足という感じでないと思い、あれこれ調べてみるとUnreal Engineのフォーラムで以下のような記事を見つけました。

Oculus Rift DK2 and UE4 4.3: problems with Oculus Runtime 0.4(スレッド#77)

要約すると以下のようになります。

かなり滑らかな結果が得られる現在の私のワークフロー(GPU: AMD R9-290):

  1.  Oculus Riftの設定: Extended mode (およびディスプレイはAMDコントロールパネルでポートレート回転し、プライマリモニターには設定しません)
  2. Unreal Engine 4(UE4)のプロジェクトを開く
  3. UE4の Edit -> Project Settings -> General Settingsの “Smooth Frame Rate”のチェックを「外す」
    (日本語表記:[編集]-[プロジェクトの設定]-[一般設定]の一番下の”Frame Rate”の中にある”Smooth Frame Rate”のチェックボックスを「外す」)
  4. UE4の”Play”(日本語表記:”再生”)の隣にある小さな矢印を押して”Standalone Game”(日本語表記:”スタンドアロンゲーム”)を選択
  5. ゲームのロード中にUE4エディタを最小化する
  6. ゲームがロードされたらウィンドウ内でAlt + Enterキーを押す75fps到達のために特に重要なのは3と5です。

ということで3と5に注意しながらやってみたのですが、さほど効果がありませんでした。

半ば諦めかけていたのですが、よく読み直してみると「1. Oculus Riftの設定: Extended mode」と書かかれています。普段はDirect modeで表示していたので読み飛ばしていました。

と言うことでExtened modeに切り替えたら・・・・・一気にフレームレートが上がりました!!!(もちろん”hmd sp 100″コマンドは実行済み)

軽いものでしたら特に何もしないでも75fpsをキープ。重たいものでも”hmd sp 70″と画質を落とせば75fpsをキープできるようになりました。

 

と、ここまできたところでDirect modeで約37fpsしかでないのってミラーモードだからじゃないかな?という疑問が沸き、以下のコンソールコマンドを実行すると。。。。

hmd mirror off

おお!Direct modeでも75fpsがキープできました。その代わりミラー表示が出来なくなりますけどね。その後、色々と試した感じではミラーをoffにすることで約15fpsは稼げている印象です(あくまで印象値)。

 

さらにフレームレートを稼ぐにはアンチエイリアスをoffにしたり、ポストエフェクトをoffにしたりして画質を落としていきます。一つ一つ手作業でやっても良いのですが、Oculus Riftのフォーラムで上がっていたUE4 Rollercoasterの起動部分だけプラグイン化したものを入れると、アプリ起動時に画質の選択が出来ます。このとき”Low”を選択するとFPSを少しだけ上げることが出来ます。当然画質は低下しますし、自分の印象だと苦労している割に劇的な効果が得られないという印象です。

Plugin: Launcher with graphics settings

使い方は記事の中にあるzipファイルを展開し、PluginsとConfigフォルダをUE4のプロジェクトのトップディレクトリにコピーするだけです。詳しくは付属の”install.txt”ファイルをご覧ください。

 

これまで紹介したもの全て取り入れていくつかのサンプルプロジェクトを動かしてみました。

  • Atlantis
    光が多いところで45fps、それ以外は75fpsを何とかキープ。
  • CouchKnights
    最高画質でも75fpsをキープ
  • VehicleGame
    画質を最低(Low)、かつ”hmd sp 50″ぐらいにすると何とか75fpsをキープ。でも画面スケールが小さすぎてUIが表示し切れません。。

 

テスト時はコンソールコマンドを直接入力して試していましたが、リリース版を作るのであれば、LevelブループリントのBeginPlayイベントの後にExecute Console Command関数でコンソールコマンドを実行するように記述すると良いでしょう。

スクリーンショット 2014-10-14 22.02.36

 

本当はもっとフレキシブルにできるといいんだろうなぁ、と思ったらすでにやっている方がいました(Unreal Engineのフォーラム)。

VR Game Template

まだ調査できていませんが、UnityのOculus Integrationと同じような感じですぐに使えるコンポーネントが予め用意されて、動的にspを調整したりする機能が入っているみたいです(動的にspを変えられるとDK2の画面がハングするのでAlt+Returnを2回押さないといけないんだけどその辺はどうなんだろう?)。

 

あと、Epic公式WikiにOculus Riftに関するまとめがあるので一読しておくと良いでしょう。断片的に知れ渡っている情報がまとめられています(でも、hmd mirror offコマンドは載っていませんね)。

Oculus Rift – Epic Wiki

 

■まとめ

  • UE4にはOculus Rift対応がはじめから入っている(Alt + Enterで切り替わる)がそのままではScreen Percentageが大きすぎてFPSが低くなる
  • コンソールコマンドで”hmd sp 100″と入力してからAlt + Enterするとかなり高速化される(値は30から300。小さいほど高速になるが画質が低下する。75から100程度が無難)
  • Oculus Rift DK2のDisplay modeは、Extend modeなら特に操作不要。Direct modeならコンソールコマンドで”hmd mirror off”でミラー表示をオフにすると15fps程度の向上が見込める。
  • AAをoff、PEをoffなどして画質を低下させるとfpsを稼げる。ただし、画質の低下の割りに効果は薄い。簡単に行うのであればUE4 Rollercoasterのプラグインを入れるとよい。
  • これから新規にプロジェクトを作成するのであればVR Game Templateを試してみると良いかもしれない。既存プロジェクトでもうまく取り込めば使えるかも?
  • Oculus Rift – Epic Wikiをよく読むと新たな発見があるかも。