镭光再现!四款空前强大的Radeon97
OK,现在轮到Radeon 9700 Pro的另一个精髓部分了――Pixel Shader,很可惜Pixel Shader 2.0似乎并没有Vertex Shader 2.0进步的那么大,它并不支持流程控制,所以对于编程人员来说,应用它是件复杂的工作过程,但是对我们最终用户来说却没有什么不同之处。
Pixel Shader流水线
Radeon 9700 Pro始无前例的整合了8条像素Pipeline流水线,这在半年前还是不少人梦想中的事,现在却成为了事实。每一条流水线上只包含了一个纹理元素渲染器,这样ATi在单纹理渲染与多层纹理渲染的理论性能值上是一样的,可能你会对这样的设计在外理多层纹理时的性能是否相较当前流行的单流水线双纹理单元的性能的提升持有一些怀疑的意见,实际上这样做在处理多层纹理时的性能的确提升的并不明显,但这并不是ATi的错,而是受限于当前的存储介质。如果ATi再增加一个纹理元素渲染单元的话,256bit的显存位宽将无法满足纹理传输的需要,所以装了也是白装。
当然我们认为如果再加多一个纹理渲染TMU单元的话,对于Die的空间或许也是一个挑战。所幸的是ATi同样可以通过以循环的方式进行重复性的纹理贴图,这在上一代的显卡中已经被广泛的采用,所以并不用太担心只有单个的纹理渲染单元会耗掉你太多的渲染时间,我们认为如果ATi在将来设计代号为R350的新产品的时候,如果采用了DDRII的显存模块,那么将可以考虑加入更多的TMU单元,因为那时的R350已经是0.13微米的工艺生产了,当然这只是我们的设想,是否有改动还要看ATi的工程师们。
Pixel Shader渲染详细模块
Pixel Shader可以对于16份完全不同的纹理图层上各自进行32次纹理的寻址取样以及64种色彩的操作,其中黄色方块的Floating Point Texture Unit单元通过显存总线读取到不同精度的纹理数据,然后由Floating Point Address Processor浮点纹理寻址处理单元在上面搜寻相关的纹理地址,完成之后再由最后的Floating Point Color Processor色彩处理单元进行渲染。
从16bit的渲染过渡到32bit的渲染已经有相当长的一些年头了,但那些业界著名的3D领袖们似乎并没有很着急着将32bit的渲染再往更高级一些的渲染方式发展,这显然已经不符合时代的要求,在新一代的显卡中最先由Matrox提出10bit的渲染概念,当然Matrox的新产品Parhelia采用了一些折中的方式来实现高于传统32bit的渲染方式。众如周知,在32bit的渲染中,除去8bit的Alpha渲染之后,仅有24bit的通道来表现颜色,24bit通道大约为16,777,216,我们之前所能做的就是尽量在16.8M的范畴中来调整色彩,然而再往下细分的话,RGB[红+绿+蓝]每个通道可以分到的大约是8bit的精度,也就是大约在0-255之间进行色彩的调整,所以图形工作人员可能常会抱怨无法得到十分纯正的白色或黑色,在一些高精度的图形软件中部分信息的失真及错误的显示都有可能是由此而引起的。
PhotoShop等图形软件都受限于0-255范围的色彩调整
而Parhelia则大幅度的砍掉Alpha通道所占用的精度,降为2bit,接着提升每一个RGB通道为10bit的bppc,这样虽然总和仍是32bit,并符合目前标准的32bit帧缓存储,但实际再通过10bit的RAMDAC还原后的效果的确要比标准的32bit要真实得多,因为这个时候它的通道可以达到0-1023,但Parhelia这样处理是以牺牲Alpha通道来实现的,这在有些时候会让你的游戏在烟雾或者满是硝烟的场面中将不那么真实,也许会出现颗粒感很强,或者透明介质表现力不足的画面,因为此时的Alpha通道只有2bit了,连ID Software的招牌人物John Carmark都表示Parhelia的2bit Alpha可能不够DoomIII使用,而ATi的Radeon 9700 Pro或nVIDIA的NV30这些全128bit渲染的显卡才是DoomIII这类游戏的非常好的选择,当然这个时候32bit的帧缓可能不够用了。
在计算机的计算中通常我们都需要涉及到浮点的运算操作,简单一点的说浮点的运算操作,实际上就是在计算小数点位置,我们将小数达到32位的运算操作称为单精度的浮点运算,如果达到64位或128甚至更高的话,那么就属于双精度的运算。那么如果一个仅为16bit的浮点运算可以表示的最小数值至最大数值为0.0000000000000001-10,000,000,000,000,000的话,那么32bit的浮点运算所能表达的数字值就更大了,难道这样的单通道色彩信息的表现能力还不足以渲染出你所需要的各种颜色嘛?ATi的Radeon 9700 Pro就能做到这样精度的运算。
车的左边采用的是传统的8bit通道所渲染出来的画面,右边则是16bit通道所渲染出来的画面,可以看到右边的画面明显比左边的干净,少了许多的颜色杂质
在光源与反射的效果上,16bit或更高精度的渲染更加占据优势
但从目前ATi公布的资料来看,似乎并不是真的128bit的渲染,而是96bit的。那么也就是RGBA都各分配24bit的信息通道,至于为什么不是32bit每通道的分配,我们也不得而知,另一方面Radeon 9700 Pro的帧缓存却是可以支持128bit格式的帧缓存储,这样做应该是为了存储性上的方便,可惜的是受限于10bit的RAMDAC,也许96bit的渲染最终也不能完完全全无损的还原到我们的显示器上,同时目前也只有DirectX 9才支持128bit的帧缓存储,OpenGL还没有升级支持。但要知道如果真的有一天实现了全128bit的渲染游戏的话,那现目前的显存带宽都将再次受到严重的挑战,它需要的带宽是32bit格式存储的4条,也许那时我们又将回到30FPS就该觉得满足的时代,所以目前就算应用到128bit浮点精度的渲染应该还是在芯片内,之后会有一些抖动操作去除一些信息这样才能最后再以32bit的格式存放于帧缓存之中,具体情况还有待DirectX 9正式发布以及支持高于8bit通道渲染的游戏发布之后再能清楚。
另外Pixel Shader还可以实现多目标的信息输出,这在上一代中每一次只能输出一次的目标信息,现在却可以四个一起来,这在一些多纹理应用的游戏中很有用,比如实时实现描边滤镜等特效。另外它也支持双阴影模板的硬件加速。
一次性输出两种完全不同的纹理及光源效果<