Brian Karis
briankaris.bsky.social
Brian Karis
@briankaris.bsky.social
Engineering Fellow at Epic Games. Author of Nanite.
Includes this great video showing how the Nanite Foliage seamlessly LODs. No popping. No harsh transitions. Good appearance preservation (although this light direction is overly generous).
June 4, 2025 at 10:47 PM
Correct. 3 separate features: assemblies, skeletal meshes, and voxels. None of which is strictly foliage. Each can be used without the other. Can make assemblies and keep as meshes, like the repeated elements on this shield from the original UE5 demo. Or voxelize a single Nanite mesh.
June 4, 2025 at 12:54 AM
Put these all together and we maintained or improved on the rendering quality compared to our previous Electric Dreams demo (last image), except that was 30hz on a RTX 4090 and this was 60hz on a base PS5.
June 3, 2025 at 7:43 PM
So we created Nanite assemblies, which basically is hierarchical nested instancing. These 28 twigs are instanced 1000s of times throughout a tree. That keeps the storage size down to very reasonable 10s of MBs per tree. The Nanite mesh stores this all as an HLOD, down to a single root cluster.
June 3, 2025 at 7:09 PM
To accomplish this we switch from triangles to voxels as Nanite clusters simplify. LOD is chosen such that voxels are <= 1 pixel wide. This means the LODing is mostly imperceptible. No pops. No manual authoring or management. 100% automatic.

(voxels blown up huge here for visualization)
June 3, 2025 at 6:59 PM
It was time for a complete rethink. We wanted to bring the Nanite approach truly to foliage. No more faking geo with textures. So now every needle is modeled in 3d and stays as real 3D geometry at all distances. No switching to cards or fake billboards.
June 3, 2025 at 6:39 PM
The way trees have been authored and rendered hasn't changed in over 20 years. It's always been big flat cards with binary opacity masks. Being flat means they don't have parallax or self shadow properly. They look flat because they are flat.
June 3, 2025 at 6:31 PM
Can get better plane fits if the down sample has more than 4 input texels. Been a while since I played with this though. I was seeking much better culling rates in the lasagna layered surface case in the distance in AncientGame. Concluded it was hopeless.
November 29, 2024 at 10:47 PM