Lumen パフォーマンス ガイド

Lumen グローバル イルミネーションと反射に関するスケーラビリティ オプションを説明します。

Lumen では、グローバル イルミネーション、不透明型マテリアルおよび透過マテリアル、ボリュメトリック フォグに対して、1080p の 8ms および 4ms のフレーム バジェットで、コンソールで 30 fps (フレーム/秒) および 60 fps をターゲットとしています。エンジンでは、事前定義されたスケーラビリティ設定を使って Lumen のターゲット FPS を制御します。Epic スケーラビリティ レベルでは 30 fps を、High スケーラビリティ レベルでは 60 fps をターゲットにします。

4K 出力については、Lumen は Unreal Engine 5 の テンポラル スーパー解像度 (TSR) を使った テンポラル アップサンプリング に依存します。Lumen と他の機能ではより低い内部解像度 (1080p) が使用され、これによって TSR で最高の最終画質が実現します。それ以外の場合、これらの機能を 4K でネイティブにレンダリングするには、30 または 60 fps を達成するためにより低い品質設定が必要になります。

スケーラビリティ設定

レベル エディタのスケーラビリティ設定にアクセスするには、ビューポートの [Settings (設定)] > [Engine Scalability Settings (エンジンの拡張機能設定)] に移動します。ゲーム内では、GameUserSettings とグラフィック設定メニューを使ってスケーラビリティ設定を制御します (例については Lyra プロジェクトを参照)。Lumen の品質は、[Global Illumination (グローバル イルミネーション)][Reflections (反射)] の品質グループによって設定されます。

  • [Cinematic (シネマティック)] - ムービー レンダー キュー をターゲットにするスケーラビリティ レベル。

  • [Epic] - 30 fps コンソール バジェットをターゲットにするスケーラビリティ レベル。

  • [High (高)] - 60 fps コンソール バジェットをターゲットにするスケーラビリティ レベル。

  • [Low (低)] および [Medium (中)] - Lumen 機能が無効になるスケーラビリティ レベル。

Engine Scalability Settings

Unreal Engine では、デフォルトでコンソールで 30 fps をターゲットにします。60 fps をターゲットにするには、コンソールのデバイス プロファイルで [Global Illumination][Reflections] の品質グループを [High] に設定します。これらのプロファイルは「[プロジェクト名]\Platforms[コンソール]\Config\」フォルダにあります。たとえば、「[プロジェクト名]\Platforms\PS5\Config\PS5DeviceProfiles.ini」などです。

60 fps をターゲットとする PlayStation 5 のデバイス プロファイルは次のようになります。

    [PS5 DeviceProfile]
    ; Lumen GI と反射の品質を High に設定して、60 fps をターゲットにします
    +CVars=sg.GlobalIlluminationQuality=2
    +CVars=sg.ReflectionQuality=2

Lumen よりも低くスケール ダウンする

デフォルトの [Global Illumination (グローバル イルミネーション)][Reflections (反射)] の品質グループは「\Engine\Config\BaseScalability.ini」に含まれています。これらの設定では、間接ライティングのルックを異なる品質レベル間で同じようにしようと試みます。これにより、Lumen の負荷をスケール ダウンしながらも、プラットフォームごとにライティングをやり直す必要がない、というメリットを得ることができます。

「Medium (中)」品質レベル

  • 大規模なアンビエント オクルージョンでは、Lumen Global Illumination (Lumen のグローバル イルミネーション)ディスタンス フィールド アンビエント オクルージョン (ディスタンス フィールド アンビエント オクルージョン) に置き換わります。

  • 小規模なアンビエント オクルージョンでは、Screen Space Ambient Occlusion (スクリーン空間アンビエント オクルージョン) が有効になります。

「Low (低)」品質レベル

  • シャドウなしのスカイライトのみが使用されます。

  • スカイライトの強度 (r.SkylightIntensityMultiplier=0.7) が下がり、 品質レベルにより近くなります (スカイライト シャドウが形成されないためです)。

ソフトウェア レイ トレーシング

ソフトウェア レイ トレーシング は Lumen で最も高速なトレーシング方法で、60 fps のゲームに推奨されます。Epic スケーラビリティ レベルでは 詳細トレース が有効になります。このトレースではより高い品質を得ることができますが、パフォーマンス オーバーヘッドも非常に高くなります。トレースは個別のメッシュ ディスタンス フィールドで行われます。このため、パフォーマンスはインスタンスの数と、オーバーラップするインスタンスの数に影響されやすくなります。交差するメッシュの多数のレイヤーを含むキットバッシュを非常に多く使用する場合は、詳細トレースの負荷が大きくなります。ディスタンス フィールド シーンでのレンダリングから個別のディスタンス フィールド インスタンスを除去するには、[Affects Distance Field Lighting (ディスタンス フィールド ライティングに影響を及ぼす)] を無効にします。グローバル イルミネーションや反射に大きな影響を及ぼさない、重要度の低いインスタンスを削除することで、詳細トレースのパフォーマンスを維持しやすくなります。

詳細トレースの場合、ハードウェア レイ トレーシング では、同じようなパフォーマンス負荷でソフトウェア レイ トレーシングよりも高い品質を得ることができます。

High (高)」スケーラビリティ レベルでは詳細トレースが無効になり、Lumen により、個々のメッシュ ディスタンス フィールドではなく、1 つにまとめられたグローバル ディスタンス フィールドがトレースされます。グローバル ディスタンス フィールドをトレースすることで、トレーシング処理がインスタンスの数とインスタンス同士のオーバーラップに影響を受けなくなります。また、これは 60 fps のゲームや、オーバーラップするインスタンスを多く含むコンテンツに非常に適しています。

ハードウェア レイ トレーシング

ハードウェア レイ トレーシングでは Lumen による品質を高めることができます。当社では、コンソールで 30 fps をターゲットとするゲームにこれを推奨しています。ハードウェア レイ トレーシングでは、フレームごとに トップ レベル アクセラレーション構造 (TLAS) をリビルドする必要があります。この負荷は、このアクセラレーション構造に含める必要があるインスタンスの数に比例します。全般的に、次世代コンソールで 30 fps を達成するには、カリング後の レイ トレーシング シーン に 100,000 個未満のインスタンスが必要になります。Microsoft Windows では、このインスタンス数が変わる場合があります。

レイ トレーシング シーンで表示されるインスタンスの数を確認するには、Stat SceneRendering を使用します。「Ray tracing active instances (レイ トレーシングが有効なインスタンス数)」の項目を確認してください。

Stat SceneRendering

レイ トレーシング シーンのカリング設定は、シーン内のレイ トレーシング インスタンスの数を制御するための最も強力なツールです。カリングを有効にするには、「[プロジェクト名]\Config\」フォルダにある「DefaultEngine.ini」コンフィギュレーション ファイルに変更を加えます。

    [SystemSettings]
    r.RayTracing.Culling=3
    r.RayTracing.Culling.Radius=15000
    r.RayTracing.Culling.Angle=0.5

個別のインスタンスをレイ トレーシング シーンから除去するには、レベル内で対象のアクタの [Visible In Ray Tracing (レイ トレーシングで可視化)] を無効にします。

パフォーマンス カウンタやデバッグ表示など、ハードウェア レイ トレーシングのパフォーマンスの詳細については、「レイ トレーシング パフォーマンス ガイド」を参照してください。

[Far Field (ファー フィールド)] では、グローバル イルミネーションと反射の距離を犠牲にすることなく、積極的なカリングが提供されます。すべての光線は、レイ トレーシング シーンの半径を超えるとファー フィールド トレースを使用して、より小さい負荷でグローバル イルミネーションと反射を拡張します。ファー フィールドの設定方法については、「Lumen の技術的詳細」を参照してください。

ファー フィールドを併用してレイ トレーシング シーンのカリングを高めると、Lumen ハードウェア レイ トレーシングのパフォーマンスを最適化してスケール ダウンしやすくなります。

ハードウェア レイ トレーシングのパフォーマンスは、シーン内でメッシュがどれだけオーバーラップしているかに依存します。スカイボックスなど、シーン全体とオーバーラップする大きなメッシュがある場合はパフォーマンスに問題が生じます。このようなメッシュについては、その [Visible In Ray Tracing (レイ トレーシングで可視化)] を無効にしておく必要があります。また、ガラス メッシュと、交差する結合メッシュの複数のレイヤーを含むキットバッシュ メッシュのトレーシング負荷を節約することもできます。

ハードウェア レイ トレーシングを使ったシーンのパフォーマンスを維持するには、オーバーラップするメッシュの量を妥当なレベルに保つ必要があります。

[Hit Lighting for Reflections (反射のヒット ライティング)] では反射の品質を高めることができます。ヒット ポイントごとにマテリアルとライティングが評価されますが、ゲームには負荷が大きくなります。マテリアルが特に重要ではなく、Ray Tracing Quality Switch ノードを使って最適化されている場合を除き、これをゲームに使用することはお勧めしません。コンソールでは、r.Lumen.HardwareRayTracing.MaxIterations を使って BVH トラバース イテレーションの数を制限し、負荷が大きく長い光線を早期に終了することができます。終了した光線は、オーバーオクルージョンを引き起こす、ゼロ放射輝度で完全にオクルードされたものとして扱われます。この設定はパフォーマンスを微調整し、多くのオーバーラップ ジオメトリが含まれるシーンの一部で生じるパフォーマンスの問題を回避するうえで役立ちます。

ヒント

Lumen 反射 の負荷は、画面上にスムーズな (低ラフネスの) マテリアルがどれだけあるかに応じて異なる場合があります。これらのマテリアルには専用の反射光線が必要になります。デフォルトでは、ラフネス値が「0.4」より低いすべてのピクセルが反射光線をトレースします。それより高いラフネス値のピクセルは、Lumen グローバル イルミネーションに応じて、負荷のかからない反射近似値を取得します。

Lumen 反射ラフネスしきい値

ラフネスしきい値は r.Lumen.Reflection.MaxRoughnessToTrace を使って制御できます。この値は、専用の反射光線がトレースされる際に設定されます。このしきい値を超えるラフネス値を含むピクセルは、おおよそのスペキュラ近似値にフォール バックします。フォリッジには独立したラフネスしきい値が含まれます。両面フォリッジ または サブサーフェス シェーディング モデルを使用したマテリアルを含むピクセルは、すべてフォリッジとして扱われます。フォリッジのラフネス値は r.Lumen.Reflections.MaxRoughnessToTraceForFoliage を使って制御できます。

フォリッジ上の反射はよく見えないことがほとんどです。フォリッジの最大ラフネスしきい値を「0」に設定することで、品質を犠牲にせずにパフォーマンスを大幅に向上できる場合があります。

Lumen 反射をスクリーン空間反射に置き換える

Lumen 反射を スクリーン空間反射 (SSR) に置き換えることで、反射の負荷をより積極的にスケール ダウンすることができます。置き換えるには r.Lumen.Reflections.Allow=0 を設定します。たとえば、次のコードを「XSXDeviceProfiles.ini」ファイルに追加することで、Xbox Series S で 1 ミリ秒節約できます。

    [XSX_Lockhart DeviceProfile]
    ; perf に Lumen 反射の代わりに SSR を使用
    +CVars=r.Lumen.Reflections.Allow=0

次の例は、Lumen 反射が無効な場合であっても、Lumen グローバル イルミネーションによって粗いスペキュラが提供される様子を表しています。

Example of Lumen GI Specular with Lumen Reflections disabled.

Lumen 反射によるパフォーマンス向上の一部は、ディフューズ グローバル イルミネーションのためにトレースした光線を再利用したことで得たものです。これによって速度が速くなるのは、ラフネス値が 0.2 ~ 0.4 の範囲にあるピクセルが多く含まれるシーンのみです。これを有効にするには、r.Lumen.Reflections.RadianceCache=1 を使用します。

サーフェス キャッシュ タイルの更新

Lumen Scene Lighting (Lumen シーン ライティング) では、サーフェス キャッシュの直接および間接ライティングを更新します。パフォーマンスは、フレームごとに更新されるサーフェス キャッシュの割合に依存します。r.LumenScene.DirectLighting.MaxLightsPerTiler.LumenScene.Radiosity.UpdateFactor を使用することで、直接ライティングと間接ライティングのフレームごとの更新速度を別々に調整することができます。

Lumen Scene Lighting では、サーフェス キャッシュ タイルごとに最も重要なライトの小さなサブセットを選択します。これにより、シーン内に存在するライトの総数によるパフォーマンスへの影響が少なくなります。タイルごとのライト数は r.LumenScene.DirectLighting.MaxLightsPerTile で制御できます。

Lumen のプロファイリング

Lumen は次の 3 つのパスに分割されます。

  • Lumen Scene Lighting (Lumen シーン ライティング) - サーフェス キャッシュ ライティングを評価します。

  • Lumen Screen Probe Gather (Lumen スクリーン プローブ ギャザー) - ディフューズ グローバル イルミネーションと粗い反射、および透過性グローバル イルミネーションを評価します。

  • Lumen Reflections (Lumen 反射) - スムーズなサーフェス上の専用の反射光線を評価します。

Stat GPU では、個別の Lumen パスを含む GPU パスのタイミングが表示されます。

Stat GPU

パフォーマンスの内訳の詳細を表示するには、ProfileGPU コマンドを使用します。また、RenderDoc といったサードパーティ プロファイリング ツールを使用することもできます。

Lumen ではコンソール上で非同期計算を使用します。これらのタイミングは、r.Lumen.AsyncCompute 0 コンソール コマンドでこれを無効にするまで 0 になります。非同期計算の詳細については、次のセクションを参照してください。

非同期計算

Lumen ではコンソール上で 非同期計算 を使用します。これにより、GPU で非 Nanite ジオメトリ パスと直接ライティング パスを Lumen の作業とオーバーラップさせることができます。さらに、Lumen では Lumen Screen Probe Gather パスと Lumen Reflections パスをオーバーラップさせることができます。

Async compute graphics passes

非同期計算は一般的なワークロードに向けて事前設定済みですが、稀な状況下では、デフォルト設定以外のほうがより速くなることがあります。たとえば、直接ライティングや反射の計算にあまり時間を費やさないシーンでは、非同期計算を無効 (r.Lumen.AsyncCompute 0) にしたほうが高速になる場合があります。直接ライティングの量が少ない場合は、非同期計算パスとして Lumen Scene Lighting を実行する価値があると言えます。これを行うには、次のとおりに設定します。

    r.LumenScene.Lighting.AsyncCompute=1
    r.Lumen.DiffuseIndirect.AsyncCompute=0
    r.Lumen.Reflections.AsyncCompute=0

非同期計算では、Lumen が他のレンダリング パスとオーバーラップするようになります。これによって Stat GPU または ProfileGPU でタイミングを適切にトラックできなくなるため、プロファイリングが難しくなります。完全なレンダリング フレーム時間をプロファイリングして比較する場合や、外部の GPU プロファイリング ツールを使用する際は、非同期計算を無効にしてください。

スケーラビリティの参照

デフォルトのエンジン スケーラビリティとプラットフォームごとのデバイス プロファイルには、個別の Lumen 設定が含まれています。これらは、重要な最新のレンダラ パフォーマンス スケーラビリティ設定の参照として役立ちます。また、これらはカスタム仕様のスケーラビリティ設定のための起点としても有用です。30 fps または 60 fps を達成するためだけでなく、レベル間での一貫したルックを実現するうえで、このデフォルトのスケーラビリティ レベルを使用することを推奨します。これらのスケーラビリティ設定は、次のファイルのいずれかで確認できます。

    [Engine Root]\Engine\Config\BaseScalability.ini
    [Engine Root]\Platforms[Console Name]\Base[ConsoleName]DeviceProfile.ini

以下の表には、それぞれの設定の説明と、各スケーラビリティ レベルで使用される事前設定されたステートが示されています。

全般

設定名

High

Epic

Cinematic

説明

r.Lumen.TraceMeshSDFs.Allow

0

1

1

ソフトウェア レイ トレーシング詳細トレース を有効にします。詳細トレースには、個別のメッシュのディスタンス フィールドをトレースすることで大きなパフォーマンス負荷が伴いますが、品質が向上します (特にサーフェス キャッシュの直接ライティング品質)。

Lumen Scene Lighting (Lumen シーン ライティング)

Lumen シーン ライティングのパフォーマンスは、フレームごとに更新されるサーフェス キャッシュの割合に依存します。また、透過性グローバル イルミネーション ボリュームの解像度にも依存します。

設定名

High

Epic

Cinematic

説明

r.LumenScene.DirectLighting.UpdateFactor

32

32

32

フレームごとに直接ライティングが更新されるサーフェス キャッシュ領域の割合。値を高く設定するとパフォーマンスが向上しますが、ライティングの変更の反応が遅くなります。

r.LumenScene.Radiosity.UpdateFactor

64

64

64

フレームごとに間接ライティングが更新されるサーフェス キャッシュ領域の割合。値を高く設定するとパフォーマンスが向上しますが、ライティングの変更の反応が遅くなります。

r.LumenScene.Radiosity.ProbeSpacing

8

4

4

サーフェス キャッシュの間接ライティング プローブ間の間隔。値を低く設定すると、サーフェス キャッシュ内の間接ライティングの空間解像度が向上しますが、パフォーマンスが低下します。

r.LumenScene.Radiosity.HemisphereProbeResolution

3

4

4

サーフェス キャッシュ間接ライティング プローブの解像度。

r.Lumen.TranslucencyVolume.GridPixelSize

64

32

32

透過性グローバル イルミネーション ボリュームの解像度を制御します。

Screen Probe Gather (スクリーン プローブ ギャザー)

グローバル イルミネーションのパフォーマンスは、内部レンダリング解像度とスクリーン プローブ トレース解像度に依存します。

設定名

High

Epic

Cinematic

説明

r.Lumen.ScreenProbeGather.RadianceCache.ProbeResolution

16

32

32

放射輝度キャッシュ プローブごとのトレース数を制御します。値を高く設定すると、パフォーマンスと引き換えに品質が向上します。

r.Lumen.ScreenProbeGather.RadianceCache.NumProbesToTraceBudget

300

300

1000

フレームごとに更新される放射輝度キャッシュ プローブの数。値を高く設定すると、パフォーマンスと引き換えに品質が向上します。

r.Lumen.ScreenProbeGather.DownsampleFactor

32

16

8

内部レンダリング解像度とは別に、グローバル イルミネーションのダウンサンプリングを可能にします。

r.Lumen.ScreenProbeGather.TracingOctahedronResolution

8

8

16

プローブごとに完了するトレースの数を定義します。値を高く設定するとトレーシングが遅くなりますが、グローバル イルミネーションの品質は向上します。

r.Lumen.ScreenProbeGather.TwoSidedFoliageBackfaceDiffuse

0

1

1

両面フォリッジ および サブサーフェス シェーディング モデルの背面に沿ってライティングを収集 (ギャザー) するかどうかを設定します。

r.Lumen.ScreenProbeGather.ScreenTraces.HZBTraversal.FullResDepth

0

1

1

スクリーン空間トレースでフル解像度深度をサンプリングするかどうかを設定します。有効に設定するとスクリーン空間トレースの精度が高まりますが、パフォーマンスが低下します。

r.Lumen.ScreenProbeGather.ShortRangeAO

1

1

1

グローバル イルミネーションに追加された小規模のアンビエント オクルージョンを制御します。これを無効にしてパフォーマンスをさらに高めることはできますが、コンタクト シャドウのビジュアル ディテールが一部失われます。

反射

Lumen 反射 のパフォーマンスは、専用の反射光線の数に依存します。光線は、指定したしきい値を下回るラフネス値を含むピクセルからトレースされます。パフォーマンスに関する別の重要な要素として、内部レンダリング解像度と反射解像度があります。

設定名

High

Epic

Cinematic

説明

r.Lumen.Reflections.DownsampleFactor

2

1

1

内部レンダリング解像度とは別に、反射をダウンサンプリングするかどうかを設定します。

r.Lumen.Reflections.MaxRoughnessToTrace

0.4

0.4

0.4

専用の反射光線をトレースする最大ラフネス値。

r.Lumen.Reflections.MaxRoughnessToTraceForFoliage

0.2

0.4

0.4

フォリッジ上の専用の反射光線をトレースする最大ラフネス値。

r.Lumen.TranslucencyReflections.FrontLayer.Allow

0

1

1

透過性における高品質な反射を、ポスト プロセス ボリュームから有効にすることを許可するかどうか設定します。

r.Lumen.TranslucencyReflections.FrontLayer.Enable

0

0

1

透過性における高品質な反射をデフォルトで有効にするかどうかを設定します。

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
キャンセル