この質問は、以下のスレッドに関連して作成されました: [Reflection captures are incorrect when built along with [Content removed]
お世話になっております。
ライトビルドをエディタから実行した場合とコマンドレットから実行した場合で、リフレクションキャプチャのビルド結果が異なる問題が発生しています。
①エディタでは [ビルド] > [ライティングのみビルド] にてビルド
②コマンドレットは以下コマンドにてビルド
UE4Editor-Cmd.exe <uproject> -run=resavepackages -buildlighting [-buildreflectioncaptures] -map=<level> -quality=Production -allowcommandletrendering
(-buildreflectioncaptures の指定有無で結果は変わらず)
①と②でリフレクションキャプチャの見た目に差異が生じている状況です。
また②の後、エディタで当該レベルを開き [ビルド] > [リフレクションキャプチャをビルド] を実行することで、エディタでライトビルドを実行したときと同じ結果となります。
問題としては上記スレッドで報告されている状況と同じ内容ではないかと考えているのですが、スレッドには解決までの記載はなく UE4 では未解決と理解しております。
UE4.27 での修正のヒントや、もし UE5 で修正が行われているようでしたら関連する CL などの情報をいただけますと幸いです。
[Attachment Removed]
お世話になっております。
ご報告の挙動について調査しました。
まず、-buildlightingを指定すると、ライティングビルド完了時にGEditor->BuildReflectionCaptures()が自動的に呼ばれるため、コマンドレットでもリフレクションキャプチャは再ビルドされています。-buildreflectioncapturesは同じ処理をもう一度呼ぶだけですので、指定の有無で結果が変わらないのはこのためです。
結果がエディタと異なる原因は、コマンドレットではワールドがTickされないことにあります。シェーダの非同期コンパイル中はUpdateReflectionCaptureContents()がスキップされ、エディタなら次のフレームで再実行されますが、コマンドレットでは再実行されません。その結果、古いキャプチャデータのまま保存されることがあります。テクスチャストリーミングが走らない点も差の原因になり得ます。
この問題はUE5でも未解決です。公開IssueのUE-281933とUE-302151で追跡されており、ご案内できる修正CLはありません。
4.27で改修する場合は、UEditorEngine::BuildReflectionCaptures()内の各UpdateReflectionCaptureContents()呼び出しの直前にGShaderCompilingManager->FinishAllCompilation()を追加するのが第一候補です。改修しない場合は、現在の「コマンドレット後にエディタでキャプチャをビルド」する運用が最も確実です。
再現プロジェクトをご提供いただければ、弊社でも確認の上、必要に応じて起票いたします。
お手数ですが、よろしくお願いします。
[Attachment Removed]
ご回答ありがとうございます。
問題の内容及び現状について、また UE5 でも未解決とのこと承知しました。
ご提示いただいた改修内容について確認させていただきます。
また、テクスチャストリーミングについても設定を変えての検証などを行ってみようと思います。
[Attachment Removed]
以下を試してみたのですが解消しませんでした。
・GShaderCompilingManager->FinishAllCompilation() の追加
・テクスチャストリーミングの無効化
解説いただいた内容からコマンドレットでの解決は難しそうに思えましたので、Automationテストでの実装を試してみました。
LatentCommandでライトビルドを実行するテストを作成し -ExecCmds=“Automation RunTests ~” でコマンドラインから実行することでやりたいことはできそうなので、そちらで進めようと思います。
本件については解決とさせていただければと思います。
ありがとうございました。
[Attachment Removed]