辉煌与梦想——DirectX十年

技术大讲堂

作者高博,微软中国在线支持工程师。对技术有持久而广泛的研究,关注软件基础和前沿领域,对业界有独特的观察视角,并乐于将自己的观点与他人分享。

史前纷争

游戏的出现,无疑是PC能够像今天这样普及的一个关键的因素。而游戏业,也从来都是软件业中利润丰厚的行业。PC游戏属于应用程序,运行在操作系统之上,这一点是有别于运行在专用游戏硬件平台上的游戏的。换句话说,就是PC游戏的研发,必须依赖操作系统的支持。从理论上说,当然只要花费足够的人力和物力,也可以编写出实现预期效果的游戏来。但在烽火连天的游戏市场上,效率就是生命。游戏的生产不仅要高质,还要高效。

DirectX诞生

Windows的出现大大地强化了设备无关性的观念,即应用程序的开发者不应关心具体硬件,而应该通过一个统一的中间抽象层进行硬件访问。这就是DirectX 1.0的基本设计理念,它在Windows还没有完全独立于MS-DOS的时候就出现了。大概现在很少有人会知道,其实在Windows 3.1里,就有DirectX部件。如同其它Windows部件一样,在16位的系统中,DirectX也就这样悄悄地诞生了。这也从一个侧面反映出,其实这个产品在早期,并不是很成功。原因非常简单:Windows 3.1并没有很多的硬件厂商支持,光有概念,没有实质,这又有什么用呢?但是微软从来就不是一个停留在概念上的公司,有一个好的概念只是第一步。在一个好的架构的基础之上,微软开始坚定地推出这个战略性的Windows部件了。

小知识:知道DirectX之父吗?也许Alex St. John、Craig Eisler和Eric Engstrom这三个人的名字你没有听说过,但他们创造的DirectX已经让你体验到游戏的快乐了。

群雄逐鹿

DirectX的名字真正为业界所知,是因为游戏的缘故。还是那句话,再好的概念,没有产品还是等于零。1996年,DirectX 2.0发布,随之而来的是两个令人惊喜的游戏——红色警报和命令与征服。虽然官方介绍对DirectX 2.0主要在于“此版本引入了Direct3D”,但是亲身经历过那段历史的玩家和开发者都应该清楚,DirectX 2.0意义在于2D图形的革命性改善,也就是DirectDraw的函数库的扩充和函数性能的根本提升。虽然也有VR战士这样的使用Direct3D的游戏出现,但是客观地说,这个时期的游戏还没有进入3D时代,同样也还没有完全地脱离MS-DOS。

真正的威胁来自其他厂商的产品,主要是来自SGI的OpenGL以及3Dfx的Glide。作为扮演硬件抽象层的应用程序接口(特别是图形硬件抽象层这种对性能的要求极为苛刻),赢得硬件厂商的支持是必不可少的,也就是说要想方设法得到最大程度的兼容。但3Dfx走了一条完全不同的路,它把Glide牢牢地绑定在了Voodoo硬件上,虽然兼容性相当不错和销量如日中天,但这样的设计无疑把Glide的命运也拴在了3Dfx这个公司上,1999年,3Dfx公司出现问题,而Glide也一夜之间走上末路。而OpenGL则完全不同,首先它就是由处于业界领先地位的数个公司,如Intel、3Dlabs等组成的架构评审组织制订的,其次OpenGL和微软曾数度合作,虽然最后的合作不能算是非常成功,但也还算顺利,在微软早期的32位操作系统平台上占有了一席之地。如果大家使用过Windows 95的话,应该有这样的印象: Windows 95的屏幕保护之一,就是不停进行3D变换的OpenGL字样。微软对于OpenGL的感情,一定是很复杂的,它甚至想过把OpenGL并入DirectX中,但毕竟是一山不容二虎,这个合作项目最终流产。微软最终还是认定,发展自己的基础图形接口DirectX势在必行。1996年底,Windows 95的最终版本包含了DirectX 3.0,这标志着2D时代的成熟,当然在IT业界,这也标志着衰退即将来临或者革命即将爆发。2D的洗礼带来了NVIDIA的Riva 128等优秀显卡和极品飞车Ⅲ等经典游戏,也为DirectX奠定了发展所必不可少的人气——玩家的人气,硬件厂商的人气和图形业界巨人的人气。

王者归来

1997年在PC图形硬件方面是关键的一年,3D显卡犹如雨后春笋般大量涌现,牢牢地占领了PC硬件市场,2D显卡转眼间无人问津。DirectX 5.0随着Windows 98悄悄地发布了(说到这里,读者可以看一下http://bink.nu/Article970.bink,了解一下有关DirectX 4.0为什么被莫名其妙跳过的笑话)。虽然这个版本在今天看来仍然有很可笑的8位Alpha混色和性能不高的雾化等问题,可是熟悉DirectX的开发人员仍然会说,这个版本的DirectX具有里程碑式的意义,可以说是第一个具备了今天仍然未有根本改变的Direct3D架构的DirectX。1998年的DirectX 6.0已经成为无可争议的2D标准,在2D/3D混合模式上,也有非常不俗的表现。图形学的最新成果如多重纹理、表面凸度映射等开始被应用到PC图形上。但是无论如何,这段时间由于QuakeⅡ、Quake Ⅲ等游戏的影响,OpenGL仍然有着较好的口碑。

同一时间,硬件领域的争战更具戏剧性,AGP相对于PCI在总线结构上的巨大优势使得NVIDIA在与3Dfx的竞争上取得决定性的胜利,并最终收购它。这次胜利也加速了显卡厂商的研发速度,并出现了专用的图形运算器。DirectX 7.0不失时机地利用了这个硬件特性,推出了完全不占用CPU运算能力的硬件几何变换和光源的实现。这反过来对显卡技术带来了重新洗牌的机会——也就是从这个时候起,“支持DirectX 7”的字样开始被印装在显卡的包装上。而OpenGL则开始陷入了官僚式的停滞不前的状态,到了2000年DirectX 8.0推出之前,DirectX在PC的3D领域的领跑者地位已经基本确立。

发展现状

Windows XP包含了DirectX 8.0,这是一个在概念上有真正突破的版本。我们再回顾一下上一个版本的突破点:DirectX 7.0一举确立王者地位,是由于它分解了图形计算的负担,从而给即时渲染和多重纹理的运算速度带来了数量级的提升。但是我们也应该看到,硬编码的特点是性能极高但灵活性差,为什么游戏开发者需要陷入那些和游戏无关的运算限制呢?一个很大的问题是像素的着色要受制于可笑的运算模式。这些理应是可编程的,对吗?DirectX 8.0对此回答了“是”。记得第一次使用DirectX 8.0写代码的时候,我惊奇地发现,可以给像素级的“表面”指定光晕,从而能够给丝绸样的材质折皱带来更大的真实感;也可以根据环境对贴图的色彩进行修正,以获得无缝的照片;甚至还可以定义自己的光照模型以在游戏中表现异于平常世界的光影效果。这样,我们就在DirectX 8.0,以及后来的DirectX 8.1中获得了弹性,同时也没有丢失性能。DirectX 8.0整合了DirectDraw和Direct3D,使之成为DirectX Graphics;整合了DirectMusic和DirectSound,使之成为DirectX Audio。

DirectX 9.0还未发布,硬件厂商和游戏厂商已经趋之若鹜。这种繁荣的场景和早年的冷遇相比,一定会让DirectX开发组的老成员们唏嘘不已。然而,十年磨一剑,今天的DirectX确实今非昔比!如果把DirectX 9.0中新引入的技术和硬件支持厂商列举出来,篇幅就太长了。但是我这里想提到的是微软将DirectX 9.0融入了.NET平台,在Visual Studio .NET中,DirectX以“托管的DirectX”的面目出现。看到这里,很多人会松一口气,这下总算可以摆脱基于COM的魔鬼代码和HRESULT=0x8876086c这样让人跺脚的错误信息了,还可以提供以DirectX实现的Web服务,听起来是不是很酷?不过平均性能测试的结果是,托管DirectX的性能是非托管DirectX的95%左右,看来.NET算不上是一个黑心的“政府”。

15-e12-2-b15.jpg

小知识:DirectX十年,具有划时代的版本就是(上表)中的四个。

未来展望

DirectX下一步往何处去?DirectX将给未来带来什么?这些问题的答案当然只能由明天的业界来回答。然而现在就进行一些预测,是完全可行的。

DirectX部目前隶属于Windows图形和游戏技术部(Windows Graphic & Gaming Technologies,简称WGGT),而这个部又隶属于Windows家用版本部(Windows Client,简称WCL)。我们从微软的组织来分析它的战略,就可以看出一些趋势。首先,WCL目前在全力进行Longhorn的开发和测试,而WGGT是它部署中极为重要的棋子。而WGGT目前的五个项目中,有四个是和DirectX相关的。它们是Longhorn显示驱动模型(Longhorn Display Driver Model,LDDM),这是DirectX获取最好的物理层性能所必不可少的,也是硬件生产厂商在未来显卡设计中的指挥棒;DirectX API和DirectX SDK,这个就是DirectX本身了;还有一个最值得注意的东西叫做Longhorn GameUX,UX是用户体验(User Experience)的简称,它试图将游戏配置过程标准化,为不同水平的玩家提供合适的游戏界面。DirectX在下一代Windows——Longhorn中肯定将是用户界面元素子系统Avalon的重要元素,也必然会引发硬件业界的再一次深刻变革。

另一方面,DirectX将随着.NET和Windows Mobile进入各种嵌入式设备和移动设备。这是微软在进行中的一个为越来越多的人所知的工程——Microsoft XNA游戏开发平台。“X”代表跨平台(cross-platform),它有两个目标,一个是统一现有的所有游戏开发平台——至少是微软所有的游戏开发平台:Windows(以及未来的Longhorn)、Xbox和Smart phone,使得游戏开发厂商不必为不同的平台撰写不同的代码;还有一个是提出了“游戏开发过程标准化”的概念,微软Xbox部副总裁J·Allard说:“80%的游戏设计时间被花在音频和视频的制作上,而游戏真正的本质却被忽略了,我们要改变这个现状。”这句话使我们了解到DirectX未来的命运——更多的场景、声音和事件触发将被即时地计算出来,而更少地采用贴图。不言而喻,DirectX将更大程度地与人工智能和场景识别技术结合起来,为新的智能图形技术和更精彩的游戏提供一个坚实的基础设施。我们可以期待,未来的游戏会更真实、更适应玩家、更有游戏性,而计算设备本身也会变得越来越像一个我们生活中不可缺少的朋友。也许我们的家庭、旅途和工作环境都会因此变得更加有趣。一句话,十年后,生活会因DirectX而更加精彩。