From licensee:
The issue here starts in FVoxelizeMeshMerging::ProxyLOD() where the FlattenMaterial created using FMaterialUtilities::CreateFlattenMaterialWithSettings() returns an empty struct. I don't see any validations done in subsequent code which checks for the FlattenMaterial struct being valid.
Later in the same function, provided the simplified mesh can GenerateUVs, we get bProxyGenerationSuccess being left as true, which then leads to calling a ProcessComplete delegate leading to pipelining this set of data in FProxyGenerationProcessor::ProxyGenerationComplete().
This data is later used in FMaterialUtilities::CreateFlattenMaterialInstance() where the FlattenMaterial struct, which is still essentially empty, is used without any validations. This leads to a crash with unsafe access where an Empty array's zeroth element is directly getting accessed.
Create a World Partitioned map with an HLOD Layer whose Layer Type is set to Simplified. Under ProxySettings > MaterialSettings > TextureSizingType, set it to TextureSizingType_AutomaticFromMeshDrawDistance. Ensure you have meshes in the world where the simplified mesh CAN generate UVs (as in the attached project).
[Inline Frame] UnrealEditor-MaterialUtilities.dll!TArray<FColor,TSizedDefaultAllocator<32>>::RangeCheck(int Index) Line 691 C++ [Inline Frame] UnrealEditor-MaterialUtilities.dll!TArray<FColor,TSizedDefaultAllocator<32>>::operator[](int) Line 759 C++ UnrealEditor-MaterialUtilities.dll!FMaterialUtilities::CreateFlattenMaterialInstance::__l2::<lambda>(EFlattenMaterialProperties FlattenProperty) Line 365 C++ UnrealEditor-MaterialUtilities.dll!FMaterialUtilities::CreateFlattenMaterialInstance(UPackage * InOuter, const FMaterialProxySettings & InMaterialProxySettings, UMaterialInterface * InBaseMaterial, const FFlattenMaterial & FlattenMaterial, const FString & AssetBasePath, const FString & AssetBaseName, TArray<UObject *,TSizedDefaultAllocator<32>> & OutAssetsToSync, FMaterialUpdateContext * MaterialUpdateContext) Line 393 C++ UnrealEditor-MeshMergeUtilities.dll!FProxyGenerationProcessor::ProcessJob(const FGuid & JobGuid, FProxyGenerationProcessor::FProxyGenerationData * Data) Line 163 C++ UnrealEditor-MeshMergeUtilities.dll!FProxyGenerationProcessor::Tick(float DeltaTime) Line 81 C++ UnrealEditor-MeshMergeUtilities.dll!FMeshMergeUtilities::CreateProxyMesh(const TArray<UStaticMeshComponent *,TSizedDefaultAllocator<32>> & InComponentsToMerge, const FMeshProxySettings & InMeshProxySettings, UMaterialInterface * InBaseMaterial, UPackage * InOuter, const FString & InProxyBasePackageName, const FGuid InGuid, const TDelegate<void __cdecl(FGuid,TArray<UObject *,TSizedDefaultAllocator<32>> &),FDefaultDelegateUserPolicy> & InProxyCreatedDelegate, const bool bAllowAsync, const float ScreenSize) Line 1933 C++ UnrealEditor-WorldPartitionHLODUtilities.dll!UHLODBuilderMeshSimplify::Build(const FHLODBuildContext & InHLODBuildContext, const TArray<UActorComponent *,TSizedDefaultAllocator<32>> & InSourceComponents) Line 107 C++ UnrealEditor-Engine.dll!UHLODBuilder::Build(const FHLODBuildContext & InHLODBuildContext, const TArray<AActor *,TSizedDefaultAllocator<32>> & InSourceActors) Line 167 C++ UnrealEditor-WorldPartitionHLODUtilities.dll!FWorldPartitionHLODUtilities::BuildHLOD(AWorldPartitionHLOD * InHLODActor) Line 377 C++ UnrealEditor-Engine.dll!AWorldPartitionHLOD::BuildHLOD(bool bForceBuild) Line 197 C++ UnrealEditor-UnrealEd.dll!UWorldPartitionHLODsBuilder::BuildHLODActors() Line 479 C++ UnrealEditor-UnrealEd.dll!UWorldPartitionHLODsBuilder::RunInternal(UWorld * World, const FCellInfo & InCellInfo, FPackageSourceControlHelper & PackageHelper) Line 305 C++ UnrealEditor-UnrealEd.dll!UWorldPartitionBuilder::Run(UWorld * World, FPackageSourceControlHelper & PackageHelper) Line 277 C++ UnrealEditor-UnrealEd.dll!UWorldPartitionBuilder::RunBuilder(UWorld * World) Line 87 C++ UnrealEditor-UnrealEd.dll!UWorldPartitionBuilderCommandlet::Main(const FString & Params) Line 101 C++ UnrealEditor.exe!FEngineLoop::PreInitPostStartupScreen(const wchar_t * CmdLine) Line 3659 C++ [Inline Frame] UnrealEditor.exe!FEngineLoop::PreInit(const wchar_t *) Line 3883 C++ [Inline Frame] UnrealEditor.exe!EnginePreInit(const wchar_t *) Line 42 C++ UnrealEditor.exe!GuardedMain(const wchar_t * CmdLine) Line 137 C++ UnrealEditor.exe!LaunchWindowsStartup(HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, char * __formal, int nCmdShow, const wchar_t * CmdLine) Line 272 C++ UnrealEditor.exe!WinMain(HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, char * pCmdLine, int nCmdShow) Line 330 C++
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-161274 in the post.
0 |
Component | UE - World Creation - Worldbuilding Tools - HLOD |
---|---|
Target Fix | 5.1 |
Created | Aug 17, 2022 |
---|---|
Resolved | Sep 20, 2022 |
Updated | Oct 20, 2022 |