UE 知识卡片NaniteUE5.7
Nanite 核心机制
数据结构、Cluster Culling、软件光栅化,以及这些设计如何自然导出已知限制与规避策略。
Question
请深入探讨 Nanite 如何实现“万亿三角形场景”:数据结构、剔除与光栅化管线;这些机制如何固有地导致限制(材质类型、动态形变等);以及在 UE5.7 中如何规避。
一句话结论
Nanite 把高模切成可流送的 Cluster 层级树,用 GPU 上的细粒度剔除 + 软件光栅化只画对最终像素有贡献的几何;代价是系统为静态不透明几何高度特化,动态形变 / 半透明 / 传统细分等路径天然别扭。
Cluster ≈ 128 tri压缩顶点/法线,层级多分辨率树
视图依赖 LOD按屏幕贡献连续选簇,告别手动 LOD pop-in
软件光栅化擅长海量微三角,支持多视图深度
流式加载只把可见贡献簇解压进内存
核心机制
- 数据结构与虚拟化:导入时把高精度网格转成内部层级 Cluster 格式;按需流送,只有屏幕需要的簇才进内存。
- Cluster Culling:视锥 + 遮挡 + 屏幕空间大小的 GPU 剔除;连续视图依赖 LOD,只处理最终像素真正需要的簇。
- 软件光栅化:不走固定功能硬件光栅;为微三角与多视图深度(Lumen / VSM)定制。
固有限制(设计后果)
| 限制 | 为何天生如此 | 现状 / 规避 |
|---|---|---|
| 骨骼 / 强 WPO | 簇与剔除信息按静态几何预计算;逐帧变形会打穿流送/压缩优势 | 角色通常非 Nanite;WPO/Masked 可用但要严测 |
| 半透明 / Masked | 管线优化不透明深度优先;半透明排序/混合冲突;Masked 的 discard 干扰激进剔除 | 半透明保持非 Nanite;Masked 尽量简化材质 |
| 传统细分 / 置换 | 理念是“直接吃高模”,运行时再细分与虚拟化数据结构冲突 | 5.4+ 有实验支持,复杂场景不稳;更推荐源模高细节 |
| Overdraw / 超高分辨率 | 堆叠/掠射角仍可能多簇盖同像素;分辨率越高,更多簇进入全细节 | 资产避免无意义堆叠;用可视化与 Screen Percentage 管预算 |
UE5.7 实践清单
- 混合策略:骨骼、复杂半透明、传统细分 → 非 Nanite
- WPO / Masked:逻辑尽量简单,配合
r.Nanite.Visualize分析 - Nanite Foliage:可用,但 WPO/Masked 仍是雷区;远处可切不透明/LOD
- 创作原则:避免孤立微几何、利于剔除的实体结构
- 分析:
stat GPU、r.Nanite.Visualize系列