见证3D进化之路 DirectX发展历史回顾 | |
|---|---|
| http://www.sina.com.cn 2006年11月09日 00:14 中关村在线 | |
|
作者:中关村在线 胡川 第1页:电影级画质来临——浅谈DirectX发展历史 在DirectX诞生之初,业界已经有众多标准,其中有两个重要的标准:OpenGL和Glide,特别是前者,它被用于图形、影像服务器,制作电影、科教片等等,随着技术逐渐成熟,越来越普及,如当时大名鼎鼎的Quake 3游戏就是基于这个标准的。而当时的DirectX,很多硬件、主流游戏都不支持它,没有游戏、没有硬件,即使再有好的标准也是没有意义的,DirectX的魅力一直没有的到表现。但是它有微软的支持推广,它就有希望。 那么DirectX的发展,都经历了哪些版本呢?
DirectX 1.0:第一代的DirectX很不成功,推出时众多的硬件均不支持,当时基本都采用专业图形API-OpenGL,缺乏硬件的支持成了其流行的最大障碍。DirectX 1.0版本是第一个可以直接对硬件信息进行读取的程序,它提供了更为直接的读取图形硬件的性能(比如:显示卡上的块移动功能)以及基本的声音和输入设备功能(函数),使开发的游戏能实现对二维(2D)图像进行加速。这时候的DirectX不包括现在所有的3D功能,还处于一个初级阶段。 DirectX 2.0:DirectX 2.0在二维图形方面做了些改进,增加了一些动态效果,采用了Direct 3D的技术。这样DirectX 2.0与DirectX 1.0有了相当大的不同。在DirectX 2.0中,采用了“平滑模拟和RGB模拟”两种模拟方式对三维(3D)图像进行加速计算的。DirectX 2.0同时也采用了更加友好的用户设置程序并更正了应用程序接口的许多问题。从DirectX 2.0开始,整个DirectX的设计架构雏形就已基本完成。
DirectX 3.0:DirectX 3.0的推出是在1997年最后一个版本的Windows95发布后不久,此时3D游戏开始深入人心,DirectX也逐渐得到软硬件厂商的认可,97年时应用程序接口标准共有三个,分别是专业的OpenGL接口,微软的DirectX D接口和3dfx公司的Glide接口。而那时的3dfx公司是最为强大的显卡制造商,它的Glide接口自然也受到最广泛的应用,但随着3dfx公司被NVIDIA的收购、Voodoo显卡的衰败,Glide接口逐渐从人们眼中消失了。
DirectX 5.0:令人奇怪的是,微软公司并没有如期推出DirectX 4.0,而是直接将DirectX版本升级到了5.0。此版本对Direct3D做出了很大的改动,加入了雾化效果、Alpha混合等3D特效,使3D游戏中的空间感和真实感得以增强,还加入了S3的纹理压缩技术。 同时,DirectX 5.0在其它各组件方面也有加强,在声卡、游戏控制器方面均做了改进,支持了更多的设备。因此,DirectX发展到DirectX 5.0才真正走向了成熟。此时的DirectX性能完全不逊色于其它3D API,而且大有后来居上之势。
DirectX 6.0:DirectX 6.0推出时,其最大的竞争对手之一Glide走向了没落,而DirectX则得到了大多数厂商的认可和支持。DirectX 6.0中加入了双线性过滤、三线性过滤等优化3D图像质量的技术,游戏中的3D技术逐渐走入成熟阶段。这个时期具有代表性的产品是NVIDIA Riva TNT2系列。 DirectX 7.0:DirectX 7.0最大的特色就是支持T&L,该技术中文名称是“坐标转换和光源”。3D游戏中的任何一个物体都有一个坐标,当此物体运动时,它的坐标发生变化,这指的就是坐标转换。在T&L问世之前,位置转换和灯光都需要CPU来计算,CPU速度越快,游戏表现越流畅。使用了T&L功能后,这两种效果的计算用显示卡的GPU来计算,这样就可以把CPU从繁忙的劳动中解脱出来。换句话说,拥有T&L显示卡,使用DirectX 7.0,即使没有高速的CPU,同样能流畅的跑3D游戏。 这个时代的代表性产品是GeForce 2系列和GeForce4 MX系列。
DirectX 8.0:DirectX 8.0的推出引发了一场显卡革命,它首次引入了像素渲染引擎(Vertex Shader)与顶点渲染引擎(Pixel Shader)的概念,反映在特效上就是动态光影效果。同硬件T&L仅仅实现的固定光影转换相比,VS和PS单元的灵活性更大,它使GPU真正成为了可编程的处理器。这意味着程序员可通过它们实现3D场景构建的难度大大降低。通过VS和PS的渲染,可以很容易的宁造出真实的水面动态波纹光影效果。此时DirectX的权威地位终于建成,代表产品:GeForce4 Ti系列。
DirectX 9.0:2002年底,微软正式发布DirectX9.0,DirectX 9中PS单元的渲染精度已达到浮点精度,传统的硬件T&L单元也被取消。全新的VertexShader(顶点着色引擎)编程将比以前复杂得多,新的VertexShader标准增加了流程控制,更多的常量,每个程序的着色指令增加到了1024条。另外,DX9增加对浮点数据的处理功能,以前只能对整数进行处理,突破了以前限制PC图形图象质量在数学上的精度障碍,它的每条渲染流水线都升级为128位浮点颜色,让游戏程序设计师们更容易更轻松的创造出更漂亮的效果,让程序员编程更容易。 那么,即将从幕后走想台前的新一代DirectX 10又将给我们带来什么呢? 第2页:DirectX 10技术详解上 1、统一渲染架构 统一渲染架构是一项极具创新意义的作法。要知道,在很多时候如果我们处理的一个场景注意是以Pixel Shader计算为主,Vertex Shader计算仅占一小部分的时候,如果采用分离Shader设计的显示核心,就可能存在Vertex Shader计算单元空闲,但Pixel Shader单元过渡计算的现象。同样的也可能存在Pixel Shader数据比较少,但Vertex Shader计算数据过多的问题。这就往往造成了一方面着色单元闲置,另一方着色单元资源紧缺的情况。
比如在《上古卷轴4:湮没》中,7900GTX在1600×1200+HDR的环境下,FPS仅为14~50帧左右。这是因为独立渲染的草丛或者树叶是由庞大数量的多边形构成,对GPU的顶点渲染提出了严酷的要求,相对来说并不需要太多像素操作,如此一来大规模的像素渲染被闲置而顶点模块处于不堪重负状态。而统一渲染架构则可以帮我们解决硬件资源上的限制----你能够不受限制地使用纹理资源,并可以使用任意长度的着色指令,如果能够将闲置的像素单元用来处理顶点,那么游戏速度就不会如此可怜了!此外,统一渲染架构将令GPU的角色由单纯为Game Rendering提升至Game Computing的理念,Unified Shading引擎设计更适合异类运算工作(Heterogeneous Computing),例如Physics运算、影像编码运算等,让显卡的应用范畴大幅提升。 2、虚拟显存技术 因此,微软根据虚拟内存管理方法将在DirectX 10中引入虚拟显存技术。它可以很好的解决以上所提到的问题,所有的纹理、着色等都分成“小块”数据即使在低速总线上也能流畅传输。例如,一个4KB大小的页面相当于一个32×32×32bit大小的纹理贴图,这样大小的纹理贴图已经可以满足需要,这样在需要纹理渲染时系统就不需要传输太多"页面"就可以完成相应的工作,而做到这一切几乎不会损失性能。
而且将虚拟显存技术与着色引擎搭配也是一个很具创新性的想法。在显存中,着色器指令是被当作一个抽象的数据块进行处理的,系统并不理会“数据块”能否装得进GPU的指令流水线,一旦着色器被载入,它就会在每个顶点以及象素上操作、直至卸载。因此要想完成更长的着色器指令就需要增加GPU的指令执行管数或利用自动多路形式将指令划分成若干个可管理的小块。由于GPU的指令执行管数在设计之时就固定好,如果要增加执行管数无疑需要重新设计及增加晶体管数,显然第一种方法并不太实用。因此第二种方法较为实用,而这也与我们所提到的虚拟显存系统实际是一样的。为了适应着色器指令的执行应用,虚拟显存被划分为许多相对独立的页面。假定图形处理单元当中设置的指令执行管道可以执行整个页面所包含的指令,那么我们的着色器操作就可以建立起一套流水线式的运作机制,加载一个页面,然后运行,停止下来之后再加载一个新的页面,然后运行,如此反覆指导全部包含指令的页面被加载到处理器当中,此间,执行管道的作用与处理器的L1 Cache相当类似,而整个运作流程和处理器的可以说是一致的。 第3页:DirectX 10技术详解中 3、整数指令集 |

























