3D核动力——从显卡看API的发展(中)
硬件时空
过于自负让Glide和Voodoo失道寡助,而微软在经历了DirectX 1.0~3.0的市场导入期后,从DirectX 5.0/6.0开始便一举崛起,Direct3D日渐成为3D API领域的王者。
一、DirectX 5.0
微软没有推出DirectX 4.0,而是直接在1997年7月推出了DirectX 5.0。此版本对Direct3D(D3D)做了很大改动,效果可以媲美当时的OpenGL。DirectX 5.0版本Direct3D主要加入了以下特性:
1. 雾化效果:这是最常见的一种特性,它将部分画面的透明度降低,使人眼看上去有一种雾蒙蒙的感觉,同时加强画面背景的深度效果,就可以得到一个处在大雾中的效果。同时在浓雾处的物体也可以不用计算出来,节省有限的硬件资源。

2. Alpha混合:实现一种半透明效果。
3. S3TC:即S3的纹理压缩技术。贴图中使用的纹理越细腻,物体就越逼真,画面就越细腻,但耗损的资源也越多。S3公司便将纹理以文件压缩的方式处理为更小的容量,便可大量节省数据的计算和传输的带宽。
这些特效和技术的加入使D3D游戏中的空间感和真实感得以增强,让玩家体验到更真实的3D游戏环境。同时,DirectX 5.0在其他各组件方面也有所加强,在声卡、游戏控制器方面均做了改进,支持更多的设备,支持力反馈,也改善了游戏系统的兼容性。
DirectX 5.0应该是DirectX真正走向成熟的标志。此时,以《古墓丽影Ⅲ》为代表的游戏也开始加入DirectX阵营,当时大部分3D游戏均提供了对Glide和D3D两种API的支持。DirectX和Glide开始分庭抗礼,且大有后来居上之势。DirectX 5.0时代最具代表性的显卡是NVIDIA Riva TNT。
二、DirectX 6.0
1998年8月,DirectX 6.0随Windows98一起被推出,它的出现让DirectX的市场地位进一步稳固,此时Direct3D已被绝大多数厂商认可并成为游戏中实际的主打API。

在这一版本的DirectX中,加入了双线性过滤、三线性过滤等优化3D图像质量的技术,使3D游戏的画面更具有真实感,游戏中的D3D技术逐渐步入成熟阶段。
DirectX 6.0兼容以前的DirectX版本,并提供了一些新特性,例如,支持顶点缓冲(Vertex Buffers,用来存储顶点数据,将点进行分段以增多非变换点和提高渲染效率)、硬件的单通道多纹理融合、两种深度缓冲(Z-Buffering和W-Buffering)和模板缓冲等。这些新特性有助于提高性能,增加易用性。
1999年2月,微软在DirectX 6.0的基础上推出了DirectX 6.1,后者全面支持Windows95,它包含了对Direct3D、DirectDraw、DirectPlay、DirectSound、DirectInput等显示、声音及系统的重要升级,包含了更多的新特性,改进了性能,增强了稳定性。但DirectX 6.1不支持NT4.0。
随着DirectX 6.0对Direct3D的完善,固步自封的Glide逐渐走向灭亡。
三、DirectX 7.0
1999年9月DirectX 7.0推出,DirectX 7.0最大的特色就是支持T&L(Transform and Lighting,坐标转换与光源处理)。T&L是DirectX 7.0 3D渲染中的一个重要部分,其作用是计算多边形的3D位置和处理动态光线效果,也被称为“几何处理”。
3D游戏中的任何一个物体都有一个坐标,当此物体运动时,它的坐标会发生变化,这就是坐标转换。3D游戏中除了场景和物体,还需要灯光,没有灯光就没有3D物体的表现,无论是实时3D游戏还是3D影像渲染,加上灯光的3D渲染是最消耗资源的。
一个好的T&L单元可以提供细致的3D物体和高级的光线特效。在此之前,T&L的大部分运算都交由CPU处理。由于CPU的任务繁多,除了T&L之外,还要做内存管理、输入响应等非3D图形处理工作,因此在实际运算时性能会大打折扣,常常出现显卡等待CPU数据的情况,运算速度远远满足不了复杂3D游戏的要求。
而通过硬件T&L,3D游戏中坐标和灯光的转换工作便由GPU完成,这样就可以把CPU从繁重的运算中解脱出来。支持T&L的显卡配合DirectX 7.0,即使采用一般的CPU,同样能较流畅地运行3D游戏。
率先支持T&L功能的显卡是NVIDIA的GeForce 256,此外,GeForce2 MX、Radeon等显卡也都支持T&L。随着这些DirectX 7产品的流行,基于Glide的Voodoo系列彻底退出了历史舞台。
需要说明的是,在DirectX 7系列中,微软还推出了DirectX 7.0a(增强了力反馈游戏控制设备的性能和兼容性)、DirectX 7.1(与Windows Me一同发布,代表显卡有NVIDIA的GeForce4 MX系列、ATI的Radeon 7500系列)。
四、DirectX 8.0/8.1
2000年9月,微软发布了DirectX 8.0和DirectX 8.0a,掀起了一场新的显卡革命。DirectX 8.0强化了各种接口,简化了应用扩展;改善了图形创作工具,更易于做出最佳的3D角色和环境;点光源式光影和像素式光影使图像更逼真;DirectPlay使多人游戏的性能和可扩展性得到了提高;DirectShow的应用编程接口提供了音频/视频的实时合成和即时编辑。

当然,DirectX 8最大特色当数支持Shader Model(渲染引擎模式)1.0和1.1,引入了可编程像素着色器(Pixel Shader,简称PS)和顶点着色器(Vertex Shader,简称VS)的概念。
小贴士:
1. Vertex Shader——Vertex(顶点)是计算机图形学中的最基本元素,三个顶点可以连接成一个三角形形成一个面,在三维空间中,每个顶点都拥有自己的坐标和颜色值等数据。VS在软件层面上就是一系列对顶点数据进行操作处理的指令程序,而在硬件上就是执行这些VS程序的处理单元。
2. Pixel Shader——顶点被VS处理完后,就会交给设置引擎转换为屏幕上的二维坐标点或Pixel(像素),像素包含的信息类似于顶点,也是有色彩、深度坐标等资料。同样,PS在软件上就是对像素资料进行操作处理的指令程序,在硬件上就是执行PS的像素单元。PS主要负责生成特效和合成Texture(贴图)。
通过VS和PS的渲染,游戏开发者很容易“制造”出真实的水面动态波纹光影效果。支持DirectX 8.0的代表显卡有NVIDIA的GeForce 3系列、GeForce4 Ti(PS支持提升到1.3版)。
2001年11月,微软又发布了DirectX 8.1,PS升级到1.2、1.3、1.4版,可以支持最高每时钟28指令执行,修正了大量先前版本中存在的错误。当时的Windows XP系统已集成DirectX 8.1b,但DirectX 8.1b不能在Windows95下运行。支持DirectX 8.1最具代表性的显卡就是ATI的Radeon 8500/9000系列。
五、DirectX 9.0
2002年12月DirectX 9.0横空出世,引入了成熟可用的HLSL(High-Level Shader Language,高级着色语言)。和DirectX 8相比,DirectX 9的主要改进是将Shader Model(简称SM)版本提高到了2.0。
1. SM 2.0
SM 2.0在编程灵活性和性能方面远强于SM 1.0,SM 2.0最大的进步在于引入了浮点格式,并增加对浮点数据的处理功能,以前只能对整数进行处理,这样提高渲染精度,使最终处理的色彩格式达到电影级别。
PS 2.0具备完全可编程的架构,能对纹理效果即时演算、动态纹理贴图,还不占用显存,理论上可无限提高材质贴图的精度。PS 2.0支持160个硬件指令,同时操作16个材质,新的高精度浮点数据规格能使用多重纹理贴图,可操作的指令数可以任意长,电影级别的显示效果很容易实现。
VS 2.0通过增加Vertex程序的灵活性,显著提高了DirectX 8的顶点渲染引擎性能,新的控制指令,可以用通用的程序代替以前专用的单独着色程序,效率提高许多;增加循环操作指令,减少工作时间,提高处理效率;扩展着色指令个数从128个提升到256个。
最先支持DirectX 9.0的显卡是2002年7月ATI推出的Radeon 9700Pro,性能强劲,也为后来的Radeon 9XXX系列显卡在市场上的成功铺平了道路。当然,NVIDIA随后推出的GeForce FX系列显卡也是支持DirectX 9.0的代表产品。
2003年8月,微软推出了DirectX 9.0b,它集成了PS 2.0b,支持更多指令(最高1536个)和更多临时寄存器(32个),同时还加入新的贴面寄存器(Facing Register)和几何实例的支持。支持DirectX 9.0b的代表显卡有ATI Radeon X600/700/800系列。
2. SM 3.0
2004年8月推出的DirectX 9.0c是DirectX 9.0的重要更新版本,采用SM 3.0(包括PS 3.0和VS 3.0),支持更多指令,支持指令的流量控制和动态分支,从而使得编程人员可以在渲染单元中加入循环操作,使得编程更加容易。
SM 3.0在很大程度上丰富了游戏研发时的编程模型,方便游戏开发商开发效果更好的游戏,比如《孤岛惊魂》、《帝国时代3》、《使命召唤2》等。
和SM 2.0相比,SM 3.0最大的优势是拥有置换贴图技术,许多在SM 1.1和SM 2.0上无法实现的复杂光影算法都得到了解决。SM 3.0问世后,人们对待游戏的态度也开始从过去单纯强调速度,转变为画质和速度兼顾。
支持DirectX 9.0c显卡包含NVIDIA的GeForce 6、GeForce7系列,ATI Radeon X1000系列等。
六、DirectX 10
如今,DirectX 10也已现身(具体细节可参看《电脑报》2006年第37期),作为新一代API霸主,它带来了更炫目的功能和性能。引入了新的纹理阵列机构、虚拟显存技术、统一着色架构、SM 4.0、Geometry Shader(几何着色器)技术等,肯定将对未来GPU技术发展带来一个全新的改变。目前,NVIDIA的G80系列和ATI即将发布的R600系列均支持DirectX 10。