お世話になっております。
メモリ使用量の多いレベルにて、SkylightのRealTime Capture時にメモリ不足になる症状が起きているため、
RealTime Capture時のメモリ使用量を削減する方法がないかアドバイスをいただきたいです。
LogRenderer: Forcing update for all mesh draw commands: SkyLight real-time capture change
上記のメッセージがログに出力されてSkylightのキャプチャが行われる際に、300MBほどの非常に大きなメモリ確保が行われています。
bScenesPrimitivesNeedStaticMeshElementUpdateがtrueになって、大量のメッシュの更新が行われるのだと思いますが、
この処理で使用するメモリ量を削減することは可能でしょうか?
よろしくお願いいたします。
[Attachment Removed]
t-nikaido1
(t-nikaido1)
2
お世話になっております。
手元で用意できるレベル(古代の谷)を使用して問題の再現を試みました(レベルをオープン、SkyLight の bRealTimeCapture を ON/OFF する)が極端なメモリ消費は見られませんでした。
今のところ類似した過去の例も見つかっておらず、現象のメカニズムを特定できていない状態です。
関係するかもしれない項目として以下を挙げますが、効果を確認したものではありません(とくに1つ目は手軽に変更できる部分ですのでお試し下さい)。
・SkyLightComponent::SkyDistanceThreshold (非 RealTimeCapture 時のキャプチャー対象はこれによって絞られます)
・Nanite の使用有無(bScenesPrimitivesNeedStaticMeshElementUpdate の参照元の一部は Nanite のための処理です)
問題を確認できる/できない条件や確認方法についてお気付きの点があればお知らせ下さい。
あくまで例としてですが以下のようなことが考えられます。
再現条件
・Nanite の使用有無
・WorldPartition の使用有無
・(こちらで入手できる)再現可能なデータ
確認方法/内容
・PIE / Package
・実行中に SkyLightComponent の RealTimeCapture を OFF から ON に変更したとき(あるいは逆)
・増加したメモリ使用量はどのようなタイミングでもとに戻るか
・メモリ消費量の確認に使用している手段
よろしくお願いいたします。
[Attachment Removed]
お世話になっております。
こちら、その後の調査でRealTimeCapture自体は原因ではないことが分かりました。
NaniteのTessellationを利用しているのですが、
Naniteが利用できないプラットフォームとの見た目の差異を無くすため、
特定のシーケンス再生時にr.Nanite.Tessellation=Falseのコンソールコマンドを呼び出していたようで、意図しないRenderStateContextの再作成が起きてしまっていました。
(この際にbScenesPrimitivesNeedStaticMeshElementUpdateによりRealTimeCaptureが発生)
r.Nanite.TessellationではなくDisplacementをスケーリングするように対応することで本件の問題は解決しました。
調査お手数をおかけして申し訳ありません。
ご返答いただきありがとうございました。
以上、よろしくお願いいたします。
[Attachment Removed]