Skip to content

Nanite Foliage deleted the LOD chain. Read what Epic actually shipped

Epic's 41-million-triangle tree costs 29 MB instead of 3.5 GB. The trick is not Nanite. Divide two numbers on that page and you can see what it is.

September 3, 20264 min read
article · nanite-foliage-deleted-the-lod
shaded · wire

Epic's headline number is real. In the Nanite Foliage documentation, the biggest tree in The Witcher 4 technical demo dropped from 3.5 GB on disk to about 29 MB.

Streaming memory for one tree in one view fell from about 36 MB to about 2.7 MB. That tree carries 41 million triangles.

Every write-up I read stopped at those numbers. The useful sentence is the one printed next to them.

Divide the two numbers

The same page lists what the tree is made of. It has 12 unique assembly parts, 2,160 assembly part instances, and 850 skeletal bones.

Divide 2,160 by 12. Each unique part is reused about 180 times.

Now divide 3.5 GB by 29 MB. The disk saving is roughly 120 times. Those two numbers sit close together, and that is the whole story.

The trick is not Nanite. It is the kit.

A Nanite Assembly stores each part mesh once. It then stores a transform for every instance of that part.

Epic's Nanite Assemblies page calls those instances "simply a large array of matrices". One assembly can hold up to 65,000 instances of other meshes.

So the saving is the repetition. Build a tree from twelve twigs and you get the headline. Sculpt a tree as one unique mesh and you get nothing.

Four limits Epic wrote down themselves

Read the Known Limitations on that page before you plan a month of work.

  • You cannot make an assembly of assemblies. One layer of instancing only.
  • "Each assembly stores its own copy of the part data." Read that before planning a shared parts library.
  • Skeletal assembly parts are not skinned. They animate rigidly, in bind pose.
  • Per-instance data is not exposed in material graphs for assembly parts.

That last one deserves a second read. Your usual per-instance random hue on leaves is gone.

Your alpha cards are the thing being replaced

Epic is explicit about why the old way had to go. Alpha masking introduces a lot of overdraw and runs an expensive mask function.

It also keeps foliage flat. World Position Offset wind is out for a second reason: the renderer cannot know how a material will move a vertex.

So the culling bounds have to be padded for the worst case. That padding is what you have been paying for all along.

The vertex colour trap

Nanite Voxels store a distribution of normals per voxel, not a single normal. That data has to live somewhere.

Epic says it currently sits in the vertex colour alpha channel, and that it will override whatever was there. If your leaf material reads alpha for anything, that channel is now spoken for.

Check your own assets for this before you switch voxelization on. It is a silent change, not an error.

Wind is a separate experiment

Nanite Skinning is fast. Epic reports 100,000 bones updating in about 0.1 milliseconds on the GPU.

The Dynamic Wind plugin that drives those bones is thinner than it sounds. Its documented limits are global wind direction only, no collision with players or objects, and skeletal wind data imported from a JSON file.

No collision means no character pushing through a bush. For a lot of games that is the shot they wanted.

One setting to know: Animation Min Screen Size. Leave it at 0 and trees stop animating at a tenth of screen size.

Still Experimental, nine months on

Nanite Foliage shipped with Unreal Engine 5.7 on 12 November 2025, marked Experimental.

I checked the 5.8 documentation today. It still reads: use caution when shipping with it.

The Procedural Vegetation Editor is stricter. Its own page says assets made for it in 5.7 cannot be opened in 5.8 at all.

Where I actually agree with Epic

The demo ran at 60 frames per second on a PlayStation 5. That is a real result and I am not going to argue with it.

Voxels replacing billboards is the right idea. Anyone who has fought a tree card popping at 80 metres knows why.

And I like that Epic named the cost honestly. Assemblies buy you disk space and pay for it in cluster culling.

What a seller learns from this

I sell base meshes, so I read this as a shape. The assets that win here are kits, not hero pieces.

My 692 Base Mesh Bundle is 692 pieces meant to be combined. The 50 hanging cages are the same idea, smaller.

That is not a pitch. It is the same lesson as the trim sheet article: repeating parts is a design decision made long before the renderer sees them.

What I would do this month

Do not rebuild your foliage library on an Experimental feature. Do build your next tree from parts.

Twelve twig meshes and a trunk is a good file whatever renders it. It survives whatever Epic changes in the next release.

If you are learning Unreal properly, start with the ordinary pipeline in the Unreal course. Memory arithmetic is the same skill I used on texture resolution, applied to geometry.

One last honest line. I have read every page of this documentation and I have not shipped a game on it. Epic still says use caution, so treat anyone who claims otherwise carefully.

Written by

Milad Kambari

3D artist and instructor, founder of 3DRedBox Studio KFT. Twenty years of texturing, material authoring and teaching — currently a top ArtStation Marketplace seller.

Read the full story →