首先官方的宣传片里提到的支持数十亿面模型渲染的方法是Nanite虚拟多边形系统。这事估计得先从显卡架构升级说起。
1 什么是图灵显卡?
第一代图灵显卡是由NVIDIA 在2018年发布的,Quadro系列的全新架构模式。最重要的突破就是内置了全新的RT Core(光线追踪核心)。
GeForce RTX的20XX系列,也是首次支持光线追踪的显卡系列。
图灵的架构不但支持了新的光追管线,“顺便”还延伸了一个新的管线叫 Mesh Shading。也就是这次UE5能够支持超多三角面的底层原理。(猜的)
2 图灵显卡上的mesh shader
最早的渲染管线属于硬件管线,随着软硬件的发展变为可编程管线。这个阶段我们听到的最多的就是VS和PS即顶点着色器和像素着色器。
但这不是可编程管线的全部,随着硬件和画质需求的不断增强,还有诸如曲面、几何着色器等流程加入可编程管线中。
流程越多越固化,表示要重复处理的东西就越多。因此NVIDIA 启用了新的Mesh Shading 管线,将光栅化阶段前的阶段整合为两个,task 和 mesh。
对比一下两个管线,可以发现光栅化之前的流程都重做了,而光栅化之后的可以复用。
Task着色器: 一种可编程单元,在工作组中运行,允许每个工作组发起(或不发起)Mesh 着色器的工作组。
Mesh着色器: 一种可编程单元,在工作组中运行,允许每个工作组生成primitives(图元)。
Task和Mesh着色器都使用了内部的协作线程模型,输入和输出都可以是用户自定义的。
任务和网格着色器还遵循compute shaders 的原则,它有两个好处:
第一,所有的协作线程都可以自定义的编程以用作不同的目的,并且他们之间的数据可以共享。
第二,因为所有流程在同一个管线中,硬件可以直接管理各阶段之间的内存传递和芯片上的存储。
通过Task着色器进行的可选扩展,允许更早的剔除一组图元或预先制定LOD决策。该机制是在GPU上扩展,因此正在取代实例化或间接的针对小网格物体进行的多绘制。
一个Task工作组可以发起多少个Mesh工作组是有限制的,第一代硬件支持每个Task最多可以生成64K个子任务。但在同一个draw调用中,跨所有任务的mesh子节点的总数没有限制。
Mesh着色器的一个重要目标就是要尽可能多的去利用公共数据,通过数据结构优化之后能增加每个mesh所计算的数量和内容。在同样的总吞吐量的前提下,单个mesh开销越小,能并发的工作组就越多。
这也是官方提到的meshlet的核心功能。
https://devblogs.nvidia.com/wp-content/uploads/2018/09/meshlets_motivation.pngdevblogs.nvidia.com