Graphic Rants: Nanite Tessellation
Recorded: Sept. 14, 2026, 3:09 p.m.
| Original | Summarized |
Graphic Rants: Nanite Tessellation Graphic Rants Graphical, textual ramblings of a coder. Sunday, February 1, 2026 Nanite Tessellation Nanite Tessellation, aka Nanite Dynamic Tessellation, aka Nanite Dynamic Displacement was the next major feature I worked on after Nanite itself. Initial prototypes started back in 2020, only months after showing Nanite publicly for the first time. UE5 still hadn’t even been released to customers yet. After a couple years of shipping Nanite in things and then a couple of years more of development, Nanite Tessellation finally shipped in UE 5.4 in 2024. I started this write up shortly after but it has taken far longer to complete than I ever expected. Needless to say, publishing all this has been a long time coming. It will come in a series of posts starting with this one. List of posts: Intro What is Nanite Tessellation? Tessellation demoed at GDC in Marvel 1943: Rise of Hydra Patches Diced triangles Final pixels Why? So we have that now. It’s called Nanite and is pretty cool. It was the right thing to work on first. But just because this solution is general purpose enough that it can be used for these other cases does not mean it is ideal for them. Storing full topology of an irregular mesh covers all cases but is expensive. Storing every position on the surface as a full 3d point with a complete set of attributes is expensive. We do our best to compress that data but nothing beats not having that data at all. Compression Comparison of disk size for high poly vs low poly with normal and displacement maps Even better data compression than that are procedural texturing approaches. What do I mean by procedural texturing? I don’t just mean mathematical functions like Perlin noise. I might be pushing the definition a bit but even simple texture tiling in a way is a form of procedural texturing. But certainly once shaders are involved where multiple textures are mixed and modified we are in the realm of procedural. The simplest form of this is detail texturing. A much higher frequency signal can be represented than stored explicitly. Viewed statically like this, the compression ratio can be far higher than is achievable through any other means. Authoring Displacement maps are extremely common in film and the primary reason for their use is not data compression. A good bit of it is tooling and while I could say that should be improved and is someone else’s responsibility to keep up with Nanite’s capabilities, the fact of the matter is I can’t snap my fingers and change all the DCCs. Even if every application were all optimized to better work with high poly meshes there is always something inherently simpler with 2d textures, and displacement maps are no different. Displacement’s use in film also helps animation. For a character the base cage can be rigged and deformed. The deformed cage can then be smoothly subdivided and displaced to get the final detail. This simplifies the rigger’s and animator’s concerns and separates them to an extent from the sculptor who might carve out individual dragon scales. The last use case is specific to games. Scalability is an important consideration for Fortnite as well as other games that still need to support lower end platforms that aren’t powerful enough to run the Nanite pipeline. We can easily generate low poly fallback meshes through the same mesh simplification algorithm that Nanite uses, but what is fine for the distance isn’t necessarily good enough for up close. The art of low poly modelling is often a matter of abstraction of shape and artists are much more picky about the results. They will also move detail between domains, from mesh to texture, that requires involvement of other assets that is difficult or impossible to automatically do reliably. For these reasons, when a large scalability range is required, like with Fortnite, our art teams have been more comfortable authoring for low or mid in the scalability range and amplifying up rather than authoring for high and simplifying down. Posted by Brian Karis at 8:27 PM Newer Post Older Post Home About Me Brian Karis I am a Engineering Fellow at Epic Games. This blog is a place for me to dump game and graphics related thoughts and share with the greater graphics community. View my complete profile Blog Archive ▼ 2026 (5) ► March (1) ▼ February (4) Nanite + Reyes ► 2018 (4) ► May (4) ► 2014 (1) ► March (1) ► 2013 (3) ► December (1) ► August (1) ► July (1) ► 2012 (2) ► May (1) ► April (1) ► 2011 (2) ► August (1) ► January (1) ► 2010 (1) ► January (1) ► 2009 (6) ► November (1) ► October (1) ► April (1) ► February (1) ► January (2) ► 2008 (8) ► November (3) ► August (5) Simple theme. Powered by Blogger. |
Nanite Tessellation, also referred to as Nanite Dynamic Tessellation or Nanite Dynamic Displacement, is a system designed for dynamically tessellating meshes and displacing them through a shader graph authored in the Unreal Engine material editor, operating in addition to the functionality provided by Nanite itself. This system addresses the need for geometry amplification within the context of virtualized geometry. The motivation for developing tessellation methods stems from the argument that amplification approaches are insufficient as a general solution for the virtualized geometry problem because they cannot handle changing the genus of a surface, suggesting that a simplification approach is a more general solution. The challenge lies in data storage, as storing the full topology of an irregular mesh is expensive, requiring the system to look for more efficient data representation. Scalar displacement fields, whether artist-authored maps or projections of detailed surfaces onto simpler ones, require less data storage compared to storing full topology or a complete set of vertex attributes. While compression methods exist for regular 2D data like images, procedural texturing offers superior data compression by representing high-frequency signals through functions rather than storing them explicitly, leading to higher compression ratios. Beyond data efficiency, procedural content generation offers significant advantages for artists by acting as a time saver, enabling the creation of reusable, dynamic, and animatable assets. This allows base material types to be reused across multiple surfaces and enables the accumulation of effects, such as snow accumulation or flowing lava, by modifying shader parameters, which can extend to complex animations. Displacement maps are widely used in film; their utility there is less about data compression and more about tooling assistance, separating the concerns of rigging and animation from the sculptor's work on surface detail. In gaming contexts, scalability is crucial for platforms with limited computational power. While low poly fallback meshes can be generated using the same simplification algorithms as Nanite, the artistic consideration of abstraction and detail transfer complicates automated scaling. Therefore, an approach where artists author for lower or mid-range detail and subsequently amplify upward, rather than simplifying down, is often preferred to maintain visual fidelity and art direction. This perspective informs how art teams manage the relationship between mesh, texture, and other assets when scalability ranges are required. |