How-to · Cleanup
Do You Still Need Retopology? Nanite, Godot and Unity LODs
Whether an AI-generated mesh needs retopology depends on engine and asset type. What Unreal Nanite, Godot auto-LOD and Unity LOD Groups documentably do and do not solve.
For static opaque props in Unreal with Nanite enabled, Epic publishes no triangle limit, so skipping polygon reduction may be viable; our reading is that you can spend the time on repair, materials and UVs first and measure before reducing. For deforming characters, for Godot and Unity targets, and for anything outside Nanite’s supported list, plan on a reduced mesh. This page covers only that decision; the how-to is elsewhere.
What Nanite documents
Epic’s Nanite page (the page itself shows version 5.8 in its title but links to 5.5, so some details may be dated) states:
- You enable it with “Enable Nanite Support” under Nanite Settings in the Static Mesh Editor.
- Supported platforms are current consoles and desktop with DirectX 12 and Shader Model 6.
- Materials must be Opaque or Masked; Translucent and Mesh Decals are not supported.
- Morph targets are not supported. Skeletal meshes are supported as Nanite Skeletal Meshes.
- Not supported: MSAA, Forward Rendering, stereo VR, Lighting Channels, and ray tracing against Nanite meshes, which uses the Fallback Mesh. A Fallback Relative Error setting controls how aggressively the fallback is reduced.
- The page publishes no per-mesh triangle limit and says to measure on your hardware.
Read that as: the page sets no triangle ceiling for qualifying static meshes, and it does not say whether reduction is unnecessary; disk size and hardware are for you to measure. It says nothing about the mesh being clean. This is our inference, not Epic’s statement: Nanite renders the geometry you give it, so floating shards, baked-in lighting in the base color texture and a wasteful UV layout would still be there. Those need repair and the UV and texture fixes.
What Godot documents
Godot generates LODs automatically on import using meshoptimizer for glTF, .blend, Collada and FBX files; OBJ needs Import As = Scene, then Reimport and an editor restart. You can disable it per scene (Generate LODs) or per mesh in Advanced Import Settings. A project setting, Rendering > Mesh LOD > LOD Change > Threshold Pixels (default 1), controls switching, and a per-node LOD Bias exists. The docs warn it can misbehave with skinned meshes. So for static props in Godot, LODs are generated on import without your involvement; for skinned characters, plan on your own reduction.
What Unity documents
Unity’s LOD Group switches between meshes using screen-height percentage thresholds (100% down to 0%). To make LODs on import, name meshes Name_LOD0, Name_LOD1, and so on in an FBX and Unity creates the LOD Group for you. On the pages we read, the lower levels come from meshes you supply. We did not verify a Unity 6.2 Mesh LOD feature from a primary page, so this page makes no claim about it; check the current manual.
Decision guide
| Situation | Retopology needed? | Basis |
|---|---|---|
| Static opaque prop, Unreal, Nanite supported | Possibly not for triangle count; measure | Nanite documentation; no triangle limit published |
| Translucent, morph-target or unsupported-platform asset in Unreal | Nanite does not apply; use a conventional reduction and LOD workflow | Nanite exclusions |
| Static prop in Godot | Optional; auto-LOD helps | Godot mesh LOD page |
| Skinned character in any engine | Plan on reduction; StraySpark (a cleanup-tool vendor) advises hand retopology for deforming heroes | Godot warns auto-LOD can misbehave on skinned meshes; Nanite skeletal support is separate |
| Unity prop | Likely: LOD meshes are supplied by you | Unity LOD import naming |
| Roblox | Yes, to the limit | Roblox’s 20,000 triangle limit per mesh |
| Web or mobile | Check your target | We found no official figure for these |
| Collision | Use a separate simple mesh | See collision meshes |
The table is a reading of the documentation, not a measured outcome. Disk size, frame time and fallback-mesh quality for raw versus cleaned AI meshes are exactly what has not been measured here.
How to decide for your own asset
The documentation gives no triangle threshold, so the decision is a short measurement you run yourself. These steps use menu names from the Godot docs (4.7 stable) and Epic’s Nanite page; the Unity step uses the profiler generally.
- Check the hard rules first. Roblox: 20,000 triangles per mesh. If a platform limit applies, you reduce regardless.
- Check eligibility. In Unreal, confirm the material is Opaque or Masked, there are no morph targets, and your target platform is in Epic’s list. If any fails, Nanite does not help that asset.
- Look at the mesh for defects Nanite or auto-LOD will not fix: floating pieces, holes, baked lighting in Base Color. Fix those on the repair and UV and texture pages.
- Put many copies of it in a test scene. Cost shows up in numbers, not in one instance. In Godot, the 3D viewport’s top-left menu has View Information (primitive count, bottom right), View Frame Time (FPS, top right), Display Wireframe, and Disable Mesh LOD, which lets you compare against the full-detail mesh; the docs say that with LOD enabled and the camera far enough away the drawn primitive count should fall and FPS rise (unless the CPU is the bottleneck). In Unreal, enable Nanite Support in the Static Mesh Editor under Nanite Settings and compare against the same mesh with it off. In Unity, import a reduced copy with
_LOD0,_LOD1names and compare in the profiler. - Decide against your own budget. If the scene holds frame rate on your target hardware and the disk size is acceptable, stop. If not, reduce the mesh.
Symptoms and what the documentation suggests
| Symptom | Likely cause | Next step |
|---|---|---|
| Godot LOD shows rendering glitches on a character | Docs say LOD generation may occasionally introduce rendering issues, especially in skinned meshes | Disable Generate LODs for that scene, or per mesh in Advanced Import Settings, and supply your own reduction |
| Godot LODs not generated for an OBJ | OBJ needs Import As = Scene, then Reimport and an editor restart | Do that, or use glTF |
| Godot LOD switches look too early or late | Threshold Pixels (default 1) and per-node LOD Bias | Raise Threshold Pixels to switch sooner; LOD Bias above 1.0 switches later |
| Many Godot instances share one LOD level | MultiMesh and grouped instances pick LOD from the closest point of the node’s bounds | Put distant instances in separate nodes |
| Unreal mesh will not behave as Nanite | Translucent or Mesh Decal material, or morph targets | Use a conventional LOD workflow |
| Unity shows only one detail level | LOD meshes must be supplied; naming is Name_LOD0, Name_LOD1 in one FBX |
Make the reduced copies first |
If you decide you do need it
Choose a method on retopology for AI 3D models, then build LODs. Engine-specific import notes are on AI 3D models in Unreal, Godot and Unity, and the order of all steps is on the full pipeline page. If it deforms, see rigging first.
When to stop worrying
If the asset renders correctly in your target scene, holds frame rate on your target hardware, and has no visible defects, there is no documented reason to retopologize it. Profile first.
This page is part of the Cleaning Up AI 3D Models section.
Sources
- Unreal Engine documentation: Nanite Virtualized Geometry
- Godot documentation: Mesh level of detail (LOD)
- Unity 6.0 manual: LOD Group
- Unity 6.0 manual: Importing LOD meshes
- Godot documentation: Import configuration (Meshes > Generate LODs)
- StraySpark devlog (vendor of MeshPrep)
- Roblox Creator Docs: modeling specifications