Lesson 9.1Lesson 9.1 · Optimization & Performance
Nanite & Virtualized Geometry
Import the dense CAD model as-is and let the engine draw the detail the pixel can actually see
For twenty years archviz meant fighting your polycount. Nanite quietly ends that fight for most of your geometry.
You imported a Revit model and the frame rate collapsed. The old cure was brutal: decimate meshes, build LOD chains, retopologize by hand, and delete detail you actually wanted. Hours of janitorial work before the design even looked good.
Nanite is Unreal Engine 5's answer, and it changes the conversation rather than speeding up the old one. It treats a mesh as virtualized micropolygon geometry - streaming just the fraction of triangles the current view needs, aiming for roughly one triangle per pixel. Import the dense model as-is, tick a box, and stop counting polygons for the geometry that qualifies. The catch is knowing exactly which geometry qualifies.
Keep the detail, enable Nanite, verify with the viewport modes. Decimating dense opaque meshes is now often the WRONG reflex.
Virtualized geometry: the detail is streamed, not budgeted
Nanite is virtualized geometry - the same idea as virtual texturing, applied to triangles. A virtual texture system keeps a huge texture on disk and streams only the tiles the camera can see at the resolution it needs. Nanite does that with the mesh itself: your model is preprocessed into a hierarchy of tiny triangle clusters, and each frame the engine picks the clusters and detail level that resolve to about one triangle per pixel on screen. A wall filling the view gets its full density; the same wall thirty metres away is drawn from a coarse cluster, seamlessly, with no visible switch.
The practical consequence is that source triangle count stops being the number you fear. A ten-million-triangle CAD assembly and a one-million-triangle one cost almost the same to draw once both are Nanite, because Nanite renders in proportion to screen pixels, not to how many triangles you fed it. Detail you cannot see is never processed. That is why the Epic demos throw hundreds of millions of triangles at the screen and still hold frame rate - the on-screen triangle budget barely moves.
There is a real cost, just a different one. Nanite meshes carry a base memory and disk footprint (the cluster hierarchy has to live somewhere), and there is a small fixed per-frame overhead to run the Nanite pass at all. For a scene of a few simple boxes, classic meshes can be cheaper. Nanite pays off precisely when geometry is dense - which is exactly the situation archviz imports create.
Old worry: how many triangles did I import? Nanite worry: how many pixels are on screen? Very different questions.
Why archviz imports are the perfect case for it
It is worth pausing on why Nanite lands so squarely on architectural work, because that is what tells you when to reach for it. A model that starts life in Revit, Rhino, SketchUp or 3ds Max and comes across through Datasmith is almost always heavier than a game asset would ever be. CAD and BIM tools tessellate curved surfaces into dense triangle meshes without a second thought - a single moulded cornice, a curved stair balustrade or a NURBS-derived facade panel can carry tens of thousands of triangles each. Multiply that across an entire building and you routinely land in the tens of millions of triangles before you have placed a single light.
Under the old rules that number was a crisis: you would spend a day decimating, retopologizing and building LOD chains just to make the scene open without crawling, and you would lose crisp profiles and clean edges in the process. Nanite inverts the situation. Because it costs in proportion to screen pixels rather than source triangles, that same dense import is no longer a problem to be tamed - it is simply the input. You keep every mullion, every chamfer, every bolt head that the fabricator actually detailed, and the renderer only ever processes the fraction of it the current view can resolve.
The deeper point is about fidelity to the design. Before Nanite, the model you walked through was often a simplified stand-in - a marketing mesh cleaned up for performance - which quietly diverged from the real project. With Nanite you can review the actual construction geometry, at full resolution, and trust that what you are judging is what was drawn. For architecture, where the whole value of a walkthrough is honest decision-making, that is not a minor convenience; it removes a layer of translation between the design and the review.
CAD/BIM tessellates curves into millions of triangles. Old rule: a crisis to decimate. Nanite rule: just the input - keep the real geometry.
How it rewrites the LOD conversation
Before Nanite, keeping a heavy scene interactive meant Levels of Detail - LOD0 through LOD3, each a hand-made or auto-generated lower-poly version of the mesh, swapped in as the object shrinks in the distance. LODs work, but they are labour: you author or generate each level, choose switch distances, and still fight the visible pop when one level snaps to the next. Module 9's next lesson on LODs, draw calls and culling covers that craft in full, because it still matters for everything Nanite does not handle.
For Nanite meshes, that whole apparatus disappears. Nanite is continuous LOD - it does not step between three baked levels, it smoothly dials detail per cluster every frame, so there is effectively no pop and nothing to author. You do not build LOD chains for Nanite geometry; you do not set screen sizes; you do not decimate. The mesh is imported once at full detail and the engine handles the rest.
This is the mindset shift the lesson is really about. The instinct drilled into every archviz artist - reduce the poly count before you import - is often now the wrong move for opaque hard-surface geometry. You keep the detail, enable Nanite, and let the renderer be smart. The skill becomes knowing which meshes to leave dense and which still need the old discipline, not blanket decimation.
Nanite = continuous LOD. No LOD0/1/2/3 to build, no switch distance, no pop. One mesh, all the way in and out.
What Nanite loves - and where it still has caveats
Be honest about the boundaries, because switching Nanite on blindly will bite you. Nanite loves opaque, static, hard-surface geometry: building shells, structural steel, furniture, facades, trim, bolts, kit-bashed detail, Megascans rocks and photogrammetry scans. This is the bulk of an architectural import, which is why archviz benefits so much.
The caveats are real and worth memorising. Historically Nanite did not support masked or translucent materials well - the cut-out leaves of a foliage card, glass, water - so thin vegetation and transparent surfaces were left as classic meshes. It does not apply to skeletal or animated meshes (a rigged character, an animated door on a skeletal mesh); those stay conventional. Very thin, alpha-tested foliage was a weak spot, and effects like wind through World Position Offset interact with Nanite carefully. Crucially, support keeps widening with every UE5 release - masked-material and foliage handling have improved substantially since Nanite first shipped - so the honest rule is: know your engine version, and test rather than assume.
The other caveat is that Nanite is not free memory. Converting thousands of tiny, trivial meshes to Nanite can cost more than it saves. Reach for it on the dense stuff; leave the trivial props and any animated or translucent geometry on the classic path.
Loves: opaque, static, dense, hard-surface. Wary of: masked/translucent, skeletal/animated, thin foliage, tiny trivial meshes.
Turning it on for a dense CAD or BIM import
In practice, enabling Nanite is almost anticlimactic. On any Static Mesh you can right-click in the Content Browser and choose Enable Nanite, or tick Nanite Settings > Enabled in the Static Mesh editor and save. You can do it in bulk: select every mesh in your imported folder, right-click, and enable Nanite across the lot. When importing through Datasmith from Revit, Rhino, SketchUp or 3ds Max, recent workflows let you have qualifying meshes marked for Nanite on import, so the dense building shell arrives ready.
A sane workflow for a heavy import: bring the model in with Datasmith; select the opaque structural and furniture meshes and enable Nanite on them; leave foliage, glass and anything animated as classic meshes with LODs; then verify. The verification step matters - use the viewport Nanite visualization modes (the View Mode menu has a Nanite section, including a triangle and cluster overview) to confirm which meshes are actually running as Nanite and to watch the on-screen triangle density. If a mesh silently fell back to classic rendering (because its material or type disqualified it), these modes show you.
The pay-off is concrete: a Revit import that would once have needed a day of decimation and LOD work becomes usable in minutes, at full detail. You spend the reclaimed time on light and materials - the things that actually sell the space - instead of on polygon janitorial work.
Right-click mesh -> Enable Nanite. Or bulk-select the folder. Then check the Nanite viewport modes to confirm it took.
Nanite
Virtualized micropolygon geometry in Unreal Engine 5
Streams roughly one triangle per pixel for opaque static meshes; removes hand-built LODs for qualifying geometry. Base memory cost; caveats on masked/translucent/animated.
Level of Detail (LOD)
Swapping lower-poly versions of a mesh as it shrinks with distance
The classic method Nanite replaces for opaque static meshes; still needed for foliage, translucent and animated geometry that Nanite does not cover.
Datasmith
Epic's CAD/BIM import pipeline into Unreal
Brings Revit, Rhino, SketchUp and 3ds Max models in with materials and metadata; recent workflows let qualifying meshes be marked for Nanite on import.
Nanite visualization modes
Viewport overlays that show what is running as Nanite
Triangle and cluster overviews reveal on-screen detail density and catch meshes that silently fell back to classic rendering.
Workshop - import dense, enable Nanite, verify it took
You will feel the whole point of Nanite by doing the thing the old workflow forbade: importing a heavy model without cleaning it, enabling Nanite, and watching the frame time barely move. Then you will confirm with the visualization modes which meshes are genuinely virtualized.
Unreal Engine 5, one dense mesh (Datasmith import, Megascans asset or high-poly model), and stat unit for a quick before/after read.
Goal: convert a dense import to Nanite and prove it worked Inputs: Unreal Engine 5, a dense mesh (a Datasmith CAD/BIM import, a Megascans asset, or any high-poly model) Time: ~35 minutes
- 1Import or drop in a genuinely dense mesh - a Revit/Rhino export via Datasmith, or a high-poly Megascans/photogrammetry asset. Do NOT decimate it. Turn on stat unit and note the GPU and Frame milliseconds.
- 2Select the opaque static meshes, right-click in the Content Browser, and choose Enable Nanite (or tick Nanite > Enabled in the Static Mesh editor and save). Watch stat unit again - note how little the on-screen cost changed despite the raw triangle count.
- 3Open the View Mode menu and switch to the Nanite triangle and cluster visualization. Fly toward and away from a surface and watch the detail dial up and down continuously - no LOD pop.
- 4Deliberately test a boundary: try enabling Nanite on a foliage card or a translucent glass mesh, and confirm from the visualization mode whether it actually ran as Nanite or fell back. Note the result for your engine version.
- 5Write down which meshes you would leave on the classic LOD path in this scene and why (foliage, glass, animated, or tiny trivial props), so your rule is explicit rather than a blanket switch.
You’ll walk away with
A short before/after note: raw triangle count and stat unit GPU/Frame ms before and after enabling Nanite on a dense import, one screenshot of a Nanite visualization mode, and a two-line rule for which meshes you kept classic and why.
Three altitudes on the same idea
Read the band that fits you — or all three.
Nanite is what makes it realistic to walk a real project model rather than a cleaned-up marketing mesh. Your Revit and Rhino exports are dense and messy, and the old cost of taming them was high enough that visualization often meant a separate, simplified model. Nanite lets you keep the honest geometry - every mullion, every profile - and still hold frame rate, so the thing you review is the thing you designed.
Interiors are full of exactly what Nanite is best at: dense, detailed, static, opaque objects. Carved furniture, moulded skirting, decorative screens, high-poly decor from asset libraries - drop them in at full detail and stop worrying about the count. Keep your attention on translucent and thin things, though: sheer curtains, glass, and slender plants still want the classic path, so do not blanket-enable Nanite and assume the room is handled.
Understanding Nanite is a genuine differentiator, because a lot of tutorials still teach the pre-Nanite reflex of decimating everything. Learn when the old LOD discipline applies and when Nanite has replaced it, and you will make better calls than people who only know one era. Practise the honest boundary - opaque static geometry versus foliage, glass and animation - and you can reason about any scene rather than copying a recipe.
“Nanite means polygon count no longer matters at all - just enable it on everything and never optimize geometry again.”
Do it yourself
Reason these through - they are the judgement calls Nanite asks of you.
- 1In one sentence, what does 'virtualized geometry' mean and what number does Nanite aim for per pixel?
- 2Why does a ten-million-triangle Nanite mesh cost about the same to draw as a one-million-triangle one?
- 3Name two kinds of geometry you would NOT rely on Nanite for, and what you would use instead.
- 4What does Nanite replace, and why do you no longer author LOD0-LOD3 for a Nanite mesh?
- 5How would you verify that a mesh is actually running as Nanite and did not silently fall back?
The one line to carry out
Peer-reviewed journals & authoritative standards
- 01Nanite Virtualized Geometry — Epic Games Developer Documentation, 2026.
- 02Level of detail (computer graphics) — Wikipedia, 2026.
- 03Polygon mesh — Wikipedia, 2026.
- 04Datasmith Overview — Epic Games Developer Documentation, 2026.
Nanite handles geometry cost, but it is only one number in the frame. To know whether geometry is even your problem - or whether you are bound by draw calls, the GPU or a CPU thread - you have to measure. Next we learn to read the frame budget and profile.
The author
Amogh N P
Architect, interior designer, and creative polymath. Studio Matrx began in his notebooks — his vision of design made honest, useful, and open to everyone. Its Academy is written and taught in his memory, and free, forever.
More about Amogh →