传统静态网格与nanite

Nanite 是虚幻引擎中的一种虚拟几何体技术,旨在处理超高多边形数量的模型。与传统静态网格不同,Nanite 自动生成并管理细节层次 (LOD),实现了高效的实时渲染。该技术通过将几何体动态分割成小块并按需渲染,从而降低显存使用,并确保场景复杂度不会影响性能。Nanite 使得开发者能够使用极其复杂的模型,而无需手动优化或创建 LOD。

Nanite的优势

几何体形状的复杂度提高了数个数量级,三角形和对象的实时渲染数量达到了前所未有的高度帧预算不再会因为多边形数量、绘制调用和内存使用情况而受限现在可以直接导入电影级品质的美术资源,例如ZBrush雕刻模型和摄影测量扫描数据通过高模实现细节,而非将细节烘培到法线贴图纹理自动处理细节级别(LOD),不再需要手动设置单个网格体的LOD品质损失极少或没有损失,特别是在LOD发生过渡时

缺陷

尽管Nanite带来了前所未有的变革,但在实际使用上,仍会存在一些限制。例如,在考虑实例总数、单个实例的三角形数量、材质复杂度、输出分辨率、项目性能等方面时,还是需要根据实际项目内容和硬件水平来仔细衡量。并不是无限制的堆积模型数量。

发布的限制,目前该技术应该是只可以应用在桌游上,手游上暂时不支持,相信未来会进步的非常快。

Nanite网格体和传统静态网格体的差异

Nanite网格体是一种启用了Nanite的特殊静态网格体。Nanite网格体本质上仍是三角形网格体,但对其数据进行了大量细节和压缩处理。此外,Nanite使用了一种全新系统,能以极高效的方式来渲染这种数据格式。

要让静态网格体利用Nanite,只需一个标记来启用它即可。编辑Nanite网格体的内容和传统网格体没太大不同,区别就在于相比使用传统方法渲染的几何体,Nanite能够渲染的三角形和实例要多出数个数量级。将摄像机移到足够近的位置后,Nanite就会绘制出导入的原始源三角形。

Nanite网格体支持多重UV和顶点颜色。材质可以被指定给网格体的不同分段,并且这些材质可以使用不同的着色模型和动态效果(在着色器中完成)。材质指定可以动态切换,就像其他静态网格体一样。Nanite也无需任何烘焙材质的过程。

虚拟纹理并不要求与Nanite一起使用,但非常推荐这么做。虚拟纹理是正交虚幻引擎功能,它与纹理数据的关系类似于Nanite与网格体数据的关系。

应该将Nanite用于哪些类型的网格体?

一般来说,能启用时应该尽量启用Nanite。启用了Nanite的静态网格体通常可以更快地渲染,占用的内存和磁盘空间会更少。

具体来说,如果网格体满足以下条件,则尤其适合使用Nanite:

包含很多三角形,或屏幕上三角形非常小场景中有很多实例是其他Nanite几何体的主要遮挡物使用虚拟阴影贴图投射阴影

不过有一个例外,那就是 天空球 之类的对象:它的三角形在屏幕上显得很大,不会遮挡任何东西,并且场景中只有一个。通常,这种例外很少见,并且让它们启用Nanite导致的性能损失很小,所以只要Nanite支持,就不必过度担心是否应该不开启Nanite。

导入静态网格体

在导入maya或blender模型时要启用Nanite的网格体时,勾选 构建Nanite(Build Nanite) 复选框。

假如不使用Lightmass预计算光照,我们推荐禁用 生成光照贴图UV(Generate Lightmap UVs) 属性。

启用此属性后,高精度网格体会显著增加静态网格体数据的导入和构建时间。此属性还将增加一个额外的UV通道,这对于非常密集的网格体而言将会产生大量的数据。因此,如果你的项目不使用烘焙光照,则没有必要产生这两项开销。