Oculus Questのパフォーマンスを安定させるDynamic Fixed Foveated Rendering

2020年9月22日

VRにおける一般的な最適化技法のひとつにFixed Foveated Renderingがあります。Oculus Questdでは、これを発展させた技術であるDynamic Fixed Foveated Rendering (以下Dynamic FFR)が採用されており、VR体験を安定させるのに重要な柱になっています。

Oculus QuestでDynamic FFRが重要な理由

Dynamic Fixed Foveated Renderingの説明に入る前に、なぜこの技術がOculus Questにとって重要なのかを説明します。

PCでの動的なパフォーマンス調整機能

PCのVRプラットフォームでは、処理性能の過不足に合わせてシステムが描画解像度を動的に調整する仕組み(Adaptive Resolution/Adaptive Pixel Density などゲームエンジンによって呼び方が異なる)が備わっています。この機能により高性能のGPUを搭載していれば画像がシャープになりますし、性能が低ければ画質は下がりますがフレームレートを落とさずに済みます。

また Asynchronous Spacewarp やMotion Smoothingのように描画画像の品質を落とさずにフレームレートを稼ぐ技術もあります。(動き自体は若干不自然になる)

このようにPCのVRプラットフォームでは、定常的・一時的に処理性能が足りなくてもフレームレートを下げずに済ませるための仕組みが充実しています

Oculus Questでのパフォーマンス調整機能

しかしながら、動的に解像度を変更したり、Asynchronous Spacewarpのようなパフォーマンスを調整する高度な機能はOculus Questシリーズにはありません

Oculus Questシリーズはスタンドアロンヘッドセットであるため、PCのようにハードウェア構成の違いを吸収する仕組みはそれほど重要ではありませんが、それでも一時的に処理負荷が高まった時にはこういったパフォーマンス調整機能があった方が体験が良くなります。

Asynchronous Timewarp はOculus Questでも利用可能ですが、フレームレートが上がるわけでもないですし、画面端が黒くなるので、どちらかというと緊急避難的な位置づけの機能です。

ここで登場するのがDynamic Fixed Foveated Rendering (Dynamic FFR)です。

Dynamic Fixed Foveated Renderingとは

Dynamic Fixed Foveated RenderingはFixed Foveated Renderingと呼ばれる最適化技法を使った動的なパフォーマンス調整機能のことです。

Dynamic Fixed Foveated Renderingは(Dynamic無しの)Fixed Foveated Renderingを知っていればすぐに理解できます。

Fixed Foveated Rendering

(Dynamic無しの)Fixed Foveated Renderingとは、粗が目立たない周辺視野の描画解像度を下げることで、GPUの処理負荷を下げる描画技法のことです。

この図では、白の部分が通常通りの描画で、赤→緑→青→紫となるにしたがって描画が荒くなっていきます。VRでは視野の中心を見ることが多いので、周辺の描画が荒くても体験は悪化しにくい、ということです。

この細かく描画するエリアの中心位置を真ん中に固定(Fix)するのがFixed Foveated Renderingです。これだと、意識的に視界の端の方を見つめると、端の描画が荒いことに気付いてしまいます。視線追跡ハードウェアを利用して、中心位置を視線に合わせるようにしたものをFoveated Renderingと呼んでいたので、それと区別するために「Fixed」がついています。

そして、Foveated Renderingには強さのレベルがあります。強くすれば強くするほどGPUの負荷は下がりますが、より粗が目立ちやすくなります。以下の例では一番下のLowが自然でかつGPU負荷が高くなっています。

Fixed Foveated Renderingの動的レベル調整

このFixed Foveated Renderingレベルを、GPUの負荷に応じて動的(Dynamic)に調整するのがDynamic Fixed Foveated Renderingです。

グラフィックス処理に余裕がある場合は、今まで雑に書いていた周辺視野の描画に処理を割り当てるので、この部分の描画は綺麗になりまし、逆に処理が足りない場合は描画が荒くなります。

ただし、このFixed Foveated Renderingのレベルを固定でどれを選ぶか、システムに任せて動的にするかの判断はアプリケーションに委ねられています。古いアプリケーションだと固定になっていて変化がないかもしれません。

最後に

Dynamic Fixed Foveated RenderingはOculus Questにとって重要な技術であることを説明しました。最後にPCプラットフォームのVRについても参考までに触れておきます。

Fixed Foveated Rendering自体はPCでも使われている技術です。ただし、そこまで一般的ではありません。

(Dynamic) Fixed Foveated RenderingがOculus Quest向けのランタイムシステムには標準で組み込まれている一方で、PC向けのOculusランタイムやSteamVRといったシステムにはこういった機能はありません。そのため、UnityやUnrealEngineといったゲームエンジンのオプションとして実装されており、たまにそのオプション機能を組み込んだアプリがある程度です。そして、レベルを動的に変えるDynamic Fixed Foveated Renderingは、ほぼ使われていません。

これはPCにおいては処理軽減の効果が低いことと、Oculus QuestではGPUの機能をうまく使って簡単に実装できることが要因として考えられます。

一方、DirectX 12世代の最近のデスクトップ向けGPUではVariable Rate Shading(VRS)と呼ばれる機能を備えたものが増えてきています。(GeforceであればTuring/20×0世代以降)
VRSは2Dゲームにおいても目立たない部分を自動的に判断して描画品質を落とす機能で、Dynamic Fixed Foveated Renderingと発想が似ています。
このことから、今後PCのVRプラットフォームにおいてもDynamic Fixed Foveated Renderingが標準装備される日が来るかもしれません。(Oculusは望み薄ですが)

スポンサーリンク