正在阅读:3D游戏的盛大宴席:DirectX 10深入剖析3D游戏的盛大宴席:DirectX 10深入剖析

2007-04-24 09:48 出处:PConline 作者:亮仔 责任编辑:谢成明

  如果说PC用户不会不认识Windows操作系统的话,那么游戏用户也不会不知道DirectX的大名。想必大家都还记得1996年时微软随红色警戒、FIFA96等经典游戏一起发行的DirectX 3.0吧,当时DirectX是以GameSDK的软件开发工具包形式出现的。但是谁也没有想到的时,经过几年的发展,DirectX竟然成为Windows操作系统极其重要的一部分,也是微软牵制众多硬件厂商的致命法宝。DirectX整合了Direct3D接口,使得3DFX苦心经营多年的Glide3D接口灰飞烟灭。微软在退出OpenGL组织之后,Direct3D也以迅雷不及掩耳之势成为3D接口的绝对主流。对于显示芯片厂商和游戏厂商而言,遵循DirectX API已经成为默认的一道死命令,而如今我们更是进入了DirectX 10时代。

3D游戏的盛大宴席:DirectX 10深入剖析图

第一代3D游戏采用的DirectX 3.0

一、DirectX——硬件厂商的竞技舞台

  在DirectX普及之前,大多数的游戏都是在DOS下开发的,因为DOS可以直接访问硬件,开发人员几乎无需考虑各种硬件平台对游戏的兼容性。但是Windows将很多系统的底层访问权限都保护起来,一时间,很多开发人员都难以适应。微软清醒地意识到,如果不能全面打开Windows下的娱乐市场,那么Windows始终取代不了经典的DOS。为此,他们提出了HAL(Hardware Abstraction Layer,硬件提取)和HEL(Hardware Emulation Layer,硬件模拟)两项标准。

  硬件提取可以让开发人员在编程时丝毫不用考虑硬件的特性,因为它实现了各种硬件的基本接口,真正做到了硬件平台无关性。这点是非常重要的,与目前很热门的JAVA语言有异曲同工之妙。其实在HAL之前,微软也曾提倡过GDI和MCI,但是相对而言HAL无疑更加先进,让人容易接受。HEL的硬件模拟功能让Windows下的游戏跨上了一个新台阶,因为即使我们没有3D加速卡,也可以用过模拟的方式来实现伪3D,这可比平淡无奇的2D画面要好看多了。

  以目前的眼光来看,似乎HAL和DEL都没什么大不了,但是它们确确实实地帮助DirectX站稳脚跟,为以后的蓬勃发展打下坚实的基础。当然仅仅有这些还是远远不够的,随后的DirectX中,微软更是掌握了硬件厂商的命脉。3DFX的倒下固然有nVIDIA崛起的因素,但是另外一大因素应该是3DFX与微软的对立。众所周知,Glide3D是3DFX引以为傲的3D加速接口,当时的确比微软的Direct3D要先进不少。但是由于3DFX死抱着专利,不肯全面开放,因此引起了微软强烈的不满。呵呵,想想Netscape吧,3DFX和他的下场一样。当时大家都说Lunix性能怎么怎么好,因为Voodoo2在这款操作系统下运行Quake3比Windows下快很多。但是大家有没有想过,这到底是为什么?难道是庞大的Windows还不如Lunix吗?绝对不是。从3DFX倒闭后状告Microsoft后,我们才知道,原来微软在DirectX中对3DFX动了手脚。其实我说这些无非是想让大家重视DirectX,因为任何游戏相关的硬件厂商要是被微软抛弃,那么其后果是不堪设想的。

3D游戏的盛大宴席:DirectX 10深入剖析图

被DirectX赶下神坛的3DFX

二、回顾历代DirectX API

  DirectX经历了多个版本,从最早的DirectX到最新的DirectX 10,每一个版本的出现都会导致一大批支持该新版本DirectX的新游戏出现。但是真正让DirectX开始引人瞩目的版本是6.0,这也是3D游戏真正进入发展高峰的时期。

  1.DirectX 6.0时代

  当时主要代表显卡是nVIDIA的Riva TNT系列以及3DFX的Voodoo3系列。DirectX 6.0的特色在于可以渲染出高分辨率下的32位色的3D效果,这也是当时GPU所最为追求的功能。然而坚持采用16位色彩渲染并且排斥AGP总线技术的Voodoo3系列败下阵来,而nVIDIA一开始就使用先进的AGP总线结构与32位色彩渲染,高规格与新技术奠定新的王朝。

3D游戏的盛大宴席:DirectX 10深入剖析图

DirectX 6.0时代的Riva TNT2

  除了高分辨率渲染,DirectX 6.0的另外一大特色便是支持标准纹理压缩算法,微软公司从S3公司(先已经被VIA收购)取得S3TC授权并将其加入DirectX 6.0。对于当时的3D游戏而言,如何提纹理效果是一件很头疼的事情,因为与之相配套的3D显卡在性能上无法满足大量纹理的需求,此时使用压缩技术自然是一条捷径

  2.DirectX 7.0时代

  DirectX 7.0的发布又一次把显卡市场进行重新整合,DirectX 7.0最大的特色就是支持T&L,中文名称是“坐标转换和光源”,这也成就了nVIDIA GeForce 256与ATI Radeon 256的辉煌,令3DFX彻底退出市场竞争。换句话说,拥有T&L的显卡,在配合使用DirectX 7.0之后,即使没有高速的CPU,同样获得相对流畅的速度表现。但是,直到今日,部分集成显卡还是没有硬件T&L单元,完全依靠CPU来模拟。

3D游戏的盛大宴席:DirectX 10深入剖析图

DirectX 7.0时代的T&L技术

  3.DirectX 8.0时代

  DirectX 8.0又一次引领了一场显卡革命,它首次引入了“像素渲染”概念,同时具备顶点渲染引擎Vertex Shader与顶点渲染引擎Pixel Shader,反映在特效上就是动态光影效果。通过Vertex Shader和Pixel Shader的渲染,可以很容易的营造出真实的水面动态波纹光影效果,从而令3D游戏画面质量得到史无前例的提高。然而DirectX 8.0的普及之路并不顺畅,这与巨大的成本压力有着很大关系。nVIDIA的Geforce3 Ti系列迟迟未能在主流市场普及,而后续升级到DirectX 8.1的Geforce4 Ti4200以及Radeon 8500系列也在成本上差强人意。从2001年年初发布DirectX 8.0开始,这项技术直到2003年年末才得到普及!

3D游戏的盛大宴席:DirectX 10深入剖析图

3Dmark2001所展现的Shader效果

  4.DirectX 9.0时代

  其主要特色在于提升了Vertex Shader和Pixel Shader的版本,从而展现出更为强大的性能。DirectX 9.0中还包含了NURBS和Displacement Mapping(置换式贴图)这两项关键的技术。NURBS在3Dmax中是很常见的,但是运用到3D游戏后,我们所看到的画面将更加接近真实。简单地说,NURBS就是专门做曲面物体的一种造型方法,可以用它做出各种复杂的曲面造型和表现特殊的效果,如人的皮肤,面貌或流线型的跑车等。而Displacement Mapping技术借助在平面的多边形上加上一些数据,可以帮材质加上深浅高低的轮廓视觉效果。总体而言,DirectX 9.0是对于DirectX 8.1版本的补充,出现这一现象是因为3D显卡技术的发展滞后于DirectX接口。

  从技术角度来看,DirectX 9.0c相对于DirectX 9.0b还是有着很多的变化,不过Microsoft对于版本提升相当谨慎,因此很多用户都将DirectX 9.0c称作为准DirectX 10。在DirectX 9.0c架构中,最终要的改进便是引入3.0版本的Pixel/Vertex Shader,并且支持ATI的3Dc纹理压缩技术和nVIDIA主导的HDR技术。

3D游戏的盛大宴席:DirectX 10深入剖析图

DirectX 9时代的渲染能力

三、惊人的巨变:解析DirectX 10

  1.继续加强Shader功能

  很多用户都在抱怨3D游戏中的画面总是难以呈现出如同电影般的渲染效果,而此时的罪魁祸首不仅仅是显卡和CPU,本身的渲染方式也是造成低效率的重要原因。在DirectX 10时代,所有的显卡GPU管线将会被赋予更加完善的Shader功能运算。以我们最近经常看到的Shader Model 3.0为例,这仅仅在部分场景才能展现出效果,游戏开发商也不敢大量应用。而当Direct X10要求所有的GPU管线加上丰富的Shader功能运算之后,所谓的Shader将不再是显卡的一些特殊功能,而是一项基本功能,而且贴图效果也将得到极大的改善。

3D游戏的盛大宴席:DirectX 10深入剖析图

DirectX 10的贴图效果展示

  毫无疑问,这将令市场上所有遵循DirectX 10 API标准而设计的显卡甚至集成显卡有着强大的Shader运算能力。一旦拥有如此强大的“群众基础”,游戏开发商也就敢于大量使用这些3D特效。与此同时,微软还增加的DirectX的可编程语法结构,令各种特效的运用更加简易实现,这对于提高3D游戏画面效果将会有巨大的共享。除此以外,Direct X10还支持Shader Model 4.0,意味著它的渲染效果将会进一步提升。事实上,DirectX 10对于画质方面的其它贡献也有不少,其中“Geometry Shader”(几何着色)便是最显著的一点。通过引入新的渲染模型,开发人员可以利用整体多边形渲染加速图形运算,新着色模式将大幅提高很多3D立体作图功能效率,还将允许GPU独立于CPU外完成数据循环工作,使系统完全脱离CPU束缚。

3D游戏的盛大宴席:DirectX 10深入剖析图

微软游戏所展示的DirectX 10效果

  2.微软推行统一渲染架构

  对于微软这样的业界巨头而言,掌握应用接口是头等大事。当年,并不“听话”的3DFX在推行Glide3D接口方面一意孤行,接过被微软所倡导的Direct3D接口彻底取代。即便是强大的OpenGL组织,微软也可以以退出并力推Direct3D来正面对抗,并且在民用市场取得压倒性的优势。而现在,DirectX 10显然也希望结束DirectX 9时代的尴尬。

  微软在DirectX 9中引入的了2.0/2.X/3.0三个版本的Vertex Shader(顶点着色引擎)以及Pixel Shader(像素着色引擎)。这看似是技术的推进,其实是微软在为nVIDIA和ATI两强搭建竞争舞台,而且其中的内耗直接导致技术普及速度减缓,并且利用率降低,更令软件开发商畏首畏尾。而进入DirectX 10时代之后,微软渴望使用统一渲染架构来引领群雄。

  所谓统一渲染架构,大家可以直观地理解为将Vertex Shader、Pixel Shader以及DirectX 10所引入的Geometry Shader统一封装。此时,显卡中的GPU将不会开辟独立的管线,而是所有的运算单元都可以任意处理任何一种Shader运算。譬如,在《上古卷轴4埋没》这款游戏中,对于Vertex Shader的要求非常高,而此时大量显卡的Pixel Shader处于闲置状态,Vertex Shader又不堪重负。在微软的统一渲染架构下,既然所有的运算单元都可以处理任何一种运算,那么就能有效避免这种不合理的分配现象。

3D游戏的盛大宴席:DirectX 10深入剖析图

支持DirectX 10的GeForce 8800GX

  可是,统一渲染架构真的要普及还为时尚早。一方面,nVIDIA并不买账,而ATI也对此不“感冒”。此外,即便是微软今后强迫普及统一渲染架构,这也需要显卡GPU厂商进行新的研发。目前主流GPU都已经在两年前进入研发阶段,所以采用统一渲染架构几乎是不可能的,甚至连DirectX 10的执行效率都无法得到保障。当然,我们并非否认微软统一渲染架构的技术领先性,而是得客观承认当前的现状。

  3.理解流水线真正概念:Pixel Shader+TMU+ROP

  在讨论显卡GPU的流水线之前,我们想先让大家了解一下3D游戏的制作过程,这对于理解后续的流水线概念将有很大的帮助。事实上,3D游戏初期的开发就好象一部电影:游戏策划、剧本撰写、角色圈定等等,在确定主角的造型风格之后,制作厂商将把原画交给3D建模部门。至此,3D工作正式开始,此时需要处理纹理,后期混合等等,具体的工作内容就是构造顶点、几何变换(Transform)、光照(Lighting)、设定(Setup)、光栅化(Rasterize)等。

  对于传统的图形芯片,以上的一些工作全部由CPU代为执行。到了3D时代,GPU作为图形处理单元开始承担更多的工作,因此我们也开始接触纹理贴图、像素渲染等概念。然而时至今日,GPU已经发展得更为全面,其所谓的流水线作为一个完全的处理单元而存在,几乎每一款GPU都内置了多个流水线。

  不过值得指出的是,不同时代对于流水线的定义完全不相同。如今我们对于一条流水线定义是“Pixel Shader(像素着色器)+TMU(纹理单元)+ROP(光栅化引擎,ATI将其称为Render Back End)。从功能上简单的说,Pixel Shader完成像素处理,TMU负责纹理渲染,而ROP则负责像素的最终输出,因此 ,一条完整的传统流水线意味着在一个时钟周期完成1个Pixel Shader运算,输出1个纹理和1个像素。以GeForce 6600LE为例,一块传统的4流水线构架显卡(4X1)在一个时钟周期内完成4个Pixel Shader运算,输出4个纹理和4个像素。

  在3D游戏工作时,其实Pixel Shader、TMU以及ROP部分都非常重要。让我们回想一下当年《FIFA98》等老一代3D游戏,当时三角形生成能力是最为看重的,基本没有应用到纹理贴图与像素着色,真正的工作部分是被成为顶点生成器的单元,而且也可以由CPU来模拟执行。但是发展到DirectX 6与DirectX 7时期,大量3D游戏开始追求更加丰富真实的表面效果,此时贴图技术则迅速普及,如何提供强大的纹理填充率成为关键。至于DirectX 8之后的时代,像素处理则异军突起并且展现出令人惊艳的画质。相对而言,ROP的概念比较难理解,这实际上是像素结果输出处理器负责像素的最终输出,执行像素读/写操作、Z-buffer检查、色彩混合、抗锯齿操作等。

  4.DirectX 10核心:追求像素渲染

  进入DirectX 9时代以后,Pixel Shader技术开始应用得十分普遍,此时显卡能否提供更多的像素渲染管线成为关键因素。当然,造成GPU开始追求更多像素渲染管线的因素绝不仅仅是3D游戏普及化应用Pixel Shader,Pixel Shader本身版本的提升也是一个重要原因。单流水线内置一条像素渲染管线在DirectX8游戏横行的时代是比较合理的,因为DirectX8的Pixel Shader1.3允许的着色器程序比较短,此时单流水线内的多个像素渲染管线无法发挥并行工作的优势。然而DirectX9时代的Pixel Shader 2.0/3.0则全然不同,更长的着色器程序指令让多个像素渲染管线有了用武之地。

  当然,我们也并非单纯否定TMU纹理填充单元的作用。但是也应该清楚地意识到,随着纹理压缩以及Z缓存技术的不断成熟,再加上显存带宽越来越出色,TMU逐渐摆脱了性能瓶颈,此时自然也就无需在单流水线中集成多个TMU单元。而与此同时,ROP也在数量上足以满足GPU的需求,因此也没有随着像素渲染管线数量的递增而不断增长。

  按照ATI和nVIDIA对于未来3D游戏技术的预测,今后像素渲染将会越来越得到重用。在2001年刚刚出现具备像素着色器的显卡时,当时游戏的像素着色器程序中算术指令和纹理指令数量的比例在1:1左右,打这以后,算术指令的数量呈显著增加之势。在2007年,游戏中每个像素的平均着色器程序指令数目是30条,算术指令和纹理指令数量平均比率达到了5:1,也就是说现在的像素着色器程序中,平均每5条算术指令才会出现一条贴图指令,而这样的算术指令数量急剧增长趋势仍将继续保持下去。

3D游戏的盛大宴席:DirectX 10深入剖析图

Crysis在DirectX 10下像素计算量非常大

四、写在最后:DirectX 10最终受益者是谁?

  DirectX已经成为3D技术竞争的舞台,任何一项先进的硬件技术都必须在DirectX API的支持下才能发挥威力。从未来的发展趋势来看,伴随着DirectX的成熟,3D游戏对于硬件的利用效果将会很快提高,届时真正的电影级游戏效果或许就真的离我们不远了。在整个DirectX 10时代,其实并没有哪一个受害方,因为即便是nVIDIA和ATI,不断的产品更新依然会给他们带来巨大的利润,而Microsoft永远是干着保赚不赔的大买卖,让Windows Vista的强势地位更加巩固。对于消费者而言,DirectX 10时代将会看到更加出色的3D渲染效果,只不过我们又得升级显卡了。

近期本栏目热点文章:

最后的莫西干人:蓝宝1950PRO DUAL研发侧记
轻松!影驰神奇面板2代玩转显卡BIOS
超频版本BIOS下载!7600GS性能提升20%

为您推荐

加载更多
加载更多
加载更多
加载更多
加载更多
加载更多
加载更多
加载更多
加载更多
热门排行

DIY论坛帖子排行

最高点击 最高回复 最新
最新资讯离线随时看 聊天吐槽赢奖品