UE 知识卡片NaniteUE5.7

Nanite 核心机制

数据结构、Cluster Culling、软件光栅化,以及这些设计如何自然导出已知限制与规避策略。

Question

请深入探讨 Nanite 如何实现“万亿三角形场景”:数据结构、剔除与光栅化管线;这些机制如何固有地导致限制(材质类型、动态形变等);以及在 UE5.7 中如何规避。

一句话结论

Nanite 把高模切成可流送的 Cluster 层级树,用 GPU 上的细粒度剔除 + 软件光栅化只画对最终像素有贡献的几何;代价是系统为静态不透明几何高度特化,动态形变 / 半透明 / 传统细分等路径天然别扭。

Cluster ≈ 128 tri压缩顶点/法线,层级多分辨率树
视图依赖 LOD按屏幕贡献连续选簇,告别手动 LOD pop-in
软件光栅化擅长海量微三角,支持多视图深度
流式加载只把可见贡献簇解压进内存

核心机制

  1. 数据结构与虚拟化:导入时把高精度网格转成内部层级 Cluster 格式;按需流送,只有屏幕需要的簇才进内存。
  2. Cluster Culling:视锥 + 遮挡 + 屏幕空间大小的 GPU 剔除;连续视图依赖 LOD,只处理最终像素真正需要的簇。
  3. 软件光栅化:不走固定功能硬件光栅;为微三角与多视图深度(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 GPUr.Nanite.Visualize 系列