Studio Matrx Monthly · Volume 1 · Issue 3 · August 2026
Amogh N P
 In loving memory of Amogh N P — Architect · Designer · Visionary 
Nanite & Virtualized GeometryLesson 9.1
RTV for Architecture, Planning & Urban Design/Module 9 · Optimization & Performance

Lesson 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

13 min Interactive lessonFree · open lessonByAmogh N P· Architect & interior designer
The hook

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.

AUTHORED LODs vs NANITETHE OLD WAY: you build and budget a chainLOD01.2M trisLOD1300k trisLOD270k trisLOD315k trisYou author each level, pick switch distances, and hope the pop is not visible.THE NANITE WAY: one mesh, streamed per pixelFull-detail mesh1.2M tris, imported as-isNanite picks the detailroughly one triangle per pixel,streamed from disk automaticallyno chainNanite replaces the whole LOD conversation for dense opaque geometry - you stop counting polygons.
Zoom
The old way versus the Nanite way. A classic LOD chain is a series of hand-built lower-poly meshes you author and switch by distance. Nanite imports one full-detail mesh and streams roughly one triangle per pixel automatically - no chain, no switch distance, no pop.

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.

WHERE NANITE FITSLOVESOpaque static meshesDense CAD / BIM importsHard-surface detail, bolts, trimMillions of triangles, kit-bashedMegascans and photogrammetryHere you stop budgeting polygons.CAVEATSMasked / translucent materialsSkeletal and animated meshesVery thin foliage and leavesHas a base memory and disk costWorld Position Offset windSupport keeps widening each UE5release - check your version.
Zoom
Where Nanite fits. It loves opaque, static, dense hard-surface geometry - the bulk of an archviz import. Masked or translucent materials, skeletal and animated meshes and very thin foliage sit outside it (support widens each release), and it carries a base memory and disk cost, so it is not a blanket switch.

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.

Tools & features you'll meet in this lesson

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.

Hands-on workshop

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.

Given & goal
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
  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.

The worked example

Three altitudes on the same idea

Read the band that fits you — or all three.

For the architectImmersive design & client experience

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.

For the interior designerWalkable interiors & material studies

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.

For the studentReal-time skills, portfolio & archviz jobs

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.

Misconception check

Nanite means polygon count no longer matters at all - just enable it on everything and never optimize geometry again.

Nanite genuinely removes the polycount worry for opaque, static, hard-surface geometry, and that is most of an architectural model - so decimating those meshes is often now the wrong instinct. But it is not a universal switch. It historically did not handle masked or translucent materials or thin foliage well (that support keeps improving each release), it does not apply to skeletal or animated meshes, and it carries a base memory and disk cost that makes enabling it on thousands of trivial props counterproductive. It also does not touch the other big performance lever - draw calls - which come from how many separate objects you have, not how many triangles each holds. So Nanite ends one fight, not the whole war. You still profile, still cull, still watch draw calls, and still leave the right meshes on the classic LOD path.
Try it

Do it yourself

Reason these through - they are the judgement calls Nanite asks of you.

  1. 1In one sentence, what does 'virtualized geometry' mean and what number does Nanite aim for per pixel?
  2. 2Why does a ten-million-triangle Nanite mesh cost about the same to draw as a one-million-triangle one?
  3. 3Name two kinds of geometry you would NOT rely on Nanite for, and what you would use instead.
  4. 4What does Nanite replace, and why do you no longer author LOD0-LOD3 for a Nanite mesh?
  5. 5How would you verify that a mesh is actually running as Nanite and did not silently fall back?
Take this with you

The one line to carry out

Nanite is virtualized micropolygon geometry: it streams roughly one triangle per pixel for opaque static meshes, so a dense CAD or BIM import runs at full detail with no hand-built LODs - as long as you keep foliage, glass and animation on the classic path.
Take it further
References & further reading

Peer-reviewed journals & authoritative standards

  1. 01Nanite Virtualized GeometryEpic Games Developer Documentation, 2026.
  2. 02Level of detail (computer graphics)Wikipedia, 2026.
  3. 03Polygon meshWikipedia, 2026.
  4. 04Datasmith OverviewEpic Games Developer Documentation, 2026.
Related lessons
Recap
Nanite treats a mesh like a virtual texture for triangles, streaming only the detail the current view resolves - about one triangle per pixel - so source polycount stops driving cost for opaque static geometry. It is continuous LOD, replacing hand-built LOD chains for qualifying meshes, which is transformative for dense archviz imports. But it carries a base memory cost and has real caveats: masked/translucent materials and thin foliage historically fell outside it (support keeps widening), and skeletal or animated meshes stay classic.
Carry forward →

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.

A

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 →