この度提案したい事があり投稿させて頂きました。
長文にて失礼いたします。
Houdini上でLabs WorldComposition Prepare ノード使い、PDGで出力するようなHDAを組みます。
それをUE4にてCookOutputで複数のテラインを出力した後Bakeしようとすると添付画像のようにTexture2D_0_BaseColorの参照が元のパーシスタントに残ってしまい出力に失敗するという現象があります。
このTexture2D_0_BaseColorというものはULandscapeComponentがもつGIBakedBaseColorTextureになります。
しかし、他のレベル出力に使われている関数ULandscapeInfo::MoveComponentsToLevel 移行時に必要なテクスチャはHeightMapのみのようでした。
これらの事からMoveComponentsToLevel を行う直前にGIBakedBaseColorTextureをクリアしてしまうのが処理としては安全ではないかと思う次第です。
HoudiniEngine\Source\HoudiniEngineEditor\Private\HoudiniEngineBakeUtils.cpp
の
FHoudiniEngineBakeUtils::BakeLandscapeObject(
内で以下のようにします。
if (TargetLevel != TileActor->GetLevel()) { bool bLevelInWorld = TileWorld->ContainsLevel(TargetLevel); ALandscape* SharedLandscape = TileActor->GetLandscapeActor(); ULandscapeInfo* LandscapeInfo = TileActor->GetLandscapeInfo(); //----------------kajii 追加分 { for (ULandscapeComponent* Component : TileActor->LandscapeComponents){ if (Component != nullptr && Component->GIBakedBaseColorTexture != nullptr){ Component->BakedTextureMaterialGuid.Invalidate(); Component->GIBakedBaseColorTexture = nullptr; Component->MarkRenderStateDirty(); } } } //----------------------------------- check(LandscapeInfo); // We can now move the current landscape to the new world / level // if (TileActor->GetClass()->IsChildOf<ALandscapeStreamingProxy>()) { // We can only move streaming proxies to sublevels for now. TArray<AActor*> ActorsToMove = {TileActor}; ALandscapeProxy* NewLandscapeProxy = LandscapeInfo->MoveComponentsToLevel(TileActor->LandscapeComponents, TargetLevel); ・ ・ ・ ・
というようにしてしまうのが良いのではないかと思うのですが如何でしょうか?