htc VIVEなどのSteamVR対応機器でVRを快適に体験するには高いグラフィックボードの性能が求められ、原則毎秒90フレームの維持が必要とされる。
しかし、Steam VRには90フレームを維持できない場合にフレームを予測疑似表示してVR体験の品質を維持する「非同期再投影」とフレームレートを半減させる事でVR体験の品質を最低限維持する「インターリーブ再投影」が組み込まれている。本稿はこのオプション機能の設定メモ。
基本的にCPU・GPU共に11ms以内で処理を完了する事が求められるSteam VR
現在のSteam VRにおいては秒間90フレームを維持が原則で、これを実現するためにはGPUとCPUの処理を11ms以内に完了させる必要がある。11msを超えて遅延が発生すると「ジャダー」や「スタッター」と呼ばれる映像の乱れやカクつき・残像が発生してしまう。
この状態が多発するとVR酔いを招きやすくなり、快適なVR体験が出来なくなる。
例:VR使用不可判定のGPU「Radeon RX 560」でhtc viveを動作させた場合
以下は「非同期再投影」と「インターリーブ再投影」をオフにした場合のGPU処理時間とフレームレートのグラフ。GPUが頻繁に11msをオーバーしている事が確認できる。
GPUの処理が11msに到達しないタイミングでは、フレームレートも90フレームに到達せず、可変状態になり、60フレーム前後で激しく上下している。
一般的なゲームであれば60フレームはヌルヌルだが、VRの場合は見た目もカツつき・頭の動きにも違和感が多発して頭がクラクラする(画像はイメージ)
*VRは描画の負荷が通常のゲームの比ではないほど高い。
関連記事
Windows PCで完全に11msは維持は難しい
原則11ms以内なのだが、Windows PCの場合OSの割り込み動作やバックグラウンドアプリケーションの不意な動作が発生するため、ハイエンドな環境でも完全に常に11ms維持は厳しい。
実際、手持ちの「GTX1080 TI」で「インターリーブ再投影」と「非同期再投影」をオフにしてフレームの状態を各種ソフトで確認してみたが、一部のソフトでスパイクの様な現象が稀に発生し、フレームが瞬間的にドロップしている。
例:CPU:Core i7 6700-K@4.5GHz GPU:GTX1080 TIで計測
フレームを表示を見ると瞬間的にCPUが11msを超えてるのが確認できる。VRソフトなのかバックグラウンドが起因しているのかは不明。最適化が不十分なインディソフトが氾濫しており、またPCはユーザー個人で環境が違う点も大きい。
緊急回避的なVR酔いを軽減させる機能「インターリーブ再投影」と「非同期再投影」
そこで不意なCPU・GPUの処理落ちによるVR酔いを軽減させる「インターリーブ再投影」と「非同期再投影」と呼ばれる機能が「Steam VR」には備わっている。
しかし、現時点で「Steam VR」に実装されている両機能は、あくまで擬似的に予測補完・軽減措置を行う緊急回避的な手段と捉えた方が良いだろう。この軽減機能が発生すると頻度に応じてVRの体験品質は低下する。不快感が蓄積されVR酔いを招くためだ。
「インターリーブ再投影」とは
英語では「Interleaved reprojection」と呼ばれている。フレームレートが90フレームを下回ると45フレームに間引いて固定表示する機能。下記の様にGPUの処理が11msに達してない場合は赤い枠で囲まれて表示される。
この状態のフレームレートを取得すると、基本期に45フレームで固定されている事が確認できる。瞬間的にGPUに余裕が発生した場合は90フレームを維持しようとするが89フレーム以下を検知すると、即座に45フレームモードに戻る挙動の模様。
全体的にフレームレートが半分になるため、対象物が動くと2重にブレて見える残像が目立つ。ただし、頭の動きに対しての追随性は半分だが保っているため、残像を許容すればVR酔いが著しく酷くなる事を抑えられる。
トータルの平均フレームレートは低下しているが、可変の状態よりVRの品質は遥かにマシなレベルだ。
*画像はあくまでイメージ
VRの最適化が不十分な「ProjectCars」は多くの人がこの状態でプレイしていたと思われる。慣れると案外気づかない。下手にフレームレートが上下するより安定感はある。
「非同期再投影」とは
英語では「Asynchronous Reprojection」と呼ばれている。Steam VRではリリースの後に数ヶ月経ってから実装された新しい技術。
90フレームを維持できなくなった場合、現在表示されているフレームの絵と次に表示されるフレームの絵の動きの量を踏まえて、直前のフレームの絵を頭の動き分だけズラして表示する機能。
言葉で説明すると意味不明になってしまうが、処理が追いついていないので絵だけズラシて、頭の移動に併せて動いてるっぽく見せる誤魔化し手法。上の図はイメージ。
あくまで擬似的にレンダリングされた絵を動かしているだけなので、移動量が一定量を越えると周囲の黒フチが露呈してしまう。また、ハンドデバイスのような手前にある物体の動きに弱く、絵が大きく飛んだ表示になってしまう。
ただし、フレームレートは高く維持されてる様に見えるので違和感は低い。特に移動量が少ない場合は殆ど気づかない。
上手のようにGPU処理が11msを超えて90フレーム維持できてなくても、遅れた分は前フレームの絵が表示されるので、定点位置でプレイする様なVRゲームでは一見違和感がないが、不快感は蓄積する。動く量が多いコンテンツでは違和感が大きくなる。
「非同期再投影」と「インターリーブ再投影」設定方法
1:SteamVRの以下から「設定」項目をクリック
2:パフォーマンス → 「非同期再投影を許可」「インターリーブ再投影を許可する」のチェックボックスを入れるか外す
両方をオンにするとどうなるか?
両方のチェックボックスがオンになっている場合は「非同期再投影」(疑似90フレーム)を優先的に処理しつつ、「非同期再投影」で追いつかない程度に遅れると「インターリーブ再投影」(45フレーム)に移行する。
GPU負荷は若干上がるが、これでインターリーブ再投影に移行判定を食らうようなパフォーマンスの場合、そもそもPCの処理が追いついていない。SteamVRでVR対応と呼称するには最適化不足すぎると思われる。
私見だがRadeon RX 480,RX 580、Geforce GTX1060、GTX1070あたりのミドルレンジGPUはVR酔いの予防措置としてオンで良いのではと思う。(不都合があるソフトのみ設定を変更する)
GTX1080、GTX1080 TIクラスのミドルハイ~ハイエンドGPUは非同期再投影のみで十分だろう。何か問題が発生するような場合はソフトか環境の方がおかしい。
非同期再投影対応GPU
非同期再投影は、実装直後はNVIDIAのMaxwell世代にあたる「Geforce GTX900」シリーズ、Pascal世代の「GTX 1000」シリーズしか利用できなかった。
しかし4月のAMD RadeonのドライバアップデートでRadeon RX480,Radeon RX470での対応が発表されている。筆者の手元の同Poralis世代にあたる Radeon RX560でも機能の有効化が確認できたので RX 570,RX580でも問題なく利用できると思われる。
快適なVR体験を維持するには再投影が発生する回数・時間が短い方が良い
この予測補完方面ではOculus Riftは1歩進めた技術を実装している。Oculusはハンドデバイスの動きも検知して、それらの絵も中間生成する「Asynchronous Spacewarp」を採用しており、必要フレームは45フレーム、GPU要件もGTX1050TIと大幅に引き下げられている。
htc VIVEなどの対応機器が追随せず、SteamVRでも未対応の点を踏まえると、特許絡みかコストダウン重視のVR体験の拡大より、今は高価でもリッチなVR体験の拡大を必要と考えるValveの思想なのかもしれない。
現時点でSteam VRに実装されている「インターリーブ再投影」と「非同期再投影」は、あくまで不意のGPUフレームドロップに備える保険のような扱いで、快適なVR体験のためにも、GPUの処理速度は11ms以内という目安に変化はなさそうだ。
この設定項目を頻繁にチェックするような状況の場合はGPUのアップデートも検討したほうが良いだろう。