1、前言 如果你要问我,这三年是什么在推动 PC 多媒体技术的飞速发展?那我说 是 DirectX!火热的 3D 图形卡市场激烈的竞争是在追随着谁的脚步?也是 DirectX! 2002 年 12 月 21 号,微软终于发布了大家期待已久的 DirectX 9.0。DirectX 9.0 是DirectX 的最新版本。以往每次 DirectX 版本的更新后,总要到等上大半年甚至一年多的时间才会有相应的游戏和硬件支持;但这次不同,众多大型的游戏开发商一早就放出消息,各款新版本的游戏都是基于 DirectX 9 开发。在显卡图形处理芯片方面,当 DirectX 9 还在扑朔迷离的的开发阶段,拼足了劲的
2、 ATi 在 7 月 17 号就率先发布了在硬件架构完全支持DirectX 9 的 R300 VPU。这款深具革命性的视觉处理器不仅 PC 图形工业发展史上为 ATi书下最辉煌的一页,也第一次确定了 ATi 在技术和性能上的领导地位。紧随其后,11 月19 日,nVIDIA 在 FALL COMDEX 2002LAS VEGAS 发布了支持 DirectX 9 的新产品Geforce FX(NV30 ) 。 DirectX 是什么?DirectX 是一个用于多媒体应用程序和硬件增强的编程环境,它是微软为了将其 Windows 建设成适应各种多媒体的最好平台而开发设计的。DirectX 目前已经
3、成为微软自身 SDK 的一部分,而 Windows 98/2000/XP 内则集成了 DirectX,表明它已成为操作系统的一部分。 DirectX 是什么?它是一个 API(Application Programming Interface)即“应用程序接口”,它是一座桥梁,连接硬件、程序员和软件用户的桥梁。每个 DirectX 部件都是用户可调用的 API 的总和,通过它应用程序可以直接访问计算机的硬件。这样,应用程序就可以利用硬件加速器(Hardware Accelerator) 。如果硬件加速器不能使用, DirectX 还可以仿真加速器以提供强大的多媒体环境。 为了理解 Direct
4、X,我们可以把系统分为四层: 硬件/网络层:放置有多媒体设备,包括图形加速器、声卡、输入设备以及网络通信设备等; DirectX 基础层:为图像、声音和设备提供多媒体基本服务; DirectX 媒体层:为动画制作、音频和视频等提供 API 功能; 组件层:包括 ActiveX 控制和应用,它利用 DirectX 的 API 功能的优势为用户提供多媒体服务。 微软开发了 DirectX 标准平台,并且根据硬件制造厂商和游戏厂商合作共同更新升级DirectX 的标准。硬件制造商按照此标准研发制造更好的产品,游戏程序员根据这套标准开发游戏。也就是说,无论硬件是否支持某特殊效果,只要 DirectX
5、标准中有,写游戏的程序员就可以把它写到游戏中,当这个游戏在硬件上运行,如果此硬件根据 DirectX 标准把这个效果做到了此硬件驱动程序中,驱动程序驾驭其硬件算出此效果,用户就可以欣赏到此效果。这就是“硬件设备无关性”,是 DirectX 真正意义所在。 在 DirectX 出现之前,硬件制造厂商设计出一个全新的多媒体产品之后,必须要考虑到它可以搭配其它的硬件设备一起使用,所以在编写驱动程序的时候就要对市面上林林总总的各式硬件产品进行全面的汇总调查,然后再将这些硬件特性与自己的产品融合到一起,因此编写一个驱动程序非常的麻烦,而且没准在使用的时候还是会出现硬件不兼容的情况。但是 DirectX
6、的出现就彻底改变了这一局面,因为它拥有一个 HAL(Hardware Abstraction Layer,硬件提取) 功能,简单的说就是可以直接让游戏、软件程序和硬件来进行数据传输,从而改变了硬件之间兼容性的问题。 在深入了解 Directx 9 以前,重温 DirectX 的发展史,会有助于我们形象的了解 Directx 9 的新特性。 起源、发展 DirectX 的创意并非来自于 Bill Gates,它最初是微软的工程师为了方便玩游戏而编制的程序,但 Bill Gates 却敏锐的捕捉到了 DirectX 的发展前景,并果断的投入了巨大的财力进行研发这终将 Windows 造就成为有史以
7、来最有生命力的游戏平台。 DirectX,与 Internet Explorer 同样被 Microsoft 捆绑到 Windows 系统中的部件,却有着与之迥然不同的命运,后者命运多桀,常常官司缠身,甚至差点被扫地出门,前者则一路过关斩将,先灭了风头正旺的 Glide,后又将老牌的 OpenGL 甩到身后,大有一呼百应之势。微软公司在他们发行的各个视窗操作系统里,几乎都附带 DirectX 程序,从 Windows 95 开始,人们就开始接触 Direct X 2.0,Windows NT4.0 里面则是 DirectX 3.0a,到Windows 98 时代,Direct 的版本则升级到了
8、 5.0 ,Windows 98 Second Edition 则附带了 DirectX 6.1a,Windows 2000 原配则是 DirectX 7.0,Windows XP 家庭版/专业版都将使用当前的 DirectX 8.1。微软的 DirectX 随着全世界 PC 飘扬着的 “Windows”旗帜逐渐统治了整个 3D 游戏世界。据说 DirectX 还将推出 MAC 版本,以后 Apple 机中也可以看到绚丽的3D 色彩。 DirectX 与游戏始终是密不可分的, 红色警戒在成为即时战略游戏的经典时,也把DirectX 2.0 带到了我们的身边。2.0 最大的改善是在 Direct
9、 Draw。 负责 2D 绘图的 Direct Draw 发展到了 DirectX 3.0 就已近极致,在跳过 DirectX 4 以后,Directx 的重心开始转向 Direct3D。 在 DirectX5.0 发布不久第二代 3D 显示卡问世了,这一代 3D 显示卡借助 DirectX6.0 的技术争得不可开交。这一代的显示卡主要有:Nvidia 的 Riva TNT,并连(SLI)的VooDoo2,VooDoo3。到了这个时代,市场格局已经很清晰,这是 NVidia 与 3DFX 的战争。DirectX 6 的 3D 效果更多了,而且借助硬件的强大性能,可以渲染出高分辨率下的 32 位
10、色的 3D 效果,这一点,采用 PCI 总线技术的 VooDoo 系列败下阵来,它只能支持 800x600下的 16 位色渲染,尽管他的 800x600x16 的效果不比 TNT 的 1024x768x32 效果差,但终未被公信。DirectX 6 开始把 3Dfx 送进了坟墓。Nvidia 则借机奠定了他显卡老大的基础。 DirectX7 又一次把显卡市场进行重新整合,DirectX7 最大的特色就是支持 T&L,中文名称是“坐标转换和光源” 。此功能为显示卡 GPU 与 CPU 之争起着关键作用。3D 游戏中的任何一个物体都有一个坐标,当此物体运动时,它的坐标发生变化,这指的就是坐标转换;
11、3D 游戏中除了场景物体还需要灯光,没有灯光就没有 3D 物体的表现,无论是实时 3D游戏还是 3D 影像渲染,加上灯光的 3D 渲染是最消耗资源的。在 T&L 问世之前,位置转换和灯光都需要 CPU 来计算,CPU 速度越快,游戏表现越流畅。使用了 T&L 功能后,这两种效果的计算用显示卡的 GPU(可以理解为显示 CPU)来计算,这样就可以把 CPU 从繁忙的劳动中解脱出来,让 CPU 做他该作的事情,比如逻辑运算、数据计算等等。换句话说,拥有 T&L 显示卡,使用 DirectX7,即使没有高速的 CPU,同样能能流畅的跑 3D 游戏。T&L 成为当时人们关注的焦点。第一个支持 T&L
12、功能的显示卡是 Nvidia 的 Geforce 256,它第一次把 GPU 的概念带入我们的 PC。 2000 年 11 月 9 日,微软发布的 DirectX 8.0 对 GPU 运算进行了大刀阔斧的改革,特别是 3D 渲染流水线和以前的 Direct 3D 和 Direct Draw 单元。DirectX Graphics 的一个最显著的变化是将 DirectDraw(二维图形接口)和 Direct3D(三维图形接口)合并为一个公用接口。Direct 3D 和 Direct Draw 实际是两个 DLL 函数,Direct Draw 负责图形卡的 2D 运算,而 Direct3D 主要负
13、责 3D 场景运算。在 DirectX 7 下, DirectDraw 和 Direct3D 一直相互交叉,因此,将它们划分为两个独立的接口越来越不适应发展。新的集成简化了 Direct3D 核心的初始化和控制,使这些操作更加简单。这种变化不仅简便了应用程序的初始化,而且改进了数据分配和管理的性能,从而减少了内存的占用。合并接口的另一个原因是 DirectDraw 的开发几乎完全停止了,在 DirectX 6.0 和 DirectX 7.0 中对它所作的修改仅仅是稍作美化而已。 DirectX 8 在传统 3D 图形处理流水线中的两个地方进行了改进,增加了“可编程”特性:CPU 顶点数据-Ve
14、rtex Shader、T&L 引擎- 裁减/ 三角形设置/光栅化-Pixel Shader、多纹理混合处理- 雾混合- 透明度/模板和深度测试 -帧缓冲 上面就是 DirectX 8 可编程 3D 图形处理流水线的示意图。与过去的处理方式相比,DirectX 8 对两个部分进行了改进:一个可编程的 Vertex Shader(顶点着色引擎)代替了过去的几何变换和光源处理(T&L)引擎;而可编程的 Pixel Shader(像素着色引擎)则加入了过去的纹理处理流水线。 DirectX8.1 可以说是 DirectX8.0 的最新升级版,它进一步升级了 Vertex Shader 与 Pixel
15、 Shader 的版本,Pixel Shader (像素着色引擎)由 1.0 升级到了 1.4。 在现今大量的 DirectX 8 游戏上市之前,3Dmark2001 率先为我们展示了 DirectX 8 带来的令人瞠目结舌的画面效果如水面动态波纹光影效果,也借机奠定它在 D3D 测试领域的权威。DirectX 8 硬件则依然是由 nVIDIA 的 Geforce3、4 主宰,但 ATi 凭借着 8500,开始成为唯一能与 nVIDIA 抗衡的力量。体验、应用 DirectX 无疑是一个非常有趣的 API。DirectX 每一次升级都会有重大的内核结构改变,都给我们带来巨大的视觉冲击。在 Di
16、rectX 的研发上,Microsoft 毫不保守,比如曾经是DirectX7 核心的 T&L 引擎到 DirectX9 干脆被抛弃了。因此对于图形芯片开发商、游戏开发商以及我们玩家而言,DirectX 9.0 的确是一项“绝无仅有的优越图形技术”。DirectX 9.0“具有多项令人兴奋的全新功能特征”,通过和相关硬件的配合,DirectX9 用户可获得更好的图像显示质量,更棒的音效效果,更好的多人联网游戏效果。 体验首先你要升级你系统的 DirectX 到 9.0 版本,微软 DirectX 9.0 完全安装版(For Win9x/ME/2000/XP)的下载链接为:http:/ 安装完毕
17、,重新启动后,进入 C:Program Filesdirectxsetup,打开 DxDiag 就可以运行 DirectX 诊断工具。 如果你的机器出了问题,好端端的机器,突然不能用 Direct 3D 硬件加速,在很多支持 Direct 3D 的游戏中只能用软件加速,那么 DirectX 功能中的:Direct3D 加速和 AGP 纹理多半不可用,点击测试 Direct3D,可以测试一下你的 DirectX3D 功能是否正常。如果无法运行,那么尝试一下重新安装 DirectX,升级显卡驱动,扫描修复注册表错误,如果实在不行,那只有重新安装系统了! DirectX 诊断工具里可以进行简单的 D
18、irect3D 9 的测试。 DirectX 的意思不难理解,Direct 是直接的意思,X 是很多东西,加在一起就是一组具有共性的东西,这个共性就是“直接”。在 DirectX 诊断工具中,我们可以看到DirectX 主要由以下几个部分组成: 1、DirectDraw(2D 绘图) 2、Direct3D(3D 绘图) 3、DirectSound(声音相关) 4、DirectMusic(MIDI 相关) 5、DirectInput(输入相关) 6、DirectPlay(网络相关,如 IP 声音通讯) 7、DirectSetup(Setup 相关) 8、DirectShow(动画播放) 9、Di
19、rectAnimation(整合动画环境) DirectX 9.0 新增特性有:强化了针对 DirectDraw 和 Direct3D 的接口,简化了应用扩展,提升性能;改善了图形创作工具,更易于做出最佳的 3-D 角色和环境;点光源式光影和像素式光影使图象更逼真;强化了 DirectSound 和 DirectMusic,简化了其应用扩展;DLS2 音频合成功能提高了乐器音频的真实感;DirectInput 的设备影射功能令对设备的支持更简单;DirectPlay 使多人游戏的性能和可扩展性得到了提高;DirectPlay 提供了 IP声音通讯;DirectShow 的应用编程接口提供了音频
20、/视频的实时合成和即时编辑;DirectShow 支持 Windows 媒体音频和视频(WMA 和 WMV)的读写;Microsoft TV 技术可以支持数字电视节目。 如果你还有硬件支持 DirectX 9.0 的显示卡如 Radeon9500 以及一块强劲的“芯”,那么现在你对 DirectX 9.0 的认识将不再停留在理论上,已经有一些应用程序为我们带来了DirectX 9.0 的体验,首当其冲的就是刚刚由 FutureMark 公司发布的 3DMark03。 3DMark03 的下载链接为: http:/ 3DMark03 的第四项测试为 Mother Nature,这个场景基于微软
21、DirectX9.0 提供的PixelShaders2.0 和 Vertex Shader2.0 引擎,真实的模拟出了大自然的美丽景色。 NVIDIA 在它的网站上 http:/ 就发布了一个利用 DirectX 9.0 技术的游戏 Demo:Gun Metal。Gun Metal 是首个利用 Cg 开发的游戏之一,可以展现电影般质量的特效,将游戏的兴奋度提升到一个新的水平。Cg 特效: DX9:阻塞排序,优化渲染和真实的透镜效果,DX9:使用 128bit 浮点缓存,可以启动更高的颜色对比和溢出。 DX9 Pixel Shader ATi 在它的网站上也已经发布了 8 款基于 DirectX
22、 9.0 的 Demo 演示程序:http:/ 如果你是一位程序员,已经有了 Microsoft DirecX9.0 SDK,那么 ATi 全新的 DirectX 9 Beta v0.9 版 RenderMonkey 工具套装会成为你开发 DirectX 9.0 游戏的得力工具。http:/ Visual Studio GUI 界面相近,Visual Studio 程序员可以很快上手;自带Vertex 和 Pixel shaders 编辑器,完整的支持微软 shader 编译器;支持各种 DX8, DX9 Shader 模型(现在)和 OpenGL Shader 模型(未来)。 DirectX
23、 9.0、Direct3D Direct3D 决定了三维游戏的效果,它是如此的重要,以至于它几乎成了 DirectX 的代名词,DirectX 9.0 的主要新特性也集中在 Direct3D 部分。DX9 中具有最重大意义的是其 3D 图像方面的革新,而 3D 领域正是当前计算机技术中变革最快速的地方。这些创新性的技术被设计为能够为 3D 游戏和其他交互式应用带来电影般高质量的效果和照片般真实的画面。 3D 图像设计一直以来的目标,就是在交互式应用的每一帧中展现同样锐利的影像级的图像效果。实现这个目标的一个方法就是赋予设计师们直接将影像级别的图形效果导入至3D 游戏和应用中,而 DX9 就是设
24、计用来在配备有最新图形硬件的系统上最大限度的利用系统这方面的能力。 当前的图像画面看上去已经很真实了,但总是因为某些方面的欠缺而使得图像看上去像是“电脑绘制” 的。DX9 中将会有许多新的特性专注于改变这种不和谐,而在为我们带来照片般真实图像的道路上跨出一大步。 电影级的画面渲染效果已越来越成为 PC 三维图像的发展方向,从 NV30、3Dmark03到 DOOM III,我们都不难发现这一趋势。但要实现这样的效果,可编程顶点着色器和可编程象素渲染(Vertex Shader、Pixel Shader)技术将会是关键。 Vertex Shader 2.0 和 Pixel Shader 2.0
25、从 DX8 开始,3D 图形处理技术逐渐统一在 Vertex Shader 和 Pixel Shader。Vertex Shader 被用来描述和修饰 3D 物体的几何形状,同时也用来控制光亮和阴影;Pixel Shader则用来操纵物体表面的色彩和外观。显卡的功能就是把这两种处理从 CPU 中解放出去。最新版本 Shader 的推出总能为我们带来更强悍的性能和更优异的画质。 DX9 采用了 2.0 版的Vertex Shader 和 Pixel Shader,它们都将支持 64 或甚至 128 位浮点色彩精度。浮点色彩在动态和精度上的增加给图像质量带来质的飞跃,还让很多过去不可能的特效变成现
26、实。 Vertex Shader 2.0 引入了流程控制,增加了条件跳转、循环和子程序。Vertex 程序现在最多可以由 1024 条指令组成(之前只能用 128 条指令) ,但这只是理论上的数字,拥有循环和跳转指令自然就可以允许更多数量指令的执行。这大大加强了可编程性和效率。举个例子,计算某些 3D 场景中的光源是 Vertex Shader 的一个经常用途,在 2.0 版中,开发人员能够仅用一条普通的光源 Shader 通过调用子程序来产生具有不同的自定义色彩、形状、位置的任意数量的光源效果。另外,增加的指令带来更加复杂和强大的表现,新的操作如正弦、余弦及其他强大的函数运算大大简化了代码的
27、编写,并且能够表现更加复杂的效果。强大的可编程 Pixel Shader 是得以实现具有真实照片和电影质量级别效果的真正精华所在。Pixel Shader 2.0 可以支持高级程序语言和汇编语言,开发者还可以将其汇编代码嵌入较高级的程序语言中。前一版的 Pixel Shader 语言被限制为只能使用最多 6 个材质和 28条指令,而 2.0 版则将这一上限提升至最大 16 材质和 160 条指令,也新增了很多强化的运算和操作(例如,2.0 版的 Pixel Shader 能够使用压缩过的凹凸贴图-比标准的凹凸贴图占用更少的内存,这意味着我们能够不受限制地在游戏中使用更多细致的凹凸贴图效果。 注
28、:凹凸贴图(Bump Map)是一种在 3D 场景中模拟粗糙外表面的技术,它将深度的变化保存到一张贴图中,然后再对 3D 模型进行标准的混合贴图处理,即可方便地得到具有凹凸感的表面效果。 )使得编程工作更加轻松和高效。Pixel Shader 的早期版本的另一限制在于一次只能进行一个色彩值的输出。多重渲染物体(Multiple Render Targets)突破了这个限制,允许一次输出 4 个单独的色彩值,这将极大提高 Pixel Shader 程序的效率。这项技术具有许多有价值的应用,一个例子就是在即时运算的 3D 场景中使用图像过滤或者后曲线处理。 Vertex Shader 1.0(上)
29、和 2.0(下) Pixel Shader1.4(上)和 2.0(下) DX8.1 和 DX9.0 的画面效果对比 浮点型色彩和 32bit 帧缓冲格式 目前多数的色彩应用使用各 8bit 长的整型数来表达红、绿和蓝色,这意味着每一原色的取值从 0255。表面上看,目前的色彩精度对于显示而言也许是足够的,但在运算中就是另外一回事。由于整型数不具有小数部分,因此当它们经过 Pixel Shader 中极其复杂的数学运算后,会出现较大的偏差,这个缺陷将会导致明显的颜色失真。DX9 支持数种新的浮点型颜色格式,其精确度具有极大的提高。 同时,DX9 提供新的精确至每像素 32bit 的帧缓冲格式,能
30、够表现出 4 倍于目前亮度等级的数量,而目前只能提供 256 级不同的亮度表现。人眼可以分辨数百万种不同层次的亮度,亮度等级范围的提升使得人们对数量大增的亮度等级会有完全不同的感觉。如果亮度级别的数量太少,图像看上去要么曝光过度,要么曝光不足,而亮度等级更精确的图像则看上去感觉更加柔和自然。 位移贴图(Displacement Mapping) 其实早在今年三月,Microsoft 在 GDC 上就展示了 DirectX 9.0 的崭新魅力,而且让人非常感到意外的是,当时 DX9 演示的硬件平台是 Matrox Parhelia 显卡,而并不是传说中的nVIDIA 的 NV30。在演示中 Di
31、rectX 9.0 配合 Matrox Parhelia 位移贴图的软件仿真,让人大饱眼福。 具有位移贴图(Displacement Mapping)功能的 3D 显卡随着 DirectX9 的演示呈现出照片品质的效果。当应用位移贴图功能后,人物将变得非常复杂真实 位移贴图(Displacement Mapping) 硬件位移贴图:(Hardware Displacement Mapping) 。这是 Matrox 自己研发的技术,被微软整合进了 DirectX 9,成为一个业界标准。硬件位移贴图是一种强劲而简单的 3D 物体实时计算的新方法。 ,用以演绎和绘制复杂的 3D 几何图形。深度适配
32、顶点镶嵌和顶点纹理技术,加上重组基础网面与位移贴图,可以营造一个非常真实的 3D 图形。硬件位移贴图技术支持贝兹曲线(Bezier Curve)和 N-patch 表面引擎;其使用纹理贴图为动态几何图形进行顶点纹理贴图;支持细节层级(LOD)几何图形、深度适配镶嵌( Depth Adaptive Tessellation)以及高分辨率几何图形数据压缩编码。 位移贴图和凸凹贴图一样,也是改变物体表面的法向量。与凸凹贴图相比,位移贴图的优点是物体的侧面轮廓也具有凸凹不平效果。另外位移贴图可以解决凸凹贴图的阴影问题,因为凸凹贴图可能使本来平的物体扭曲。位移贴图很容易实现,因此如果这个功能获得足够的硬
33、件支持,游戏开发人员也将支持这个功能。 位移贴图有两种类型,采样和预先图象。这两种方法是不同的。预先图象法正如其名,它的主要优势是图象是预先计算好的。这种方法速度很快,但是也有缺点。最大的缺点是无法和自适应镶嵌化和 LOD 同时工作。所以,我们不太可能在大的物体上看到预先图象位移贴图,例如地形,建筑物等等。 采样位移贴图提供了很多预先图象所不具备的优点,它可以和自适应镶嵌化和 LOD 协同工作。这对于大的物体很有帮助,例如地形。这个方法由于易用性很可能获得更多的支持。 当然,位移贴图还有一些问题。主要是应用在高阶曲面上。很多象 R Patche 和 Patche 这样的曲面,位移贴图必须由设计
34、师小心使用。如果使用不当的话,可能会导致难看的图象问题。 Gamma 修正 Gamma 修正可以改善色彩表现,并获得更好的材质光影效果。有些硬件产品中已经有这项功能,大多是相当高档的产品,但现在它们正逐渐成为主流。DX9 将促使这些高端产品进一步平民化。 其它 在音频方面 DirectX9.0 加入了 DirectMP3、DirectCD 两个新的功能单元。DirectMP3 单元,支持 MP3 文件或者音频流的直接调用和解码回放,无需通过 Windows API 界面调用专门的 MP3 播放程序。 DirectCD 单元,支持 CD 音频在各种需要的情况下直接调用和进行混音回放,无需通过 W
35、indows API 界面,DirectCD 将使 CD 音频和 Directx9 及其调用程序更好地结合在一起。展望 DirectX 9(左)和 DirectX 10(右)基本模型架构 在 DirectX 8 和 DirectX 9 中,可编程顶点着色和象素渲染,这两个单元是分开来的,也就是说,GPU 生产厂家需要在 GPU 中划分两个区域来存放 VS 阵列和 PS 贴图流水线,那么,有没有可能把这两者整合在一起呢?有!答案就是 DirectX 10! 与 DirectX 10 相应的,显示芯片厂商也将会推出全新设计的 GPU,它们的晶体管集成度将是前所未有的。 正如您所见,DX9 对 3D 图形技术的每个方面都作出了巨大的改良,将成为促进下一代 3D 应用诞生的催化剂。 可以预见,未来 DirectX 将带给我们更多前所未有的视听冲击!