为什么游戏偏爱D3D

为什么游戏偏爱D3D

如今游戏领域已经是D3D的天下,但还是有人不断搬出10年前John Carmack的话批驳D3D,尽管Carmack后来多次声明D3D已经有了很大改观,以前的批评已经不再适用。如今公认的评价是D3D和OpenGL在功能、速度和易用性上基本等价。但这无法解释为什么游戏开发商倒向D3D。不少人说是因为游戏开发以前是用DirectDraw的,转到同一风格的D3D比较容易。但两者的相似处也太少了,无论如何从2D转到3D都是要从新学习一套新的体系。而且D3D的每个版本都不同,怎么说也比转到OpenGL的代价大。难道开发商都被微软Mind Control了?

这里我们必须先跳出技术的圈圈。对商业游戏开发来讲,利润是必须的,饿着肚子是没法谈技术和创新的。从众多偶像级开发商的倒闭就知道这个产业的竞争有多激烈。一个游戏最主要的两个卖点就是图像和娱乐性,而新的图像特效比较容易使游戏很快的脱颖而出,而娱乐性更多地影响游戏的寿命。众所周知,OpenGL在推出新特性上总是比D3D慢半拍,但这半拍足以导致游戏落后一年。熟悉OpenGL的人会说OpenGL是允许显卡厂商添加扩展的,同等功能的OpenGL扩展很快就会出现。但是,微软专制的D3D一更新,各种支持其标准的显卡就很快大量涌现;而最早面世的OpenGL扩展都是各个显卡芯片厂商自己定义的,不同的厂商的支持都不一样,然后厂商间协调,为专利问题讨价还价,最后达成多数厂商都能共同支持的EXT或ARB扩展,已经旷费很多时日了。

第二,与CAD等软件不同,游戏是面向大众消费者的。开发商需要游戏尽可能没有麻烦地在用户机器上运行,而普通消费者不知道也不关心D3D、OpenGL是什么东西。对游戏而言,没有3D硬件加速是不能接受的。D3D的游戏一般会带DirectX的安装包,对于不同版本的显卡驱动,D3D都能提供硬件加速的接口。而对OpenGL,相当比例的普通用户的系统上是没装OpenGL ICD Driver(即OpenGL的硬件加速驱动)的,其结果就是幻灯片式的逐帧显示。而且因为不少功能是后来显卡厂商更新驱动后加进去的,就是说,即使用户系统上装了OpenGL ICD Driver,也可能只是1.2、1.3等旧版的,需要下载安装最新版驱动才能使用新特性。估计有人会提GLSetup这个自动检测安装ICD的工具,但似乎这个项目几年前就停止了。从功能上,D3D是忠实的反映硬件能力,可以查询各项硬件指标,超出硬件能力的都是不支持的(但顶点处理可以选择使用软件模式);而OpenGL在硬件不能支持时会自动由软件模拟,这对CAD应用是很理想的,事实上我也很喜欢它这点,但这对游戏是致命的。由于OpenGL各版本的核心功能集合是强制支持的,而硬件未必支持,所以硬件不支持的部分或支持但超出硬件处理范围的部分是由软件模拟的。所以支持OpenGL 2.0的ICD并不意味者全部功能都是硬件加速的。想知道硬件能支持到什么程度,还是要用DXCapsViewer看一下。

第三,商业项目必须考虑成本和时效性。软件项目中,人力成本往往是最大的部分,而按时交工又是开发组最大的压力。很多项目都会购买一个现成的引擎来降低成本和提高时效。而独立开发引擎时,就要选择效率最高的开发平台。对CAD应用来说,它们并不需要显卡的各种新特性,因为它们只是用OpenGL来画线框图,而华丽的渲染效果是离线的高级软件渲染引擎完成的,所以OpenGL 1.1时代的东西在多数情况下是足足够用的。而游戏要用到大量新特性,如Effect Framework、Bump Mapping、HDR、Texture Atlas等,很多是需要将数据进行预处理的。而OpenGL只是图形输出接口,其他的工作都必须自己来做,当然也可以找现成的,不过会有许可协议、不同风格代码集成、以及可能的授权费等问题,毕竟这是商业应用。而D3D提供了D3DX库,包含了从基础数学库(支持MMX、SSE、3DNow)到模型显示的各种辅助例程,极大地节省了开发时间。在D3D和OpenGL的征战中,D3DX为D3D赢得不少支持者。

所以,技术因素在两者的选择上并没有多大影响,似乎也可以证明为什么商业开发多用D3D,业余开发多用OpenGL。但也有不少主流商业引擎是同时支持D3D和OpenGL的,不过在Windows平台上缺省都是用D3D,在Mac上只能是OpenGL,在PS3上是OpenGL ES,在XBox上是特殊版本的D3D。Mac上的OpenGL支持比Windows要好,不用担心它会fallback到软件模拟的1.1。OpenGL ES是精简的纯硬件加速的移动设备版本,而且是主要为移动设备上的游戏设计的,所以对游戏来说,个人觉得它比OpenGL更有前途。

 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值