デニッキ

XRエンジニア🔰の備忘録・日記です.

固定中心窩レンダリング Fixed Foveated Rendering (FFR) を学ぶ

Fixed Foveated Rendering (FFR) とは

FFRを用いることで,画面のエッジ側のテクスチャが中心より低解像度でレンダリングされるようになる.
周辺のテクスチャの解像度については殆ど感知されないため,
FFRをうまく利用すればコッソリGPUを減らすことができ,パフォーマンスが上がる.

f:id:xrdnk:20200426204152j:plain

Fixed Foveated Rendering (FFR)

FFR 設定方法

任意のスクリプト

// レベル0
OVRManager.tiledMultiResLevel = OVRManager.TiledMultiResLevel.Off;
// レベル1
OVRManager.tiledMultiResLevel = OVRManager.TiledMultiResLevel.LMSLow;
// レベル2
OVRManager.tiledMultiResLevel = OVRManager.TiledMultiResLevel.LMSMedium;
// レベル3
OVRManager.tiledMultiResLevel = OVRManager.TiledMultiResLevel.LSMHigh;
// レベル4
OVRManager.tiledMultiResLevel = OVRManager.TiledMultiResLevel.LSMHighTop;

と書くことでFFRの影響度を設定可能になる.

こちらのスライドのP28からFFRの範囲の広がり具合がわかる.

www.slideshare.net

任意のタイミングで呼び出せるため,重くなる場所でFFRを設定して,再度戻す手法も出来る.

Oculusドキュメントではベストプラクティスの例として,このように書いてある.

シンプルかつ効果的な例として、パフォーマンスヘッドルームに余裕があり多くのテキストエレメントが表示されるメニュー画面ではFFRをオフにし、パフォーマンスが必要なゲームが読み込まれたらFFRをオンにする方法があります。 もう1つの例として、屋外のシーンではFFRをMediumかLowに設定し、洞窟やトンネルなど暗めのレベルに入ったときにHighに切り替え、再び屋外のレベルに戻ったときにMediumに戻すという方法もあります。

レベル2のMediumが標準で,もっとパフォーマンスが必要になったら(つまりGPU負担を減らしたくなったら),
レベル3,4のHigh,HighTopと設定する.

"Dynamic" Fixed Foveated Rendering

Oculus Integration 14.0 以降から,システム側が自動で行うことができるように設定できるようになっている.
デフォルトではOFFなので,利用したい場合はONに設定する必要がある.OVRManagerに以下のスクリプトが追加されている.

/// <summary>
/// Let the system decide the best foveation level adaptively (Off .. fixedFoveatedRenderingLevel)
/// This feature is only supported on QCOMM-based Android devices
/// </summary>
public static bool useDynamicFixedFoveatedRendering
{
    get
    {
        if (!OVRPlugin.fixedFoveatedRenderingSupported)
        {
            Debug.LogWarning("Fixed Foveated Rendering feature is not supported");
        }
        return OVRPlugin.useDynamicFixedFoveatedRendering;
    }
    set
    {
        if (!OVRPlugin.fixedFoveatedRenderingSupported)
        {
            Debug.LogWarning("Fixed Foveated Rendering feature is not supported");
        }
        OVRPlugin.useDynamicFixedFoveatedRendering = value;
    }
}

終わりに

適材適所にFFRを用いて,Oculus VR アプリの没入感を高めていこうぜ.