つい最近 (2018年11月25日) の Steam VR のアップデートで、処理速度がコマ落ちした場合の画面の補間技術である Motion Smoothing 機能が正式に追加されました。現在では NVIDIA GPU と HTC Vive (Pro も含む) もしくは OpenVR 対応のヘッドセットの組み合わせでのみサポートされているようです。
一方で、今まで存在していた Interleaved Projection と Asynchronous Reprojection 機能は設定から削除されました。これらはどのような違いがあり、PC のスペックによってどのような設定が最適なのでしょうか?
Interleaved Projection や Asynchronous Reprojection との違いは?
最初に搭載された Interleaved Projection は一番原始的な方法で、90 FPS で描画するのに処理速度が追いつけない場合に、強制的に半分の 45 FPS に落としてしまい、その足りないフレームは直前のフレームと同じ画面を表示するというものでした。
メリットとしては、スペックがあまり高くない PC でもそれなりに VR を使用できるようにするというものでした。ただ、90 FPS に届かないようなマシンだと基本的に常時 45 FPS 固定になってしまうため、滑らかさが失われ、VR 酔いが出やすくなるというデメリットがあり、オフにすることを薦めている人が多かったように思います。
一方 Asynchronous Projection は、処理落ちが発生して次のフレームの描画が間に合わないと分かった時のみ前のフレームの画像を表示するというものでした。基本的には 90 FPS 近く出ていてたまにコマ落ちするといったマシンでは有効だったので、Asynchronous Projection のみをオンにすることを薦めしているケースが多かったように思います。
Motion Smoothing とは?
Interleaved Reprojection や Asynchronous Reprojection では、処理落ちしたときに表示される映像は直前のフレームと同じ画像でした。一方 Motion Smoothing では、ヘッドセットの動きと直前に描画された 2 フレームから、次のフレームの画像を推定して描画します。例えば動きのある場面だったら、補間された次のフレームは同じ方向に動き続けているだろうと推定された画像になります。
これは Oculus Rift で搭載されていた ASW (Asynchronous SpaceWarp) という技術と同等で、Steam VR と Vive の組み合わせがようやく追いついたとも言えます。(ただし Oculus はより進んだ ASW 2.0 と呼ばれるより補間技術を開発・発表しています)
これらの技術によって、90 FPS で描画できないような環境では、半分(毎秒 45 フレーム)は GPU に描画させ、残りの半分(毎秒 45 フレーム)は動きから推定された画像で補間することができます。PC のスペックがさらに劣る場合は、毎秒 30 フレームのみを GPU に描画させ、残り 60 フレームを動きから推定された画像で補間することもできます。
Motion Smoothing 設定のデメリット
これまでの説明だけ聞いていると素晴らしい夢のような技術に聞こえますが、デメリットもあります。
まず、フレーム描画が間に合わないと分ってから補間処理を始めたのでは間に合わないため、コマ落ちが確定する前から早めに補間推定処理を始める必要があります。NVIDIA GPU 限定としていることからも動画圧縮技術などで使う動き推定アルゴリズムなどを GPU で計算させているのではないかと推察され、それにともなうオーバーヘッドがあるようです。海外の一部のサイトなどによると、Motion Smoothing をオフにした場合に比べて1 ミリ秒ぐらいの余分な負荷がかかっているのではという情報も見かけました。(どれだけの正確な情報なのかは分りませんが)
また、元々のパフォーマンスが 90 FPS 前後で、描画が間に合う・間に合わないが頻繁に切り替わる場合、Motion Smoothing 機能も頻繁にオン・オフされるため、カクつきをより強く感じてしまう人もいるようです。
それでは最適な設定方法は?
滑らかさ FPS 重視の場合
超強力なグラボ (GPU) を持っていて常時 90 FPS 出ているという場合、またグラフィックスの画質設定を落として 90 FPS ぐらいを目安に使っている場合、つまり1フレーム描画するのがだいたい 11.1 ミリ秒以内に収まっている場合は、Motion Smoothing をオフにした方が良さそうです。
これは Motion Smoothing をオンにすると、動き推定補間するためのオーバーヘッドが発生する割に、その恩恵を使う機会は少なく無駄になってしまうことが多いからです。
画質重視の場合
逆に、画質を重視してグラフィックスの設定や Super Sampling を上げている場合、1フレームを描画するのに頻繁に 11.1 ミリ秒を超えてしまっているかもしれません。そのような場合には、Motion Smoothing をオンにした方がカクつきが減り滑らかになります。
それならは、個人的にはさらに画質設定・Super Samplingを上げて、1フレーム描画に 20 ミリ秒ぐらいかけてしまい、Motion Smoothing を常時使用するオプションをオンにしておくのがおすすめです。常時使用の設定は、Steam VR のアプリケーションごとの設定からできます(下図)。
仮に Motion Smoothing オンで1フレーム描画が 12〜13 ミリ秒ぐらいの場合、つまり 11.1 ミリ秒 (90 FPS) に微妙に届いていない場合、Motion Smoothing が頻繁にオン・オフされよりカクつきを感じたり、また GPU 利用率が 60% 程度まで落ちてしまうのが観測されたためです。これは Motion Smoothing 発生中は 45 FPS の描画で足りるため、45 FPS = 1フレーム 22.2 ミリ秒まで GPU に余裕が出るためだと思われます。でもせっかくの GPU パワーを半分近く使わなかったらもったいないと思いませんか…?
一方で、常時 Motion Smoothing をオンにしておき1フレーム描画に(贅沢に) 20 ミリ秒ぐらいかけるよう (22.2 ミリ秒は超えないように少し余裕を持って) 画質を調整しておくと、
- Motion Smoothing が頻繁にオン・オフされるカクつき感がなくなり
- 11〜13ミリ秒で描画していた時に比べてかなり贅沢な画質設定をする余裕が生まれ
- その割に Motion Smoothing のおかげで実質 90 FPS で滑らかに動く
というメリットがあります。なので個人的にはこの方法で Vive Pro 超高画質でプレイしています。
ただし、Motion Smoothing で補間しているフレームはあくまでも擬似的な画像なので、常時 90 FPS で描画できているのならもちろんその方が正しい(嘘のない)画像になります。あとは個人的な好みで、画質を取るか FPS を取るか、試してみてください。