3D核动力——从显卡看API的发展(上)
硬件时空
说起Windows Vista系统,普通PC用户谈论最多的是其华丽的3D界面。而对显卡厂商和游戏玩家来说,DirectX 10则是他们关注的焦点,这个图形API新王者不仅可以营造出逼真的游戏画面,还将对显卡市场产生重大影响。不过,你知道吗?在微软的DirectX登上API领域宝座之前,Glide和OpenGL也曾在显卡发展史上风光无限。
小知识
API是Application Programming Interface的缩写,中文意思是应用程序接口。它是用来操作组件、应用程序或者操作系统的一组函数,编程人员所设计的3D软件或游戏只须调用对应API内的程序,以便让API自动和硬件的驱动程序沟通,启动图形芯片强大的3D处理功能,从而大幅度地提高3D程序的设计效率。
“巫毒”王朝基石——Glide
Glide是由3Dfx公司开发的Voodoo(巫毒)系列显卡专用的3D API。它于1995年由3Dfx的首位工程师——游戏界的传奇人物Brian Hook所发明。
1.Glide特点
Glide是PC中第一个得到广泛应用的程序接口,最大特点是易用和稳定。Glide作为一个非开放性的3D图形库之所以大受欢迎,在于Glide可提供一个完整的三维图形环境。开发者可以使用高层的API产生和操作三维对象,对文件进行三维数据的读写操作,为游戏设计者提供一个与设备无关的程序接口。
Glide支持立即模式和驻留模式,立即模式与OpenGL相同,要向绘制处理器提供画图命令,再由立即模式提供细致的控制。在驻留模式中,面向对象的编程结构为显示和操作提供场景几何数据,可以将场景几何数据存储到一个对象数据库中,使得对对象的读写更容易,并可以通过对数据结构的缓冲来实现快速显示或硬件加速。
使用Glide无须掌握三维对象内部结构知识就可以执行这些操作。它允许用户以一种公用的三维元文件格式读写三维图像,这种格式不仅存储每个对象的几何数据,也存储光照和纹理数据。Glide提供了大量的基本对象,如线、球、圆锥等,可以利用这些基本对象快速建造一个场景的原型。它还提供了一个接口以实现对对象的可视编辑。而且Glide的体系结构是可扩展的,可以利用第三方绘制处理器实现对硬件加速器的访问。
Glide可以最大限度发挥Voodoo系列芯片的3D图形处理功能,由于不考虑兼容性,工作效率比当时的OpenGL和D3D(Direct 3D)高,Voodoo芯片在同一游戏中使用Glide接口时通常比D3D早期版本快10%-20%,同时画面质量更好。
除了3D特效出色之外,使用简便快捷也是吸引开发者的重要原因。当时很多的3D游戏在刚推出时,便支持3Dfx公司的Glide和Voodoo系列3D加速卡。而其他厂商的3D显卡则要等待生产厂商提供该游戏的补丁程序——将Glide所定义调用的接口函数转换到其它诸如D3D、OpenGL函数库的接口上并加以调用,从而实现模拟Voodoo系列3D加速的目的。

2.“巫毒”王朝兴衰史
在微软Direct3D尚未成熟时,Glide几乎占据了3D游戏API的绝大部分江山。Glide托起了整个“巫毒”王朝,对3Dfx来说,成也Glide,败也Glide。
兴盛
1995年11月6日,3Dfx公司推出了第一颗专为PC娱乐软件提供硬件3D加速渲染的芯片——Voodoo(巫毒),这颗芯片不仅支持Glide,也支持其他3D API。能实现让人眼花缭乱的3D效果,像素填充率更达到了当时不可思议的45M Pixels/s。
1996年春季,第一块Voodoo子卡上市,众多游戏开发商纷纷宣布支持Glide和Voodoo。此后有超过百种Voodoo 3D图形加速卡逐一面世。用Voodoo子卡和其他2D显卡配合使用成为当时的热门,这也让Voodoo的市场占有率曾一度高达85%,让整个PC游戏界跨入了全新的3D发展阶段。
1997年11月,3Dfx又推出了Voodoo2子卡。Voodoo2首次提出单周期双纹理的概念,在板卡上搭载了两个纹理映射单元,这意味着在一个时钟周期内能获得2倍的填充率。更绝的是,还支持SLI双卡互联技术。
1998年1月,3Dfx在Voodoo2大获成功的基础上推出了Voodoo Banshee(妖精)显卡,它是继Voodoo Rush后3Dfx又一款2D+3D显卡。“妖精”一雪Rush兼容性不佳的前耻,成为很多玩家的首选。
正当“Voodoo+Glide”春风得意之时,3Dfx做出了一生最大的错误决策——1998年12月,3Dfx一意孤行收购了STB,同时3Dfx不可一世地宣布将自己制造显卡,并与昔日盟友Diamond、Creative等情断义绝。

衰落
这时,NVIDIA正携“炸药(Riva TNT)”气势不凡的杀来,TNT显卡拥有完整的2D+3D内核,拥有2条32bit像素流水线的渲染体系,可在每个时钟周期内并行处理两个像素,工作在90MHz的TNT实际填充率可达到180M Texels/s。并且,TNT能够完整支持OpenGL 1.1/1.2、DirectX 5.0及DirectX 6.0的所有特性。
TNT“炸跨”了3Dfx的半壁江山,如果此时3Dfx改弦易辙还有机会,但3Dfx继续坚持不开放Glide源代码,而且斥巨资闭门造卡。
1999年2月,3Dfx推出了Voodoo3系列显卡系列(Voodoo3 2000、Voodoo3 3000和Voodoo3 3500),重拾信心。但随着NVIDIA在一个月后推出TNT2家族,Voodoo3系列显卡再遭打击,TNT2系列的旗舰产品TNT2 Ultra性能击败了Voodoo3 3500,而且Voodoo3系列其他产品也不敌TNT2系列的中低端产品。
1999年11月,3Dfx又宣布将推出VSA-100可对称图形处理器和Voodoo4(Voodoo4 4500)、Voodoo5(Voodoo5 5500/6000)产品。数次失利后,VSA100便成为3Dfx的最后筹码,但是产能严重不足的VSA-100上市日期一拖再拖,不仅未能重挽败局,还被称为历史上最难产的显卡产品之一。
而此时,NVIDIA又一杰作——GeForce 256问世了。作为业内首款支持硬件T&L功能的GPU(图形处理器),3Dfx没有能与它抗衡的产品。1999年12月,3Dfx迫于形势终于宣布开放Glide源代码,但已无法扭转局面,DirectX几乎已一统天下。落魄的3Dfx最终被NVIDIA收购,“巫毒”王朝宣告灭亡,Glide也成为历史。
主流图形接口——DirectX
DirectX是微软推出的综合API,是伴随着Windows系统的推出而出现的。DirectX的原名DirectX SDK(DirectX Software Development Kit),是微软所开发出的一套主要用在设计多媒体、2D、3D游戏及程序的API,其中包含了各类与制作多媒体功能相关的组件(Componet),各个组件提供了许多处理多媒体的接口与方法。
Glide和OpenGL是专用的图形接口(3D API),而目前如日中天的DirectX与它们稍有差别,DirectX是一系列多媒体API的组合,比如2D/3D图形、音频和输入设备API——DirectDraw(2D绘图)、Direct3D(3D绘图)、DirectSound(声音相关)、DirectMusic(MIDI相关)、DirectInput(面向游戏的对游戏杆和其它输入设备的访问)、DirectPlay(网络相关)、DirectSetup(方便地安装DirectX组件)、DirectShow(视频流支持/动画播放)、DirectAnimation(整合动画环境)等。每种API都可以让开发者访问最新的硬件特征,不需要应用程序直接与硬件联系,大大减少了程序和硬件的不兼容状况,而且还加快了软件开发的速度。
1. DirectX 1.0
据说,DirectX源自于一款游戏。当年,微软开发了一款名叫《狮子王》的游戏,并且安装在了康柏数以万计预装Windows系统的机器上。可由于康柏临时更换了机器的配置,导致安装了该游戏的机器不得不面对频繁死机的局面。为了解决这类问题,微软在1995年9月推出了一种游戏软件接口,这便是DirectX。
DirectX 1.0版本是第一个可以直接对硬件信息进行全面读取的程序,如显卡的块移动功能、基本的声音和输入设备功能,使游戏开发者能对二维图像进行加速。但由于当时Windows3.1的音视频处理能力都很弱,DirectX 1.0自身的硬件、软件/游戏支持度也很有限,所以稚嫩的DirectX 1.0并没能在大范围流行。

2. DirectX 2.0
DirectX 2.0是1996年6月随Windows95 OSR2(即Windows97)推出的,DirectX 2.0包含了DirectDraw、DirectSound(硬件和软件混音和播放)、DirectPlay(允许通过调制解调器链接或网络连接游戏)、Direct3D(DirectX 2.0采用了“平滑模拟和RGB模拟”两种模拟方式对三维图像进行加速计算)、DirectInput(提供到游戏杆输入功能)等常见组件。
DirectX 2.0确立了DirectDraw(2D)在DirectX中的地位,Direct3D(D3D)功能也在DirectX 2.0中出现了,在处理某一帧图像时,Direct3D渲染3D对象,DirectDraw则设置2D背景位图,配合默契。有代表性的游戏包括《命令与征服》、《红色警报》、《VR战士PC版》等。
支持DirectX 2.0显卡有Trident 9680/9685、S3 735/765/Virge等,特别是S3 Virge还专为DirectDraw进行了优化,因此在游戏中的速度表现相当不错,具备当时一些先进的3D加速功能,如Z-buffering、Doubling buffering、Shading、Atmospheric effect、Lighting等。

3. DirectX 3.0
1996年9月推出的DirectX 3.0版本是DirectX 2.0的简单升级版,它对DirectX 2.0的改动并不多,主要是对DirectSound(针对3D声音功能)和DirectPlay(针对游戏/网络)做了一些修改和升级。
而DirectX 3.0a版本是DirectX 3.0升级版,主要针对DirectX安装程序进行了修改。比如,在一些图形加速卡(如Matrox公司的MGA系列)的安装程序上,用户可适当改写显示驱动程序,让图形卡的加速性能更好。
虽然当时3Dfx的“Glide+Voodoo”人气如日中天,但DirectX 3.0也获得了很多厂商的支持。DirectX 3.0集成了最简单的3D效果,同时也在一定程度上促进了3D显卡的普及。支持DirectX 3.0的代表显卡有NVIDIA Riva128、Intel i740、Trident 9850/9880、SiS6326等。