GF100图形处理集群改进:PolyMorph引擎
GPC是GF100的主要高级硬件模块。它拥有两项重要的创新:一个用于三角形设置、光栅化以及Z坐标压缩(Z-cull)的可扩展Raster引擎,一个用于顶点属性提取与Tessellation(曲面细分)的可扩展PolyMorph引擎。Raster引擎驻留在GPC当中,而PolyMorph引擎则驻留在SM中。
虽然可编程着色让PC游戏能够在每像素特效上与电影相媲美,但是在几何学逼真度上PC游戏还差得很远。当今非常先进的PC游戏在每一帧中运用一两百万个多边形。相比之下,计算机生成的电影中每一帧通常会运用数以亿计的多边形!在解决几何学逼真度这一问题上,NVIDIA把目光投在了电影上获得启发。电影中人物的精细画质归功于两种关键技术:Tessellation(曲面细分)以及Displacement Mapping(贴图置换)。
Tessellation(曲面细分)的使用从根本上改变了GPU图形负荷的平衡。凭借Tessellation(曲面细分),特定帧中的三角形密度能够增加数十倍,但这给设置于光栅化单元等串行工作的资源带来了巨大压力。为了保持较高的Tessellation(曲面细分)性能,有必要重新平衡图形计算流水线。
为了便于实现较高的三角形速率,NVIDIA设计了一种叫做“PolyMorph引擎”的可扩展几何引擎。每16个PolyMorph引擎均拥有自己专用的顶点获取单元以及Tessellator,从而极大地提升了几何性能。与之搭配,每个GPC还配有一个并行Raster引擎,它们在每个时钟周期内可设置最多四个三角形。同时,它们还能够在三角形获取、Tessellation(曲面细分)、以及光栅化等方面实现巨大性能突破。
PolyMorph引擎:
PolyMorph引擎拥有五个阶段:顶点获取、Tessellation(曲面细分)、观察口转换、属性设置以及流式输出。每个阶段中所运算得出的结果均被发送至一个SM。该SM能够执行游戏的着色程序、将结果返回至PolyMorph引擎中的下一个阶段。在所有阶段都完毕之后,结果会被传递给Raster引擎。
第一个阶段是从一个全局顶点缓冲区中获取顶点。所获取的顶点于是被发送至SM,以进行顶点着色以及外壳着色。在这两个阶段中,顶点从一个物体空间转变成了世界空间,而且还算出了Tessellation(曲面细分)所需的参数(例如Tessellation(曲面细分)系数)。Tessellation(曲面细分)系数(或LOD)被发送至Tessellator。
在第二个阶段中,PolyMorph引擎读取Tessellation(曲面细分)系数。Tessellator将修补面(控制点网格所定义的光滑表面)分成小方块并输出许多顶点。修补(u、v)值定义了网格以及形成网格的连接方式。
全新的顶点被发送至SM,域着色器与几何着色器均在这里执行。域着色器能够根据外壳着色器与Tessellator的输入来运算每个顶点的最终位置。在本阶段中,通常会附上一个Displacement Mapping(贴图置换)以提升修补面的细节表现。几何着色器能够执行任何后期处理、按需增加或删除顶点以及基元。结果最终将被发回至Tessellation(曲面细分)引擎。
在第三个阶段,PolyMorph引擎会执行观察口转换以及视角校正。接下来就是属性设置,把后期观察口顶点属性转变成了平面方程,以进行高效的着色器评估。最后,可以选择将顶点“流出”至存储器,使其能够用于更多处理。
在之前的架构上,固定功能的操作由单个流水线来执行。在GF100上,固定功能与可编程操作全部都实现了并行化,从而极大地提升了性能。