We noticed that LODs from all traditional static meshes in our scene are fully resident. We’ve configured LOD groups that should allow them to be streamed in as needed, like mips for textures. When digging into the streaming manager to see what’s going on, I noticed FAsyncRenderAssetStreamingData::UpdatePerfectWantedMips_Async using the unknown ref hueristic. This happened because UStaticMesh doesn’t implement GetLastRenderTimeForStreaming (which returns FLT_MAX by default), so using this path will cause it to request all LODs in the end of the function when it calls FStreamingRenderAsset::SetPerfectWantedMips_Async. Otherwise, it seems like it can individually load LODs in the pipeline, its just forced to load them all.
By all other accounts in the codebase, it looks like it should support streaming in of LODs but I can find no detailed documentation over this. There is an option in the LOD settings of the static mesh called “Num Streamed LODs” that seem pertinent to avoid inlining the LODs with the asset, and UE seems to have platforms be able to be queried if they support mesh LOD streaming. It is confusing to me that the codebase seems to indicate that it should be supported, but it functionally doesn’t seem like it works.
The repro project should mimic the settings we used on our LOD streaming meshes.
Steps to Reproduce
Package the project and run it, hook into FRenderAssetStreamingMipCalcTask::DoWork and observe it eventually requesting all LODs for the mesh.
Thank you for providing corrections to the sample project, I have applied them and reuploaded with this post. I’ve just only missed these settings for the sample project, they are present in our studio project.
However, if you use the ListStaticMeshes command, it will still show all the LODs are fully resident. I am unable to do verify through hooking into FRenderAssetStreamingMipCalcTask::DoWork as I’m not sure how to hook my debugger into engine code in a sample project besides from packaging/compiling the engine along side it, but our project does not have any modifications to streaming code and shows it gathering all LODs for the static mesh despite having all the correct settings for streaming LODs.