主流显卡选购的重要标准:directx


  在3d游戏日益成熟的今天,当前的电脑配件中,没有任何配件的发展速度可以能与图形芯片的发展速度相提并论,显示卡是目前更新换代的速度是最快的。自第一片的3d显示卡从3dfx的实验室诞生,就预示着他的出现将大幅拉近现实与梦想之间距离,让游戏环境更接近于自然环境,3d概念革命也必将席卷整个显示卡行业。可是在我们享受这些逼真的游戏环境、感叹游戏中3d世界的精美的时候,是否想到3d图形显示芯片后面还有几个幕后的英雄?画面的美轮美奂与自然逼真其实都离不开opengl和directx这两位幕后的英雄。

  在说起directx前,先对directx本身作个了解, directx是一种图形应用程序接口(api),简单的说它是一个辅助软件,一个提高系统性能的加速软件,由微软创建开发的,微软将定义它为“硬件设备无关性”。从字面上看来,它的意思不难理解,direct是直接的意思,x是很多东西,加在一起就是一组具有共性的东西,从内部原理探讨,也简单说来directx 就是一系列的 dll (动态连接库),通过这些 dll,开发者可以在无视于设备差异的情况下访问底层的硬件,directx 封装了一些 com(component object model)对象,这些 com 对象为访问系统硬件提供了一个主要的接口。从技术侧面方面来分析,我们可以将它分为如下几个部分:

  directdraw: 为程序直接访问显存提供接口,同时和其它的windows应用程序保持兼容,这是directx中非常重要的部分,它担任图形处理的关键。directdraw就是来帮助windows程序也能直接进行硬件操作,更进一步还能加速显卡的速度,使游戏更为流畅。另外directdraw还支持mmx、3dnow、agp等技术,还能处理多屏幕显示,让窗口环境的游戏更加多姿多采。

  direct3d: 为访问3d加速设备提供接口。

  directinput: 为各种输入设备提供接口,这用来处理游戏的一些外围装置,例如游戏摇杆、gamepad、方向盘、vr手套、力反馈的各种设备等。以往要在dos下用方向盘来玩赛车游戏,就要先调整好irq、dma等各种设置。而现在directinput则使这些设备与游戏配合良好,不需要做特别配置。

  directplay: 为游戏提供网络功能接口,比如支持通过 tcp/i、ipx 等协议进行游戏中的数据传输,这是为了满足近来流行的网络游戏而开发的api,支持多通信协议,让玩家可以用各种连网方式来进行对战,此外也提供网络对话功能及保密措施。

  directsound: 为访问声卡提供接口,支持wav、midi 等文件的直接播放,这是用来处理声音的api,除了播放声音和处理混音之外,还加强了3d音效,并提供了录音功能。前面所举的声卡兼容的例子,就是利用了directsound来解决的。

  directsound3d: 通过此接口,可以模拟出某一个声音在三维空间中任何一个位置的播放所产生的效果,从而达到逼真的环绕立体声。

  directmusic: 此接口主要是生成一系列的原始声音采样反馈给相应的用户事件。
  

   在dos时代,用户玩游戏的时候,都必须确定所用声卡的品牌,然后再设置它的irq、i/o、dma等,如果其中有一项设置不对游戏就发不出声。这些设置对用户来说不是件容易的事情,当时的用户计算机知识不多,当然这对游戏厂商来说,也不是件好事情,为了今后用户今后有声音的设置,那么它需要事先把市面上所有声卡硬件数据都收集过来,然后根据不同的api来写不同的驱动程序。而directx的出现,就是为了解决这些问题,它作为动态链接库,里面包含了众多的链接程序文件,如果是符合directx标准的游戏软件,这些访问最底层系统硬件的任务就由directx自动完成,如今玩家在玩windows游戏的时候,并不需再对硬件作这些设置了,因为directx提供了一个共同的应用程序界面,只要游戏是依照directx这个标准来开发的,不管用户使用什么品牌的显卡、声卡,什么型号,这些相关的配置都交由windows及directx配合完成,当然,这也是有条件的,用户使用的显卡、声卡的驱动程序也必须支持directx。从这里看出,如今多媒体电脑发展的这么如火如荼,directx的贡献不小,它是由微软开发,由众多游戏和硬件制造厂商共同更新升级的的标准,只要所有软件硬件支持directx,那么它们就能进行低端的会话。      

  这里先回顾一下过去directx的发展,可以肯定地说,没有windows操作系统前,根本就无directx这个概念,自从windows3.1的gui图形介面登场以后,越來越多的人开始使用window。不过,windows3.1的声音处理一次只能播放一个音,图形处理的能力也很弱,但是它的简单易操作性及越来越多的用户,加上微软的大力推广,windows家族壮大起来了。

  日益壮大的windows家族,吸引了更多游戏商家的注意,开始开发基于windows界面的游戏,微软也注意到这点,于是给众多的软硬件商家提供一个共同开发的标准平台(就是directx),大家都遵循这个标准,这样做对谁来说都是有意义的,硬件制造商按照此标准研发制造更好的产品,游戏程序员根据这套标准开发游戏。也就是说,无论硬件是否支持某特殊效果,只要directx标准中有,写游戏的程序员就可以把它写到游戏中,当这个游戏在硬件上运行,如果此硬件根据directx标准把这个效果做到了此硬件驱动程序中,驱动程序驾驭其硬件算出此效果,用户就可以欣赏到此效果。

  在directx诞生之初,业界已经有众多标准,其中有两个重要的标准:opengl和glide,特别是非常成熟的opengl,它被用于图形、影像服务器,制作电影、科教片等等,随着技术逐渐成熟,越来越普及,如当时大名鼎鼎的quakeiii游戏就是基于这个标准的,而directx,很多硬件、主流游戏都不支持它,没有游戏、没有硬件,即使再有好的标准也是没有意义的,directx的魅力一直没有的到表现,但是它有微软的支持推广,它就有希望。



  directx1.0:为游戏而生

  directx出现是在windows发布后,windows3.1的声音处理一次只能播放一个音,图形处理的能力也很弱,加之整个windows3.1的操作系统还很脆弱,这个时候它更不用不上,加上directx标准刚刚推出,很多硬件不支持,很多主流游戏也不支持,没有游戏、没有硬件,即使再有好的标准也是没有意义的,directx的魅力一直没有的到表现。但是随着windows95的发布,稳定的窗口操作系统,出现了划时代的变化,directx的命运也由此改变。

  direct x 2.0:2d崛起3d雏形

  终于directx升级到了2.0,这个时候标志性的产物诞生了,2.0最大的改善是在direct draw,而且这个时代的经典游戏也出现了,很有代表意义的《红色警戒(redalert)》和《diable(恐惧)》,红警的windows版本和diable都是在directx的标准上开发的。可惜的是,当时很多老显卡由于不能完全支持directx2.0,而不能玩diable。除了2d以外,directx2.0的d3d部分的雏形基本完成,由于当时3d游戏较少,很多都是基于dos开发的。世嘉公司的vr战士的pc版本就是基于directx2.0开发完成的,虽然效果粗糙了一些,但direct 3d魅力还是可以感受到的。

  direct x3.0:d3d发展壮大

  1997年微软发布了最后一个版本的windows95,同年发布了directx 3.0,这时候directx的魅力被众多软硬件厂商看好,让d3d有了与opengl与glide格斗的勇气。从这个版本开始,很多玩家知道了directx存在,也是这个时候开始出现了3d加速卡,如3dfx的voodoo,nvidia的riva128,intel的i740。这个时候3d游戏越来越多,但是当时的应用程序接口标准却有几个,主要的三个分别是专业的opengl接口,微软的d3d接口和3dfx的glide接口。其中影响力最大的是3dfx的glide,3dfx如日中天,glide当然是大树底下好乘凉,游戏程序员使用它可以轻松容易的编出复杂、生动的3d效果,看好3dfx当然看好glide。可是3dfx的自我封闭,不开放政策,导致它后来的破产被nvidia收购,没有了3dfx支持glide的影响力也从此走向衰弱,这是后话了。

  directx 5.0:d3d日益强大

  微软似乎没有发布4.0版本的directx,directx3.0发布后没多久发布了directx5.0。尽管5.0与3.0时间间隔不长,但它的意义可不简单。directx5.0的d3d效果可以与当时的opengl平分秋色。首次引入了雾化的支持,让3d游戏更有空间真实感,更能让玩家体验到真实的三维三维游戏环境;除此以外在游戏系统的兼容性方面作了很大改善。

  directx 6:d3d权威出现

  在directx5.0发布不久第二代3d加速卡问世了,这一代3d加速卡借助directx6.0的技术争得不可开交。主要代表显卡是nvidia的riva tnt,并连的voodoo2,voodoo3。到了这个时代,市场格局已经很清晰,是nvidia与3dfx的斗争。directx 6的3d效果更多了,而且借助硬件的强大性能,可以渲染出高分辨率下的32位色的3d效果,这一点采用pci总线技术的voodoo系列败下阵来,它只能支持800x600下的16位色渲染,而nvidia一开始就使用先进的agp总线结构,高规格,新技术,每次发布新品都给用户更高性能享受,每次成功都为他奠定显卡老大的基础。

  directx 7:d3d权威确立

  directx7的发布又一次把显卡市场进行重新整合,directx7最大的特色就是支持t&l,中文名称是“坐标转换和光源”。3d游戏中的任何一个物体都有一个坐标,当此物体运动时,它的坐标发生变化,这指的就是坐标转换;3d游戏中除了场景+物体还需要灯光,没有灯光就没有3d物体的表现,无论是实时3d游戏还是3d影像渲染,加上灯光的3d渲染是最消耗资源的。在t&l问世之前,位置转换和灯光都需要cpu来计算,cpu速度越快,游戏表现越流畅。使用了t&l功能后,这两种效果的计算用显示卡的gpu(可以理解为显示卡的cpu)来计算,这样就可以把cpu从繁忙的劳动中解脱出来,让cpu做他该作的事情,比如逻辑运算、数据计算等等。换句话说,拥有t&l显示卡,使用directx7,即使没有高速的cpu,同样能能流畅的跑3d游戏。t&l成为当时人们关注的焦点。这时候第一块个支持t&l功能的显示卡是nvidia的geforce 256, 随后发布的geforce 2基本上可以说是geforce 256的一个提速版本,除了速度快了很多以外,其他没有技术上的提升,同时ati发布的radeon7500,一度成为支持t&l功能的效果最好的显示卡。directx7的发布却成了voodoo系列显卡的噩耗,这时候3dfx也走到了尽头,被nvidia收购,成为了显示卡中的历史,带给后人的是遗憾和叹息。

  directx8.0:d3d的疯狂

  2001年微软发布了directx8,一场显卡革命开始,它首次引入了“像素渲染”概念,同时具备像素渲染引擎(pixel shader)与顶点渲染引擎(vertex shader),反映在特效上就是动态光影效果。它发布没多久,madonion(就是今天的futuremark)发布了基于directx8的3dmark2001显卡测试软件,它支持directx8的全部特效。可是当时华丽的场景,只有极少数显卡才能体验到,绝大部分显卡都不能完成此软件的全部测试,其中的4个场景跑不出来。原因是,directx8集成了两大特技╠╠vs (vertex hader)和ps(pixel shader)。通过vs和ps的渲染,可以很容易的宁造出真实的水面动态波纹光影效果。主要代表显卡是nvidia的geforce 3,后期ati的radeon8500。directx8的发布成了真正的第4代3d加速卡时代来临的标志。

  directx9.0 :让人耳目一新

  2002年底,微软发布directx9.0,如果从参数上看,directx9相比directx8仅是提高了ps和vs的版本,目前版本都是2.0版本,似乎没有质的变化,其实不然,下面分别对pixel shader和vertex shader比较。

  首先,ps 2.0具备完全可编程的架构,能对纹理效果即时演算、动态纹理贴图,还不占用显存,理论上对材质贴图的分辨率的精度提高无限多;另外ps1.4只能支持28个硬件指令,同时操作6个材质,而ps2.0却可以支持160个硬件指令,同时操作16个材质数量,新的高精度浮点数据规格可以使用多重纹理贴图,可操作的指令数可以任意长,电影级别的显示效果轻而易举的实现。

  其次,vs 2.0通过增加vertex程序的灵活性,显著的提高了老版本(directx8)的vs性能,新的控制指令,可以用通用的程序代替以前专用的单独着色程序,效率提高许多倍;增加循环操作指令,减少工作时间,提高处理效率;扩展着色指令个数,从128个提升到256个。

  另外,增加对浮点数据的处理功能,以前只能对整数进行处理,这样提高渲染精度,使最终处理的色彩格式达到电影级别。突破了以前限制pc图形图象质量在数学上的精度障碍,它的每条渲染流水线都升级为128位浮点颜色,让游戏程序设计师们更容易更轻松的创造出更漂亮的效果,让程序员编程更容易。

  我们从上面的介绍应该都知道了,directx对整个多媒体系统的各个方面都有影响,声音、显示等,而且directx版本都是兼容的,新的版本兼容以前老的版本,本来想通过试验看看对多媒体性能的影响,但是没有足够的设备,只能简单对显示系统性能作个比较。

平台如下:

软件平台如下:

测试原则:

  1. 全新安装winxp(包含sp1),安装via补丁,安装测试显示卡驱动程序,安装测试软件,因为winxp自带directx8.1,因此不需要另外安装directx8.1,更不需要安装directx9.0b,做好一个ghost备份。确认系统所带directx8.1(方法:在“开始”菜单的“运行”栏目中运行“dxdiag”),如下截图:

  2. 待基于directx8.1的测试完毕,格式化c盘,启用第一步的ghost备份文件,安装directx9.0b,确认系统directx9.0b已经安装,如下截图:

  3. 桌面颜色为32bit,分三个分辨率测试。有些朋友也许不明白,为什么不采用3dmark03和aquamark3进行对比,这两个软件需要系统安装directx9.0,在安装directx8.1的时候无法运行,自然无法比较,况且业界对3dmark03的公证性颇有置疑。


下面是spec7.0的测试结果对比截图:

directx8.1的测试结果

directx9.0b的参数结果

  从上面简单的测试数据可以看出,directx版本不同,3dmark2001se(330)性能得分也有一定的差距。当directx版本从8.1升级到9.0b的时候,所有性能的测试得分都有一定的提高,我们可以理解directx版本是向前兼容的,新的版本兼容老的版本,从这里我们也明白,有必要尽量安装最新的版本,从性能提升上来说,这部分是免费的。而quakeiii是个例外,它的得分并没有变,不要奇怪,这是正常的,因为quakeiii的api是opengl标准,而非directx,因此directx版本的改变对它是没有影响的。spec是针对三维绘图方面,它的得分性能还是有一点提高,从某方面来说这是免费升级性能啊,基本不需要什么代价和投入,因此建议目前大多玩家可以将尽量将自己的directx版本升级到最新。

 

  后记:关于directx几个关键词的补充

  着色引擎:

  纵观3d加速卡的发展历史,世界各大显卡制造公司的工程师们一直都在致力于增强3d芯片的功能,提高其运行速度。第一块3d加速卡只能够光栅化三角形,只支持最简单的几种色彩混合模式。剧烈的竞争导致了这个领域的科技得到了快速的发展。今天的3d加速卡已经学会了对三角形进行变换和光照处理,并且支持多重纹理混合,执行着色器程序(用于处理顶点和象素的小程序)等复杂操作。

  vs,ps:

  顶点着色器包含两个部分:着色器函数和着色器声明。着色器函数定义了单个顶点上可以执行的操作。从顶点数据流中读出顶点后,就由着色器函数来对其进行处理。顶点数据既可以由数据缓冲区提供,也可以由图元镶嵌引擎提供。原始数据(顶点坐标,法线,等等)将被载入到输入寄存器v0-v15中。一开始,输入寄存器的编号和其功能之间没有严格的对应关系,比如某个顶点的坐标既可以被载入v0,也可以被载入v15。事实上,不使用硬件镶嵌的时候,着色器根本就不知道输入寄存器中载入的是什么数据。为了让图像加速卡能够知道哪些输入寄存器应该载入哪些数据,就需要使用着色器声明。另外,为了尽可能高效的利用显存的带宽和agp总线带宽,应该极力避免载入冗余数据。

(摘自:http://www.pconline.com.cn/pchardware/salon/cnly/xk/10312/249050.html)