细分曲面技术带来的变革
在游戏画面的生成过程中,我们一般看到的是3D画面的贴图,但是隐藏在贴图里面的还有3D画面的骨架——几何构图。3D画面的形成首先要构建几何构图,然后再进行渲染。几何构图越复杂,最终形成的物体表面就越接近现实。可以认为Tessellation细分曲面是DirectX 11为我们带来的最重要的革新。
曲面细分示意图,曲面越复杂越接近真实
DirectX 11提供的Tessellator单元本身不具备可编程性,因此DirectX11向Tessellator单元输入或者从中输出的过程是通过两个传统的管线阶段完成的:Hull Shader (HS,外壳着色器)和Domain Shader (DS,域着色器)。
Hull Shader负责接收琐碎的图形数据和资料,而control points将会基于如何配置Tessellator来产生数据。可以说,Tessellator就是一个固定功能模块,用来处理一些基于一定参数的输入数据。最后Domain Shader将会接收由Tessellator产生出的点,并依照终点控制(control points)置换贴图将这些点形成一个合适的几何图形。
实际上R6xx和R7xx硬件都具有Tessellation单元,但是由于Tessellation属于专有实现方案,是AMD的独有技术,因此应用并不算很广泛。而在AMD 的推动下,此次Tessellation成为了DirectX 11中的一个必备的部分,AMD长期不懈的坚持终于得到回报。
在此之前,人们对低代价多边形操作法已经探索了近10年,从最开始的对三角形的fan操纵,到后来的龟裂和冲撞检查,这些方法可以实现曲面细分效果,但是对资源的消耗量太大不可控制。这次微软在DirectX 11中加入硬件Tessellation单元,我们可以视作曲面细分技术历经长时间的磨练后修成正果。虽然它不太符合通用处理单元的设计方向,但是如果计算晶体管的投入与性能回报,独立的硬件Tessellation单元是目前最好的选择。
ATI一直强调的Tessellation是创造更多纹理细节、阴影以及平滑边缘的几何图形的最佳途径之一。而且,高级几何图形同时也需要真正的、完美的位移贴图。当前,大部分几何图形都是通过纹理渲染和某些诸如凹凸贴图、视差贴图之类的技术模拟实现的。开发者们采用Tessellation技术的话,我们可以看到非常逼真的物体效果,而且随着DX11的普及,NVIDIA以及AMD最终将会从Tessellation技术中获益。
GF100拥有更多的PolyMorph(多形体引擎),是以SM(流处理器)为单位分配的,拥有多达16组。多形体引擎则要负责顶点拾取(Vertex Fetch)、细分曲面(Tessellation)、视口转换(Viewport Transform)、属性设定(Attribute Setup)、流输出(Stream Output)等五个方面的处理工作。
DirectX 11中最大的变化之一细分曲面单元(Tessellator)就在这里,因此GF100的理论Tessellation性能将会远超HD 5870(核心代号Cypress),因为Cypress只有一个Tessellator单元。这些硬件上的设计,让GF100在进行Tessellation操作时,性能下降很少。
总体来看,Fermi的多形体引擎相对于以前绝非几何单元改头换面、增强速度而已,它融合了之前的固定功能硬件单元,使之成为一个有机整体。虽然每一个多形体引擎都是简单的顺序设计,但16个作为一体就能像CPU那样进行乱序执行(OoO)了,也就是趋向于并行处理。NVIDIA还特地为这些多形体引擎设置了一个专用通信通道,让它们在任务处理中维持整体性。
当然这种变化复杂得要命,也消耗了NVIDIA工程师无数的精力、资源和时间。有一种传言说,多形体引擎是GF100核心变化的重要组成部分,也是GF100无法在去年及时发布的最主要原因。这么做也是不得已而为之。考虑到细分曲面单元的几何复杂性,固定功能流水线已经不适用,整个流水线都需要重新平衡。通过多形体引擎的并行设计,几何硬件不再受任何固定单元流水线的局限,可以根据芯片尺寸弹性伸缩。