Lumen では、グローバル イルミネーション、不透明型マテリアルおよび透過マテリアルへの反射、ボリュメトリック フォグに対して、1080p の 4ms および 8ms のフレーム バジェットで、コンソールで 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 機能が無効になるスケーラビリティ レベル。
Unreal Engine では、デフォルトでコンソールで 30 fps をターゲットにします。60 fps をターゲットにするには、コンソールのデバイス プロファイルで [Global Illumination] と [Reflections] の品質グループを [High] に設定します。これらのプロファイルは、「[プロジェクト名]\Platforms[コンソール]\Config\
」フォルダに入っています。たとえば、「[プロジェクト名]\Platforms\PS5\Config\PS5DeviceProfiles.ini
」です。
60 fps をターゲットとする PlayStation 5 のデバイス プロファイルは次のようになります。
[PS5 DeviceProfile]
; Set Lumen GI and reflection quality to High, targeting 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 で最も高速なトレーシング方法で、ハードウェア レイ トレーシングを実行できないゲームや、ハードウェア レイ トレーシングをサポートしていない GPU のフォールバックとして推奨されます。
Epic スケーラビリティ レベルでは 詳細トレース が有効になります。このトレースではより高い品質を得ることができますが、パフォーマンス オーバーヘッドも非常に高くなります。トレースは個別のメッシュ ディスタンス フィールドで行われます。このため、パフォーマンスはインスタンスの数と、オーバーラップするインスタンスの数に影響されやすくなります。交差するメッシュの多数のレイヤーを含むキットバッシュを非常に多く使用する場合は、詳細トレースの負荷が大きくなります。ディスタンス フィールド シーンでのレンダリングから個別のディスタンス フィールド インスタンスを除去するには、[Affects Distance Field Lighting (ディスタンス フィールド ライティングに影響を及ぼす)] を無効にします。グローバル イルミネーションや反射に大きな影響を及ぼさない、重要度の低いインスタンスを削除することで、詳細トレースのパフォーマンスを維持しやすくなります。
詳細トレースの場合、ハードウェア レイ トレーシング では、同じようなパフォーマンス負荷でソフトウェア レイ トレーシングよりも高い品質を得ることができます。
「High (高)」スケーラビリティ レベルでは詳細トレースが無効になり、Lumen により、個々のメッシュ ディスタンス フィールドではなく、1 つにまとめられたグローバル ディスタンス フィールドがトレースされます。グローバル ディスタンス フィールドをトレースすることで、トレーシング処理がインスタンスの数とインスタンス同士のオーバーラップに影響を受けなくなります。また、これはオーバーラップするインスタンスを多く含むコンテンツに非常に適しています。
ハードウェア レイ トレーシング
ハードウェア レイ トレーシングでは Lumen による品質を高めることができ、30 fps と 60 fps の両方のコンソールでデフォルト オプションとして推奨されます。ただし、ソフトウェア レイ トレーシングよりもコストがかかり、大量のインスタンスのオーバーラップに非常に敏感なため、シーンの最適化は慎重に行う必要があります。
ハードウェア レイ トレーシングでは、フレームごとに トップ レベル アクセラレーション構造 (TLAS) をリビルドする必要があります。この負荷は、このアクセラレーション構造に含める必要があるインスタンスの数に比例します。全般的に、次世代コンソールで十分なパフォーマンスを達成するには、カリング後の レイ トレーシング シーン に 100,000 個未満のインスタンスが必要になります。Microsoft Windows では、このインスタンス数が変わる場合があります。
レイ トレーシング シーンで表示されるインスタンスの数を確認するには、Stat SceneRendering
を使用します。「Ray tracing active instances (レイ トレーシングが有効なインスタンス数)」の項目を確認してください。
レイ トレーシング シーンのカリング設定は、シーン内のレイ トレーシング インスタンスの数を制御するための最も強力なツールです。レイ トレーシングのカリングは、設定を簡素化するためデフォルトで有効になっていますが、「[プロジェクト名]\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 反射ラフネスしきい値
ラフネスしきい値は、[Post Process Volume (ポストプロセス ボリューム)] の [Max Roughness To Trace (トレースする最大ラフネス)] 設定を使用して制御できます。r.Lumen.Reflections.MaxRoughnessToTraceClamp
を使用して、スケーラビリティ設定からクランプすることもできます。設定されているしきい値を下回るラフネス値を含むピクセルは、専用の Lumen 反射 光線をトレースし、このしきい値を超えるラフネス値を含むピクセルは、負荷のかからないおおよそのスペキュラ近似値にフォール バックします。
フォリッジには独立したラフネスしきい値が含まれます。両面フォリッジ または サブサーフェス シェーディング モデルのマテリアルを含むピクセルは、すべてフォリッジとして扱われます。フォリッジのラフネス値は r.Lumen.Reflections.MaxRoughnessToTraceForFoliage
を使って制御できます。専用の反射光線を必要とするピクセルは、[View Modes (表示モード)] メニューにある [Level Viewport (レベル ビューポート)] の [Performance Overview (パフォーマンスの概要)] 表示モードを使用して視覚化できます。
フォリッジ上の反射はよく見えないことがほとんどです。フォリッジの最大ラフネスしきい値を「0」に設定することで、品質を犠牲にせずにパフォーマンスを大幅に向上できる場合があります。
Lumen 反射をスクリーン空間反射に置き換える
Lumen 反射を スクリーン空間反射 (SSR) に置き換えることで、反射の負荷をより積極的にスケール ダウンすることができます。置き換えるには r.Lumen.Reflections.Allow=0
を設定します。たとえば、次のコードを「XSXDeviceProfiles.ini
」ファイルに追加することで、Xbox Series S で 1 ミリ秒節約できます。
[XSX_Lockhart DeviceProfile]
; Use SSR in lieu of Lumen reflections for perf
+CVars=r.Lumen.Reflections.Allow=0
次の例は、Lumen 反射が無効な場合であっても、Lumen グローバル イルミネーションによって粗いスペキュラが提供される様子を表しています。
Lumen 反射によるパフォーマンス向上の一部は、ディフューズ グローバル イルミネーションのためにトレースした光線を再利用したことで得たものです。これによって速度が速くなるのは、ラフネス値が 0.2 ~ 0.4 の範囲にあるピクセルが多く含まれるシーンのみです。これを有効にするには、r.Lumen.Reflections.RadianceCache=1
を使用します。
サーフェス キャッシュ タイルの更新
Lumen Scene Lighting (Lumen シーン ライティング) では、サーフェス キャッシュの直接および間接ライティングを更新します。パフォーマンスは、フレームごとに更新されるサーフェス キャッシュの割合に依存します。r.LumenScene.DirectLighting.MaxLightsPerTile
と r.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 パスのタイミングが表示されます。
パフォーマンスの内訳の詳細を表示するには、ProfileGPU
コマンドを使用します。また、RenderDoc といったサードパーティ プロファイリング ツールを使用することもできます。
Lumen ではコンソール上で非同期計算を使用します。これらのタイミングは、r.Lumen.AsyncCompute 0
コンソール コマンドでこれを無効にするまで 0 になります。非同期計算の詳細については、次のセクションを参照してください。
非同期計算
Lumen ではコンソール上で 非同期計算 を使用します。これにより、GPU で非 Nanite ジオメトリ パスと直接ライティング パスを Lumen の作業とオーバーラップさせることができます。さらに、Lumen では Lumen Screen Probe Gather パスと Lumen Reflections パスをオーバーラップさせることができます。
非同期計算は一般的なワークロード向けに事前設定済みですが、状況によって、デフォルト設定以外のほうがより速くなることがあります。そのような状況の 1 つに、Lumen Screen Probe Gather (Lumen スクリーン プローブ ギャザー) パスが、グラフィック キュー上の大量の直接ライティングやシャドウ マップの作業により、Lumen Reflections (Lumen の反射) パスとオーバーラップできないことがあります。この場合、Lumen を完全に非同期計算パスとして実行するほうが有益となる可能性があります。これを行うには、次のとおりに設定します。
r.LumenScene.Lighting.AsyncCompute=1
r.Lumen.DiffuseIndirect.AsyncCompute=1
r.Lumen.Reflections.AsyncCompute=1
非同期計算では、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.MaxRoughnessToTraceClamp |
1.0 | 1.0 | 1.0 | プロジェクトとポストプロセス ボリュームの最大ラフネス設定は、この値にクランプされます。これにより、設定のスケーラビリティから専用の反射光線の数の制御が可能になります。 |
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 | 透過性における高品質な反射をデフォルトで有効にするかどうかを設定します。 |