介绍虚幻引擎5中的虚拟几何体系统——一种可以获得像素级细节和海量对象的系统。
UE5-Nanite官方文档
Nanite是什么?
Nanite是虚幻引擎5的虚拟化几何体系统,它采用全新的内部网格体格式和渲染技术来渲染像素级别的细节以及海量对象。它可以智能地仅处理你能够感受到的细节。另外,Nanite采用高度压缩的数据格式,并且支持具有自动细节级别的细粒度流送。
流程上,Nanite允许用户先使用最高分辨率的资产来构造数字内容,然后再针对download size(云端)或者disk size(本地)来优化package的大小,而不是一开始就限制资产制作精度。
设计的目的
- 类似于virtual texture一样支持virtual geometry(支持LOD,且可以快速stream in/out,支持超出显存/内存的数据规模)
- 不需要考虑budget问题,包括:
- 多边形数量
- draw call数量
- 内存用量
- 允许直接使用电影级别质量的艺术资产
- 直接可用
- 不需要大量的手工优化渲染工作
- 质量上没有损失
实现的困难
比virtual texturing困难多了
- 不只是需要很好的内存管理
- 几何细节直接会影响渲染开销
- 几何并不是很简单的就可以过滤的(相比于纹理可以很容易构造mip-map)
使用哪种几何表达?
研究了几种潜在的几何表达方式:
- 体素(voxel)
- 细分曲面(subdivision surface)
- 置换贴图(displacement map)
- 几何图像(geometry image)
- 基于点的图形(point based)
- …
三角形cluster剔除
cluster sampling (整群抽样)
整群抽样是指整群地抽选样本单位,对被抽选的各群进行全面调查的一种抽样组织方式。例如,检验某种零件的质量时,不是逐个抽取零件,而是随机抽若干盒 (每盒装有若干个零件),对所抽各盒零件进行全面检验。如果全及总体划分为单位数目相等的R个群,用不重复抽样方法,从R群中抽取r群进行调查。
先将总体分为i个群,然后从i个群中随机抽取若干个群,对这些群内所有个体或单元均进行调查。
- 把三角形组织为cluster
- 对每个cluster构造包围数据
- 基于包围数据剔除cluster
- frustum剔除
- 遮挡剔除
cluster层级
- 对每个cluster决定LOD级别
- 构造LOD的层级
- 最简单的就是cluster的二叉树
- 父节点是子节点的简化版本
LOD Runtime
- 在LOD树中根据需要的精度,寻找cut
- 基于感知差异的视角依赖方法
流处理
- 整颗树不需要一次性载入内存
- 可以把树中的任意cut标记为叶子节点,然后扔掉剩下的数据
- 在渲染的时候按照需要请求数据
- 和virtual texturing类似
像素级别的细节
- 大于一个像素的三角形能否达到像素级别精度
- 依赖于三角形有多光滑
- 一般不行
- 我们需要绘制像素大小的三角形
细微的三角形
- 对于典型的光栅化来说非常难处理
- 通常是基于像素并行,而不是基于三角形
- 软件光栅化在这种情况能不能打败硬件光栅化?
- 软件光栅化
- 比硬件光栅化快3倍
- 硬件光栅化
- 对于大的三角形还是用硬件光栅化</