● DirectX 11引入可编程曲面细分管线
在DirectX10时代的细分曲面里,最有新用途的就是Geometry Shader和Stream Out,前者可以输入一些数据,然后产生一些三角形,后者可以断绝Pixel Shader,做完Geometry Shader就直接输出回Input Assembler,这就意味着可以做GPU递归和迭代。
而DirectX 11相比DirectX 10,Shader Model的变化并不算大,只是增加了5个全新的指令集。但是对于游戏开发者而言,Shader Model 5.0函数和子程序代码的开发都比上一代更加简单方便。增加的五个新指令集目的也是为了让编程者可以进行更灵活的数据访问和操作。
在Shader Model 5.0中,Shader进行了类型的统一,除了4.0版本中就已经有的Vertex Shader、Pixel Shader、Geometry Shader外,还增加了Hull Shader、Compute Shader、Domain Shader三种新的Shade,它们的出现都是为了完善曲面细分管线。
ATI的HD2000以上级别显卡其实都具备Tessellation的功能,但它们却无法与DX11中的Tessellation技术相兼容。这是因为微软并没有原封未动的将R600的Tessellation技术抄到DX11之中,而是对其进行了优化,使之能与渲染流程完美的结合在一起,可以更高效率的细分出更多的多边形和曲面。
与DX9C/DX10时代孤零零的Tessellator模块不同,在DX11当中,微软加入了两种全新着色器来全力配合Tessellator的工作,分别位于镶嵌器的前后。
其中Hull Shader(外壳着色器)用来控制自动生成顶点的数量和算法,也就是Tessellator的细分级别,然后交给Tesselator进行镶嵌处理,最后由Domain Shader(域着色器)按照程序要求生成所需曲面,并自动进行法线平移、置换贴图,产生新的模型。
与DX9/10中的Tessellation技术相比,DX11新增的两种着色器都受统一渲染架构支配,因此处理能力非常富裕,DX11版Tessellation不仅效率更高、而且细分级别更丰富。但是,更高的细分等级对Tessellator模块本身的处理能力提出了苛刻要求,这需要芯片厂商在设计之初就考虑周全。