Nanite - 2

Virtual Geometry

无限的几何细节

Virtual Texture

纹理是 unifrom 的,可以进行插值,制作 clipmap,也好实现 Virtual Texture

Virtual Texture 就是根据角色所在位置密度不一样的纹理

Geometry filter

三角形几何没法做过滤,没法自然的 LOD

Voxel 体素

体素好做过滤,但是不合适工作流,存储量大

Subdivision Surfaces

几何细分,四边形面合适,没法做简化

Maps-based

用纹理表示几何,display map,不好做硬表面

Point Cloud

点云,overdraw 严重,uv 不好做

最终选择三角形。

Nanite Geometry Representation

nanite 的几何表达

根据屏幕精度决定 nanite 精度

Represent geometry by cluster

对每个物体,不同的位置三角形密度不同

每层的 Lod 都和上一层差一个单维度的两倍,构建出一个 LOD 树

先合并 Cluster 成为 Group 再简化 Group,而不是直接简化 Cluster

树就产生了环

每层 LoD 接缝缝合边的时候生成的缝合边都不重合,类似于渲染的 jiter

每帧都不一样,让人眼不容易看出来

Dag 有向无环图

Mesh 简化

mesh 简化算法

Runtime LoD Selection

Parallel 如何并行化,如何每个 LOD 节点判断自己是否应当被绘制

ClusterError 可见值

threshold 根据 Cluster

BVH Acceleration for LoD Selection

提前使用 BVH 粗阶段 Cull 掉明显不用渲染的 clucter group

再把剩下的 cluster group 并行化

Nanite Rasterization

当三角形大小等于屏幕像素大小是,硬件光栅化不再好用,使用 compute shader 加速

Nanite Visibility Buffer

手动 early z

只能处理不会变形的网格

Imposters for Tiny Instance

当物体特别远的时候,非常简化的模型表现失真

12 * 12 的方向去渲染一个对象,存到一张纹理里,在很小的情况下,直接采样到屏幕上。

Nanite Deferred Material

使用 Tile base 的方法,

对于每个材质,在 Tile 里画出材质的深度,TIle 里有几个材质就用几张纹理

当屏幕深度等于材质画的深度时,说明材质对应的物体可被绘制

Shadows

lumen 间接光照与几何数量无关,可以直接用

级联阴影

cascaded shadow map,即 view depend sampleing

Virtual Shadow map

16k * 16k 的 virtual shadow map

Streaming and Compressed

几何,用到即加载,不用到即卸载

浮点转顶点

Hardware LZ decompression

直接从硬盘读到显存

最后更新于