When enabling skeletal mesh streaming, after setting up the LOD groups etc, we can see that meshes are being streamed out, but quite often fail to stream in again. As far as I can see there is no debug whatsoever to help chasing down why this sometimes happens. Is there a pool for the skeletal mesh memory, is there any way to get out any information? And is the system being supported/production ready?
What is guiding the streaming and screensize/importance? And how does it handle skeletal meshes with synced LOD with parent etc.
[Attachment Removed]
Steps to Reproduce[Attachment Removed]
Hello,
By default, meshes use the same pool as textures, but you can use a separate pool by increasing r.Streaming.PoolSizeForMeshes. There isn’t a pool specifically for skeletal meshes, but the streaming system is production ready.
By default r.Streaming.PrioritizeMeshLODRetention is enabled and textures are streamed out before meshes, but under pressure they can still be streamed out.
What is guiding the streaming and screensize/importance? And how does it handle skeletal meshes with synced LOD with parent etc.
Each skeletal mesh asset has per-LOD screensize values and each component reports it’s bounds and a texelfactor to the streaming manager (USkinnedMeshComponent::GetStreamingRenderAssetInfo). When over-budget, LODs for assets with lowest priority are dropped first (TryDropMips, TryDropMaxResolutions), but textures are always lower priority and get streamed out first - still under enough pressure mesh LODs will eventually be streamed out.
I’m not as familiar with the skeletal mesh syncing but will see if I can get more information from my colleagues on that (r.SkinnedMesh.SyncStreamingLODClamp)
To monitor related streaming info you can use the following console commands:
stat Streaming
stat StreaminOverview
ListStreamingRenderAssets AssetType=SkeletalMesh
If you know there is an asset that is problematic you can investigate it with the console command:
InvestigateRenderAsset <meshname>
You can also use r.Streaming.FullyLoadMeshes=1 to verify the issue is streaming budget related because that should fully load all the meshes and ignore budgets.
[Attachment Removed]
Can you provide more details about the problematic assets - namely, are they skeletal meshes with attachments using synced LODs? Also, additional information you can provide about your pool setup - whether you’re using r.Streaming.PoolSizeForMeshes or not etc would be helpful.
[Attachment Removed]