王者归来性能翻番 GeForce6技术解析
首先我们先来谈一谈GeForce 6系列支持的DirectX 9.0中的VertexShader 3.0。
对于VertexShader,很多关心图形技术的朋友应该已经比较熟悉了,VertexShader直译过来是顶点着色器的意思。VertexShader的具体过程就是完全处理网格中的每一个顶点,而处理的过程则是由程序员预先通过编写好的程序来控制并实现。这个过程中,每个顶点的颜色、贴图坐标等信息都可以任意修改然后生成。
更形象一点的说明,这就像一个C语言函数,输入参数是一个顶点的位置、法线和颜色等,而输出过程可以由程序员自己控制确定。然后所有这些通过三角形插值计算后传到下一个函数——PixelShader去。至于如何处理输入信息,如何生成输出信息,都可以提前在这段程序中指定。
● 无限长度的顶点处理程序
在CineFX 3.0版本的VertexShader中,对于程序的长度已经没有了限制。这也就意味着程序员可以根据自己的需要任意编写渲染顶点用的程序,不必受原来的限制。
这里要额外说明几个问题。图形编程虽然属于高级语言,但是仍然需要生成类似于汇编语言的代码。在VertexShader 1.0中,对于最终的每个程序的代码长度,DirectX限制是128条。到了VertexShader 2.0中,程序的长度增加到了256条。
笔者之前在没有得到VertexShader信息的时候,曾经估计VertexShader 3.0指令的长度仍然会受到限制,但是将达到2.0版本的两倍,也就是512条。但现在看来我们低估了这些业界的开发精英们。3.0版本的VertexShader的确在这个方面是有质的提高,而且给了大家,特别是图形程序员一个大大的惊喜——长度无限了!
这点其实是非常重要的,因为如果在原来,程序员要利用VertexShader处理复杂的顶点信息,那么他在编程序的时候就需要受到旧版本VertexShader的限制。程序因此不能够写的太长,而需要分别的写成数个程序,然后在具体执行时,一个接一个的运行。这样的情况会造成程序在执行的时候,效率并不是很高,因为各个独立程序之间的切换,以及数据传输都要占掉很多资源。
如果Shader有长度限制,原来可能还需要把一些比较复杂的效果分成几种效果在最终进行组合,然后把模型分别用这些效果向屏幕的后备缓冲中绘制,这个过程会重复很多遍并叠加,这也导致效率降低。
而现在就好了,在新版本的VertexShader中,程序的长度不再受到限制,程序员可以通过写一个独立的程序来完成全部的操作。
这样的好处不言而明,运行一个单独的程序能够省掉中间的跳转的步骤,让程序运行的速度加快。<