Directx发展史

DirectX发展史及DirectX10.0

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

 

1.     DirectX——硬件厂商的竞技舞台

 

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

 

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

 

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

 

回顾历代DirectX API

 

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

 

1.     DirectX 6.0时代

 

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

 

除了高分辨率渲染,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 256ATI Radeon 256的辉煌,令3DFX彻底退出市场竞争。换句话说,拥有T&L的显卡,在配合使用DirectX 7.0之后,即使没有高速的CPU,同样获得相对流畅的速度表现。但是,直到今日,部分集成显卡还是没有硬件T&L单元,完全依靠CPU来模拟。

 

3.     DirectX 8.0时代

 

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

 

4.     DirectX 9.0时代

 

其主要特色在于提升了Vertex ShaderPixel Shader的版本,从而展现出更为强大的性能。DirectX 9.0中还包含了NURBSDisplacement Mapping(置换式贴图)这两项关键的技术。NURBS3Dmax中是很常见的,但是运用到3D游戏后,我们所看到的画面将更加接近真实。简单地说,NURBS就是专门做曲面物体的一种造型方法,可以用它做出各种复杂的曲面造型和表现特殊的效果,如人的皮肤,面貌或流线型的跑车等。而Displacement Mapping技术借助在平面的多边形上加上一些数据,可以帮材质加上深浅高低的轮廓视觉效果。总体而言,DirectX9.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,并且支持ATI3Dc纹理压缩技术和nVIDIA主导的HDR技术。

 

惊人的巨变:解析DirectX 10

 

1.     继续加强Shader功能

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

DirectX修复工具(DirectX Repair)是一款系统级工具软件,简便易用。本程序为绿色版,无需安装,可直接运行。     本程序的主要功能是检测当前系统的DirectX状态,如果发现异常则进行修复。程序主要针对0xc000007b问题设计,可以完美修复该问题(详情请参见我的博客《运行游戏时出现0xc000007b错误的解决方法》)。本程序中包含了最新版的DirectX redist(Jun2010),并且全部DX文件都有Microsoft的数字签名,安全放心。     本程序为了应对一般电脑用户的使用,采用了傻瓜式一键设计,只要点击主界面上的“检测并修复”按钮,程序就会自动完成校验、检测、下载、修复以及注册的全部功能,无需用户的介入,大大降低了使用难度。     本程序适用于多个操作系统,如Windows XP(需先安装.NET 2.0,详情请参阅“致Windows XP用户.txt”文件)、Windows Vista、Windows 7、Windows 8、Windows 8.1、Windows 8.1 Update、Windows 10,同时兼容32位操作系统和64位操作系统。本程序会根据系统的不同,自动调整任务模式,无需用户进行设置。     本程序的V3.8版分为标准版、增强版以及在线修复版。所有版本都支持修复DirectX的功能,而增强版则额外支持修复c++的功能。在线修复版功能与标准版相同,但其所需的数据包需要在修复时自动下载。各个版本之间,主程序完全相同,只是其配套使用的数据包不同。因此,标准版和在线修复版可以通过补全扩展包的形式成为增强版。本程序自V3.5版起,自带扩展功能。只要在主界面的“工具”菜单下打开“选项”对话框,找到“扩展”标签,点击其中的“开始扩展”按钮即可。扩展过程需要Internet连接,扩展成功后新的数据包可自动生效。扩展用时根据网络速度不同而不同,最快仅需数秒,最慢需要数分钟,烦请耐心等待。     本程序自V2.0版起采用全新的底层程序架构,使用了异步多线程编程技术,使得检测、下载、修复单独进行,互不干扰,快速如飞。新程序更改了自我校验方式,因此使用新版本的程序时不会再出现自我校验失败的错误;但并非取消自我校验,因此程序安全性与之前版本相同,并未降低。     程序有自动更新c++功能。由于绝大多数软件运行时需要c++的支持,并且c++的异常也会导致0xc000007b错误,因此程序在检测修复的同时,也会根据需要更新系统中的c++组件。自V3.2版本开始使用了全新的c++扩展包,可以大幅提高工业软件修复成功的概率。修复c++的功能仅限于增强版,标准版及在线修复版在系统c++异常时(非丢失时)会提示用户使用增强版进行修复。除常规修复外,新版程序还支持C++强力修复功能。当常规修复无效时,可以到本程序的选项界面内开启强力修复功能,可大幅提高修复成功率。请注意,此功能为试验性功能,请仅在常规修复无效时再使用。     程序有两种窗口样式。正常模式即默认样式,适合绝大多数用户使用。另有一种简约模式,此时窗口将只显示最基本的内容,修复会自动进行,修复完成10秒钟后会自动退出。该窗口样式可以使修复工作变得更加简单快速,同时方便其他软件、游戏将本程序内嵌,即可进行无需人工参与的快速修复。开启简约模式的方法是:打开程序所在目录下的“Settings.ini”文件(如果没有可以自己创建),将其中的“FormStyle”一项的值改为“Simple”并保存即可。     新版程序支持命令行运行模式。在命令行中调用本程序,可以在路径后直接添加命令进行相应的设置。常见的命令有7类,分别是设置语言的命令、设置窗口模式的命令,设置安全级别的命令、开启强力修复的命令、设置c++修复模式的命令、控制DirectDraw的命令、显示版权信息的命令。具体命令名称可以通过“/help”或“/?”进行查询。     程序有高级筛选功能,开启该功能后用户可以自主选择要修复的文件,避免了其他不必要的修复工作。同时,也支持通过文件进行辅助筛选,只要在程序目录下建立“Filter.dat”文件,其中的每一行写一个需要修复文件的序号即可。该功能仅针对高级用户使用,并且必须在正常窗口模式下才有效(简约模式时无效)。     本程序有自动记录日志功能,可以记录每一次检测修复结果,方便在出现问题时,及时分析和查找原因,以便找到解决办法。     程序的“选项”对话框中包含了6项高级功能。点击其中的“注册系统文件夹中所有dll文件”按钮可以自动注册系统文件夹下的所有dll文件。该项功能不仅能修复DirectX的问题,还可以修复系统中很多其他由于dll未注册而产生的问题,颇为实用。点击该按钮旁边的小箭头,还可以注册任意指定文件夹下的dll文件,方便用户对绿色版、硬盘版的程序组件进行注册。点击第二个按钮可以为dll文件的右键菜单添加“注册”和“卸载”项,方便对单独的dll文件进行注册。请注意,并不是所有的dll文件都可以通过这种方式注册。点击“扩展”选项卡可以将任意版本的程序扩展成增强版。点击“DirectX版本”选项卡,可以自行修改系统中DirectX的版本信息。点击“DirectX加速”选项卡可以控制系统中DirectX加速的开启与关闭。点击“实验室”选项卡可以开启实验功能:C++强力修复功能,通过全新的代码设计,彻底改善对于顽固异常文件的处理,极大提高修复成功率。API Sets强力修复功能,参照了DirectX文件的精细修复方式,极大地改善了修复失败的情况。修复失败时启用调试模式功能,可以在出现问题时分析错误原因。     新版程序集成了用户反馈程序,可以在用户允许的前提下发送检测修复结果。用户也可以在出现问题时通过反馈程序和软件作者进行交流,共同查找问题。反馈是完全自愿和匿名(如果不填写E-mail地址)的。     本程序的通用版基于Microsoft .NET Framework 2.0开发,对于Windows 2000、Windows XP、Windows 2003的用户需要首先安装.NET Framework 2.0或更高版本方可运行本程序。有关下载和安装的详细信息请参阅“致Windows XP用户.txt”文件。对于Windows Vista、Windows 7及后续用户,可以直接运行本程序。     同时鉴于Windows 8(Windows 8.1、Windows 8.1 Update)、Windows 10系统中默认未包含.NET Framework 2.0,因此新版的程序文件夹内将包含一个DirectX_Repair_win8_win10的特别版程序,该程序功能与通用版相同,基于.NET Framework 4.0开发,可以在Windows8(Windows 8.1、Windows 8.1 Update)、Windows 10系统中直接运行(其他系统如果安装了.NET Framework 4.0也可以运行这个特别版的程序)。     本程序的官方博客地址为:http://blog.csdn.net/vbcom/article/details/6962388所有的更新以及技术支持都可以到该博客上找到。 --------------------- 作者:VBcom 来源:CSDN 原文:https://blog.csdn.net/vbcom/article/details/7245186 版权声明:本文为博主原创文章,转载请附上博文链接!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值