GPU Lightmass グローバル イルミネーション

事前計算されたライティング データを生成する GPU ベースのシステムについて学びます。

Windows
MacOS
Linux

GPU Lightmass (GPULM) は、可動性がステイショナリーまたはスタティックに設定されたライトからの複雑なライトの相互作用を事前計算するライト ベイク ソリューションです。計算されたデータは、生成された、シーンのジオメトリに適用するライトマップ テクスチャに格納します。テクスチャにライティングをベイクするこのシステムは、CPU ベースの Lightmass グローバル イルミネーション システムに類似していますが、GPU を使用してライティング データの生成とビルドを行うので、DirectX 12 (DX12) と Microsoft の DXR フレームワークを使って最新のレイトレーシング機能を活用できます。

GPULM を使用すると、複雑なシーンのライティング データの計算、ビルド、生成にかかる時間が大幅に短縮され、CPU ベースの Lightmass で Swarm を使用して分散ビルドを行う際のスピードに匹敵するパフォーマンスを実現できます。さらに、GPULM では、シーンの編集やライティングの再計算と再ビルドをその場で行うことができるインタラクティブ性を備えた新しいワークフローが用意されています。このワークフローは、CPU ベースの Lightmass システムでは不可能です。

GPU Lightmass を有効にする

プロジェクトで GPU Lightmass を有効にする手順は以下のとおりです。

  1. [Edit (編集)] > [Plugins (プラグイン)] メニューから [Plugins (プラグイン)] タブを開きます。[Built-in] > [Editor] カテゴリで、[GPU Lightmass]** を見つけて有効にします。

    GPU Lightmass plugin in the Plugins tab

  2. [Edit] > [Project Settings (プロジェクト設定)] メニューから [Project Settings (プロジェクト設定)] ウィンドウを開きます。

    1. [Engine (エンジン)] > [Rendering (レンダリング)] カテゴリで、以下を有効にします。

      1. Ray Tracing > Ray Tracing

      2. Virtual Textures > Enable Virtual Texture Support

      3. Virtual Textures > Enable Virtual Texture Lightmaps

    2. [Platforms (プラットフォーム)] > [Windows] カテゴリで、以下を設定します。

      1. Targeted RHIs > Default RHI:DirectX 12

  3. これらの変更を反映するために、エディタを 再起動 します。

GPU Lightmass を設定するための追加要件

プロジェクトで GPU Lightmass を最適に機能させるための追加の推奨事項を以下に示します。

リアルタイム レイトレーシング機能を無効にする

レイトレーシング機能には、DirectX 12 とレイトレーシングに対応した NVIDIA GPU を備えた Windows 10 開発環境が必要です。 詳細は、 レイトレーシング 機能に関するドキュメントで要件の一覧を参照してください。

GPU Lightmass はレイトレーシングに Microsoft の DXR API を利用します。これには、DirectX 12 が必要です。GPU Lightmass が機能するにはレイトレーシングが必要ですが、レイトレーシング シャドウ、アンビエント オクルージョン、リフレクションなど、デフォルトで有効になっている追加のレイトレーシング機能は必要ありません。次のコンソール コマンドを使ってこれらの機能すべてを無効にすることをお勧めします。

r.RayTracing.ForceAllRayTracingEffects 0 

または、プロジェクトでこれを設定し、プロジェクトのコンフィグ ファイルに置かれているプロジェクトの DefaultEngine.ini コンフィギュレーション ファイルにそれらを追加して、すげてのレイトレーシング機能を無効にすることもできます。[/Script/Engine.RendererSettings] セクションに以下を追加します。

[/Script/Engine.RendererSettings]
r.RayTracing.ForceAllRayTracingEffects=0

GPU メモリを設定する

GPULM では、オーバーヘッドを考慮して十分な GPU メモリを利用できる必要があります。それを念頭に、GPULM を使用して複雑なシーンを上手にベイクするためには、以下の要素が影響します。

  • 最低 (つまり最高品質) の詳細度 (LOD) メッシュでメモリにシーン全体を格納できる十分な GPU メモリが必要です。

    GPULM では現在、ベイク時に LOD を考慮していません。詳細については、このページの「GPU Lightmass の制限事項」セクションを参照してください。

  • バーチャル テクスチャ システムが、ライトのビルド中に多大なメモリ使用を必要とする可能性があります。メモリ使用量は、シーンの複雑さやサイズに応じて大きく異なります。

  • 生成されたライトマップすべてを RAM に格納できる十分な CPU メモリが必要です。GPU は、ライトマップを CPU の RAM に入れ替えることができますが、ライトのベイク全体が完了するまで、ライトマップはディスクに保存されません。

  • 一般的に、DX12 は DX11 よりも多くの GPU を使用します。DX11 の制限ギリギリまで GPU メモリを使用するシーンがある場合は、レイトレーシングやバーチャル テクスチャの要件からオーバーヘッドが追加で生じるため、何らかの犠牲を払わなければ、DX12 で使用するのは困難かもしれません。

  • GPULM には、 Irradiance Cache などのオプション設定に関する独自のメモリ使用要件があります。

CPU ベースのLightmass システムでは、大規模なシーンに大量のメモリが必要で、ライトのベイクを行う際に問題が生じる可能性があります。多くの場合、Swarm を使用して分散ビルドを行うことで、このタイプの問題を軽減できます。GPULM を使用する場合、現在はメモリ不足に対する唯一の解決策は、ジオメトリまたはテクスチャの詳細を減らしてシーンを最適化するか、メモリの多い GPU にアップグレードすることです。

エディタ内のプレビューにバーチャル テクスチャ ライトマップを使用する

バーチャル テクスチャ (VT) システムのバーチャル テクスチャ ライトマップを有効にすると、ライトマップを生成して、バーチャル テクスチャとして保存できます。これを行うと、ライトをビルドしてレベル ビューポートでリアルタイムに更新できるというメリットもあります。さらに、シーンのビルド中に編集ができるため、ビルドのキャンセルや、ビルド完了の待機をしなくてもよくなります。

GPULM では、ライトをビルドするだけならバーチャル テクスチャ システムを有効にする必要はありませんが、インタラクティブにリアルタイムで編集するためには有効にする必要があります。プロジェクトでバーチャル テクスチャを使用する意思がない場合や、インタラクティブなプレビューが不要な場合は、バーチャル テクスチャを有効化せずに、エディタでの作業中にある程度のオーバーヘッドを節約できます。

GPU Lightmass の使用

GPULM には、レベル エディタのツールバーで [Build (ビルド)] ドロップダウンの [GPU Lightmass (GPU Lightmass )] を選択してアクセスできる独自のパネルがあります。

Toolbar Build dropdown showing GPU Lightmass option

GPULM パネルは、他のパネルと同様、エディタ内にドッキングできます。

GPU Lightmass panel docked

設定を構成したら、 [Build Lighting (ライティングをビルド)] をクリックしてベイクを開始します。

GPU Lightmass panel build button

GPU Lightmass のベイク モード

GPULM には、ライティングをベイクするモードが 2 つあります。Full Bake モードと Bake What You See (BWYS) モードです。

GPU Lightmass bake mode dropdown

  • Full Bake モードは、ライティングの計算とビルド時に、シーン内のすべてのオブジェクトをフル ライトマップ解像度でレンダリングします。この結果は、ビルドが完了するまで表示できません。

  • Bake What You See モードは、柔軟性が高く、シーン全体ではなく、ビューポート内の可視オブジェクトだけのライティングをビルドします。また、ビューポートのリアルタイム モードが有効な場合、ライティングのビルド プロセス中に変更が加えられたらライティングを再計算するインタラクティブ性も備えています。

これらのベイク モードは両方ともビューに依存しています。つまり、いずれもビュー内のオブジェクトを優先してから、シーン内の他のオブジェクトに移動します。

Full Bake モードで GPULM で使用するフローは以下のとおりです。

  • シーン内のすべてのオブジェクトを考慮する。現在のビュー内のオブジェクトを優先する。

  • ライティングはオブジェクトのフル ライトマップ解像度でテクスチャ スペースにベイクされ、完成したライトマップ タイルは、表示を更新するためにバーチャル テクスチャ システムに送られる。

  • すべてのオブジェクトの計算とライトマップのレンダリングが完了したら、エンコードが行われ、データが自動的に保存される。

Bake What You See モードでは、ライティングの計算 (再計算) 結果をリアルタイムで反映できるため、シーン内での作業をインタラクティブに、非破壊的な方法で行うことができます。これにより、ライティングがアクティブに作用しているシーンのエリアをその場で調整できます。このインタラクティブ性により、ライトのビルド ワークフローは、以下のように BWYS のワークフローとは異なります。

  • ランタイムバーチャル テクスチャ システムによって、画面上での解決に必要なミップマップ レベルで可視タイルが判断されます。

  • カメラ ビュー内の各タイルの解決されたミップマップ解像度でライティングがテクスチャ空間にベイクされます。

  • BWYS モードでは、すべての画面上のタイルの処理が完了したらシーンまたはビューポート カメラの更新を無限に待機します。

  • [Save (保存)] ボタンをクリックすると、最終的なライトマップのエンコードを開始します。結果を保存する場合、完成したライティング ビルドはシーン用に生成されたものではありません。画面上に表示されているシーンの部分だけにライティング データが準備され、格納、保存されます。

  • [Save] ボタンをクリックしても、ライティングのベイクは終了しません。その時点までに生成されたエンコード済みライトマップ データのみが保存されます。処理を停止するには、代わりに、 [Cancel (キャンセル)] をクリックします。

インタラクティブなベイク

Full Bake モードと BWYS モードの両方でインタラクティブなベイクが簡単に可能です。インタラクティブなベイクでは、現在のカメラ ビューにマッピングされて表示されているバーチャル テクスチャ タイルが優先され、カメラが移動したら、優先する対象がその時点のビューに含まれるタイルに変更されます。インタラクティブなベイクは両方のライト ベイク モードで使用されますが、これが特に有用なのは BWYS モードで使用する場合です。

BWYS モードを開始すると、ライティングのビルドが始まります。ビルドが完了するのは、手動で停止した場合のみです。このモードでは、カメラ ビュー内のオブジェクトのみを考慮してライティングをビルドします。シーン内でのカメラの移動、位置の変更、シーン内のオブジェクトの追加や削除、シーンのアクタのプロパティ変更を行うと、ライティングがリアルタイムで再計算されます。このモードではライティング結果を手動で保存する必要があるため、過去にシーンのライティングをビルドしたことがある場合に有効な非破壊的な方法です。

GPU Lightmass のスピード モードの使用

GPULM のメリットの 1 つは、ライトのベイク中にバーチャル テクスチャを活用することです。これにより、エディタのビューポートにライティングがリアルタイムでビルドされ、表示されます。また、同時にシーンを編集している場合に徐々に処理を進め、それに応じてシーンのライティングを更新します。リアルタイムでエディタ内プレビューを使用することの欠点は、表示される結果を更新するためにシーンのフレームを再レンダリングするためのオーバーヘッドが追加で生じることです。このオーバーヘッドを無効にすることで、GPU を解放し、より効率的かつ高速な処理が可能になります。

レベル ビューポートの [Realtime (リアルタイム)] トグルで、GPULM の処理速度を制御できます。速度は 2 つあり、オン にすると 低速 モードを使用してリアルタイムでフレームをレンダリングする際にオーバーヘッドが追加で生じます。 オフ にすると、リアルタイムのオーバーヘッドがなくなり、ライティングのレンダリングが非常に高速になります。

[Realtime] モードのオン/オフを切り替えるには、 レベル ビューポート の左上隅にあるドロップダウン メニューを使用するか、キーボード ショートカット Ctrl + R を使用します。

level viewport real time toggle

ビューポートのリアルタイム モード トグルに加えて、GPULM の独自設定には高速および低速モードのビルド速度を制御できる設定があります。

GPU Lightmass build speed settings

  • [Slow Mode Speed] は、ビューポートで Realtime モードが オン に設定されている場合に、ライティングのビルド速度を改善できる乗数です。設定値が高すぎると、多数のジオメトリが含まれるシーンではエディタが応答しなくなるおそれがあります。

  • [Full Speed] は、Realtime モードが オフ の場合にライティングのビルド速度を改善できる乗数です。

これらの Speed オプションを使用しても、すぐにビルド速度が速くなるとはかぎりません。注意して使用してください。乗数は、GPU に送信される処理のチャンク サイズを決定します。このサイズの効果は、GPU の最終速度を決定する多くの要素の 1 つにすぎません。たとえば、 [Full Speed] の値を増やしても、プロジェクトによっては高速なベイクが低速になる場合があります。あらゆる状況に当てはまる、確かな設定の規則はありません。

GPU Lightmass 設定

GPU Lightmass の設定のほとんどは、専用パネルに用意されています。

GPU Lightmess panel

プロパティ

説明

General (一般)

Show Progress Bars

オンにすると、レンダリング時に各タイルに緑色の進捗バーが描画されます。赤色のバーは、 First Bounce Ray Guiding が進行中であることを示します。非常に明るいシーンでは、露出が低くなってバーが黒く見える場合があります。

Mode

開発ニーズに適したベイク モードを選択します。

  • Full Bake: このモードは、シーン内のすべてのオブジェクトをフル ライトマップ解像度でレンダリングします。

  • Bake What You See: このモードは、バーチャル テクスチャ システムによって決定されたミップ レベルでビュー内のオブジェクトのバーチャル テクスチャ タイルのみをレンダリングします。カメラを移動すると、レンダリングされるタイルを増やすことができます。このモードは、 [Save] ボタンを押した場合にのみ結果を保存します。

Denoise

有効にすると、CPU でレンダリング後にノイズ削減が行われます。ライトマップ ベイクのノイズ削減を行うタイミングを次から選択します。

  • None: ライトマップのノイズ削減をまったく行いません。

  • On Completion: ベイクの終了時にライトマップ全体のノイズ削減を行います。

  • During Interactive Preview: 各タイルのベイク終了時にノイズ削減を行います。シーンの一部をプレビューする場合に便利ですが、効率的ではありません。

Global Illumination

GI Samples

サーフェスに対するすべてのバウンスの、1 テクセル当たりに実行されるレイ パスの合計数。ノイズ削減を使用してアーティファクトのない結果となる最低値を設定する必要があります。

Stationary Light Shadow Samples

モビリティが [Stationary (ステイショナリー)] に設定されたライトで使用するサンプル数。シャドウはグローバル イルミネーションとは別に計算、保存されます。

Use Irradiance Caching

グローバル イルミネーション強度の物理的な正確性を高めるには、インテリア シーンでこの設定を (ある程度のバイアスを使用して) 有効にします。有効にしない場合、期待よりも暗い結果になる可能性があります。エクステリア シーンでは無効にする必要があります。

Use First Bounce Ray Guiding

Use Irradiance Caching が有効の場合、このオプションでは最初のバウンド サンプルごとに半球を検索して最も明るい方向を見付け、残りのサンプルに重みを付けます。これにより、ある種の光源 (窓など) を持つインテリア シーンの結果が向上します。このパスの品質は、 [Trial Samples] 設定で制御します。

Irradiance Caching

Quality

放射キャッシュ セル 1 つ当たりのサンプル数。

Size

各放射キャッシュ セルのサイズ。サイズを小さくすると、速度は低下しますが正確性が向上します。

Corner Rejection

コーナー周りの放射キャッシュ エントリの拒否を詳細に制御します。光漏れやアーティファクトの発生を減らすうえで役立ちます。

Debug:Visualize

有効にすると、放射キャッシュ セルが表示されます。放射キャッシュ セルのサイズと品質を設定する際に便利です。非常に明るいシーンでは、露出が低くなってセルが黒く表示される場合があります。

First Bounce Ray Guiding

Trial Samples

ライティングのサンプリング前に照射される、 First Bounce Ray Guiding に使用するサンプル数。

System

Slow Mode Speed

ビューポートで Realtime モードが有効な場合に、この乗数を使用してベイク速度を制御します。

Full Speed

ビューポートで Realtime モードが無効な場合に、この乗数を使用してベイク速度を制御します。

Lightmap Tile Pool Size

GPU Lightmass によって計算用に管理される可視タイルのプール。このプール サイズは、ビューポートのサイズと画面上に一度に表示するタイル数に応じて設定します。プール サイズを大きくすると、GPU メモリ使用量が増えます。

GPU lightmass panel world setting

[World Settings (ワールドセッティング)] パネルにあるLightmass 設定のうち、CPU ベースのLightmass システムのLightmass 設定を引き継いでいるのは [Volumetric Lightmap Detail Cell Size (ボリュメトリックライトマップの詳細なセルサイズ)] だけです。これは、シーン内のジオメトリに関して最大密度におけるボリュメトリック ライトマップ ボクセルのサイズを設定します。ボクセルのサイズを小さくすると、ライティングのビルドにかかるかかる時間とメモリ使用量が増加します。場合によっては、メモリ使用量が最大 8 倍に増加します。

ライトマップ UV と解像度を設定する

ライティングのベイクでは、各スタティック メッシュが独自のライトマップ UV を持ち、UV チャート (別名:UV アイランド) がすべて 0 ~ 1 のテクスチャ空間に含まれ、重なったり、折り返したりしている部分がない必要があります。これにより、ライティングの計算時に不適切なライトマップ UV の結果からアーティファクトが発生しなくなります。

Unreal Engine でのライトマップ UV の設定と生成についての詳細は、次のページを参照してください。

適切なライトマップ UV を設定することが、オブジェクトのジオメトリに高品質のライトをベイクする最初の一歩です。次に重要なのが、ジオメトリに適用されるライトマップ テクスチャに、必要なライトとシャドウの詳細をすべてキャプチャできる十分な解像度があることです。これは、必要に応じてオブジェクトごとにライトマップ解像度を変更するという意味です。これは、次のいずれかの方法で行うことができます。

  • スタティック メッシュ エディタ でオブジェクトの [Light Map Resolution (ライトマップ解像度)] を設定します。

    static mesh editor light map resolution setting

  • シーンで スタティック メッシュ アクタ を選択し、[Lighting (ライティング)] カテゴリ設定の [Details] パネルで、 Overridden Light Map Res プロパティを使用し、その個別のアクタに新しいライトマップ解像度を設定します。

    Overriden light map res property in details panel

ライトのバウンス回数を制御する

どのようなシーンにおいても、ライトのバウンス回数は制御できません。代わりに、GPULM では ロシアン ルーレット アルゴリズムを使用します。このアルゴリズムでは、さまざまな確率と重み付けの計算を考慮して、キャストされたレイのバウンス回数を決定します。これは、シーンの間接ライティングとイルミネーションに寄与している可能性の低いライトのバウンスは、打ち切られる可能性が高いということでもあります。

GPULM の GI Samples プロパティは、各テクセル (テクスチャ マップ内のピクセル) においてパスのトレース対象となるセグメント (空間サンプルとバウンス セグメントを含む) の最大数を制御します。GI Samples の値を増やすと、空間サンプル数と (潜在的に) 深度サンプル数の両方が増えます。

ノイズ削減オプションを選択する

GPULM では、 Intel の Open Image Denoise ライブラリ で提供されているノイズ削減メソッドを使用してノイズを削除し、最終的なライトマップ レンダリングの結果を滑らかにしています。

ライティングのベイクのノイズ削減方法を検討する際には、3 つのオプションがあります。オプションは [Denoise] ドロップダウンを使用して選択します。

GPU Lightmass denoise setting options dropdown

  • None:ライティングのレンダリングにノイズ削減を何も適用しません。このオプションは、当該シーンで使用する GI Samples の数を判断するときに便利です。たとえば、ノイズ削減によってアーティファクトが発生することに気付いたら、サンプル数や Irradiance Cache、First Bounce Ray Guiding などの設定値を増やすと、より質の高い入力値をノイズ削減に指定できます。

  • On Completion:ライティングのレンダリングにノイズ削減を何も適用しません。ライティングのビルド終了時に、シーンのライトマップ全体のノイズ削減を行います。

  • During Interactive Preview:各バーチャル テクスチャ タイルのレンダリング完了時にノイズ削減を行います。最終的な結果を素早く確認するには便利ですが、各タイルのデータを GPU から CPU に転送してノイズを削減し、GPU に戻して表示することになるため、効率的ではありません。

以下に、完了したライティングのビルドにノイズ削減を適用した場合と適用しない場合の比較を示します。

ノイズ削減無効

ノイズ削減を最終結果に適用

GPU Lightmass の制限事項

以下に、現在の GPULM 実装に関する既知の制限事項を示します。これは制限事項を網羅したものではなく、コア機能のサポートに関する大まかなアイディアを提供するためのものです。多くは今後の Unreal Engine のリリースで解決される見込みですが、このリストの一部は解決されない可能性があることに留意してください。

機能

サポート (はい/いいえ/一部)

説明

分散ベイク

いいえ

現時点で、GPULM で Swarm Agent による分散ベイクをサポートする予定はありません。現在の戦略は、複数の GPU をサポートし、その GPU のパワーとメモリを活用することが中心です。

半透明シャドウ

いいえ

現時点で、半透明シャドウはレイトレーシング機能セットの一般的な制限事項です。この制限事項は、Unreal Engine の今後のリリースで対処される予定です。

ワールド位置オフセット

いいえ

ピクセル深度オフセット

いいえ

GPULM ではピクセル深度オフセット (PDO) を考慮しません。PDO を使用すると、ライティングが不連続になるおそれがあるからです。

固定スカイ ライト

いいえ

Unreal Engine の今後のリリースでサポートが予定されています。

シーンのライト数

ライト数には 256 というハード リミットがあります。これは、GPULM で利用するレイトレーシング機能の制限事項です。レイトレーシング機能の「多くのライト」戦略によって、この制限は解消されます。

ライティング チャンネル

いいえ

ライトのカスタム設定とプロパティ

いいえ

ライトに関する以下の設定はまだ GPULM でサポートされていません。

  • 非逆 2 乗フォールオフ

  • IES プロファイル

  • ライト関数

  • 間接ライティングの強度

  • ソース テクスチャ (矩形ライト上)

  • バーンドアの角度と長さ (矩形ライト上)

これらの設定のうちいくつかは、 固定 ライトと一緒に部分的に使用できます。ベイクされた GI ではこの機能はサポートしていませんが、ライトからの動的直接ライティングはサポートする予定です。

事前計算されたアンビエント オクルージョン

いいえ

Lightmass ポータル

いいえ

これは、GPULM の First Bounce Ray Guiding プロパティで部分的に処理されます。

Lightmass インポータンス ボリューム

一部

これらのボリュームの用途は、シーンのエリア間の区別による品質制御ではなく、ボリュメトリック ライトマップの配置の決定です。

ボリュメトリック ライトマップ

はい

GPULM で有効です。ボリュメトリック ライトマップの配置は、レベルのLightmass インポータンス ボリュームを使用して行うことができますが、必須ではありません。GPULM では、[World Settings] > [Lightmass] カテゴリの [Volumetric Lightmap Detail Cell Size] の設定が使用されます。ボリュメトリック ライトマップは必ず、Bake What You See モードを使用している場合でも、フル解像度でレンダリングされます。

LOD (詳細度) メッシュ

一部

LOD のサポートは限定的です。Unreal Engine の自動生成 LOD を使用して生成された LOD のみがサポートされます。全てで同じライトマップ UV を共有するというのが GPULM の要件だからです。これは、LOD がエンジンで生成された場合のみ強制できます。

Lightmass のワールド設定とオブジェクト単位の設定

いいえ

CPU ベースのワークフロー向けにLightmass の結果を微調整する設定は多数あります。それらの設定のほとんどは GPULM では使用されませんが、GPULM に同等の機能や設定は用意されていません。

追記

GPU のタイムアウト検出の削減とクラッシュを復元する

複雑なシーンや状況で GPU に重い負荷がかかると、GPU のタイムアウトやクラッシュが発生し、多くの場合、使用中のソフトウェア (Unreal Engine など) が閉じてしまいます。その際、以下のようなメッセージが表示されます。

GPU driver crash error message

GPU のタイムアウトの検出までの時間を延長して、復元できるかもしれない時間を確保することで、この種のクラッシュを防止し、Unreal Engine が閉じないようにできます。

Windows 10 におけるタイムアウトの検出と復旧 (TDR) の調整についての詳細は、このような問題に関する ムービー レンダー キューのシステム コンフィギュレーションの設定手順 を参照してください。

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