ボリュメトリック ライトマップ (Volumetric Lightmap) は将来的に 間接ライティング キャッシュ とボリュメトリック ライティング サンプルに置き換わります。
[World Settings (ワールド設定)] > [Lightmass Settings] で [Volume Lighting Method (ボリューム ライティングの方法)] を [VLM Sparse Volume Lighting Samples] に設定することで、間接ライティング キャッシュを再び有効にすることができます。
Lightmass は静的オブジェクト上の間接ライティングに サーフェス ライトマップ を生成します。しかしながら、(キャラクターなどの) 動的オブジェクトは間接ライティングの情報が必要です。そこで、すべてのポイントで事前計算されたライティングを ボリュメトリック ライトマップ と呼ばれる空間に格納することで、実行時に動的オブジェクトの間接ライティングを計算することができます。


Sparse Volume Lighting Samples は漏れる光の量とライティング精度を定義しました。ボリュメトリック ライトマップはこれに改善を行いました。
機能の説明
ボリュメトリック ライトマップ システムは以下のように機能します。
- Lightmass はレベルのあらゆる場所にライティング サンプルを配置し、ライティングのビルド中にそれらの間接ライティングを計算します。
- 動的オブジェクトをレンダリングすると、各ピクセルのシェーディング中に事前計算された間接ライティングが与えられてボリュメトリック ライトマップが補間されます。
- ライティングが利用できない場合 (新規または移動が多すぎるオブジェクト) は、ライティングがリビルドされるまで 静的 オブジェクトのボリュメトリック ライトマップが各ピクセルに対してライティングを補間します。
Lightmass Importance Volume を置くと、ボリュメトリック ライトマップは 4x4x4 の塊 (ライティング サンプル) をビルドします。Lightmass を実行すると、これらのセルは Lightmass Importance Volume 全体の上に置かれます。間接ライティングをきれいにキャプチャしょうとするほど、シーンの静的ジオメトリの周りにあるセルを多く使います。

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

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

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


Indirect Lighting Cache は静的ジオメトリのサーフェス上にライティング サンプルのみを配置します。ボリュメトリック ライトマップは 間接ライティングの変化が一番大きくなるには、その詳細のために静的ジオメトリの周囲に高密度にサンプルを配置します。
ビルドされていないライティングのプレビュー方法
ボリュメトリック ライトマップは、ビルドされていないライティングを使用したオブジェクトのプレビューを可能にします。ライティングがビルドされているスタティックメッシュを移動すると、 それは次のライティング ビルドまで自動的にボリュメトリック ライトマップに切り替わります。


中央の柱はコピーです。ライティング ビルドが再ビルドされるまで、ボリュメトリック ライトマップで照らされている状態です。
ムーバブル オブジェクトの事前計算ライティング
ライティング サンプル間の補間をコンポーネント全体で 1 度だけしか行わない 間接ライティング キャッシュ とは異なり、ボリュメトリック ライトマップはピクセルごとに補間を行うため、より詳細になります。信頼性のあるディティールを提供するため、ライト漏れが少なくなります。


ボリュメトリック ライトマップの詳細が追加されたことにより、キャラクターは背景に自然に馴染みます。


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


Stationary Light (固定ライト) は間接ライティングをライトマップに格納してフォグを照らします。


スカイライトは適切になシャドウ処理により、室内領域でのフォグのかかりすぎを防止します。


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

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