お世話になっております。
ライトマスでのライトベイクについて、お聞きしたい点があります。
現在、当社のプロジェクトで作成している2km x 2kmのマップにて、CPU ライトマスでのライトベイク時間が非常に長大化する問題に直面しております。
該当のマップの主な構成物は以下のようなものです。
・2km 四方のランドスケープ
・木や岩といったライティング対象オブジェクトを ISM により配置 (トータルで約50000インスタンス)
・フォリッジツールによりフォリッジを配置。ただし、Static Shadow をオフにし、ライトベイク対象から除外
・Lightmass Importance Volume を配置 (マップ全体を覆う2000x2000x400mサイズ)
・Stationary なディレクショナルライト1灯と、Static なスポットライト4灯を配置
上記レベルをライトマスでベイクしたところ、ベイク時間が非常に大きくなります。
参考として、12時間以上経過後に進捗が3%程度で、その後 Windows がシステムごと再起動するようなケースが発生します。
ISM のインスタンス数を減らしたケースや、Lightmass Importance Volume が小さいケース (200x200x40mサイズ) では、ベイクが完了することを確認できています。
そこで、今回のような構成は、避けるべきようなケースなのでしょうか。
例えば、
「全体を大きく囲ったうえで、重要な箇所にたいして複数のボリュームを配置する置き方」
あるいは
「全体を大きく囲わず、重要な箇所に対して複数のボリュームを配置する置き方」
など、どのような運用が推奨となりますでしょうか?
広大なレベルを静的ライティングで作成した経験が少ないことから、このような作りが適切か判断が難しく、質問させていただきました。
検証環境は以下となります。
Windows11
UE5.7.1
CPU: Intel(R) Core™ Ultra 7 265K (3.90 GHz)
GPU: NVIDIA GeForce RTX 5070 Ti (16GB)
メモリ: 64GB
Swarm 分散なし
ご確認のほど、よろしくお願いいたします。
[Attachment Removed]
再現手順
添付したプロジェクトの Content/CPULightmass/ 以下に、検証を行ったマップを格納しました。
マップの概要について、以下の通りになります。
CPULightmassMap: ライトベイクが終わらないマップ
CPULightmassMap1: Mesh の数を減らしてベイクが成功するマップ
CPULightmassMap2: Lightmass Importance Volume を削除してベイクが成功するマップ
CPULightmassMap3: Lightmass Importance Volume を小さくしてベイクが成功するマップ
[Attachment Removed]
お世話になっております。
広大なレベルのライトビルドに関してはビルドコストやメモリ等様々な問題があり、弊社としましてはLumenといったGI機能を推進している状況です。
少し情報は古いですが、以下スレッドでやりとり内容は現在でも発生してしまう問題となります。
https://forums.unrealengine.com/t/how-does-one-build-lighting-for-massive-worlds/
今回添付頂いたプロジェクトを確認させて頂いたところAllow Static Lighingが無効化されていましたが、こちらは有効にした状態の確認で問題ございませんでしょうか?
拝見させて頂いたところ、ライトベイクが終わらないマップ(CPULightmassMap)のPreview設定ビルドでは、Lightmass自体の消費メモリが50GB程度となっており、今回使用されているPC環境はメモリが64GBとのことでしたので、メモリ不足によって問題が発生している可能性がありそうです。
(エディタやVSその他ツールを開いている手元のWindows環境では全体で98GB程メモリを消費していました。)
メッシュ毎の解像度はLight map Resolution設定、LandscapeはStatic Lighting LODやStatic Lighting Resolutionで調整が可能となっており、
設定によって中間バッファ等でビルド中のメモリが増加する見込みです。
※実行時に必要となってしまうライトマップのメモリやパッケージを考慮すると、ビルド結果のLightmapサイズにも注意が必要です。
Lightmass Importance Volumeに関しては以下ドキュメントにもありますようにボリュームの内側が高品質、外側が低品質設定となるため入れ子状態ではなく個別で重要なところに配置する必要があります。
>Lightmass Importance Volume を使用すると、Lightmassが光子を放つ面積を調整し、詳細な間接ライティングが必要な領域にだけ集中させることができます。このボリュームの外側では、低品質で一回だけバウンスさせた間接ライティングを受けます。
https://dev.epicgames.com/documentation/ja-jp/unreal-engine/lightmass-basics-in-unreal-engine
現状はメモリを増やして確認を行うか、もしくは必要な解像度を減らすといったクオリティ設定の調整が必要になるかと思います。
お手数おかけしますが、上記情報を元に運用をご検討いただけますと幸いです。
よろしくお願いいたします。
[Attachment Removed]
お世話になっております。
ご確認ありがとうございます。
> 今回添付頂いたプロジェクトを確認させて頂いたところAllow Static Lighingが無効化されていましたが、こちらは有効にした状態の確認で問題ございませんでしょうか?
Allow Static Lighting について、有効化するのが正しい状態となります。
こちらの設定が間違った状態でお送りしてしまい、お手数おかけしました。
メモリ消費量の検証およびライトマップのご案内ありがとうございます。
また、Lightmass Importance Volume の配置についても承知いたしました。
一点追加のご質問としまして、今回のようなケースで、Swarm により複数PCで分散ビルドを行えば、
一台当たりの最大メモリ使用量が小さくなる (結果として、よりスムーズにビルドが進行する) 、といったことは考えられるでしょうか?
ご確認のほど、よろしくお願いいたします。
[Attachment Removed]
ご確認ありがとうございます。
Swarmに関しては処理を分散し高速化することは可能ですが、それぞれ同様のデータをロードするためメモリ削減の目的としては期待できないかと思われます。
※念の為頂いたプロジェクト環境でSwarm経由のビルド確認を行いましたが、複数PCでそれぞれのUnrealLightmassが50GB程使用している状況でした。
お手数おかけしますが、よろしくお願いいたします。
[Attachment Removed]