再现3D神话

Author: 恺恺 Date: 2001年 10期

    2月22日,GeForce3图形芯片首先在苹果电脑上展示,这是NVIDIA首次在非PC平台上推出新产品,且发布时间早于主流的PC产品。时间走到预定已久的2月27日,NVIDIA正式向全球发布了PC版的GeForce3。经过一年时间的研发,NVIDIA这次少见的长期开发项目终于有了回报。
      一时间,业界充满了GeForce3的消息。如果不是因为价格太贵,真让人怀疑是否人人都应该买一块GeForce3显示卡呢!可惜支持64/128MB DDR内存的GeForce3实在太贵了,已经打破了GeForce2 Ultra创下的主流显示卡价格纪录:64MB的GeForce3售价从450美元到650美元不等,128MB的估计至少也要接近1000美元。
  #1    不仅仅是高速
      表面上看GeForce3同GeForce2 Ultra的区别并不大,都是4条像素渲染流水线,每条流水线配备两个纹理贴图单元,显示内存规格都是同样的3.8ns/460MHz,芯片的核心频率也是200MHz。这样一来,不少人对GeForce3不以为然。那么为什么有人肯花费更多的美金来购买这款怪兽级显示卡?NVIDIA花费一年时间设计出的5700万晶体管的芯片里面,到底装了些什么呢?
      首先,在GeForce3的内部3D处理过程中,运算精度得到了很大的提高,这样一来,用户不会再抱怨NVIDIA的产品只是“傻快”,连专业显示卡也很难再夸耀自己的光栅化精度比游戏用的主流显示卡高多少。吞并了3dfx之后,NVIDIA终于有机会静下心来改进自己产品的图形质量,毕竟当初简化3D处理流程、降低计算精度的3D模式不过是权宜之计。
      其次,GeForce3开始支持单像素4纹理的渲染,不过需要两条像素流水线协同工作,这就不像GeForce2那样要将一个像素渲染两次。各向异性过滤的效果不错,但是不为人注意,现在GeForce3有了8×、三线性过滤的各向异性过滤功能。3D纹理终于可以实用化了,因为现在GeForce3总算完整、彻底地支持3D纹理了。
  #1    全新的nfiniteFX引擎
      你可能纳闷这5700万晶体管中,比GeForce2多出来的3200万是干什么的?很明显,除了与GeForce2相同的部分之外,全都是NVIDIA在这一年来,探索3D的未来、锐意创新的结果,这个结果的表现就来自全新的nfiniteFX引擎,它的名字是“无限+图形”的意思,代表的是完全可编程的3D处理流水线所能实现的随心所欲的3D效果。nfiniteFX引擎占用了GeForce3内部一半以上的空间,GeForce3划时代的76GFLOPS浮点运算能力也多半来自其中。
      nfiniteFX又分为两个部分:Vertex Shader和Pixel Shader,Shade是明暗、涂色的意思,Vertex和Pixel则是三角形的顶点和屏幕显示的像素之意。其实我们早在DirectX 8中听说过这两种API软件,那是因为在合作开发的过程中,微软从NVIDIA得到了授权使用这两种3D技术。
      Vertex Shader负责的工作同原有的T&L引擎类似,主要用来处理组成物体的众多三角形的顶点数据。顶点数据主要由X、Y、Z三个方向的空间坐标组成,还可能包括色彩、纹理和光照等参数。Vertex Shader并不改变数据的种类,而是通过对顶点数据进行处理,达到各种实际需要的变换效果;同过去产品的区别在于处理能力的极大提高,相对于GeForce2的两组矩阵、Radeon的4组,GeForce3的Vertex Shader具有多达32组矩阵可以被灵活应用于各种用途。
      为了让游戏开发商更快上手,NVIDIA提供的开发包中,已经包括了近100种利用Vertex Shader实现的特殊效果,比较引人注目的是以下3种:
      角色动画,类似于高端3D软件的骨骼动画+弹性蒙皮系统,能够生成栩栩如生的人物或动物,甚至连细微的脸部表情和皮肤皱纹都清晰可见;
      环境效果,现在能够生成各种各样的雾化、折射甚至热辐射效果,3D特效的种类是无限的,完全取决于你如何使用它;
      程序化变形,可以将物体的表面经过设计好的过程,变化成完全不同的形状,于是像风吹水面造成涟漪这样的自然现象就得以被模拟。
      Pixel Shader是全新的渲染引擎,比GeForce2的单像素明暗引擎更进一步,成为完全可编程的类型。相对于过去的每时钟周期完成7种特效的最高水平,如今GeForce3的Pixel Shader竟然能在1周期内进行36次独立操作。不论是硬件阴影、特殊材质、3D纹理,还是耀眼夺目的光线、色彩,现在GeForce3都能够对每个像素逐一进行处理。
      在GeForce3内部,nfiniteFX引擎同传统的GPU处理流程是完全分开的,这样一来──过去的DirectX 7程序使用传统的流程处理,保证了完全的兼容性和最高的执行效率;而全新的DirectX 8应用以及更新的软件,则可以充分利用完全自由的nfiniteFX引擎,抛开历史的负担,完全针对3D未来的发展进行了优化。当然由于这两部分引擎的本质不同,它们不能同时工作。(^10030101a^)
      NVIDIA大力推行无比复杂的内部结构(Pentium 4也没有这么多的晶体管),微软的工作也功不可没,微软在DirectX 8种强制所有的3D显示卡的驱动程序,都必须采用Vertex Shader+Pixel Shader的结构,尽管对于老一代显示卡并没有多少好处,但这却铺平了从传统硬连线的T&L+渲染架构,到全新的Vertex+Pixel的3D处理流程的转换工作。
  #1    Lightspeed内存架构
      显示内存的带宽不足,至今仍是限制3D显示技术发展的主要制约因素。既然GeForce3使用了同GeForce2 Ultra完全相同的3.8ns/460MHz的DDR内存,理论上说外部带宽并没有任何的增加,那么为什么我们还说GeForce3的性能有较大提高呢?这就是Lightspeed内存架构的功劳了。Lightspeed最初是由AMD设计,准备用于下一代CPU和芯片组中的高速内存接口,用在带宽日益紧张的显示卡内存上可谓正合适。
      Lightspeed内存控制器称作Crossbar(门闩)控制器,它是将128位的DDR内存在每个时钟周期内存取的256bit数据分成4个64bit,分别由4组独立的内存控制器负责传输,这4组控制器不但都能够直接同显示内核通信,还可以互相之间传递信息、相互配合。这样一来,数据传输就以64bit为单位,大大提高了小规模数据的传输效率──而今后为了提高3D图形的真实度,小型、大量的三角形正是主要的发展方向;另外如果内存控制器出现等待周期,现在只需要4个内存控制器其中的1个空闲出来,浪费的时间也就缩小到了1/4。Lightspeed架构的优势明显,可以成倍提高内存带宽的利用效率──NVIDIA已经提前达到了QDR或者DDR Ⅱ的效果,Lightspeed很可能成为未来显示内存接口的标准形式。
      同时NVIDIA也没有忘记向PowerVR和ATI学习节省带宽的技术。首先,GeForce3使用了无损Z轴数据压缩功能,就是把深度数据压缩后再存储,读取时先解压缩、再使用。由于是完全硬件化的无损、高速的压缩和解压缩,对于用户来说只能发现占用的Z-Buffer容量明显减少,必须的显示内存带宽明显降低,据说这种压缩的效率提高达4倍。
      其次,GeForce3增加了Z轴遮挡剪切的功能,其实就是预先处理深度数据,发现不可见的图形就不再渲染,这同大家企盼已久的HSR(隐面去除)功能的效果完全一致,但是无疑NVIDIA已经解决了这种Z轴排序算法同传统3D处理流程之间的矛盾性:不但节省了带宽和处理能力,还避免了大量小三角形排序的困难。
      另外,NVIDIA还首次在主流显示卡中引入了实用化的高阶曲面,通过将许多的小三角形换成简单的曲面形式,GeForce3大大简化了3D空间形状的表达方式和数据量,而且完全硬件处理的曲面也更加细腻、真实。其实NVIDIA在自己的头一个产品NV1中就已经试图使用曲面,但是过去在主流领域使用曲面的尝试都不成功。现在看来,NVIDIA也要尽力推动曲面的硬件处理技术。
      在5700万晶体管的庞大设计中,增加些Cache也没有什么问题,因此GeForce3配备了多种多样的缓存。所有这些措施,肯定能让GeForce3的性能变得更加平衡:不再是核心速度惊人、实际表现平平。
  #1    HRAA技术
      本来NVIDIA不太愿意承认FSAA(全屏反锯齿)的重要性──毕竟直接使用高分辨率更方便,连GeForce2系列的FSAA都不过是临时改写驱动程序“变”出来的。现在NVIDIA总算从硬件设计上为FSAA作了优化,还推出了独特的HRAA(高分辨率反锯齿)技术。
      我们知道,所有实用的FSAA技术,使用的都是超级取样(Super Sampling)方式,就是在较高的分辨率下渲染,再用过滤等方法将图形分辨率降低下来,因此FSAA的消锯齿效果完全取决于取样点的多少:2×<4×<9×<16×,显然取样越多耗费的存储资源和处理能力也越多。但是就像Wildcat Ⅰ/Ⅱ利用智能化的存储系统实现了16×的FSAA只需要大约4×的内存空间一样,NVIDIA的目标也是降低FSAA的损耗。这点就是Geforce 3独特的Quincunx五点取样模式大显身手的地方,Quincunx只需要像2×模式那样为每个像素准备两个取样点,最后过滤的时候是通过5个取样点的某种平均值来得到最终像素数据:其中两个取样是自己的,另外3个来自于周围其它的像素的最邻近的取样点,这种取样方式又称作多重取样(Multisampling)。这样一来尽管取样点数目仅限于2×的水平,但是过滤时有5×的精度,因此Quincunx的实际结果明显优于2×,同4×的效果互有输赢──即使你更喜欢比较锐利的4×,也无法抗拒边缘柔和的Quincunx,因为Quincunx需要的处理能力和存储空间都仅仅是2×的水平。再加上NVIDIA对于HRAA所作的硬件优化,GeForce3能够基本上以全速运行HRAA的3D游戏。
      同Wildcat的智能化16×模式比较,Quincunx是以消费者能够接受的低廉价格提供4×的效果,存储空间比较固定、实现算法比较简单,因此GeForce3必将为主流3D领域树立一个新的FSAA标准,只等今后逐步扩展到9×甚至16×水平。
  #1    NVIDIA的GPU王国
      GeForce3是首片真正意义上的GPU,因为它第一次实现了完全可编程的完整3D图形处理流程。同时GeForce3也包括了同GeForce2类似的全部传统3D硬件,这是技术转型时期的特殊现象。将来如果所有的3D应用软件都已经转向了Vertex Shader+Pixel Shader的标准化结构,而且微软也凭借Fahrenheit统一了DirectX和OpenGL,到那时GPU将只具有Vertex(几何)+Pixel(光栅化)两部分,正像CPU具有ALU(整数)+FPU(浮点)两个核心一样。新一代的GPU的进步也仅仅在于更高的主频、更多的运算单元,是否还将有可以更换GPU的GPU主板出现?!即使目前我们也很难使用像素填充率、三角形生成率这样的传统指标来描述nfiniteFX引擎的性能,很可能未来的GPU也将采用CPU的术语──MIPS、GFLOPS等来比较,76GFLOPS的GeForce3能做什么确实令人难以想象!
      NVIDIA的计划在这新一代的NV2X产品系列中得到了进一步的推进:既然主流领域只有ATI还能支撑,那么直接进攻ATI的后方──MAC和移动平台将更为有利,于是就有了笔记本电脑版的GeForce2 Go系列和标准的苹果电脑版GeForce3。除此之外,要对付高端的专业厂商,只需要等待NV20GL的出现,其实只要76GFLOPS的浮点能力发挥出一部分就很可观了,要知道单片的Wildcat只有3.2GFLOPS。最后为了同消费电子行业的巨头SONY竞争,GeForce3系列的NV2A还支撑起微软的XBox游戏机,NV2A的性能是PS2的图形引擎所无法比拟的。
      这一切都使得了NVIDIA 3D神话再现,GeForce3所带来的巨大震撼和深远影响,恐怕需要我们花费数月以至数年的时间来慢慢体会。