图形世界分裂的两派——理清Direct3D和OpenGL的脉络

Posted skiwnchiwns

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图形世界分裂的两派——理清Direct3D和OpenGL的脉络相关的知识,希望对你有一定的参考价值。

计算机三维图形是指将用数据描述的三维空间通过计算转换成二维图像并显示或打印出来的技术,API(Application Programming Interface)即“应用程序接口”是连接应用程序与操作系统、实现对计算机硬件控制的纽带,Direct3D和OpenGL是目前的两大3D图形 API,要在你的3D显卡上进行3D特效的制作、实现都必须通过它们(Vooodoo迷们肯定对Glide接口记忆尤深,可惜已随着3dfx的倒闭而作古,其它还有Heidi等接口)。关于D3D和OpenGL的理论知识可以写一大堆厚厚的书,在这里我只为大家简单介绍一下基础知识,有兴趣深入研究的朋友可以自己上网查询相关资料。

Direct3D(D3D)
技术分享图片

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的顶点数据。

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版本。

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

虽然早在WinNT 3.51 时代,Microsoft就已经实现了它的OpenGL 版本,但却不肯随其Windows95 提供,称该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下的OpenGL实现的支持以示决心。此举举世瞩目,大家都以为 Windows图形处理快要过上幸福生活了,然而,不久,SGI宣布中止合作,并撤回派出的科学家,Ferihant基本上夭折。SGI 称终止合作的原因是Microsoft不肯积极合作,光想把SGI 的技术合并进DirectX,真正内幕不详。不过以SGI在图形处理界的老大地位来说,还是有几分可信度的,因为Microsoft最初支持OpenGL 就不积极。

技术分享图片

由于要考虑到团队中大多数人的利益,由ARB架构检查委员会维护的OpenGL总是停滞不前,唯一的进展仅是OpenGL扩展指令的推出。这些扩展指令是一些绘图功能,像是ClearCoat、Multisample、视频及绘图的整合工具(某些是通过OpenML的努力而开发出来的,它本身属于 OpenGL ARB扩展指令之一)。这正好给也是ARB成员之一的Microsoft找到了借口,他抱怨ARB对市场的反映极为迟钝,因而抛开OpenGL,顷其所有的开发资源,独自全力投入使DirectX成为高端绘图、与游戏开发API的工作上。

D3D和OpenGL的互相渗透也早已初露端倪,你可以在市面上看到不少采用OpenGL的游戏如QuakeIII、重返德军总部等等,也可以看到Direct 3D凭着自身的优势,在3DS Max上渐渐超越OpenGL,关于这方面具体的介绍会在文章后面部分讲到。

OpenGL与DirectX代表着绘图世界分裂的两派。
[它们如何工作?]

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

游戏程序员们曾经对OpenGL的技术和画质推崇倍至,以至于微软被迫在Windows系统中引入OpenGL,并且在Windows平台上出现了 Quake II、QuakeIII、重返德军总部等一批优秀的基于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下一个重要修正版。

毫无疑问,目前的市场上,娱乐级的3D显卡竞争是最激烈的,目前能够完全硬件支持DirectX 8的显卡主要有:nVIDIA的Geforce3以上、ATi的Radeon8500以上级别的显卡以及SiS的Xabre、Matrox Parhelia-512等其它厂商的显卡。而考虑到性价比等因素,只有nVIDIA、ATi两大显卡领域的领头羊是最佳选择。要想发挥nVIDIA、 ATi的3D性能,用好它们的驱动程序也是极其重要的,关于nVIDIA、ATi驱动程序版本及D3D、OpenGL支持情况、设置界面我们会在后面的应用篇讲到。
[细谈D3D、OpenGL]

如果你对各显卡硬件厂商系列显卡的发展史知之甚少,识别一块显卡对D3D和OpenGL的支持情况,最直接的方法就是看它的规格说明。

以这块丽台Quadro4 550 XGL专业显卡为例:

技术分享图片
丽台Quadro4 550 XGL

随卡的说明书上标明“丽台Quadro4 550 XGL的产品特性:硬体叠覆平面、硬体防锯齿线条、双面投影、全景防锯齿、第二代闭塞选择、第二代光速记忆体架构、单一显示器支援 2048x1536、第二代nfiniteFX引擎、硬体支援Microsoft DirectX 8 和 OpenGL 1.3。”很清楚,这是一块硬件支持DirectX 8和OpenGL 1.3的Quadro4核心的显卡,千万不要被JS的花言巧语蒙骗了。

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

技术分享图片
D3D截图

技术分享图片
OpenGL截图

OpenGL模式与D3D模式相比,唯一比较明显的就是字体变得有些模糊。

技术分享图片
D3D截图

技术分享图片
OpenGL截图

从游戏截图中我们可以看到D3D和OpenGL模式下,游戏画面几乎没有任何区别。设计两个API的作用在于,在你的显卡运行某个API出现贴图错误或者或者运行速度跟不上时可以试着切换另一个API来纠正,据说在OpenGL运行《魔兽争霸III》并在控制面板中启用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能够提供更多的效果和更好的性能,如高质量透明度、真实感觉的雾化效果、各种纹理过滤方式等。另外,MAXtreme对于显示的加速作用是十分明显的,在MAXtreme中打开Triangle Strip选项可以使复杂线框模式下显示性能提高50%以上。

技术分享图片

3DS MAX共支持4种3D显示接口,支持DirectX 8.1(配合Geforce3以上显卡)

技术分享图片
技术分享图片

3DS MAX 5.0的D3D和OpenGL设置窗口

技术分享图片

技术分享图片

技术分享图片

技术分享图片

biplane.max模型的DirectX 8和标准OpenGL的实时显示效果

技术分享图片

TigerTank.max模型的DirectX 8实时显示效果

技术分享图片

TigerTank.max模型的标准OpenGL实时显示效果

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

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、价格较昂贵。在执行工业级应用程序时,设计人员绝对无法忍受任何不稳定、缺乏效率的绘图系统,在图像准确度与品质上也毫不妥协。专业图形加速卡的卖点恰恰不在于多边形产生速度或像素填图率等指标上,而是在调整驱动程序以及提供绘图的精确性方面。这也是为什么专业图形卡,特别是高端图形卡价位高得离谱的最主要原因。高档专业显卡的驱动程序往往都带有对所有OpenGL函数提供完善支持的OpenGL客户端驱动程序(ICD),这些优化程序使用其专业的接口,通过与专业软件的“无缝”结合,对提高机械CAD、建筑、动画、模拟等领域的工程师们的工作效率可以起到非常大的帮助。

目前的专业显卡市场上: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可以让我的游戏跑得更快更靓。

 

[OpenGL,如何测试?]

随着3D显卡市场的迅速崛起,各类3D测试软件也相应而生。由于3D API的限制,它们同样也是阵营分明,各自针对D3D和OpenGL进行测试。这些测试程序都充分的发挥了显卡的硬件特性,画面效果极其绚丽,令人印象深刻,让你对最新的3D技术的认识是具体的、理性的,而不只只停留在枯燥乏味的规格说明书上。除了测试显卡的3D性能,它们的测试结果也往往是衡量整个系统性能的依据。

先让我们来看看OpenGL性能测试软件。

GL Excess

GL Excess是一款著名的OpenGL性能测试工具,被誉为测试OpenGL性能的3DMark 2001 SE,它的作者是一位来自意大利的小伙子Paolo Martella,它同样有着华丽的界面、丰富的特效表现和动态光影变化,Demo模式下也有动人的音乐和极具震撼力的音效,但是由于没有足够的3D模型(只有一个),该软件还略显单薄,无法像3Dmark那样进行复杂的大型场景测试。

技术分享图片

 



GL Excess/XSMark 1.2主界面

您可以到驱动之家
http://www.mydrivers.com/tools/dir9/d3832.htm下载GL EXCESS/XSMark 1.2 完全版For Win9x/ME/NT4/2000/XP。进入GL Excess,可以看到所有的测试选项集中在左侧的Test Settings一栏中,Project输入测试的名称,CPU/FPU tests测试CPU的整数/浮点运算能力,VRAM tests是显存带宽、特性测试部分,FILL RATE tests为填充率测试,POLYGON COUNT tests测试多边形的生成速度。选择上述测试场景,再设置好分辨率(Screen)后就可以Run Benchmark进行测试了。测试过程中,您可以在屏幕左下角看到实时显示的帧数。测试完毕后,GL Excess会自动生成HTML格式的测试结果报告,其中包括各个场景的最高、最低帧速和平均帧速,然后按照各个场景的速度计算显卡在各场景的OpenGL性能,最后再根据这几项成绩统计出总的测试分数,并与其它同分辨率、同色深下显卡的成绩进行比较。

技术分享图片

 



GL Excess/XSMark 1.2测试画面

虽然GL Excess与专业测试程序还有明显的差距,但我们还是可以从中了解到显卡的一些主要OpenGL性能,初步体验OpenGL特效。

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/NT4/2000/XP。

技术分享图片

 



GLMark主界面

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

与GL Excess单薄的场景相比,GLMark的巨大测试场景才真正是对你的显卡OpenGL性能的严峻考验,它全面衡量显卡的填充率和三角形生成力,在“High Detail”设置下,第一个“island”测试场景最多要求达到超过15000个多边形/每帧!

技术分享图片

 


 

技术分享图片

 



Vulpine GLMark的两个测试场景

除了完全兼容标准OpenGL 1.2指令集外,软件还加入了OpenGL光照(OpenGL Lighting)、顶点阵列(Vertex Array Range)、材质压缩(Texture Compression)等技术的应用,当然,只有在你的显卡支持的情况下,它们才能被打开。

软件要求的最低系统配置为:Intel兼容CPU、128M内存、硬件支持OpenGL 1.2的显示卡。

技术分享图片

 


 

技术分享图片

 



Vulpine GLMark的测试结果

测试完成后,自动生成结果,取平均帧数为最终结果。在fps/time页面中,有详细的帧数变化曲线,仔细分析一下,你不难从中找到最考验显卡OpenGL性能的画面。测试结果还可以保存到数据库(database)一栏中并和其它平台进行比较,只可惜不能提交结果到网上进行对比。

GLMark自称是广泛的测试平台,可以测试包括从商业应用到3D游戏的各项成绩,但是用于评价专业OpenGL性能它和GL Excess一样都还不够资格。我们需要更专业的测试程序。

SPEC, 标准性能评估团体(the Standard Performance Evaluation Corporation),是一家注册于美国加州的非盈利性公司,这个组织中立于任何厂商,尽力确保测试软件的公正。并且,据他们所提供的资料表明,他们提供的测试软件因其标准化架构,可以准确评析当前最新,最流行的计算机设备。其官方主页
http://www.spec.org上,提供包括独立的SPECviewperf 7.0专业OpenGL性能测试软件和模拟实际工作环境的SPECapc for Pro/ENGINEER" 2001、3ds max" 4.2、SolidWorks 2001、Solid Edge V11、Unigraphics V17等各种专业绘图软件的测试包免费下载,并且包括Microsoft Windows和UNIX/Linux等版本。

技术分享图片

 



由于SPEC测试涉及的各类软件过于专业,一般的读者难以接受,这里我们简单介绍一下SPECviewperf,有兴趣深入以研究的读者可以与本栏目编辑联系。

SPECviewperf是一个由C语言编写的openGL(开放源代码)的可执行程序,它是由IBM开发的,后来SGI、Digital以及其他的SPECopc项目开发人员对此作了升级和显著的贡献。SPECviewperf在benckmaking openGL执行方面提供了巨大的灵活性。SPECviewperf是一个采用命令行模式的基于C语言应用程序,最新发布的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-05相比,模型的规模是原来的3倍。测试的对象是3个螺旋状粒子轨迹,模型规模为30万个顶点(对系统的负荷甚至比DRV-08更大);Light-05项目对应Discreet Logic的高级渲染软件Lightscape Visualization System;proe-01项目对应Pro/Engineer;ugs-01项目对应Unigraphics;3dsmax-01项目对应的是3dsMax。

Quake III Arena

技术分享图片

 



Quake3系列从推出至今,已经经历了数个年头,但每一代的图形卡都会选择它作为基准的测试,从TNT2时代到今天的GeForce4都不例外。ID SoftWare的设计功力确实不得不让人佩服,相信在Doom3出来之前Quake3还将保持它OpenGL最权威测试软件的地位。目前的显卡包括比较低端的GeForce2 MX400,都能够很好地在主流分辨率下运行Quake3,所以我们除了重视Quake3测试新显卡的速度之后,还会使用它来测试新显卡的FSAA以及各项异性过滤及MIPMAP过滤是否平滑等画面效果,因为Quake3拥有多达数百条的灵活指令应用,可以方便测试项目的进行。Quake III Arena(雷神之锤 III:竞技场)曾经是游戏玩友机器配置的噩梦,但今天它早已不再遥不可及了,不过你如果还不知道怎么用它来测试系统OpenGL性能,不妨和我一起来动动手吧。

以前大家还同时采用demo001与demo002这两个场景的测试数据,但时至今日,只保留了demo001这一个场景的测试,Quake3的场景复杂系数为2.5。

以测试场景Demo001为例。在进入游戏之后,选择Setup设置显卡,必须根据你想要的测试环境在system选项设置好分辨率、色深、材质、光照等参数,完成设定之后,返回主菜单界面。按下键盘上的“~”键出现指令控制台,输入“timedemo 1”回车,再输入“demo demo001”运行测试场景,运行完毕之后将会返回主菜单界面,再按一次“~”键即可知道最终的FPS。

最新的顶级娱乐显示卡镭9700已经让Quake III Arena突破了300帧大关,性能惊人。

[D3D,如何测试?]

跑完了OpenGL,再来看看Direct3D性能测试软件,这里3DMark 2001 SE无疑是其中的权威。

3DMark 2001 SE

技术分享图片

 



洋葱头Madonion公司的3D Mark系列测试软件凭籍着亮丽的画面和动感的音乐两大法宝,已经成为了Direct3D性能标准测试软件,且深受大家的喜爱(当然一些硬件发烧友对这款测试软件还有争议)。简便的操作,直观的结果,与3D Winbench相比,3D Mark确实更能打动我们这些普通玩家。3DMark 2001 SE Build 330版For Win9x/ME/2000/XP(2002年6月17日发布)是3D Mark系列的最新成员,新版本里更加入了对DirectX 9.0、AGP 3.0 (AGP 8x)、新型号的硬件产品(主要在图形芯片方面)的支持,修正了上个版本的一些BUG。您可以到驱动之家http://www.mydrivers.com/tools/dir7/d3175.htm下载。普通版本的3DMark 2001 SE已经具有完整的功能,不过专业(Pro)的用户可以支付39.99美元购买提供更多附加功能的专业版。专业版的功能包括了弹性测试自动化选项、批次执行功能、命令列模式、以及完全兼容Windows环境的专业测试结果浏览器(result browser)。

在安装3DMark2001 SE之前,必须正确安装好硬件的驱动程序,并安装DirectX 8.1或以上版本。为了获得较为准确的数据,建议使用全新安装的Windows 95/98/Me/2000/XP操作系统。而且要关闭屏幕保护等常驻内存的程序,使系统资源每次都最大化并避免执行多任务。这样就可以获得一个相对理想的测试环境,使得测试结果不会受到影响。

测前准备可以在主界面中看到几个选项(如图1 )。其中包括:Project(设置此次测试的标题);Selected Tests(自行选择欲测试的项目);Options(自定义与测试相关的设置,如是否关闭音效等);Display and CPU setting(自定义显示分辨率、色彩深度等)---这里是设置重点,除分辨率、色深外还要注意抗锯齿是否打开、渲染选项和渲染引擎可以设为默认值;最后Benchmark(运行基准测试)。

技术分享图片

 


 

技术分享图片

 



设置窗口

技术分享图片

 


 

技术分享图片

 



Game Test 1 - Car Chase和Game Test 2 - Dragothic(游戏性能部分)

技术分享图片

 


 

技术分享图片

 



Game Test 3 – Lobby和Game test 4 - Nature(游戏性能部分)

技术分享图片

 


 

技术分享图片

 



Fill Rate和High Polygon Count(理论速度部分)

技术分享图片

 


 

技术分享图片

 



Environment Mapped Bump Mapping和Dot Product 3 Bump Mapping (DOT3)(理论速度部分)

技术分享图片

 


 

技术分享图片

 



Vertex Shader和Pixel Shader(DirectX 8特效部分)

技术分享图片

 


 

技术分享图片

 



Advanced Pixel Shader和Point Sprites(DirectX 8特效部分)

测试分为两大部分,第一部分为摸拟场景测试,提供了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。

3DMark2001 SE支持DirectX 8.1,支持最新的3D图形技术,可以有效地测试PC运行3D图形程序的性能,并为用户提供一个在线比较工具,方便用户评估系统性能并决定是否升级。3DMark2001 SE提供了详细的测试结果,可以通过4M个系统结果的性能数据库比较系统相对性能。这可以允许用户比较自己系统和全球其他用户系统的性能。

推出一年多了,即使版本有不断升级,3DMark2001 SE还是显得有些老了,甚至有被nVIDIA和ATi吃透的趋势,我们已经开始期待3DMark2002(2003?)的出现,它会是基于DirectX 9的吗?有没有比2001更酷的测试画面?我们拭目以待。

虽然无可避免的会有图形卡厂商为它的场景进行优化或者测试项目有Cheating的现象。然而这些缺点仍无法阻止3DMark成为D3D的必备测试软件。所以3DMark2001 SE仍然是我们D3D测试软件中的首选。

Unreal Tournament 2003 demo

技术分享图片

 



游戏大亨Epic刚刚发布 Unreal Tournament 2003(虚幻锦标赛2003)的演示。作为游戏界的领导厂商,Epic推出的新一代游戏Unreal Tournament 2003和id soft 的Doom 3一样代表着游戏甚至是游戏硬件未来发展的方向,因此运用它来对目前主流的显卡进行评测是具有前瞻意义,同时也可以让消费者了解什么样的显卡最能保护投资。Unreal Tournament 2003和Unreal Tournament一样是专为网络对战设计的。Unreal Tournament在欧美拥有非常大的玩家群体,是公认的与Quake3并列的世界顶级FPS游戏之一,同时也是各大国际赛事经常采用的正式比赛项目。《虚幻竞技场2003》使用同虚幻II一样的引擎技术。它包含了大大改进的画面、新地图和许多新的角色造型。虚幻锦标赛2003(UT2k3 Demo)在PIII 550, 256M Ram, GF2 MX200上,使用640x480分辨率所有效果全低,可以达到平均30左右的FPS,基本算是流畅。在《虚幻2》引擎和强大硬件配置的支持下,UT2003能精细地表现出齐腰身的草丛摇曳摆动、斑驳的光影交错荡漾的图形效果,而最为制作者所津津乐道的是他们的布娃娃技术(rag doll)。该技术可拟真出角色的物理运动,举个简单的例子,当敌人被你击中而倒下时,会随着被击中的部位、角色的移动速度、所处的地形,而发生特定的倒下动作,可以这么说,没有一个角色的倒下动作是相同的!在前作中当敌人被击倒在楼梯上时,他们通常就平躺在那儿,但在UT2003中,你将看到他们的尸体从楼梯上缓缓滑下的过程。您可以到UT2003官方网站www.unrealtournament2003.com去下载该游戏的最新版本demo。

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

技术分享图片

 



UT2003设置窗口

UT2003引入了DirectX 8的顶点渲染技术(Vertex Shader)。在Unreal Tournament 2003 demo的ut2003.ini文件中我们可以看到“UseHardwareVS=True”的字样,即设定可以利用硬件Vertex Shader。

自己动手做一下3D测试吧,你一定会有所收获的。

最后需要再次提醒的是,如果你想要一个真实的测试成绩,必须将各类不必要的常驻内存程序杀掉,同时必须保证在进行所有的测试前,都必须重新启动系统,以一个“干净”的环境来进行测试,运行测试程序前不能运行任何其它的程序,以免占用内存资源,还有每次测试前最好运行磁盘整理程序

 

[D3D、OpenGL?这就教你调!]

这么多测试跑下来,一定很累了吧?不过相信你对D3D和OpenGL的也一定有了比较深的认识。说实话,除CS等少数几个游戏之外,我对大多数FPS游戏都很感冒---头晕,可偏偏权威测试游戏多数都是FPS的,如果你也有和我一样的症状,不妨在测试时把头扭开:o)好了,有了前面的产品篇和评测篇,你应该已经选好了适合自己的3D显示卡,也知道了如何去测试显卡的3D性能,不过除了这两个环节,还有一处极其关键的D3D和OpenGL设置所在,那就是---驱动程序。要想在游戏画质和速度之间取得最佳的平衡点,我们必须对驱动程序进行优化。打开控制面板中的显示设置,D3D和OpenGL的设置界面就出现在我们的眼前。

先来看看ATi显卡驱动的D3D和OpenGL设置:

技术分享图片

 



驱动程序曾是ATi的垢病,但Ati的工程师们洗心革面,拿出了全新催化剂驱动。通过驱动之家ATi镭卡驱动系列测试表明,最新的催化剂驱动有效提升了全系列镭卡的性能而且解决了不少长期存在的Bug。

技术分享图片

 


 

技术分享图片

 



ATi显卡驱动的D3D和OpenGL的设置界面

说到自定义设置,我们不得不谈谈ATI的各向异性过滤与SMOOTHVISION两个功能。

各向异性过滤技术在大多数的场合提高了场景的图像质量,但并不是所有的场合都适合它。当使用双线过滤之后会使得相邻材质像素的边缘不那么锐利,三线过滤会使得图像更柔和,所以一般的只有比较近的对象才会显得比较锐利。当然这样也会让有的场景显得不是那么逼真,简单的形容就是画面有点发虚,比如在需要非常锐利的墙角会变得比较圆滑。不同的GPU处理器实现这个功能的方式是不同的。ATI和nVidia在各项异性上的处理速度有些不同,但是处理的质量非常的相似。NVidia GeForce系列的各向异性处理的质量处理虽然相当的不错,但是对于性能的影响非常的明显,几乎使得性能有了大约50%的下降。ATI Radeon系列显卡在提供了相同的质量下,对于性能的影响则小了许多。我们最多甚至可以使用到16X的各项异性过滤。

SMOOTHVISION视觉平滑技术,相当于nVIDIA的全屏幕抗锯齿(FSAA)技术,它也被称作混叠消除,在Radeon 9700以前,ATi的SMOOTHVISION反锯齿是一种超级采样算法,没有采用nVIDIA的多重采样技术。ATi Radeon 8500采用的是所谓超级采样技术(RGSS)。通过渲染出场景的多重拷贝,与它们进行位移叠加而得到最终的反锯齿效果,这种方法在提供优秀的纹理分辨率的同时也除去了锯齿,当然它需要极大的填充率,因此需要对一幅待反锯齿的场景进行多次渲染。而多重采样反锯齿,是通过检视每个像素的Z轴深度数值,然后根据像素被遮盖的程度,计算出这个像素前景和后景的平均数值,这个数值就是像素的最终颜色。这种反锯齿的方法好处在于对只需要渲染待反锯齿的场景一次就可以达到效果,从而降低了对GPU计算资源和显存带宽的消耗,但是在实际使用中,这种技术的效果并非这么优秀。所以现在R9700芯片对超级采样反锯齿和多重采样反锯齿都加以了支持。ATi将他们在R9700芯片上应用的多重采样反锯齿技术命名为“SMOOTHVISION 2.0”,SMOOTHVISION 2.0支持2X、4X和6XAA反锯齿模式。

这两个技术的应用,将使ATi镭卡的画面品质更加优秀,当然我们在游戏中也不要忘了打开这个功能。而纹理质量和Mipmap质量也是对画面影响非常大的一个方面。

纹理质量和Mipmap质量决定了人物、背景的贴图是否看起来是否真实。最后,我们不要忘了等待垂直同步信号这个选项,这个选项可以决定让你的游戏桢速率是否等同于你的屏幕刷新率。

技术分享图片

 



打开全屏幕抗锯齿和各向异性过滤功能(左图)与未打开(右图)时的对比效果

不论是在硬件设计、还是在驱动编写上,Nvidia无疑都是最棒的,仅凭一款全新的雷管驱动程序,nVIDIA就可以让N卡的D3D和OpenGL性能有大幅度的提高。

技术分享图片

 



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

技术分享图片

 



40.41版驱动http://hardware.mydrivers.com/page/ctdir1/2002,08,31,42,0.htm有详细的评测

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

技术分享图片

 



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

技术分享图片

 



D3D选项中取默认值就可以了

技术分享图片

 



OpenGL选项中别忘了关闭垂直同步(Vertical sync)

根据你的爱好、你的系统配置,找出D3D和OpenGL画质和速度间的黄金分割点吧,如果你连自己动手的DIY精神都欠缺,不妨到驱动之家看看驱动评测,编辑们会向你推荐最佳的D3D和OpenGL设置。

摸清了D3D和OpenGL的脉络了吗?根据你的需要,选择一款好的3D显卡、选择一款好的驱动程序、运行测试软件、调整、找出最适合你的D3D和OpenGL工作状态。这就是“理清D3D和OpenGL的脉络”真正的意义之所在。


[写在最后,常见问题解答]

常见问题解答(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:那一款驱动程序最能发挥我的3D显卡的Direct3D和OpenGL性能?
A:并不是最新的驱动程序就一定能带来最佳的Direct3D和OpenGL性能,测试结果可以告诉你哪一款驱动最适合你得显卡,不妨关注一下驱动之家的驱动评测,相信您能找到满意的答案。

Q:为什么我的电脑无法运行SPECviewperf?
A:注意检查一下你的系统配置,运行SPECviewperf要求至少256M内存。

Q:为什么我的电脑运行3DMark2001 SE每次得分都不一样?
A:较小的得分差异是正常的,如果差异较大,很可能是你在测试过程中运行了其它应用程序,破坏了“干净”的系统环境。

Q:我到底需要Direct3D还是OpenGL?
A:现在的显示卡3D性能越来越强大了,价格也可以接受,所以我的建议是:不管你是商业用户、游戏发烧友还是3D设计师,“Direct3D和OpenGL我都要!”

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow





























































































































































以上是关于图形世界分裂的两派——理清Direct3D和OpenGL的脉络的主要内容,如果未能解决你的问题,请参考以下文章

《逐梦旅程 WINDOWS游戏编程之从零开始》笔记7——四大变换

D3D12 图形编程

Direct3d 和 hlsl 不同大小的顶点和多维几何对象?

线段树分裂合并

Direct3D 11 Tutorial 3: Shaders and Effect System_Direct3D 11 教程3:着色器和效果系统

3d一些术语