● 背锅的命运无法逃避?那就微笑着面对吧
“尽管像素和像素着色器更加吸引人们的目光,但几何体才是一切的根源所在。没有了几何体,我们将发现光照、阴影和反射毫无意义。因为提高底层几何体的复杂度,将同时提高像素的质量。” ——Evan Hart
对于几何模型精度的需求,永远是图形需求最重要的组成部分。模型精度的增长所带来的好处是显而易见的,但由此带来的顶点负载也是CPU断然不可能承受的。CPU不肯背这口新的黑锅,GPU就只好硬着头皮顶上了。
模型细节演进
于是,在DirectX 11 GPU当中,我们发现了几何部分的重大变化——除了熟悉的setup之外,Tesselation和功能更加完善的Geometry Shader来了。
区别于以往的传统的处理方式,新的Geometry Shader+Tesselation允许GPU自己生成新的顶点并完成设置工作。现在CPU还是干以前一样的工作,基本模型的顶点还是由他来生成,而且数量也没有变化,只不过当顶点再次流入到GPU之后情况会发生些许变化。现在的几何单元会先查看程序中是否包含一种叫做镶嵌系数的新东西,如果没有,则几何单元重复上面的香草解救大作战;如果有,则几何单元将会进入一个全新的状态。
首先,CPU生成的模型依旧不变,几何单元在阅读了同顶点模型信息一起传过来的镶嵌系数及方程之后,会先让Geometry Shader中的Hull Shader对曲面要求进行解析,按照要求寻找其中的控制点,然后让Tesselator单元根据系数的要求生成全新的点。新生成的点全部在旧有顶点范围之内,当这些新生成的点被Tesselator单元送出之后,Hull Shader会根据程序的镶嵌说明把它们送到新的位置上并完成必要的调整,最后再由Domain Shader把Hull shader调整好的镶嵌点变成新的顶点输送给setup。
好像很神秘的曲面细分过程,其实就这么简单——程序员对模型的外表不满意,于是就在平平的多边形的里面生成新的点,再把这些点稍微拉离原多边形的平面,最后再把这个点跟多边形原有的顶点一连,完事了。
这里有一点值得注意,我们的原始的模型依旧没变,香草还是香草,她不会因为这些新的顶点而变成香菜。但如果镶嵌系数过大,香草也许会变胖,或者好像去了一趟韩国而且失败而归之类的……因此镶嵌或者说曲面细分过程需要适度,这样既可以保证模型细节的进一步细腻化,又不会因为新加入的细节过于明显而导致喧宾夺主并显著改变原始模型的基本特征。
三秦IT网的官方微信:更多资讯请关注:三秦IT网官方微博