NV40核心技术解析
硬件周刊
经过18个月的研发,NVIDIA终于在2004年4月14日正式发布了万众期待的GeForce图形芯片的第6代产品──研发代号为NV40的GeForce 6800系列图形芯片!那么,NVIDIA这款新GPU相对NV35/38来说具有哪些新技术、新特点呢?针对这个问题,我们在这里介绍一下NV40核心技术。
一、创记录的像素渲染流水线布局
NV40最令人震憾的地方不是支持DriectX9.0C,而是它的像素渲染流水线布局。以前,NVIDIA在NV35/38中只采用4条像素渲染流水线(每条像素渲染流水线有2个纹理贴图单元),NVIDIA宣称8个纹理贴图单元不固定分布于每一条渲染流水线,而是集簇在一起,可以根据不同的渲染情况,实现不同的纹理贴图单元组合。虽说NVIDIA这个创意极具灵活性,但是也由此降低了NV35/38的着色器渲染效能。市场、用户并不太认可,对于众多用户,R300/R350的8条独立像素流水线似乎更具吸引力!毕竟从应用层面来说,一心一用比一心两用要强,而且有时候NV35/38每条渲染流水线中的纹理贴图并不能完全达到两个!因此,NVIDIA对NV40的像素渲染流水线的布局进行了很大的改进,破记录地采用了16条像素渲染管线,每条渲染管线拥有1个纹理贴图单元。
提示:像素渲染主要用于对材质的表面贴图,这可以使得3D物体的表面不再具有令人讨厌的“计算机感”。具体地说,计算机所描绘的物体表面往往带有明显的金属质感──平滑、生硬。这是由贴图的方式决定的,由于被贴图的3D物体表面本身是平滑的,所以在传统贴图方式下,为了解决由此带来的视觉效果问题,要使用大量复杂的材质贴图库,因此像素流水线的数量对像素填充率能力有着至关重要的影响。
二、强大的CineFX引擎
此外,NV40的另一大亮点是它的CineFX 3.0引擎。CineFX技术可以说是微软的DriectX所支持的顶点渲染和像素渲染技术的具体实现。与CineFX 2.0相比,CineFX 3.0在着色器模式方面完全支持DriectX9.0C的Vertex Shader3.0(顶点着色器)和Piexl Shader3.0(像素着色器)规范。
1.全面支持Pixel Shader 3.0
借助CineFX引擎的升级,NVIDIA将着色器的编程能力推进到新的高度,全面对Pixel Shader 3.0提供支持。最明显的地方是支持的指令数方面,Pixel Shader 3.0要比Pixel Shader 2.0复杂多了,Pixel Shader 3.0中支持最小指令数从2.0 Extended的96条激增到了512条,而最大指令数则从512条激增到32768条,具备单独模块柔和能力以及条件写掩码能力。
在这里Pixel Shader成了图形生成流水线最为重要的可编程模块之一,扩展了开发人员控制像素创造效果的能力,提供了一个相对自由的平台。可编程像素贴图的优点在于不采用复杂的材质贴图,而是对贴图过程进行编程处理。编程的灵活性很高,所以用简单的贴图就可以做出复杂的表面效果。一方面可以大大减少材质库所占用的存储空间,另一方面贴图的种类也不再局限于材质库中的贴图,通过编程创造出根本不存在的材质表面。NV40中这个架构超越了单纯像素领域的控制,如果开发人员充分利用这个特性,像一些难以实现的流体运动将变得更加真实。
而且Pixe Shader 3.0中的像素着色程序的长度不再受限制,这样就大大扩展了开发人员控制像素创造效果的能力。以前,为了适应程序长度的限制,复杂的效果需要分成一系列渲染程序的组合。在某些情况下,由于程序的长度过长,硬件没法渲染,造成性能下降,减慢了游戏的运行速度,还会使得实际效果不尽如人意。而现在程序员们可以根据自己的需要任意加长程序长度,实现复杂的特效,提高执行效率。
Pixel Shader 3.0另一个重要特性是支持动态流/分支控制功能,通过它来提升着色器的执行效能。理论上,它可以避免执行不必要的渲染,同时通过跳过执行不必要的指令来减低GPU用于着色运算的时间。举个例子来说,开发者如果想利用着色引擎来实现一个多阴影渲染效果,此前开发者可能需要对每一个阴影都进行一次着色设计。而如果利用动态流分支控制功能的话,开发者只需要简单地写一段着色程序,然后根据该场景中阴影的数量进行相应的设置便可以了,在一定程度上节省了程序开发的时间。而且Pixel Shader 3.0新增加的面寄存器(face register),主要用来存储当前像素的三角形和视点之间的位置数据信息。如果面寄存器存放的值大于零,就表示这个视点所在的三角形面向视点,否则就是背向视点。利用面寄存器这个特性,结合Pixel Shader 3.0的动态分支,就能减少无效渲染,提高场景渲染性能。
不过,Pixel Shader 3.0这些出众的特性并不仅仅只能提高游戏画面的质量,而且让游戏的开发者更加轻松,给予程序开发者们更多的弹性和能力。
2.全面支持Vertex Shader 3.0
在提升像素处理性能之时,NVIDIA也没有忘记为这款新的GeForce芯片赋予强劲的“几何渲染力量”。NV40的顶点着色管线是GeForce FX 5950Ultra的两倍──达到了6组,每秒最大可构成6亿个三角形,比起NV38只有3亿560万个三角形来说有接近90%的速度增长。新一代游戏所采用的模型越来越复杂,每一场景渲染都需要使用惊人数量的三角形,因此增加顶点着色管线可以使新一代GPU在未来游戏中有着更好的性能表现!
提示:Vertex Shader的具体工作就是完全处理网格中的每一个顶点,而处理的过程则是由程序员预先通过编写好的程序来控制并加以实现。在这个过程中,每个顶点的颜色、贴图坐标等信息都可以任意修改然后生成。
与Vertex Shader 2.0相比,在支持指令数上Vertex Shader 3.0并没有太大改进,不过Vertex Shader3.0像Pixel Shader 3.0那样对于程序的长度已经没有了限制。这也就意味着程序员可以根据自己的需要任意编写渲染顶点用的程序。
除了无限长度的顶点处理程序外,顶点着色流分频器(Vertex Frequency Stream Divider)也是NV40的顶点着色引擎一个很重要的特征,它可以用于提高顶点着色渲染效率。在旧版本的着色器中,对于一个顶点渲染会调用一次顶点着色引擎,然后所有的输入寄存器都被初始化。而现在利用顶点着色流分频器可以读取动态数据和修正输入寄存器中的Vertex Shader参数,而不必逐个处理Vertex,这样的好处是可以大大简化渲染过程。
顶点着色流分频器这个特性也被称为“instancing(例证)”功能。此前场景中每一个模型的几何建模都需要GPU进行渲染,但如果利用顶点着色流分频器,程序员定义一个模型构建的多个“例子”,这些例子通过顶点着色器被编译成不同的几何目标。例如:我们要用电脑实现《指环王》中半兽人军队逼真的效果,以前每个半兽人的几何建模都需要逐个进行渲染、大大增加了开发者的工作难度,而现在只要建一个几何模型数据和预先设定不同的运动、表情参数,顶点着色流分频器就可以读取不同的参数与几何模型数据结合而渲染出表情、动作各一的半兽人。使过去需要用很多指令实现的效果变得轻而易举,大大方便了开发人员的工作应用,也减轻了GPU和带宽的负担。
此外,Vertex Shader 3.0另一个最重要改进就是增加了顶点纹理(Vertex Texturing):允许顶点着色器直接访问纹理。以前版本的顶点着色器由于不能直接访问纹理而大大削弱了渲染效果。Vertex Shader 3.0所包含的4个纹理取样器,NV40都完整地提供了硬件支持,可以在一个Shader Pass里完成4个纹理的读取。Vertex Texturing功能潜在的一个用途是它可以进行完全的置换贴图(Displacement Mapping)。Vertex Texturing还可以使我们创建更多真实的物理仿真(比如说水和动物皮肤的仿真),而在以往,这样的效果需要动用CPU进行大量的物理计算、建模来实现。
结语
虽说16条像素渲染管线设计将令NV40拥有无与伦比的性能,但对于众多开发者来说,更具吸引力的还是NV40 CineFX3.0架构的引入,这无疑将大大扩展了开发人员创造效果的灵活性及便利性,让特殊效果出现在复杂场景中的同时,还能够使用更为简单的编程模式!这也许正是NV40所能带来的最大进步。
当然,NV40还融入了全FP32精度渲染、Ultra Shadow Ⅱ、高精度动态范围等技术,以后我们将会给大家一一解析!

