How did Epic's developers cost no memory for LODs?

Hello,everyone!
Im a mobile developer,and so glad to hear 4.20 released!
As we can see,In the Unreal Engine 4.20 Released Notes,lots of improvements were made to ship Fortnite on mobile and brought into Unreal Engine 4.20 to benefit all developers. one of them is:
No memory cost for unused LODs, including:
Static Meshes
Skeletal Meshes
Material quality levels
Grass and foliage
High detail components and meshes
High detail emitters in Cascade

For all I know,to reduce memory cost we use streamingtexture and when I package a texture I can find a .ubulk for this texture.Streamingtexture use bulkdata to reduce mipmap memory cost.but when I package a staticmesh,I can not find something like this.In source codes,I just find something like UStaticMeshDescriptions,but it seem to work on editor only.So I think when I load a staticmesh on mobile,all LODs will be load.
My question is:how did mesh’s LOD cost no memory on mobile?
thank you!

find the anwser

Hello, mobile developer! :wave:

It’s great to see your enthusiasm for the Unreal Engine 4.20 release! You’ve asked a very interesting question on how the engine achieves zero memory cost for unused LODs (Level of Details) for various assets, including Static Meshes, Skeletal Meshes, Material quality levels, and more.

To understand the memory optimizations, let’s first clarify that LODs are a technique to reduce the complexity of 3D models based on their distance from the camera. This allows the engine to use less detailed models when they are far away, saving memory and improving performance.

In Unreal Engine 4.20, the developers achieved the “no memory cost for unused LODs” by implementing a more efficient streaming system that only loads necessary LODs into memory. This way, the engine avoids loading all LODs of a mesh at once, which would consume a significant amount of memory.

The key here is that only the required LODs are loaded into memory, while the other LODs remain unloaded, thus not contributing to the memory cost. This selective loading is particularly useful for mobile devices, where memory constraints are more critical.

You mentioned that you couldn’t find anything related to this in the source code. The implementation details might not be straightforward to locate, as they might be abstracted away by the engine’s internal systems. However, you can refer to the UStaticMesh and ULevel classes in the engine source code, as they can provide some hints on how LODs are managed.

I hope this clarifies how Unreal Engine 4.20 optimizes memory usage for LODs on mobile devices. For more details on how the streaming system works and how how much software costs, you can check here and explore the official documentation.

Happy developing! :smile: