ボリュメトリック ライトマップは、間接ライティング キャッシュ とボリューム ライティング サンプルを置き換えて進展させたものです。
間接ライティング キャッシュを有効にするには、[World Settings (ワールド設定)] > [Lightmass Settings (Lightmass 設定)] を開き、[Volume Lighting Method (ボリューム ライティングの方法)] を [Sparse Volume Lighting Samples (スパース ボリューム ライティング サンプル)] に設定します。
Lightmass は、静的オブジェクトに対する間接ライティング用の サーフェス ライトマップ を生成します。しかし、動的オブジェクト (キャラクターなど) には、間接ライティングを受ける方法も必要です。そうするには、ビルド時にすべてのポイントで事前計算されたライティングを ボリュメトリック ライトマップ と呼ばれる空間に格納し、ランタイム時にそれを使用して動的オブジェクトの間接ライティングを補間します。


スパース ボリューム ライティング サンプルでは、漏れる光の量とライティング精度が決まっていました。ボリュメトリック ライトマップではこれが改善されています。
仕組み
大まかに見れば、ボリュメトリック ライトマップ システムは次のように機能します。
- Lightmass がレベル全体にライティング サンプルを配置し、ライティングのビルド時にそれらの間接ライティングを計算します。
- 動的オブジェクトをレンダリングするときに、ボリュメトリック ライトマップがシェーディングされる各ピクセルまで補間され、事前計算された間接ライティングが与えられます。
- ビルド済みのライティングを利用できない (オブジェクトが新規であるか、動くが大きすぎる) 場合は、ライティングが再ビルドされるまで、静的オブジェクト に対してボリュメトリック ライトマップから各ピクセルまで補間されます。
Lightmass Importance Volume が配置されると、ボリュメトリック ライトマップは 4x4x4 のセル (ライティング サンプル) から成る塊をビルドします。Lightmass が実行されると、これらのセルは Lightmass Importance Volume 全体に配置されます。間接ライティングをきれいにキャプチャしようとするほど、シーンの静的ジオメトリの周りにあるセルが多く使用されます。

これらのポイント (または球) の 1 つ 1 つがボリュメトリック ライトマップのライティング サンプルであり、3次球面調和を使用して、全方向の入射光が格納されます。

オブジェクトの近くでは、ある 1 つの塊の中のすべての静的ジオメトリで、間接ライティングの変化が最も大きくなる場所でより多くのセルが使用されます。こうしたデータ構造により、GPU 上の空間のすべてのポイントで間接ライティングを補間できるようになります。

(画像の左) 単一のスタティックメッシュがある Lightmass Importance Volume がボリューム内に配置されています。(中央) 静的ジオメトリの周りのセルは密度が高くなっています。(右) サンプルの塊の片側に 4x4x4 のセルで表現されています。ライティングのビルド時に静的ジオメトリが存在する場合は、高密度のセルで表現されたこのサンプルと同じになります。
ボリュメトリック ライトマップのビジュアライゼーションを有効にする
[Show (表示)] > [Visualize (視覚化)] > [Volumetric Lightmap (ボリュメトリック ライトマップ)] をクリックすることで、ボリュメトリック ライトマップ の表示モードを使用してレベル ビューポート内のライティング サンプルを視覚化します。
ボリュメトリック ライトマップの表示モードを有効にする | ボリュメトリック ライトマップのライティング サンプルのビジュアライゼーション |
画像をクリックすると、拡大表示されます。 | 画像をクリックすると、拡大表示されます。 |
ライティングのビルド後にボリュメトリック ライトマップを視覚化すると、影響を受けている Lightmass Importance Volume 内のセルに基づいて静的ジオメトリの周りに集まっているライティング サンプルの 密度を確認できます。静的ジオメトリから離れているライティング サンプルは近くにジオメトリがないため、密度が低くなります。


間接ライティング キャッシュ では、静的ジオメトリのサーフェスの上部にのみライティング サンプルが配置されます。 ボリュメトリック ライトマップでは、静的ジオメトリの周りに高密度でサンプルが配置され、間接ライティングの変化が最も大きい箇所がより詳細になります。
ビルドされていないライティングをプレビューする
ボリュメトリック ライトマップでは、ビルドされていないライティングを使用したオブジェクトをプレビューできます。ライティングがビルド済みのスタティックメッシュを移動すると、ライティングが次回ビルドされるまで、 自動的にボリュメトリック ライトマップに切り替わります。


中央の柱はコピー済みであり、ライティング ビルドが再ビルドされるまで、ボリュメトリック ライトマップで照らされています。
可動オブジェクトの事前計算されたライティング
ライティング サンプル間の補間がコンポーネント全体に対して一度行われる 間接ライティング キャッシュ とは異なり、ボリュメトリック ライトマップでは、各ピクセルまで補間されることによって、より詳細になります。そのため、光漏れが少ないディテールの信頼性の高い分布になります。


ボリュメトリック ライトマップのディテールが追加されたことにより、キャラクターが背景と馴染んでいます。


静的ジオメトリに埋め込まれている可動オブジェクトには、間接ライティング キャッシュよりも静的オブジェクト ライティングの方が適するようになりました。
ボリュメトリック フォグの事前計算されたライティング
ボリュメトリック ライトマップは、フォグ ボクセルごとにその空間内での位置まで事前計算されたライティングを補間することで、ボリュメトリック フォグへの静的ライトの応用をサポートしています。


固定ライトでは、その間接ライティングがライトマップに格納されているため、それがフォグを照らしています。


スカイ ライトは適切にシャドウ処理されて、室内領域にフォグがかかりすぎないようになっています。


静的ライトのスタティックおよびエミッシブは、ボリュメトリック ライトマップにすべて統合されているため、負荷をかけずにフォグを照らします。
設定
ボリュメトリック ライトマップの設定は、[World Settings] の [Lightmass Settings] にあります。

設定項目 | 説明 | ||||
---|---|---|---|---|---|
Volumetric Lighting Method (ボリュメトリック ライティング方法) | 事前計算されたライティングを Lightmass Importance Volume 内のすべての位置に提供するために使用される手法。
|
||||
Volumetric Lightmap Detail Cell Size (ボリュメトリック ライトマップの詳細セル サイズ) | 最高密度 (ジオメトリ周辺で使用される) でのボリュメトリック ライトマップのボクセルのサイズ (ワールド空間単位)。この設定は、ビルド時間とメモリ使用量に大きな影響を与えるため、慎重に使用する必要があります。 | ||||
Volumetric Lightmap Maximum Brick Memory Mb (ボリュメトリック ライトマップの最大ブリック メモリ (Mb)) | ボリュメトリック ライトマップのブリック データで使用される最大メモリ量。高密度のブリックはこの制限を満たすまで破棄され、ジオメトリから最も遠くにあるブリックが最初に破棄されます。メモリ使用量を小さくしてトリミングが増えすぎると一貫性のない解像度になるため、その場合は Volumetric Lightmap Detail Cell Size の値を大きくします。 | ||||
Volumetric Lightmap Spherical Harmonic Smoothing (ボリュメトリック ライトマップの球面調和スムージング) | 球面調和関数のデリンギング時に、ボリュメトリック ライトマップのサンプルに対して行われるスムージングの量を制御します。高いディレクショナル ライトを球面調和関数に格納すると、リンギング アーティファクトが発生し、反対側に予期しない黒い領域として現れます。スムージングで、このアーティファクトを減らすことができます。スムージングは、リンギング アーティファクトが存在する場合にのみ適用されます。0 = スムージングなし、1 = 強いスムージング (ライティングの指向性はほぼなし)。 | ||||
Volume Light Sample Placement Scale (ボリューム ライト サンプル配置スケール) | ボリューム ライティング サンプルが配置される距離をスケーリングします。ボリューム ライティング サンプルは Lightmass によって計算され、可動コンポーネントで GI 用に使用されます。大きいスケールを使用すると、サンプルのメモリ使用量が少なくなり、間接ライティング キャッシュの更新回数が減りますが、ライティング領域間のトランジションの精度が下がります。 |
パフォーマンス
ボリュメトリック ライトマップによるパフォーマンスおよびメモリ使用量を検討する際は、次の点を考慮する必要があります。
- PlayStation 4 では、サードパーソン キャラクターに対するボリュメトリック ライトマップの GPU 時間の負荷は 0.2 ミリ秒です。間接ライティング キャッシュのすべてのレンダリング スレッドの負荷は除外されています。
-
Epic の Paragon の Monolith マップでのメモリ使用量は、間接ライティング キャッシュ時の 5 MB から、デフォルトの Detail Cell Size 設定によるボリュメトリック ライトマップ時の 30 MB に増加しました。メモリ使用量は、エディタの Stat MapBuildData コマンドの Volumetric Lightmap Memory で確認できます。
画像をクリックすると、拡大表示されます。
ボリュメトリック ライトマップと間接ライティング キャッシュの比較
間接ライティング キャッシュとボリュメトリック ライトマップを比較すると次のようになります。
事前計算されたライト ボリューム/間接ライティング キャッシュ | ボリュメトリック ライトマップ |
---|---|
GPU での負荷の高い補間 | CPU での効率的な補間 |
インスタンス化されたコンポーネント上でのオブジェクトごとの補間 | ピクセルごとの補間 |
ボリュメトリック フォグを照らすことはできない | ボリュメトリック フォグで機能する |
静的サーフェス上にのみ高密度で配置されるため、低密度のサンプルから光漏れが発生する | 静的サーフェスの周りのすべてに高密度で配置される |
Lightmass Importance Volume の範囲外の黒いサンプル | Lightmass Importance Volume の範囲外の領域を覆うように境界ボクセルが伸縮する |
レベル ストリーミングがサポートされている | レベル ストリーミングはサポートされているが、すべてのレベル (ストリーミング インしているものも含めて) が同時にビルドされる必要がある (詳細については、下記の「追記」セクションを参照) |
レベル ストリーミングはサポートされているが、すべてのレベル (ストリーミング インしているものも含めて) が同時にビルドされる必要がある (詳細については、下記の「追記」セクションを参照)
追記
- 大規模なレベルで精度を上げるために Volumetric Lightmap Detail Cell Size を小さくする場合は、Volumetric Lightmap Maximum Brick Memory Mb を大きくする必要があります。そうしないと、ディテール セルがカリングされてしまい、動的オブジェクトの間接ライティングの精度が落ちます。
- レベル ストリーミングでは、すべてのレベル (パーシスタント レベルやサブレベルも含めて) が同時にビルドされる必要があります。そうしないと、ストリーミング イン レベルが正しく登録されません。ストリーミング レベルは主にメモリ最適化です。ほとんどの細かい塊のボリュームはボックス (ディメンション サイズが異なる) ではなくキューブ (ディメンション サイズが均等) である大きなボリュームへ統合されます。最も細かい塊は、最も近いサブレベルでストリーミングされ、大まかなレベルの塊は常に永続性です。実際のジオメトリを含むレベルでは、データの大部分は最も詳細なレベルの塊へ統合されます。レベルがジオメトリで埋められる場合、空 (または無駄な) 領域として現れるボリュームに対してはほとんど心配はありません。現在のシステムは単一のボリューム テクスチャを使用します。つまり、オーバーラップとブレンディングのある複数のボリューム テクスチャがサポートされていないため、空の領域に対してできることはほとんどありません。
- シーンの領域内にあるサンプルの密度をローカルに制御するには、Volumetric Lightmap Density Volumes を使用します。これらのボリュームでサポートされているのは凸型形状のみです。レベル エディタの [Place Actors (アクタを配置)] パネルで、シーンに 1 つ追加します。
トラブルシューティング
- サンプル数が増えると [Detail Cell Size] は小さくなるが、サンプル密度が、静的ジオメトリの近くで要求されるよりも低くなる。
- [Maximum Brick Memory] が小さすぎる場合や、その領域にあるすべてのライティングがほぼ等しい場合は、ディテール ブリックがカリングされることがあります。
- キャラクター上に壁からの光漏れがあるが、スタティックメッシュの近くでは光漏れはない。
- 現時点では、光漏れに対する解決策は [Detail Cell Size] を小さくする (メモリ使用量が増える) か、壁の厚みを増やすことだけです。