Nanite

自动关联目录:Nanite

官方依据:Nanite Virtualized Geometry Overview(UE 5.8 Documentation)。本页覆盖该官方页的全部条目,并补上官方手册不写的代价、限制成因、CVar 与排查。

1. 定位

Nanite 是 UE 的虚拟化几何系统:用一套自有的网格格式与渲染技术,做到"像素级细节 + 极高物体数量",并且只对屏幕上真正可见的细节做工作。

一句话定位:Nanite 把"三角形数量"从帧预算里拿掉了——代价是它自己独占一条渲染路径,因此有一长串"不支持"清单。

是否启用 Nanite 不是美术决定,是平台与特性决定:先看目标平台是否在支持列表里,再看你的材质/形变需求是否落在支持范围内。

2. 结构

数据是怎么组织的

导入时:
  源网格 → 分析并拆成"层级的三角形簇(hierarchical clusters)"
         → 高度压缩存储

运行时:
  按摄像机视图,在多个 LOD 层级间实时切换簇
  同一物体内相邻簇完美拼接(无缝)
  按需流式加载:只有可见细节驻留内存
  在自己的渲染 Pass 里跑,完全绕开传统 draw call

**因为它依赖从磁盘快速流式读取,官方明确建议使用 SSD 作为运行时存储。**这是很多"PC 上流畅、机械硬盘上卡"的直接原因。

与静态网格的关系

Nanite 网格本质仍是一个三角形网格,只是:

维度说明
核心还是三角形网格,只是数据带了大量 LOD 与压缩
启用方式在网格本身上打一个标记(flag)
UV 与顶点色支持多套 UV 与顶点色
材质按 mesh section 指派,可用不同着色模型与动态效果,可运行时替换,不需要烘焙合并
虚拟纹理不是必需,但强烈推荐(目标相似:一个管几何,一个管纹理)
LOD自动处理,不需要手工为单个网格设置 LOD

3. 收益(官方列出,附我的判断)

官方收益实际含义
几何复杂度提升数个数量级主要解放的是资产制作流程,不是无限免费的性能
帧预算不再受面数、draw call、网格内存约束约束转移到簇的剔除与光栅化成本
可直接导入影视级源资产(ZBrush、摄影测量)省掉高模→低模+法线烘焙这一步
用高模细节而非把细节烘进法线贴图包体结构变化:几何变大、贴图变小
LOD 全自动少一大堆手工 LOD 工作量
质量损失极少或没有主要来自 LOD 过渡,实测仍需看

官方自己也提醒:实际限制仍然存在——实例数、单网格三角形数、材质复杂度、输出分辨率、性能,都要针对你的内容与硬件实测。

4. 该用在哪些网格上

通用原则:支持的平台上尽量都开,开了通常更快、更省内存与磁盘。

特别适合:

特征原因
三角形很多,或屏幕上三角形很小Nanite 的 LOD 选择正是为此设计
场景中有大量实例绕开传统 draw call
是其他 Nanite 几何的主要遮挡体剔除收益大
用虚拟阴影贴图投影与 VSM 配合好

不适合(官方点名的例外):天空球——三角形在屏幕上很大、不遮挡任何东西、场景里只有一个。官方也说这类例外很少,且性能损失很小,不必过度纠结"哪里不该开"。

5. 关键 API 与配置

启用方式(三种)

1. 导入时勾选 Build Nanite
2. 单个网格编辑器:Details → Nanite Settings → Enable Nanite Support
3. Content Browser 批量:选中多个 → 右键 → Nanite > Enable

可启用 Nanite 的组件类型:

组件
Static Mesh
Skeletal Mesh
Instanced Static Mesh
Spline Mesh
Hierarchical Instanced Static Mesh
Geometry Collection
Foliage Painter
Landscape Grass

转换每个网格都要处理时间,大项目里共享 DDC 非常重要(见 Cook 与打包流程)。

导入时的一个实际建议

不用 Lightmass 烘焙 GI 时,官方建议关闭 Generate Lightmap UVs:高细节几何会显著增加导入与构建时间,而且这会多出一套 UV 通道,对高密度网格是很大的数据量。

项目设置

Project Settings → Engine > Rendering → Nanite;各网格编辑器(静态/骨骼)的 Details 面板也有各自的 Nanite 设置。

6. 特性矩阵

特性要点
Nanite 静态网格无 LOD,按屏幕分辨率动态缩放多边形数;完整支持 Lumen GI/反射与 VSM
Nanite 骨骼网格一次 draw call 画整个网格;VSM 投影;无几何 LOD(用动画 LOD);支持动画库实例化
Nanite 地形可与地形配合提升性能,尤其配合虚拟阴影
Nanite 植被用实例化 + 蒙皮 + 体素化 + 动画 + 材质特性组合,实现大规模高密度植被
Nanite 样条默认支持,可用于 Landscape Spline 与 Blueprint Spline(道路、小径)
静态置换贴图静态网格编辑器里的离线自适应细分器,把置换烘进 Nanite 网格,非破坏性
Nanite 细分(Tessellation)运行时可编程位移,可用置换贴图或程序化材质动态改网格

7. 支持范围(这份清单是判断是否可用的第一依据)

几何

项限制
可启用类型Static Mesh、Geometry Collection
场景实例数上限硬上限 1600 万(含所有流式载入的实例,不只是 Nanite 的;只计入已流送进来的)
逐顶点切线不存储,切空间在像素着色器里隐式推导(为省数据)。可能在边缘产生不连续;官方称影响不显著,计划未来支持
形变支持动态平移、旋转、非均匀缩放(即"能用一个 4x3 矩阵乘法统一表达"的变换)

网格形变

项支持情况
WPO(世界位置偏移)支持但受限:用 WPO 的 Nanite 网格会被切成更小的簇,每个簇独立包围盒、独立 GPU 剔除,必须 clamp 位移量来控制被剔除的簇数量
植被用 WPO问题较小,因为植被本身有孔洞、不会自遮挡
Morph Target不支持

材质

项支持情况
Blend Mode只支持 Opaque 和 Masked;检测到不支持的类型会换默认材质并在 Output Log 报警
贴花能接收投影贴花;不支持 Mesh Decals(它需要 Translucent)
Wireframe 勾选不支持
Vertex Interpolator / Custom UV支持,但每像素求值三次;Custom UV0/1 在硬件光栅化下由硬件插值
Custom expression 节点可能产生瑕疵——因为 Nanite 还没有解析导数支持(如 ParallaxOcclusionMapping 这类用到的会有问题)

渲染(不支持清单)

不支持说明
按视图过滤物体Minimum Screen Radius、距离剔除都不支持
前向渲染不支持
VR 立体渲染不支持
MSAA不支持(只能走 TSR 等时域方案)
Lighting Channels不支持
对 Nanite 网格做光线追踪默认用 Fallback Mesh;要更接近源网格就调低静态网格编辑器里的 Fallback Relative Error
——实验性:r.RayTracing.Nanite.Mode 1 开启原生光追,保留全部细节且比零误差 Fallback Mesh 省很多显存
部分可视化视图模式尚不支持显示 Nanite 网格

编辑器里看高细节几何的法线/UV 视图模式要小心——一次性把全部数据显示在屏幕上会拖垮编辑器性能。

平台

当前主机与桌面平台,显卡需最新驱动 + DirectX 12 + Shader Model 6(SM6)。

8. 参数与控制台变量

CVar / 设置作用
r.RayTracing.Nanite.Mode设为 1 启用实验性 Nanite 原生光追(省显存)
Fallback Relative Error(网格编辑器)调低 → Fallback Mesh 用更多源三角形(更准、更贵)
r.Nanite.*各类 Nanite 调试与开关(可视化模式、剔除开关等)
Project Settings → Rendering → Nanite项目级默认值

注意:Nanite 的可视化模式(Nanite Visualization)是排查"为什么这个网格看起来是糊的"的第一工具——能看到三角形/簇的实际分布。

9. 代价与权衡

权衡说明什么时候不该用
包体结构改变几何数据增大、法线贴图减小磁盘/下载预算极紧且本来就靠法线贴图的项目要实测
独占渲染路径不支持 MSAA / 前向渲染 / VR做 VR 或必须用前向渲染时直接不能用
不支持形变与 Morph角色表情、软体形变做不了需要 Morph Target 的角色换成传统骨骼网格
依赖 SSD 流式机械硬盘上会明显劣化目标平台存储慢时要评估
1600 万实例上限超大开放世界可能撞顶需要按流式区域控制实例总量
Custom expression 有瑕疵高级材质技法受限依赖视差遮蔽等技法时要改材质
转换耗时每个网格都要处理,大项目必须配共享 DDCCI 上没配 DDC 会很痛

10. 踩坑与排查

坑现象怎么验证
材质被换成默认材质网格变成灰色/棋盘格看 Output Log 的警告,检查 Blend Mode 是不是 Opaque/Masked
WPO 网格被过度剔除大位移时物体部分消失检查是否 clamp 了位移量;用 Nanite Visualization 看簇
用了 Morph Target表情/形变无效Nanite 不支持,需关 Nanite
光追下细节丢失反射/光追里网格很粗糙调低 Fallback Relative Error,或试 r.RayTracing.Nanite.Mode 1
机械硬盘上卡流式跟不上官方建议 SSD;监控流式加载
实例数撞上限远处物体不显示统计场景中已流式实例数是否接近 1600 万
材质出现奇怪瑕疵用了 Custom expression 节点换成官方支持节点,或关 Nanite 验证
编辑器看 UV/法线卡死高模数据一次性渲染别在高密度网格上用这些视图模式
导入特别慢开了 Generate Lightmap UVs不用烘焙 GI 就关掉
打包后转换重来一遍DDC 没共享配共享 DDC(见 Cook 与打包流程)

11. 排查顺序

1. 平台是否支持?(DX12 + SM6)
2. 材质 Blend Mode 是否 Opaque/Masked?
3. 是否用了不支持的特性?(Morph、前向渲染、MSAA、VR、Lighting Channels)
4. 视觉异常 → Nanite Visualization 看簇与三角形
5. 性能问题 → profilegpu 看 Nanite Pass;确认存储在 SSD
6. 光追相关 → Fallback Mesh 精度与 r.RayTracing.Nanite.Mode

参考