Nanite是虚幻引擎5的虚拟化几何体系统,它采用全新的内部网格体格式和渲染技术来渲染像素级别的细节以及海量对象。它可以智能的仅处理你能感受到的细节。另外,Nanite采用高度压缩的数据格式,并且支持具有自动细节级别的颗粒度流送。
Nanite的优势
- 几何体形状的复杂度提高了数个数量级,三角形和对象的实时渲染数量达到了前所未有的高度
- 帧预算不再会因为多边形数量、绘制调用和网格体内存使用情况而受限
- 现在可以直接导入电影级品质的美术资源,例如ZBrush雕刻模型和摄影测量扫描数据
- 通过高模实现细节,而非将细节烘培到法线贴图纹理
- 自动处理细节级别(LOD),不再需要手动设置单个网格体的LOD
- 品质损失极少或没有损失,特别是在LOD发生过渡时
尽管Nanite带来了前所未有的变革,但在实际使用上,仍会存在一些限制。 例如,在考虑实例总数、单个网格体的三角形数量、材质复杂度、输出分辨率、项目性能等方面时,还是需要根据实际项目内容和硬件水平来仔细衡量。 与此同时,在虚幻引擎未来的版本中,Nanite将不断扩展功能并提升性能。
Nanite网格体和传统静态网格体的不同之处
Nanite网格体是一种启用了Nanite的特殊静态网格体。 Nanite网格体本质上仍是三角形网格体,但对其数据进行了大量细节和压缩处理。 此外,Nanite使用了一种全新系统,能以极高效的方式来渲染这种数据格式。
要让静态网格体利用Nanite,只需一个标记来启用它即可。 编辑Nanite网格体的内容和传统网格体没太大不同,区别就在于相比使用传统方法渲染的几何体,Nanite能够渲染的三角形和实例要多出数个数量级。 将摄像机移到足够近的位置后,Nanite就会绘制出导入的原始源三角形。
Nanite网格体支持多重UV和顶点颜色。 材质可以被分配给网格体的不同分段,并且这些材质可以使用不同的着色模型和动态效果(在着色器中完成)。 材质指定可以动态切换,就像其他静态网格体一样。Nanite也无需任何烘焙材质的过程。
虚拟纹理并非必须与Nanite一起使用,但强烈建议使用虚拟纹理。 虚拟纹理是正交虚幻引擎功能,它与纹理数据的关系类似于Nanite与网格体数据的关系。
Nanite如何工作?
Nanite可最大限度地与现有的引擎工作流程无缝集成,可使用前所未有的方法来存储和渲染网格体数据。
- 导入期间 — 分析网格体,并将其拆分成由三角形组构成的分层群集。
- 渲染期间 — 根据摄像机视图以不同LOD随时切换群集,并且可以在不破坏同一对象中相邻群集的情况下完美连接。 数据会根据需求流送,因此只有可见细节才会保存在内存中。 Nanite在自己的渲染通道中运行,该通道完全绕过了传统的绘制调用。 你可以使用可视化模式来检视Nanite管线。
由于Nanite需要从磁盘快速流送网格体数据。 建议使用固态硬盘(即SSD)来存储运行时数据。
应该将Nanite用于哪些类型的网格体?
一般来说,能启用时应该尽量启用Nanite。 启用了Nanite的静态网格体通常可以更快地渲染,占用的内存和磁盘空间会更少。
具体来说,如果网格体满足以下条件,则尤其适合使用Nanite:
- 包含很多三角形,或屏幕上的三角形非常小
- 场景中有很多实例
- 是其他Nanite几何体的主要遮挡物
- 使用虚拟阴影贴图投射阴影