BuiltDataの仮想化ができません

仮想化の機能が有効な状態でsublevelとBuiltData(Engine.MapBuildDataRegistryクラスのデータ)

をsubmitした場合、BuiltDataが仮想化されません

これは意図した挙動でしょうか?それとも不具合でしょうか?

ゲームの都合上lumenは採用できず、したがってライトデータが非常に巨大になっております

MapBuildDataこそサイズが大きく仮想化したいです

調査したところBuiltDataもローカルのペイロードは存在しておりました

(DumpPackagePayloadInfoでlocalペイロードが列挙される&ValidatePackageTrailer でペイロードが正常にそろっていることを確認できている)

仮想化されない原因は

FWorkspaceDomainPayloadProvider::VirtualizePackages のなかで

PkgInfo.Trailer.GetPayloads(EPayloadFilter::CanVirtualize)をしている際

BuildDataのEntry.FilterFlags が UE::Virtualization::EPayloadFilterReason::MapContentのため

スキップされているからでした

enum class EPayloadFilterReason : uint16

{

/** Not filtered, the payload can be virtualized */

None = 0,

/** Filtered due to the asset type of the owning UObject */

Asset = 1 << 0,

/** Filtered due to the path of the owning UPackage */

Path = 1 << 1,

/** Filtered because the payload size is below the minimum size for virtualization */

MinSize = 1 << 2,

/** Filtered because the owning editor bulkdata had virtualization disabled programmatically */

EditorBulkDataCode = 1 << 3,

/** Filtered because the package is either a UMap or the owning editor bulkdata is under a UMapBuildDataRegistry */

MapContent = 1 << 4,

};

CanVirtualizeの条件を

(Entry.FilterFlags == UE::Virtualization::EPayloadFilterReason::None

|| Entry.FilterFlags == UE::Virtualization::EPayloadFilterReason::MapContent

に変更するとバルクデータがsubmitされメタデータと分離することができました。

BuiltDataをあえて仮想化から除外しているのはなぜでしょうか?

先ほども申した通り

MapBuildDataこそサイズが大きく仮想化したいです

[Attachment Removed]

再現手順
lumenを使わない状態でライトの設置されたsublevelを編集してsubmitする

[Attachment Removed]

map関連のペイロードはEngine.iniの

[Core.VirtualizationModule]
FilterMapContent=True

をFalseにオーバーライドすることで仮想化を行うことは可能です。​

この設定値が追加されたCL-21283179のコメントにもありますがランドスケープなどの​システムが仮想化によって​

ペイロードが準備されていないときの挙動を想定していないため​想定外の動作が起こる可能性があります。

弊社タイトルやテストケースでもFilterMapContentをfalseにした運用を行っていないためテストが不十分なことをご了承いただけますと幸いです。

[Attachment Removed]

失礼しました。仮想化環境を用意して確認します。少々お待ちください。

[Attachment Removed]

手元で確認しましたがアセットの保存時に以下のコールスタックでFilterPayloadを通過します。

>	UnrealEditor-Virtualization.dll!UE::Virtualization::FVirtualizationManager::FilterPayload(const UObject * Owner) Line 651	C++
 	UnrealEditor-CoreUObject.dll!UE::Serialization::FEditorBulkData::SerializeToPackageTrailer(FLinkerSave & LinkerSave, FCompressedBuffer PayloadToSerialize, UE::Serialization::FEditorBulkData::EFlags UpdatedFlags, UObject * Owner) Line 1951	C++
 	UnrealEditor-CoreUObject.dll!UE::Serialization::FEditorBulkData::Serialize(FArchive & Ar, UObject * Owner, bool bAllowRegister) Line 1112	C++
 	UnrealEditor-Engine.dll!UTexture::Serialize(FArchive & Ar) Line 1132	C++
 	UnrealEditor-Engine.dll!UTexture2D::Serialize(FArchive & Ar) Line 468	C++
 	UnrealEditor-Engine.dll!ULightMapTexture2D::Serialize(FArchive & Ar) Line 154	C++
 	UnrealEditor-Engine.dll!ULightMapTexture2D::Serialize(FStructuredArchiveRecord Record) Line 103	C++
 	UnrealEditor-CoreUObject.dll!`anonymous namespace'::WriteExports(FStructuredArchiveRecord & StructuredArchiveRoot, FSaveContext & SaveContext) Line 2799	C++
 	UnrealEditor-CoreUObject.dll!`anonymous namespace'::SaveHarvestedRealms(FSaveContext & SaveContext, ESaveRealm HarvestingContextToSave) Line 3739	C++
 	UnrealEditor-CoreUObject.dll!`anonymous namespace'::InnerSave(FSaveContext & SaveContext) Line 3903	C++
 	UnrealEditor-CoreUObject.dll!UPackage::Save2(UPackage * InPackage, UObject * InAsset, const wchar_t * InFilename, const FSavePackageArgs & SaveArgs) Line 4050	C++
 	UnrealEditor-CoreUObject.dll!UPackage::Save(UPackage * InOuter, UObject * InAsset, const wchar_t * Filename, const FSavePackageArgs & SaveArgs) Line 20	C++
 	UnrealEditor-UnrealEd.dll!UEditorEngine::Save(UPackage * InOuter, UObject * InAsset, const wchar_t * Filename, const FSavePackageArgs & InSaveArgs) Line 4537	C++
 	UnrealEditor-UnrealEd.dll!UEditorEngine::SavePackage(UPackage * InOuter, UObject * InAsset, const wchar_t * Filename, const FSavePackageArgs & SaveArgs) Line 4602	C++
 	UnrealEditor-UnrealEd.dll!UEditorEngine::Exec_Obj(const wchar_t * Str, FOutputDevice & Ar) Line 4673	C++
 	UnrealEditor-UnrealEd.dll!UEditorEngine::Exec_Editor(UWorld * InWorld, const wchar_t * Stream, FOutputDevice & Ar) Line 5746	C++

合わせてフィルタを無効化する設定が正しくエディタに反映されているかログでご確認いただけますでしょうか?

LogVirtualization: Display: FilterMapContent : false

[Attachment Removed]

こちらを試したのですが、仮想化が実行時にはこの設定で判定している箇所FVirtualizationManager::FilterPayloadを通っておりませんでした(このためBuiltDataを仮想化できませんでした)

[Attachment Removed]

ご確認ありがとうございました!

大変失礼いたしました

build>bake light onlyの後saveした場合であれば呼ばれることが確認できました

(フォルダのresave allを試しておりました)

[Attachment Removed]