staticなInstancedStaticMeshを配置したレベルに対してシームレストラベルを行うと、
InstancedStaticMeshComponentが保持するLightmapのUVバイアスを持つバッファ値が-1でクリアされ、
本来の値に更新されないままレンダリングが行われてしまいます。
原因としては
シームレストラベル中に当該アセットがロードされ、その後によばれるPostLoad関数から
FStaticMeshInstanceBuffer::UpdateInstanceDataが呼び出されますが、
本関数内でシームレストラベル中はActiveLightingSenarioが設定されていないため、
本来使うべきMeshMapBuildDataが得られずnullの状態でLightmapの初期化が行われるためのようです。
通常のレベル移動であればPostLoad時に有効なActiveLightingSenarioがあるため正しく初期化される模様です。
対処法や修正済みであればchangelistがございましたらご教示ください。
よろしくおねがいします。
// Make sure “always loaded” sub-levels are fully loaded
{
SCOPE_LOG_TIME_IN_SECONDS(TEXT(" SeamlessTravel FlushLevelStreaming "), nullptr)
LoadedWorld->FlushLevelStreaming(EFlushLevelStreamingType::Visibility);
}
LoadedWorld->PropagateLightingScenarioChange(); //tsuzuki@yomune.co
// Note that AI system will be created only if ai-system-creation conditions are met
LoadedWorld->CreateAISystem();
どうやらレベルが読まれた後に
PropagateLightingScenarioChanage呼び出しを行うことで対応可能なようです。まだ未修正であれば当面この対応を入れておきます。
正式な対応がありましたらご返信いただけると助かります。
※非シームレストラベル時も影響が出てしまいますが、PostLoadMapWithWorldデリゲートを使っても良いかもしれません。
// Make sure “always loaded” sub-levels are fully loaded
{
SCOPE_LOG_TIME_IN_SECONDS(TEXT(" SeamlessTravel FlushLevelStreaming "), nullptr)
LoadedWorld->FlushLevelStreaming(EFlushLevelStreamingType::Visibility);
}
LoadedWorld->PropagateLightingScenarioChange(); //tsuzuki@yomune.co
// Note that AI system will be created only if ai-system-creation conditions are met
LoadedWorld->CreateAISystem();
どうやらレベルが読まれた後に
PropagateLightingScenarioChanage呼び出しを行うことで対応可能なようです。まだ未修正であれば当面この対応を入れておきます。
正式な対応がありましたらご返信いただけると助かります。
※非シームレストラベル時も影響が出てしまいますが、PostLoadMapWithWorldデリゲートを使っても良いかもしれません。
お世話になっております。
確認した所、社内で確認されていない不具合でした。また、修正方法のご共有、誠にありがとうございます!
先程、ご報告頂いた不具合の内容、修正手順を以下の番号で登録いたしました。
UE-61527 LightmapUVBias of InstancedStaticMesh becomes invalid value when using SeamlessTravel
何か進展があり次第ご共有させていただきます。
よろしくお願いいたします。