OpenGL VS DirectX图形世界分裂的两派

专题快递

OpenGL VS DirectX 图形世界分裂的两派

从第一代的3D娱乐显卡S3 Virge推出至今,7年时间一晃而过。经历了多少风风雨雨的市场竞争后,当今的显示卡无论是在制造工艺,还是在产品性能上都有了巨大的进步,并仍在以超越CPU领域摩尔定律的速度飞速发展。最让人高兴的是,原本高高在上的3D显卡已经进入千家万户。现在的显卡,不论是独立的还是整合的,都具有一定的3D功能。但是,你可能并不知道如何利用这些3D功能对你的工作、游戏加以优化,以得到最高的工作效率、最佳的游戏效果。其实,看似复杂的3D选项背后并没有你所想象的高深莫测。你我都可以成为专家,只要我们──理清D3D和OpenGL的脉络。

何为Direct3D(D3D)

计算机三维图形是指用数据描述的三维空间通过计算转换成二维图像并显示或打印出来的技术。API(Application Programming Interface)即“应用程序接口”是连接应用程序与操作系统、实现对计算机硬件控制的纽带的Direct3D和OpenGL是目前的两大3D图形API。要在你的3D显卡上进行3D特效的制作、实现都必须通过它们(Vooodoo迷们肯定对Glide接口记忆犹深,可惜它已随着3dfx的倒闭而作古,其他还有Heidi等接口)。(图1)

图1
图1

Direct 3D是基于微软的通用对象模式COM(Common Object Mode)的3D图形API。它是由微软(Microsoft)一手建立的3D API规范,微软公司拥有该库的版权。它所有的语法定义包含在微软提供的程序开发组件的帮助文件、源代码中。Direct3D是微软公司DirectX SDK集成开发包中的重要部分,适合多媒体、娱乐、即时3D动画等广泛和实用的3D图形计算。自1996年发布以来,Direct3D以其良好的硬件兼容性和友好的编程方式很快得到了广泛的认可。如今几乎所有的具有3D图形加速的主流显示卡都对Direct3D提供良好的支持。但它也有部分缺陷,由于它是以COM接口形式提供的,所以较为复杂,稳定性欠佳,另外,目前只在Windows平台上可用。
作为微软DirectX技术的组件之一,Direct 3D也随着DirectX的升级而不断更新,同时在微软的全力扶植下,Direct 3D技术的发展速度极快。DirectX 7:正式支持硬件T&L(光影变换)、DirectX 8:对Pixel Shader(像素着色器)Vertex Shader(顶点着色器)的支持、DirectX 9:提供2.0版本的可编程顶点和像素着色模式,显卡硬件厂商也纷纷以最新的D3D特效的硬件支持为卖点。遗憾的是,由于平台的局限性等原因,D3D应用至今仍主要集中于游戏和多媒体方面,专业高端绘图应用方面,老牌的3D API──OpenGL仍是主角。

何为OpenGL

OpenGL的英文全称是“Open Graphics Library”即“开放的图形程序接口”,它是计算机工业标准应用程序接口,主要用于定义二维三维图形。
OpenGL是一套底层三维图形API,之所以称之为底层API,是因为它没有提供几何实体图元,不能直接用来描述场景。但通过一些转换程序,可以很方便地将AutoCAD、3DS等图形设计软件制作的DFX和3DS模型文件转换成OpenGL的顶点数据。(图2)

图2
图2

OpenGL是与硬件无关的软件接口,它的应用使图形软件生产厂商不用再为各种不同的机型开发设计不同的软件,只要操作系统使用了OpenGL适配器就可以有相同的效果。它是一个开放图形库,目前在Windows、MacOS、OS/2、Unix/X-Windows等系统下均可使用,且仅在窗口相关部分(系统相关)略有差异,因此具有良好的可移植性,同时调用方法简洁明了,深受好评,应用广泛。OpenGL能在网络环境下以客户机/服务器模式工作,充分发挥集群运算的威力,是专业图形处理、科学计算等高端应用领域的标准图形库。
将OpenGL称之为SGI的OpenGL毫不为过,它源于SGI公司为图形工作站开发的IRIS GL,在跨平台移植过程中发展成为OpenGL。SGI在1992年7月发布1.0版,后成为工业标准,由成立于1992年的独立财团OpenGL Architecture Review Board (ARB)控制。SGI等ARB成员以投票方式产生标准,并制成规范文档(Specification)公布,各软硬件厂商据此开发自己系统上的实现。只有通过了ARB规范全部测试的实现才能称为OpenGL,现在的ARB投票成员包括SGI、Intel、IBM、NVIDIA、ATi、Microsoft、Apple等业界群英。2001年8月ARB批准了1.1版本,最新版规范是2002年7月24日通过的1.4版本。

OpenGL,一波三折

看完了上面关于D3D和OpenGL的介绍,可能会给人这样一种印象:D3D和OpenGL井水不犯河水,一个定位于高端工业标准,一个定位于低端娱乐,互不相干,但其实它们暗中早就已经开始在较劲了。(图3)

图3
图3

虽然早在WinNT 3.51 时代,Microsoft就已经推出了它的OpenGL 版本,但却不肯随Win95提供,称该API 只适合高端应用,而Win95面向一般消费者,用不到。但后来大名鼎鼎的ID Software灵魂人物,DOOM、Quake之父John Carmack在开发下一代三维图形引擎时,戏称Direct 3D为可怕的、支离破碎的API,并极力建议采用OpenGL,此后以他为代表的一大批游戏开发人员开始多方呼吁MS积极支持OpenGL。Microsoft终于在Win95的OSR2版本里集成了OpenGL。
1999年SGI宣布与Microsoft合作开发Ferihant,即Windows的下一代图形处理体系,包括DirectX与OpenGL的低级图形处理接口和以场景图支持为特点的高级接口。此举举世瞩目,大家都以为Windows图形处理快要崭露头角了,然而,不久,SGI宣布中止合作,并撤回派出的科学家,Ferihant基本上夭折。SGI 称终止合作的原因是Microsoft不肯积极合作,光想把SGI 的技术合并进DirectX,真正内幕不详。不过以SGI在图形处理界的老大地位来说,还是有几分可信度的,因为Microsoft最初支持OpenGL就不积极。
由于要考虑到团队中大多数人的利益,由ARB架构检查委员会维护的OpenGL总是停滞不前,唯一的进展仅是OpenGL扩展指令的推出。这些扩展指令是一些绘图功能,像是ClearCoat、Multisample、视频及绘图的整合工具(某些是通过OpenML的努力而开发出来的,它本身属于OpenGL ARB扩展指令之一)。这正好给也是ARB成员之一的Microsoft找到了借口,他抱怨ARB对市场的反应极?俣郏蚨卓狾penGL,倾其所有开发资源,竭尽全力在使DirectX成为高端绘图、与游戏开发API的工作上。

DirectX,后劲十足

由于种种原因,我们不得不接受两个3D API的现实。虽然如此,显卡对D3D和OpenGL的支持却不是分离的,聪明的硬件厂商有办法让它的显示芯片很完美的同时提供对D3D和OpenGL的硬件支持。说到这里,我们不得不感谢NVIDIA,除了对D3D的支持,从它的Riva128芯片组开始,NVIDIA就提供对OpenGL的极佳的支持。现在,我们的主板上不必插上Direct3D和OpenGL两块显卡,也不必不时把VGA接口从一块显卡换到另一块显卡,能够避免麻烦,这真是值得欣慰的。还记得吗?Voodoo让2D和Glide统一的方式是插两块显卡(主显卡+VooDoo子卡),用一根信号连接线将它们连起来。(图4)

图4
图4

游戏程序员们曾经对OpenGL的技术和画质推崇备至,以至于微软被迫在Windows系统中引入OpenGL,并且在Windows平台上出现了Quake Ⅱ、QuakeⅢ、《重返德军总部》等一批优秀的基于OpenGL API的游戏,而同时期的D3D游戏没有哪一款能在画质上超越这些OpenGL游戏的。一直到微软发布DirectX 7,这种情况还是没有发生多大的改变,DirectX只是作为一个能用于快速开发游戏的API而存在着。但是当微软在2001年发布了DirectX 8以后,局面终于被扭转了。DirectX 8是DirectX发展史上一个里程碑式的产品,它在2D、3D、视频、音频以及交互式输入设备接口方面进行了许多重要的改进。其中,在3D图形处理方面尤其做了划时代的改进。可以说,作为一个游戏API,D3D 8已经超越了OpenGL。出现这样的情况决非偶然:OpenGL是由ARB这一官僚机构管理的,官僚主义带来的自然是OpenGL发展的停滞不前,以至于在OpenGL 1.0推出后的相当长的一段时间里,OpenGL惟一做的只是增加了一些扩展指令集。可笑的是最新的OpenGL 1.4中的一项Vertex编程框架技术还被同为ARB成员之一的微软指控侵犯了DirectX 8的专利。而Direct3D这边却得到了微软倾尽全力支持,技术更新极快,不超越OpenGL才怪呢。
DirectX 7在处理3D的时候是遵循一种传统的方式:
CPU顶点数据→T&L引擎→裁减/三角形设置/光栅化→多纹理混合处理→雾混合→透明度/模板和深度测试→帧缓冲
上面是传统(如DirectX 7和OpenGL 1.2)3D图形处理流水线的情况,虽然这种架构在多年的实践中被证明是一种高效率的3D图形处理方式,在硬件上容易实现,编程也相对简单。但是采用这种方式,软件开发人员不可能干预3D图形处理的过程,他们惟一要做的工作就是将硬件支持的各种效果事先规划好,再送入3D流水线进行处理。3D图形处理器所能完成的工作在硬件设计好以后就不能被改变了。可以说这种结构在很大程度上制约了软件开发者的想象力和创造力。
而DirectX 8在传统3D图形处理流水线中的两个地方进行了改进,增加了“可编程”特性:
CPU顶点数据→Vertex Shader、T&L引擎→裁减/三角形设置/光栅化→Pixel Shader、多纹理混合处理→雾混合→透明度/模板和深度测试→帧缓冲。
上面就是DirectX 8可编程3D图形处理流水线的示意图。与过去的处理方式相比,DirectX 8对两个部分进行了改进:一个可编程的Vertex Shader(顶点着色引擎)代替了过去的几何变换和光源处理(T&L)引擎;而可编程的Pixel Shader(像素着色引擎)则加入了过去的纹理处理流水线。
当然未来的走向还有可能变化。采用像素着色与顶点着色的缺点,在于并无标准的可编程能力供绘图硬件之用,以至于DirectX 9未正式出现之前,两大GPU制造商NVIDIA与ATi在DirectX的运用上已经分道扬镳了,这可能会对Direct3D产生不利的局面。OpenGL则不甘示弱,即将出台的OpenGL 2.0会试图将稳定性及开放标准,带至可编程绘图及GPU上,很可能再次全面超越DirectX。一些人怀疑Microsoft声称拥有OpenGL 2.0部分功能专利权,OpenGL 2.0将是OpenGL下一个重要修正版。

OpenGL与D3D孰优孰劣

在目前的市场上,娱乐级的3D显卡竞争是最激烈的,目前能够完全硬件支持DirectX 8的显卡主要有:NVIDIA的Geforce3以上、ATi的Radeon8500以上级别的显卡以及SiS的Xabre、Matrox Parhelia-512等其他厂商的显卡。而考虑到性价比等因素,只有NVIDIA、ATi两大显卡领域的领头羊是最佳选择。要想发挥NVIDIA、ATi的3D性能,用好它们的驱动程序也是极其重要的。关于NVIDIA、ATi驱动程序版本及D3D、OpenGL支持情况、设置界面我们会在后面提到。
如果你对各显卡硬件厂商系列显卡的发展史知之甚少,识别一块显卡对D3D和OpenGL的支持情况,最直接的方法就是看它的规格说明。
以丽台Quadro4 550 XGL专业显卡为例(图14),随卡的说明书上标明“丽台Quadro4 550 XGL的产品特性:硬体叠覆平面、硬体防锯齿线条、双面投影、全景防锯齿、第二代闭塞选择、第二代光速记忆体架构、单一显示器支援 2048×1536、第二代nfiniteFX引擎、硬体支援Microsoft(r) DirectX(r) 8和OpenGL(r) 1.3。”很清楚,这是一块硬件支持DirectX 8和OpenGL 1.3的Quadro4核心的显卡,千万不要被JS的花言巧语蒙骗了。

图14
图14

OpenGL与D3D画质比拼

让我们先选择一款现在最流行的《魔兽争霸Ⅲ》游戏来试试D3D和OpenGL吧。《魔兽争霸Ⅲ》是今年刚推出的全3D的游戏,《魔兽争霸Ⅲ》默认启动DX8.1的D3D模式,但还有一种模式就是OpenGL的3D模式, 并不是暴雪公司不愿意设它为主要模式,而是OpenGL是属于专业三维,有一部分游戏显卡还不支持或不完全支持这个功能。要想打开OpenGL模式,我们需要编辑一下《魔兽争霸Ⅲ》的快捷方式,在exe文件后面加上-opengl参数,再运行快捷方式进入游戏即可。要想返回D3D模式,也只要把-opengl参数去掉即可(图15)

图15
图15

OpenGL模式与D3D模式相比,唯一比较明显的缺点就是字体变得有些模糊(效果对比如(图16)所示)。
图16
图16

从游戏截图中我们可以看到D3D和OpenGL模式下,游戏画面几乎没有任何区别。设计两个API的作用在于,在你的显卡运行某个API出现贴图错误或者或者运行速度跟不上时可以试着切换另一个API来纠正,据说在OpenGL运行《魔兽争霸Ⅲ》并在控制面板中启用OpenGL的“MIP线性过滤功能”(MIP就是快速线性图像处理)可以提升游戏速度10%。
再来看看D3D和OpenGL在3DS MAX 5.0中的表现(使用显卡Geforce3 Ti500)。
3D Studio MAX 5.0是Discreet公司今年6月份发布的最新三维动画创作软件。3DS MAX在全球有数以百万计的使用者,超过了其他几种主要3D动画软件的用户总数。同时,3DS MAX也是在专业软件中为用户考虑最多的软件之一,在它支持的图形标准上就可以看出这一点。3DS MAX共支持4种3D显示接口,它们分别是Heidi、OpenGL、Direct3D和Custom。其中Heidi是由AutoDesk公司自己开发的3D API,缺省情况下采用软件方式进行3D模型的显示,虽然能够显示的效果有限,不过由于Heidi的效率出奇的高,因此它对于显卡硬件功能和性能较弱的用户来说还是不错的。OpenGL是目前主流的3D API,3DS MAX毫无保留地对它提供了支持。OpenGL效率很高,它可以很好地利用硬件性能(包括硬件T&L)来加速模型的显示。在DirectX 8未推出以前,OpenGL也是能够显示最多效果的3D API。在3DS MAX中,Direct3D过去主要是为了使不支持OpenGL的低端显卡能够用来对动画制作进行加速。不过,由于过去Direct3D的效率不高,功能有限,而且采用这种方案的用户也不多,因此长期以来没有得到足够的重视。直到支持DirectX 8的3DS MAX 4和Geforce3显卡推出后,才使这种情况发生了极大的变化。和之前的4.X系列不同的是,MAX 5.0已经把一些基本的硬件Vertex、Pixel Shader Plug-in默认地加载了,当采用Direct 3D驱动模式的时候,我们就能应用上硬件Shader带来的好处了。在3D Studio MAX 5.0目录的Scenes、Version5Features、DirectXFeatures文件夹下有两个应用了DirectX 8特性的模型,它们利用了Pixel Shader的贴图,表现出了极其逼真的环境反射效果等。这样的实时渲染效果已经极其接近于最终的渲染效果,这是目前的标准OpenGL接口所做不到的。
如果你使用的是NVIDIA Quadro系列的显卡,也可以考虑用基于OpenGL的专业的MAXtreme来代替标准的OpenGL接口,与3DS MAX提供的标准OpenGL接口相比,MAXtreme能够提供更多的效果和更好的性能,如高质量透明度、真实感觉的雾化效果、各种纹理过滤方式等。biplane.max模型的DirectX 8和标准OpenGL的实时显示效果对比如(图17)所示。另外,MAXtreme对于显示的加速作用是十分明显的,在MAXtreme中打开Triangle Strip选项可以使复杂线框模式下显示性能提高50%以上。
图17
图17

关于OpenGL和D3D设置后的效果比较以及产生画质差异的原理分析表明:两大API各有自己的特性,有相同之处又有不同之处,就好像子集与交集那样。比如OpenGL 1.4的新功能包括深度纹理和阴影纹理,可以支持实时引擎和相关图像渲染技术,一个Vertex编程框架,支持用户定义几何、光照和阴影程序的阶段设置,支持高级一般应用Shading语言,支持自动纹理Mipmap生成,同样的增强功能还包括多绘图阵列,Windows光栅定位、用户定义雾表坐标轴和第二个颜色、点参数、LOD等等功能,而DirectX 8.1也包括Vertex编程。OpenGL和D3D设置后画质差异效果对比如(图18)所示。有兴趣详细比较的朋友可以访问以下链接:
图18
图18

http://www.opengl.org/developers/documentation/opengl14.html
http://msdn.microsoft.com/library/default.asp?url=/nhp/default.asp?contentid=28000410

专业与娱乐级显卡的区别

目前的两大主力娱乐级显卡厂商,NVIDIA的显示卡对两大API的兼容性都极佳,由于对OpenGL的支持过于优秀,NVIDIA甚至早就开始打入了专业显卡领域。ATi在收购了FireGL以后也开始涉足专业显卡。
从Geforce256开始,NVIDIA每推出一款图形芯片,都会针对主流市场和专业市场推出不同的产品,Geforce256/Geforce2/Geforce2 MX/Geforce2 Pro/Geforce3对应Quadro/Quadro2/Quadro2 MXR/Quadro2 Pro/Quadro DCC。以前NVIDIA的Quadro系列产品都是由德国的ELSA公司独家推出的,包括像ELSA Gloria DCC(NV20 Quadro DCC)、ELSA Gloria4(NV25)等产品。Geforce与Quadro和核心十分相近,一些硬件发烧友成功地将普通的Geforce显卡修改为昂贵的Quadro专业显卡。但这并不意味着现在的专业三维图形卡与娱乐级显卡差别不大,它们还是有很大的区别的。
专业显卡需要的不仅仅是贴图和渲染速度,作为专业级的显卡,它必须具备如下几个特点:
1.单位时间内处理三角形的能力要高;
2.完善支持OpenGL;
3.具备极高的稳定性和兼容性;
4.3D处理流程的全硬件化;
5.显存尽可能大;
6.价格较昂贵。
在执行工业级应用程序时,设计人员绝对无法忍受任何不稳定、缺乏效率的绘图系统,在图像准确度与品质上也毫不妥协。专业图形加速卡的卖点恰恰不在于多边形产生速度或像素填图率等指标上,而是在调整驱动程序以及提供绘图的精确性方面。这也是为什么专业图形卡,特别是高端图形卡价位高得离谱的最主要原因。
在目前的专业显卡市场上,3Dlabs WildCat系列、ATi FireGL4牢牢占领了高端图形卡市场;Elsa Gloria系列、ATi FireGL2在中端市场上占据半壁江山(包括最新的Quadro4、Radeon 8800、FireGL X1);Elsa的Synergy系列以超低价格抢占了低端市场,与3Dlabs Oxygen VX1/GVX1打得不亦乐乎。
根据以上我们对各种3D API的了解,我们在进行电脑硬件系统配置时应该从应用重点出发选择显示卡。如果我们的电脑在PⅡ 233以上机型,平时又主要用于一般文字处理和游戏,或者也业余搞些3D图形制作等,那么可以选择支持Direct 3D和OpenGL两种3D API的AGP显示卡;如果你的电脑准备用于专业性的3D图形制作,那你必须考虑选择除了支持D3D和OpenGL外还支持MAXtreme、HeiDi的专业图形卡了。从实际应用情况看,对于大部分电脑业余爱好者只要选择能支持最常用的DirectX(Direct 3D)和OpenGL的3D显示卡就可以了。另外,我们在选择3D显示卡时,要注意对比新产品广告宣传中所列举的支持不同的3D API时的测试数据,同时注意所能支持的3D API类型和数量,具体到Direct 3D测试数据时还可以注意它究竟能支持多少项(D3D可以支持12种以上3D图形处理效果)D3D的功能。
当你看到一个陌生的3D游戏画面时,你能立刻看出它是基于D3D还是OpenGL的吗?或许John Carmack可以,但我想我们大多数人都不能。我们需要知道的是我们的应用程序需要哪种3D API才能运行得更有效率,哪种3D API可以让我的游戏跑得更快更稳。

常识FAQ

Q:什么是API?什么是3D API?
A:API是英语“应用程序接口(Application Programming Interface)”的缩写。3D API就是3维图形应用程序接口了。
Q:什么是Direct3D?
A:Direct3D是一个3D API,它是微软公司多媒体应用软件DirectX 开发库中的一部分,主要用于游戏和多媒体领域。
Q:什么是OpenGL?
A:OpenGL也是一个3D API,英文全称是“Open Graphics Library”即“开放的图形程序接口”。它是跨平台的计算机工业标准应用程序接口,主要应用于专业设计领域。
Q:我的显卡支持Direct3D或是OpenGL吗?
A:目前新上市的显示卡大都提供了对D3D和OpenGL完善地支持。如果你还是不太清楚,可以运行3D测试软件如3DMark、GLMark测试显卡对Direct3D和OpenGL的支持情况。
Q:为什么我的电脑无法运行SPECviewperf?
A:注意检查一下你的系统配置,运行SPECviewperf至少256MB内存。
Q:为什么我的电脑运行3DMark2001 SE每次得分都不一样?
A:较小的得分差异是正常的,如果差异较大,很可能是你在测试过程中运行了其他应用程序,破坏了“干净”的系统环境。
Q:我到底需要Direct3D还是OpenGL?
A:现在的显示卡3D性能越来越强大了,价格也可以接受。所以我们的建议是:不管你是商业用户、游戏发烧友还是3D设计师,“Direct3D和OpenGL都要!”

OpenGL、D3D性能测试大观

随着3D显卡市场的迅速崛起,各类3D测试软件也应运而生。由于3D API的限制,测试软件同样也是阵营分明,各自针对D3D或OpenGL进行测试。这些测试程序都充分地发挥了显卡的硬件特性,测试场景的画面效果极其绚丽,令人印象深刻,使你对最新的3D技术能够产生形象的认识,而不只是停留在枯燥乏味的技术指标上。除了测试显卡的3D性能外,它们的测试结果往往也从一个方面反映了系统的整体性能。

OpenGL性能测试

先让我们来看看OpenGL性能测试软件。
1.GL Excess
GL Excess是一款著名的OpenGL性能测试工具,它被誉为测试OpenGL性能的3DMark 2001 SE,而它的作者是一位来自意大利的小伙子Paolo Martella。GL Excess有着华丽的界面,设计了丰富的特效表现和动态光影变化,Demo模式下还有动人的音乐和极具震撼力的音效,美中不足的是它没有足够的3D模型(只有一个),无法像3DMark那样进行复杂的大型场景测试。
我们可以在http://www.mydrivers.com/tools/dir9/d3832.htm下载到适用于Win9x/ME/NT/2000/XP平台的GL Excess/XSMark 1.2 完全版。安装并运行GL Excess,可以看到所有的测试选项集中在左侧的Test Settings栏中(图19)。Project项为测试的名称,CPU/FPU tests测试CPU的整数/浮点运算能力,VRAM tests是对显存带宽、特性的测试,FILL RATE tests为填充率测试,POLYGON COUNT tests测试多边形的生成速度。选择上述测试场景,再设置好分辨率(Screen)后就可以按“Run Benchmark”按钮进行测试了(图20)。测试过程中,你可以在屏幕左下角看到实时显示的帧数。测试完毕,GL Excess会自动生成HTML格式的测试结果报告,其中包括各个场景的最高、最低帧速和平均帧速。然后软件会按照各个场景的速度分别计算显卡的OpenGL性能,最后再根据这几项成绩统计出总的测试分数,并与其他同分辨率、同色深下显卡的成绩进行比较。

图19
图19
图20
图20

虽然GL Excess与专业测试程序还有明显的差距,但我们还是可以从中了解到显卡的一些主要OpenGL性能,初步体验OpenGL特效。
2.Vulpine GLMark
如果说GL Excess还略显稚嫩,那么这款来自德国的GLMark就专业得多了。Vulpine GmbH是一家为3DS Max、Maya等专业软件开发插件的公司,它们使用自己开发的Vulpine Vision引擎编写了这款OpenGL测试软件。软件除支持Intel ISSE技术外,甚至还在公司网站上提供了NV30的补丁。
我们可以在http://www.mydrivers.com/tools/dir9/d3845.htm下载GLMark 1.1p版For Win9x/ME/NT/2000/XP。该软件运行后主界面如(图21)所示。
图21
图21

这款测试软件使用的场景十分漂亮。一般的测试分为两个场景:第一个场景是由绿色的草地和蓝色的天空组成的广阔平原(图22),第二个场景则是一个虚拟的女主角在进行科幻世界的探险(图23),当然这个场景少不了整个画面旋转的测试。
图22
图22
图23
图23

与GL Excess单薄的场景相比,GLMark巨大的测试场景才真正是对你的显卡OpenGL性能的严峻考验,它全面衡量显卡的填充率和三角形生成能力,在“High Detail”设置下,第一个“island”测试场景就达到了15000个多边形/每帧!
除了完全兼容标准OpenGL 1.2指令集外,GLMark还加入了OpenGL光照(OpenGL Lighting)、顶点阵列(Vertex Array Range)、材质压缩(Texture Compression)等技术的应用。当然,只有在你的显卡支持的情况下,它们才能被开启。
该软件要求的最低系统配置为128MB内存和支持OpenGL 1.2的显示卡。
测试完后,软件自动生成结果,取平均帧数为最终值。在fps/time标签页中,有详细的帧数变化曲线(图24)。仔细分析一下,你不难从中找到最考验显卡OpenGL性能的画面。而该软件的测试结果还可以保存到数据库(database)一栏中并和其他平台进行比较,只可惜不能提交结果到网上进行对比。
图24
图24

尽管GLMark自称是广泛的测试平台,可以测试从商业应用到3D游戏的各项性能,但实际上,它和GL Excess一样都还不够资格评价OpenGL的专业性能。我们需要更专业的测试程序。
3.SPECviewperf
SPEC, 标准性能评估团体(the Standard Performance Evaluation Corporation),是一家注册于美国加州的非盈利性公司((图25)为该公司的标记),这个组织中立于任何厂商,尽力确保测试软件的公正。据他们所提供的资料表明,他们提供的测试软件因采用了标准化架构,所以可以准确评析当前最新最流行的计算机设备。该公司的官方主页http://www.spec.org上提供了独立的SPECviewperf 7.0专业OpenGL性能测试软件和模拟实际工作环境的SPECapc for Pro/ENGINEER 2001、3DS Max 4.2、SolidWorks 2001、Solid Edge V11、Unigraphics V17等各种专业绘图软件的测试包下载,并且还包括了各种平台(Windows和UNIX/Linux等)的版本。
图25
图25

由于SPEC测试涉及的各类软件过于专业,一般的读者难以理解,这里我们只简单介绍一下SPECviewperf,有兴趣深入研究的读者可以与本栏目编辑联系。
SPECviewperf是一个由C语言编写的OpenGL可执行程序,它是由IBM开发的,后来SGI、Digital以及其他的SPECopc项目开发人员对此作了升级和改良,使它有了明显的提高。SPECviewperf在benckmaking OpenGL执行方面提供了很大的灵活性。SPECviewperf采用命令行模式,最新发布的SPECviewperf 7具有6个测试项目:DRV-08、DX-07、Light-05、proe-01、ugs-01和3dsmax-01。其中:DRV-08项目对应Intergraph的设计浏览软件DesignReview,测试场景是英国石油公司石油平台,里面有数量非常多的管道、设备以及结构模型。模型的数据容量为50多兆字节,多边形数量是36万个;DX-07项目对应IBM的可视化数据软件Data Explorer。DX-07模型的规模是前一版本DX-05的3倍,测试的场景是3个螺旋状粒子轨迹,有30万个顶点(这给系统带来的负荷甚至比DRV-08还大);Light-05项目对应Discreet Logic的高级渲染软件Lightscape Visualization System;proe-01项目对应Pro/Engineer;ugs-01项目对应Unigraphics;3dsmax-01项目则对应3DSMax。
4.Quake 3 Arena
Quake3系列从推出至今,已经历了数个年头,但每一代的图形卡都依旧会选择它作为测试基准,从TNT2到今天的GeForce4都不例外。ID SoftWare的设计功力确实让人佩服,相信在Doom3出来之前Quake3还将保持它OpenGL最权威测试软件的地位。目前的显卡(包括比较低端的GeForce2 MX400)都能够很好地在主流分辨率下运行Quake3,因此Quake3不但被用于测试新显卡的速度,还会被用来测试显卡的FSAA性能,以及异性过滤或MIPMAP过滤。Quake3拥有多达数百条的指令,可以方便地进行项目的测试。
Quake 3 Arena(雷神之锤 3:竞技场)曾经是无数游戏玩家的机器配置的噩梦,但今天它早已不再遥不可及了。如果你还不知道怎么用它来测试系统OpenGL性能,不妨和我一起来动动手吧。
以前大家还同时用demo001与demo002这两个场景来测试数据,但现在我们只保留了demo001这一个测试场景。该场景的复杂系数为2.5。
以测试场景Demo001为例,在进入游戏之后,选择Setup设置显卡,然后根据你的需要在system选项中设置好分辨率、色深、材质、光照等参数。完成设定之后,返回主菜单界面。按下键盘上的“~”键出现指令控制台,输入“timedemo 1”并回车,再输入“demo demo001”运行测试场景。运行完后将会返回主菜单界面,再按一次“~”键即可知道最终的fps。
最新的顶级娱乐显示卡镭9700已经让Quake 3 Arena突破了300fps大关,性能惊人!

OpenGL、D3D性能测试大观

D3D性能测试

跑完了OpenGL,再来看看Direct3D性能测试软件。3DMark 2001 SE无疑是其中的权威。
1.3DMark 2001 SE
Madonion(洋葱头)公司的3DMark(图26)系列测试软件凭借着亮丽的画面和动感的音乐两大法宝,已经成为了Direct3D性能的标准测试软件,且深受大家的喜爱(当然,一些硬件发烧友对这款测试软件还存有“别的看法”)。简便的操作,直观的结果,与3D Winbench相比,3D Mark确实更能打动我们这些普通玩家的心。

图26
图26

3DMark 2001 SE Build 330版For Win9x/ME/2000/XP(2002年6月17日发布)是3D Mark系列的最新成员,新版本里加入了对DirectX 9.0、AGP 3.0 (AGP 8×)和新型号硬件产品(主要在图形芯片方面)的支持,并修正了上个版本的一些Bug。我们可以在http://www.mydrivers.com/tools/dir7/d3175.htm下载到3DMark 2001 SE。普通版本的3DMark 2001 SE已经具有完整的功能,不过专业用户可以支付39.99美元购买提供更多附加功能的专业版(Pro版)。专业版的功能包括了弹性测试自动化选项、批次执行功能、命令列模式以及完全兼容Windows环境的专业测试结果浏览器(Result Browser)。
在安装3DMark2001 SE之前,必须先正确安装好硬件的驱动程序,且需要安装DirectX 8.1或以上版本。为了获得较为准确的数据,建议使用全新安装的Windows 98/Me/2000/XP操作系统,而且还要关闭屏幕保护等常驻内存的程序和能够关闭的所有应用程序,使系统资源得到最大的空余,这样才可以获得一个相对理想的测试环境,使测试结果不受别的因素影响。
测前准备:我们可以在主界面中设置以下几个选项(图27):Project(设置此次测试的标题),Selected Tests(自行选择欲测试的项目),Options(自定义与测试相关的设置,如是否关闭音效),Display and CPU Setting(自定义显示分辨率、色彩深度等)──这是设置重点,除分辨率、色深外还要注意抗锯齿是否打开,而渲染选项和渲染引擎可以设为默认值。最后点“Benchmark”按钮开始运行基准测试。
图27
图27

测试分为两大部分,第一部分为模拟场景测试,提供了4个的模拟场景测试。前3项场景均有低细节度与高细节度之分,在高细节度上采用了多层的纹理与动态的光影效果。最后一项测试采用了Pixel Shader渲染指令,不支持DirectX 8的显卡是无法运行的,比如GeForce4 MX系列就无法运行。前4项的模拟场景测试可以进行最终纹理画质对比,但有可能存在被测显卡有针对性地进行优化的问题。
第二部分的测试项目主要测试显卡的实际性能指标,偏重了纯指标测试,所以显卡的优化对这一部分起不了太大的作用,除非有重大的改变。它包括了Vertex/Pixel Shader及EMBM/DOT3三点内积式测试项目。通常情况下,即使显卡采用不同的驱动程序,在这部分测试项目中的得分浮动也不大。与3DMark2001相比3DMark2001 SE增加了Advanced Pixel Shader的测试,支持Pixel Shader1.4版本,而前者只支持Pixel Shader1.1版本。但为了能兼顾到不同构架的显卡,MadOnion公司特意在Advanced Pixel Shader中设计了Fall-back降低功能,也就是说,即使是只支持Pixel Shader1.1的GeForce3体系也能完成这项测试,但是它却需要渲染两个周期,而ATI Radeon 8500或更高等级,支持Pixel Shader1.4的显卡只需要一个周期就能完成渲染工作。
测试场景中还包括来自游戏《Max Payne》(由Remedy Entertainment公司设计)的,被称为MAX-FX Technology的真实游戏引擎。3DMark2001 SE彻底展示了DirectX 8.1的威力,顶点渲染(Vertex Shader)和相素渲染(Pixel Shader)的威力结合在一起,带来的是酷炫的画面和强烈的视觉冲击,可以说迄今为止,还没有那款测试软件的画面效果能出其左右,包括基于OpenGL API的GL Excess和Vulpine GLMark。其实这在某种程度上也说明了DirectX 8.1至少在画面效果上已经领先于OpenGL 1.2。
测试效果见(图5)(图6)(图7)(图8)
图5
图5
图6
图6
图7
图7
图8
图8

(图9)(图10)(图11)(图12)(图13)。其中,(图5)(图6)(图7)为游戏效果,(图8)为High Polygon Count,(图9)(图10)为Environment Mapped Bump Mapping和Dot Product 3 Bump Mapping(DOT3),而(图11)(图12)为Vertex Shader和Pixel Shader(DirectX 8特效),(图13)为Advanced Pixel Shader(DirectX 8特效)。
图9
图9
图10
图10
图11
图11
图12
图12
图13
图13

3DMark2001 SE不仅支持DirectX 8.1,支持最新的3D图形技术,能有效地测试PC运行3D图形程序的性能,而且还为用户提供了详细的测试结果和一个装有400万个系统性能参数的数据库,用户可通过这个数据库,将自己的系统和全球范围内的其他用户的系统做性能比较,以决定是否升级。
2.Unreal Tournament 2003 Demo
游戏大亨Epic刚刚发布 Unreal Tournament 2003(虚幻锦标赛2003,简称UT2003)(图28)的演示。作为游戏界的领头厂商,Epic推出的新一代游戏UT2003和ID soft 的Quake 3一样代表着游戏甚至是游戏硬件未来的发展方向,因此运用它来对目前主流的显卡进行评测更具前瞻意义,同时也可以让消费者了解什么样的显卡最能保护投资。UT2003和Unreal Tournament一样是专为网络对战设计的。Unreal Tournament在欧美拥有非常庞大的玩家群体,是公认的与Quake3并列的世界顶级FPS游戏,同时也是各大国际赛事的正式比赛项目。UT2003使用同Unreal 2一样的引擎技术,并在Unreal 2的基础上改进了画面质量,增加了新地图和许多新的角色造型。UT2003 Demo在PⅢ 550,256MB内存, GF2 MX200上,使用640×480分辨率,并在将所有效果全部设置为“低”的情况下,勉强可以达到30fps,算是基本流畅。在Unreal 2图形引擎和强大硬件配置的支持下,UT2003能精细地表现出齐腰身的草丛摇曳摆动、斑驳的光影交错荡漾的图形效果,而最为制作者所津津乐道的是他们的布娃娃技术(Rag Doll)。该技术可拟真出角色的物理运动。举个简单的例子,当敌人被你击中而倒下时,会随着被击中的部位、角色的移动速度、所处的地形而发生特定的倒下动作。可以这么说,没有一个角色的倒下动作是相同的!在前作中当敌人被击倒在楼梯上时,他们通常就平躺在那儿,但在UT2003中,你将看到他们的尸体从楼梯上缓缓滑下的过程。你可以到UT2003官方网站http://www.unrealtournament2003.com去下载该游戏的最新版本Demo。
图28
图28

游戏虽然好玩,但是别忘了我们是来测试的。运行游戏System文件夹中的Benchmark.exe文件,会弹出一个对话框,选择你想要的测试分辨率后,游戏会以批处理的方式运行3个Flyby飞行场景和4个Botmatch机器人混战场景,最后自动算出得分。如果要修改色深、材质等参数,那就必须按下Esc键到Settings中进行设置(图29)
图29
图29

UT2003引入了DirectX 8的顶点渲染技术(Vertex Shader)。在UT2003 Demo的ut2003.ini文件中我们可以看到“UseHardwareVS=True”的字样,即设定可以利用硬件Vertex Shader。
UT2003虽然默认是以Direct3D方式运行,但我们同样可以让它运行在OpenGL方式下,具体设置方法如下:
进入游戏System文件夹,打开UT2003.ini文件,找到其中的[Engine.Engine]字段,改成:
RenderDevice=D3DDrv.D3DrenderDevice
RenderDevice=Engine.NullRenderDevice
RenderDevice=OpenGLDrv.OpenGLRe
nderDevice
再运行Benchmark就可以进行测试了,这样我们就可以得到UT2003的OpenGL得分。
自己动手做一下3D测试吧,你一定会有所收获的。
最后再次提醒大家:如果你想要一个真实的测试成绩,必须将各类不必要的常驻内存程序关闭,在一个“干净”的环境中进行测试。另外,最好在做准备工作时运行磁盘整理程序将磁盘碎片去掉,以确保硬盘的速度。

ATi与NVIDIA较劲驱动程序

看了前面的文章后,你应该会选择适合自己的3D显示卡,也知道如何去测试显卡的3D性能了。不过除了这两个环节,还有一处极其关键的D3D和OpenGL设置,那就是驱动程序。要想在游戏画质和速度之间取得最佳的平衡,我们必须对驱动程序进行优化。打开控制面板中的显示设置,D3D和OpenGL的设置界面就出现在我们的眼前。

ATi—完美画质的催化剂

驱动程序曾是ATi的垢病,但ATi的工程师们通过努力,拿出了全新催化剂驱动。全新的催化剂驱动有效提升了全系列镭卡的性能而且解决了不少长期存在的Bug(图30)

图30
图30

说到自定义设置,我们不得不谈谈ATi的各向异性过滤与SMOOTHVISION(视觉平滑技术)两个功能。
各向异性过滤技术在大多数的场合提高了场景的图像质量,但并不是所有的场合都适合它。当使用双线过滤之后会使得相邻材质像素的边缘不那么锐利,三线过滤会使得图像更柔和,所以一般只有比较近的对象才会显得比较锐利。当然这样也会让有的场景显得不是那么逼真,简单地形容就是画面有点发虚。比如应该非常锐利的墙角会变得比较圆滑。不同的GPU处理器实现这个功能的方式是不同的。ATi和NVIDIA在各项异性上的处理速度有些不同,但是处理的质量非常相似。NVIDIA GeForce系列的各向异性处理的质量虽然相当不错,但是对于性能影响非常明显,几乎使得性能大约有50%的下降。ATi Radeon系列显卡在提供相同的质量下,对于性能的影响则小了许多。我们最多甚至可以使用到16×的各向异性过滤。
SMOOTHVISION,相当于NVIDIA的全屏幕抗锯齿(FSAA)技术,它也被称作混叠消除。在Radeon 9700以前,ATi的SMOOTHVISION反锯齿是一种超级采样算法,没有采用NVIDIA的多重采样技术(图31)。ATi Radeon 8500采用的是所谓超级采样技术(RGSS)。通过渲染出场景的多重拷贝,与它们进行位移叠加而得到最终的反锯齿效果。这种方法在提供优秀的纹理分辨率的同时也除去了锯齿,当然它需要极大的填充率,因此需要对一幅待反锯齿的场景进行多次渲染。而多重采样反锯齿,是通过检视每个像素的Z轴深度数值,然后根据像素被遮盖的程度,计算出这个像素前景和后景的平均数值,这个数值就是像素的最终颜色。这种反锯齿的方法好处在于对需要渲染反锯齿的场景一次就可以达到效果,从而降低了对GPU计算资源和显存带宽的消耗。但是在实际使用中,这种技术的效果并非这么优秀。所以现在R9700芯片对超级采样反锯齿和多重采样反锯齿都提供了支持。ATi将R9700芯片上应用的多重采样反锯齿技术命名为“SMOOTHVISION 2.0”,SMOO THVISION 2.0支持2×、4×和6×AA反锯齿模式。
图31
图31

这两个技术的应用,将使ATi镭卡的画面品质更加优秀。我们在游戏中可不要忘了打开这个功能啊!而纹理质量和Mipmap质量也是对画面影响非常大的一个方面。
纹理质量和Mipmap质量决定了人物、背景的贴图看起来是否真实。最后,我们不要忘了等待垂直同步信号这个选项。这个选项可以决定让你的游戏帧速是否等同于你的屏幕刷新率。

NVIDIA—威力十足的雷管

不论是在硬件设计、还是在驱动程序编写上,NVIDIA无疑都是最棒的。仅凭一款全新的雷管驱动程序,NVIDIA就可以让D3D和OpenGL性能有大幅度的提高。
NVIDIA最新的雷管五驱动虽然还是一款Beta版,但还是能带来令人难以置信的性能提升,特别是对GeForce3以上级别的显卡,作用更为明显(图32)。它支持DirectX8.1,包括:nView 2.0、NVRotate画面旋转功能、NVKeystone实时图像校正、数字振动面板、全新的控制面板。Robust Channels:在驱动中通过一个安全路径,可以为所有应用提供更快的性能和更佳的稳定性;CineFX Simulator:可以让开发人员使用CG开发出复杂的Shader等技术亮点。这又是NVIDIA为我们送上来的一顿驱动大餐!需要大家注意的是,安装这款驱动需要在控制面板中的“添加/删除程序”里面完全卸载旧版本的驱动程序,否则将会出现desk.cpl错误。

图32
图32

与ATi催化剂不同,雷管驱动中的抗锯齿设置对D3D和OpenGL同时有效。从GeForce 3开始,NVIDIA在GeForce中使用了全新的硬件HRAA-高清晰度反锯齿技术来取得FSAA全屏反锯齿效果。NVIDIA宣称HRAA-高清晰度反锯齿技术以较小的效能代价来达到和FSAA(全屏反锯齿效果)一样的反锯齿效果。HRAA-高清晰度反锯齿的实际运作方式是通过芯片内部核心集成的“重建过滤”模块,根据输出像素周围的4个像素资料进行计算,并和待输出像素比较来最终确定这个像素的输出位置和相关参数。NVIDIA把这种采样对比的过程称作“Quincunx”五点梅花取样,它可以利用2×FSAA运算量和显存带宽占用率获得GeForce 2时4×FSAA所达到的效果。而且五点梅花采样所消耗的和传统的2×FSAA大致相同((图33)(图34)为D3D和OpenGL的基本设置)。
图33
图33
图34
图34

在Quake3上进行的测试表明,在同样分辨率和同样色彩深度下,打开FSAA后,显示帧数会失落20%~70%。因此要获得FSAA效果,要么牺牲速度,要么牺牲分辨率。不过最终如何取舍,还是要依据你的机器配置和对游戏中的主观感受而定。比方说,在《魔兽争霸Ⅲ》中,打开FSAA就没有必要,而在《极品飞车Need For Speed Hot Pursuit 2》中,要在不丢帧的情况下尽可能地打高FSAA,体会流光溢彩的画面效果(个人建议)。

应用程序设置实例

摸清了D3D和OpenGL的脉络,根据你的需要,选择一款好的3D显卡,选择一款好的驱动程序,运行测试软件,调整中找出最适合你的D3D和OpenGL工作状态。这就是“理清D3D和OpenGL的脉络”真正的意义所在。
最后,让我们选择一款游戏,实战一下(我的配置:P4 1.8GHz+256MB DDR266+GeForce3 Ti500)。
《极品飞车热力追踪2》(Need For Speed Hot Pursuit 2)最近一推出,就成为热门的游戏,绚丽的画面伴随动人的音乐,让每个人都想跃跃欲试。PC游戏界的老大EA( Electronic Arts)公司这次同时发售4个版本的NFSHP2,包括PC、XBOX、PS2和Game Cube版本。NFSHP2提供超过22辆傲视群车的超级赛车和多达12条刺激性的赛道。另外,同疯狂追逐你的警车甚至直升机斗智斗勇更是游戏的一大卖点。
选手个人文档详细记录了你的最高、平均时速,获胜、失败次数甚至有你被捕的次数!
与战网一样,可以上Internet与全世界的飞车迷在同一赛道飞驰竞技,将是这个游戏最大的乐趣所在。
玩游戏以前,先看看游戏说明文档readme.txt,最低系统配置(MINIMUM SYSTEM REQUIREMENTS)一栏中16MB DirectX 8.1 compatible video card using a supported chipset (see below)表明这是一款DIRECT3D的游戏,但由于游戏制作的原因,并不是所有支持DIRECT3D的显卡都能跑NFSHP2。比如最新的镭9700就会黑屏,在文档DIRECT3D SUPPORT一栏中有支持的显卡列表,这些显卡可以很好地跑NFSHP2。
运行游戏,先进入Options选项,再进入Customize Graphics设置分辨率、色深、材质、特效、亮度(图35)

图35
图35

先不打开全屏抗锯齿(No FSAA)跑一圈,如果画面极其流畅,在游戏中按下“Alt+Tab”键,切换到桌面,点鼠标右键,进入弹出的显示器属性→高级→GeForce3 Ti500→3D Antialiasing Settings,将全屏抗锯齿(FSAA)设为2×,点击“应用”,再按下“Alt+Tab”键回到游戏,画质会有提高。再跑一圈飞车,如果还很流畅就继续往上设((图36)为开启全屏抗锯齿前后的效果图)。
图36
图36

千万不要因留恋美丽的风景而被警察逮住哟,被狼狗追的滋味可不好受呀。

使用Direct 3D或OpenGL的

注意事项
值得注意的是,在一些游戏中,尽管我们在显示桌面设置好显示器的刷新率,但是在一些游戏中,会自动把刷新率又设置为60Hz。对于玩家的视力来说,的确是大大有害的。这个问题是可以解决的。
我们在玩Direct 3D游戏的时候,可以在DirectX的设置中改变替代的刷新率,从而在游戏中得到高于60Hz的刷新率,达到保护我们视力的目的。具体操作如下:
在系统开始菜单里面选择运行,输入“DXDIAG”运行DirectX设置工具,选择“其他帮助”标签里面的“其他”选项(图37),在替代刷新率里面输入固定的刷新率就可以了(图38),以后玩Direct 3D游戏就会固定到这个刷新率下了。不过需要注意的是这个替代的刷新率不能超过显示器相应分辨率下的最高刷新率。

图37
图37
图38
图38

至于OpenGL游戏则可以使用一些补丁或者工具软件来进行设置,对于不同的显示卡,使用的工具也不尽相同。对于NVIDIA的卡,可以使用RivaTuner。RivaTuner是一款由Alex Unwinder发布的NVIDIA显卡修改工具,支持NVIDIA全部产品,支持微软全系列操作系统,最难得的是它还是一个免费软件。RivaTuner给我们提供了强大的功能:在选择适配器对话框中自定义里面提供了显卡工作频率调整、当前刷新率调整、色彩调整及硬件信息。
至于ATi的显卡,则可以使用ATi系列显卡专用的刷新率调整工具(图39)。下载地址http://www.mydrivers.com/tools/dir8/d3366.htm,使用简单明了。
图39
图39