厳しいレンダリング要件が原因で、XR に多くのパフォーマンス最適化が必要になり、Unreal Engine (UE) には XR 専用の新しいレンダリング モデルがいくつか導入されました。 このドキュメントでは、これらの機能の概要と、これらを UE XR プロジェクトで使用する方法について説明します。
可変レート シェーディングと 固定中心窩レンダリング
可変レート シェーディング (VRS) とは、レンダリング ターゲット (複数のターゲット) におけるピクセルのシェーディング レートを調整するためのさまざまな方法を提供する新型 GPU でサポートされる機能です。 あらゆる設定におけるデフォルトのシェーディング レートは「1:1」です。これは、1 つのピクセル シェーダー呼び出しが、画面上の 1 ターゲット ピクセルに適用されることを意味します。 VRS を使用すると、他のシェーディング レート、具体的には 1x2、2x1、2x2、2x4、4x2、または 4x4 を指定することができます。 たとえば、シェーディング レート「2x2」の場合は 2x2 ピクセルのグループ (つまり 4 ピクセル) に対して単一のピクセル シェーダー呼び出しとなり、「4x4」の場合は 4x4 のグループ (16 ピクセル) に対して単一のピクセル シェーダー呼び出しとなります。
シェーディング レートはマテリアルごとか、シェーディング レート画像アタッチメント (ティア 2 VRS 経由) を介して適用できます。
固定中心レンダリングとは、VR ヘッドセットで画像ベースの VRS を活用して、ターゲットに対するシェーディング レートを調整し、ビューの周辺に向けてシェーディング レートを低下させる技法です。 光学的なひずみが原因で、結果的に GPU では画像のエッジに向けて大量のピクセル詳細を浪費することになります。画像の中央からエッジに向けてシェーディング レートを低下させる VRS 画像を適用することで、知覚可能な画質の低下を最小限にとどめながらパフォーマンスを向上できます。
固定中心窩レンダリングでは、コンピュート シェーダを介して生成されたアタッチメントを使用します。
両側の中心の領域 (黒色) は、それぞれのステレオ ビューの中心に対応しています。より暗い領域のシェーディング レートはより高く、黒色の領域では完全 (1x1、ピクセルごとに 1 ピクセル シェーダー呼び出し) になり、えんじ色の領域では x と y の両方で半分のレート (2x2、4 ピクセルごとに 1 ピクセル シェーダー呼び出し)、そして明るい赤色の領域では 1/4 のレート (4x4、16 ピクセルごとに 1 ピクセル シェーダー呼び出し) になります。
VRS アタッチメントを含む初期結果はそのベース パスに適用され、透過処理パスでは大幅な向上が見られます。 現時点では概念実証の段階ですが、ベース パスと透過処理パス以外にも適用することができます。
プロジェクト設定
VRS の設定にアクセスするには、まずメインメニューから [Edit (編集)] > [Project Settings (プロジェクト設定)] を選択します。 次に、[Project Settings (プロジェクト設定)] ウィンドウで、[Engine (エンジン)] > [Rendering (レンダリング)] > [VR] を開きます。
コンソール変数
次のコンソール変数をしようできます。
| 変数 | 説明 |
|---|---|
r.vrs.Enable | エンジン全体で VRS を有効/無効にします (マテリアルベースの VRS とアクティブなあらゆる画像ベースの VRS)。 |
r.VRS.EnableImage | 画像ベースの VRS のみを有効/無効にします。 マテリアルごとの VRS が有効でサポートされる場合は、これも依然として機能します。 |
vr.VRS.HMDFixedFoveationLevel | HMD 固定中心窩レンダリングの品質とパフォーマンスの設定です。 |
vr.VRS.HMDFixedFoveationDynamic | 固定中心窩レンダリングを GPU 使用率に基づいて調整するかどうかを有効/無効にします。 |
既知の制限事項
DirectX 12 と VRS Tier 2 をサポートする Windows デバイス、Vulkan と VK_KHR_fragment_shading_rate 拡張をサポートする Windows デバイス、そして Oculus Quest でのみ使用可能です。
NVIDIA の DLSS には対応していません。
視線追跡型フォービエートレンダリングは現在サポートされていません。
インスタンス化されたステレオ
インスタンス化されたステレオによるレンダリング (Instanced Stereo Rendering) は、UE における XR のパフォーマンス上の影響を軽減します。 この機能を有効にするには、[Project Settings (プロジェクト設定)] > [Engine (エンジン)] > [Rendering (レンダリング)] > [Instanced Stereo (インスタンス化されたステレオ)] の順に移動して、[Instanced Stereo (インスタンス化されたステレオ)] オプションをオンにします。
インスタンス化されたステレオによるレンダリングを有効にした場合は、エンジンを再起動してシェーダーを再コンパイルする必要があります。 この機能を有効にすると (シリアル レンダリング パスとパラレル レンダリング パスの両方)、そのベース パスと早期 Z パスは、スタティック メッシュ、スケルタル メッシュ、スプライト パーティクル、メッシュ パーティクルと機能します。 インスタンス化されたステレオは PC (DirectX) と PS4 で動作し、他のプラットフォームのサポートは 4.11 の初回リリース以降に追加されます。 次は、VR における標準的なステレオ レンダリングと、インスタンス化されたステレオによるレンダリングを比較したビデオです。
モバイル向けのマルチビュー サポート
特定の (サポートする) モバイル デバイスでは VR マルチビューをサポートしています。 モバイル マルチビューは、デスクトップ PC で使用可能なインスタンス化されたステレオによるレンダリングに似ており、ステレオ レンダリングの最適化されたパスをモバイル デバイスの CPU に提供することで機能します。 この機能を有効にするには、次の手順に従います。
メイン ツールバーから、[Edit (編集)] > [Project Settings (プロジェクト設定)] を選択して、エディタのプロジェクト設定を開きます。
次に、 Engine > Rendering > VR に移動して、 Mobile Multi-View オプションを有効にします。
[Mobile Multi-View] オプションを有効にして、Unreal Engine を再起動してこの変更を反映させます。
モバイル マルチビューは、最新の Mali ベースの GPU でのみ動作します。
このプロジェクトをパッケージ化するものの、互換性のある GPU がない場合、この機能はランタイム時には無効になります。
フォワード レンダリング
By default, Unreal Engine uses a Deferred Renderer as it provides the most versatility and grants access to more rendering features. However, there are some trade-offs in using the Deferred Renderer that might not be right for all VR experiences. Forward Rendering provides a faster baseline, with faster rendering passes, which may lead to better performance on VR platforms. Not only is Forward Rendering faster, it also provides better anti-aliasing options than the Deferred Renderer, which may lead to better visuals.
この機能の詳細については、フォワード シェーダー レンダリング のドキュメントを参照してください。
パフォーマンスのプロファイリング
VR には負荷が高すぎるアセットをトラックするには、プロジェクトの存続期間にわたって、CPU と GPU でのプロジェクトの動作を可能な限りプロファイリングする必要があります。
GPU プロファイリング - GPU プロファイラを有効にするには、プロジェクトの実行時に Ctrl + Shift + , (カンマ) キーを押すだけです。 このショートカット キーを押すと、次の画像のようなウィンドウが新しく表示されます。
CPU プロファイラ - CPU でのプロジェクトの動作のプロファイリングは GPU のプロファイリングよりも複雑です。 この方法に関する詳細については、パフォーマンス プロファイラ ドキュメントを参照してください。
ポストプロセス設定
VR の厳しいレンダリング要件のため、デフォルトで有効になっているポストプロセス詳細機能の多くを無効にする必要があります。そうしないと、プロジェクトで パフォーマンスに関する問題が生じる可能性があります。 プロジェクトでこれらの機能を無効にするには、次を実行する必要があります。
1. 存在しない場合は、ポストプロセス (PP) ボリュームをレベル内に加えます。 1. PP ボリュームを選択し、[Post Process Volume] セクションで [Infinite Extent (Unbound)] を有効にすると、PP ボリュームの設定がレベル全体に適用されます。

1. [Post Process Volume] の [Settings] を展開し、各セクションで有効な PP 設定を確認します。対象のプロパティをクリックし、デフォルト値 (通常は 1.0) を 0 に変更して、機能を無効化します。
これを行う場合、すべてのセクションを確認し、すべてのプロパティを 0 に設定する必要はありません。 代わりに、まず、レンズ フレア、スクリーンペース反射、テンポラル AA、SSAO、ブルーム など、パフォーマンスに影響を与える可能性のある、非常に負荷の高い機能を無効にします。