These appear to be two unrelated issues, but in reality, we encountered the second problem while avoiding the first. For the sake of explanation, I have raised both issues in the same post.
Q1: About the cell level (grid level) of large actors
I understand that if a mesh’s bounds exceed the size of a cell, it will be moved to a higher-level cell. Based on my observations, it appears the highest level is 5/6. If a mesh is so large that even the highest-level cell cannot contain it, will this mesh not be spatially load / unload ? Is this behavior consistent in 5.5/5.6?
- We are facing a problem that a very large mesh may be loaded and unloaded incorrectly. Through debugging, we discovered that this mesh resides in the top-level cell, yet the size of this cell does not match the size of the mesh.
- We dumped the bounding box of the actor and the cell:
Actor : Min=(X=295092.230 Y=1378677.800 Z=-4621.811)、Max=(X=525987.394 Y=1614103.779 Z=1052.227)
Cell : Min=(X=409600.000 Y=1378677.800 Z=-4621.811), Max=(X=525987.394 Y=1614103.779 Z=0.000)
- It appears that this Cell was truncated at position 409600.As background information: our Cell Size is set to 102400. It seems 409600 is exactly four times that value.
As additional info:
Actor
| | |- [+] [2312]
| | | |- Guid:4D7E3C104F32ACF8674B31833D3E1BD4 NativeClass:/Script/XXX.XXXX Name:XXXXX_UAID_3C7C3F50F21C147C02_1633955372 Label:SM_XXXXX SpatiallyLoaded:true EditorBounds:IsValid=true, Min=(X=295092.230 Y=1378677.800 Z=-4621.811), Max=(X=525987.394 Y=1614103.779 Z=1052.227) RuntimeBounds:IsValid=true, Min=(X=295092.230 Y=1378677.800 Z=-4621.811), Max=(X=525987.394 Y=1614103.779 Z=1052.227) RuntimeGrid:None EditorOnly:false RuntimeOnly:false HLODRelevant:true ListedInSceneOutliner:true IsMainWorldOnly:false HLODLayer:/Game/<XXXX>/MainGridISMOnly_HLOD.MainGridISMOnly_HLOD FolderPath:XXXX FolderGuid:45D1E97A42DE88B1B1F590B5FEC84D85
Cell
[+] Content of Cell Level_XXX_MainGrid_L5_X1_Y3_Z-1 (67C0KXQOI1CTROTZ5PN0Z88WI)
|- Actor Count: 1
|- Content Bounds: IsValid=true, Min=(X=409600.000 Y=1378677.800 Z=-4621.811), Max=(X=525987.394 Y=1614103.779 Z=0.000)
|- Cell Bounds: IsValid=true, Min=(X=409600.000 Y=1228800.000 Z=-409600.000), Max=(X=819200.000 Y=1638400.000 Z=0.000)
|- Is 2D: False
|- [+] /Game/<XXXX>/Level_XXX.Level_XXX:PersistentLevel.XXXXX_UAID_3C7C3F50F21C147C02_1633955372
| |- Package: /Game/__ExternalActors__/<XXXX>/9/YJ/YOGIOAIXEK4FFYQFI0624G
| |- Editor Only: 0
| |- Instance Guid: 4D7E3C104F32ACF8674B31833D3E1BD4
| |- [+] Container:
| | |- ID: 00000000000000000000000000000000
| | |- Transform: 0.000000,0.000000,0.000000|0.000000,0.000000,-0.000000|1.000000,1.000000,1.000000
To temporarily sidestep this issue, our artists decided to slice the massive mesh into smaller pieces.
Q2: Can I assign a proxy HLOD mesh for a set of actors sliced from a huge mesh?
Can I manually specify a series of Mesh Actors that should be forced to merge into a single HLOD Mesh, and manually designate this HLOD Mesh?
- Practical use case: Our artists have sliced a mountain into multiple smaller chunks. We want all these chunks to be replaced with a pre-made low-poly mountain mesh when viewed in the distance, rather than having the engine generate an Approximated Mesh for us.