DirectX 8预览
引言
按照微软的惯例,它们会每年发布一个新版本的DirectX。这个专为Windows而设计的API允许开发人员直接调用多媒体硬件设备的各项特性,其初衷是吸引游戏开发人员把开发平台转移到当年的32位操作系统——Windows
95上。今年也不会例外。在本文中,我们将为你呈现DirectX 8的新特性,当然,我们会把重头戏放在大家都非常关心的DirecX
Graphics上。
新版本的DirectX到底有什么独特之处,使它成为微软的游戏平台——X-BOX中最主要的游戏开发API呢?(众所周知,X-BOX将会采用一个“特别版本”的Windows
2000和最新版本的DirectX。)
注意!我们并不承诺本文所叙述的所有特性都会在最新版本的DirectX中得到应用。因为在本文的写作期间,DirectX 8仍处于beta
测试阶段,这可能会使得下文所述的内容与最终大家看到的结果有所出入。
所有的努力都是为了让DirectX 8具备更好的硬件亲和力。DirectX尝试着把软、硬件之间的沟通障碍减少到最低。为了兼容硬件厂商发布的新特性,它必须随时更新。
除此以外,新版本的DirectX还必须能够满足硬件厂商所需要的一系列新功能。如此一来,DirectX体系级别的全局变更将是不可避免的。这其中也包括如何在现有的部件上整合一个新的部件。
DirectX 8的构成
DirectX Audio——是DirectSound与DirectMusic整合而成的新部件,它负责所有的音频与音乐合成效果。
DirectX Graphics——是由相当于以前版本DirectX中的Direct3D和DirectDraw组合而成的,它掌管的是2D和3D图形。
DirectInput——这个部件没有太大的变化,它负责处理来自于用户的键盘、鼠标、游戏控制杆以及其他控制器(包括力反馈设备)的输入。
DirectPlay——这是一个用于实现网络游戏的部件,其内部体系的界面相对于以前的DirectX来说,已经被彻头彻尾地改变了。加入了一个新的DirectPlay
Voice界面,使网络游戏玩家足不出户即可轻松联络。
DirectX Application Manager——一个完全新加入的部件,其设计的用意在于简化游戏的安装,并且能够对已经安装在硬盘中的文件进行控制、维护、管理。微软计划在不久以后,就把这种界面应用到所有需要安装到硬盘上的软件中,所以,这个Application
Manager可能很快就会从DirectX的清单中消失。
DirectShow——直到目前(DirectX 7.0a)为止,这个部件依然单独存在于DirectX之外,并且被称之为DirectX
Media(尽管正式来说,它其实包含了DirectX Media和DirectX Foundation);而在DirectX8里,它已经被包含在同一个发行包中了。Direct
Show掌管了音频流与视频流的捕获和回放,这其中也包括了不同形式的过滤处理。
DirectX Audio
DirectX的音频处理在先前的的版本中被单独分为两个部分:DirectSound和DirectMusic——在DirectX
8中,它们将被整合一体并称为DirectX Audio,大量新功能将被加入其中。
首先,在DirectX Audio中,WA格式的声音文件与合成音乐基本等同,在回放的时候,两者都采用相同的机制。DLS2 (Downloadable
Sounds Level 2)标准的支持,使它可以将最初的MIDI效果合成应用到WAV格式声音文件。
新的更具弹性的音频通道模型允许通过各种不同的过滤器以及不同的3D环境设定处理一个MIDI文件的不同部分。
当DirectSound和DirectMusic整合以后,就可以把合成音乐片断的处理视为一条标准的audio track。如此一来,我们就可以对合成音乐和标准的音频引用诸如reverberation(回响)等特效了。在DirectX
8中,我们可以先合成声音,接着,把它混合到标准的audio track,最后,就是在3D音频界面中对这条混合过的track进行处理了。
Audio Scripting——在游戏中的音频部分提供使用脚本script的支持——这一项其实算不上什么创新。Scripts可以达到游戏程序编写和游戏事件相配的音乐伴奏分离的目的。如此一来,音乐伴奏就可以随着游戏的情景的变化而变化了。
DirectX 还有其他一些创新:
* 歌词输出(卡拉OK)
* 在进行3D处理之前,就先把几条音频流预合成为一条
* 简化音色库的装载与卸载
DirectInput
DirectInput是一个对应于输入设备(包括键盘、鼠标、游戏杆以及其他控制器,比如力反馈装置)的部件。
DirectInput的主要改进并不是在界面核心,而是在DirectInput的使用途径上。一个采用新界面的DirectInput将随着DirectX
8问世一起被引入。这个界面允许程序针对键盘的按键或者鼠标的移动做出反应,同时,它不依赖于输入设备。DirectInput中预先准备了一套标准的输入反应,可以让几类游戏从中获益,这些游戏包括:第一人称、即时策略、运动(如赛车、赛艇等)以及RPG(角色扮演)等。实际上,DirectInput并不只适用于游戏方面,它还包括了一整套对应于图形编辑、浏览等操作的指令。假如DirectInput中预定义的动作并不能满足程序的需求,程序还可以根据其自身的需要,引入不同的动作指令。
举个例子:方向盘是用于操控方向的,油门是用于增速的。这些操控对于标准的输入设备(比如游戏控制杆、键盘、鼠标)来说,是难以实现的。而DirectInput就允许玩家把这些输入操作定义到其他输入设备(比如键盘)的按键或者游戏杆的3D转轴上来。如此一来,就可以让玩家可以根据其喜好进行预定义,游戏的时候也就更加得心应手了。
DirectPlay
DirectPlay是专门用于网络游戏的简化创作。它提供了以下功能:
* 计算机可经由局域网(LAN)、因特网或者Modem连接。
* 可以经由一个“主机”的连接,让玩家聊天或举行游戏会议(这在“三角洲部队”对战时经常用到)。
* 建立或者连接到已经进行的对战游戏。
* 对比赛中的玩家或团队进行控制。
DirectPlay把各种网络媒介与协议之间的差别隐藏起来,甚至是因特网连接或者通过modem的直接电缆连接。
Microsoft声称,DirectX 8中的DirectPlay代码已经被完全重写,以改善对集团式多人游戏的支持。这类游戏支持数目庞大的游戏玩家同时在线,比如目前在国外广为流行的Everquest。
在DirectPlay中,新加入的一个支持就是所谓的语音界面——DirectPlay Voice,它允许玩家足不出户就能够在多人连线游戏的时候,进行语音沟通。就此而言,语音传输所需要的带宽将从1.2kbps到64kbps(这取决于采用的压缩品质)不等。DirectSound和DirectSound
Capture设备在此时被用于录制和回放。
DirectX Application Manager
DirectX Application Manager加入到新版本的DirectX中,目的是简化游戏的将安装并且对游戏安装在硬盘中的文件进行控制。
一般情况下,用户需要在游戏安装的时候选择安装到硬盘的文件大小(或者说所占据的硬盘空间)。最糟糕的情况是,安装程序报告说无法找到足够的硬盘空间。微软决意解决这个存在于PC多年的难题,这对于来年发布的X-BOX游戏平台也尤为重要。微软预计的情况是DirectX
Application Manager会自动找寻理想的安装空间而无须用户的参与。
该管理器的可用性如何呢?在控制面板中,会有一个面向用户的实用程序。用户可以使用该程序来分配用于游戏安装的硬盘空间。标准的配置方式是,在硬盘中,专门分出一个区以及目录用于游戏的安装。至此以后,游戏的安装文件就会根据Application
Manager做出的选择进行安装。此时,若指派的硬盘空间不够的话,就会有有趣的事情发生,游戏的安装会被停止,系统开始对已经安装在硬盘中的游戏文件进行缩减,这种操作被称为downsized。该操作会一直进行下去,直到硬盘空间足够为止。
假如某个已经安装的游戏进行了downsized的操作,那么,这个游戏的部分甚至大多数安装文件可能会被删除。幸运的是,这些删除了的文件可以从CD上再次安装回去,downsized时所保留的文件都是一些save(存档)以及config.cfg之类的游戏配置文件(比如:自定义的控制设定、游戏运行环境等)。假如用户需要再次运行已经硬盘空间downsized的游戏,那么Application
Manager就会要求再次运行游戏的安装程序,重新安装游戏。
微软鼓捣硬盘空间出这个DirectX Application Manager主要想解决两方面的问题,一方面,是想帮助一些缺乏经验的游戏玩家顺利安装游戏;另一方面则是为了延长硬盘中游戏的寿命。毫无疑问的,这种做法将深受欢迎。
DirectShow
从DirectX 8开始,DirectShow将被整合在DirectX的安装文件中。这个API允许用户回放、记录各种形式的视频流和音频流,而这些操作都是在实时的情况下进行的。这使Direct3D和Direct
Audio的标准界面具备了更多的音频/视频流处理能力。
DirectShow 8被认为是自DirectX 6.1发布以来的第一次升级。DirectShow 8的应用程序能够改变所谓的graph,一种信息处理途径。该技术可以在回放时,实现无中断的视频流、音频流数输入量变更和中间过滤处理。新版本的DirectShow在视频流和音频流同步方面做了增强。举个例子,标准的音频流可以通过增加时钟周期来消除声卡和视频捕捉卡之间的计时差异,达到声色同步的效果。
DirectShow支持的格式包括:AVI、MPEG、ASF(advanced streaming format,高级数据流格式)、WAV、MP3等。
一个高级别的界面已经被整合到新版本中——DirectShow Editing Services。这是一个新的API,主要用于非线性编辑以及类似系统的timeline控制。它是通过调用DirectShow的低级功能来进行操作的。
DirectX Graphics
在DirectX图形部分的变化方面,最引人注目的就是DirectDraw和Direct3D都被整合到了DirectX Graphics部件中。准确得说,DirectDraw已经被新的Direct3D接口“吞并”了。假如你是一个DirectX开发者,那么在不久以后,你将有机会接触到这些API。
在这个接口中,有很多重大的改变。按照常理,这些改进可分为三个部分:
* Direct3D的初始化和使用将更进一步简化,能够通过Direct3D提供最新的硬件功能,进行模型的修改(这在DirectX
7中已经具备),摒弃对旧式接口的支持。
* 引入新的数据处理原理——shaders(光影生成器),包括了在pixel shaders(光栅化阶段的像素级光影处理)以及vertex
shaders(几何数据处理阶段的光影处理)。
* 扩展Direct3D接口,为即将发布的新型3D加速器埋下伏笔:volumetric textures(3D材质)、multisample
rendering(多次取样渲染,其中包括了对T-buffer技术的支持)。
接下来,我们对这些改进作深入的探讨。
Direct3D的编程变轻松了
在整个DirectX Graphics中,最显著的改变就是DirectDraw (2D图形方面的接口) 以及Direct3D
(3D 图形方面的接口)被融入到同一个部件中。这种改变使得Direct3D内核的控制和初始化变得简单了,并且可以让这些操作更加直截了当。
接口合并的另一个原因是,DirectDraw已经完全停止了开发,这个接口已经不会再有新的改变,无论DirectX 6还是DirectX
7中,DirectDraw在本质上其实都是一样的。Windows 2000中的一项革新——硬件bitblitting with
alpha blending——就是通过DirectDraw来完成的。但在大多数实际应用中,系统都是用Direct3D驱动程序来完成这项操作的。
正如上面所提及的,微软在DirectX Graphics上的努力还没有得到硬件厂商的热烈反应。造成此现象的一个原因是DirectDraw的硬件blitting的扩展模式支持。比如bitblitting的旋转。另一个原因是DirectX
Graphics摒弃了能够为旧式3D图形设备提供兼容能力的调色板渲染模式。
下一步的趋势就是硬件开发厂商和操作系统开发人员将致力于“控制”程序员在进行渲染的时候访问frame buffer(帧缓冲)最终画面的权限。硬件开发人员需要以此手段来进行对frame
buffer的优化工作,例如:full-scene anti-aliasing(全场景抗失真)。操作系统开发人员则需要程序在同一个窗口中进行drawing,如果不能这样的话(即当前情况下),程序就可以在桌面的任何地方肆意描画。这将使操作系统能更有效地控制Windows的3D图形用户界面。其结果是,在经过相互认可的情况下,程序再也不能像以往那样直接对帧缓冲进行访问。取而代之的是,一个新的Presentation
API将对最终画面的输出进行控制。
在DirectX 7中首次出现的Direct3DX library已经被更进一步地拓展。以前版本中,Direct3DX library的主要意图是为了简化DirectX
Graphics的使用。引人注目的是,新版本的library不仅包含了各种各样的数学函数,还有能够简化DirectX Graphics初始化与影像装载的程序。这个library现在允许以X-files的格式载入模型,支持使用LOD(level-of-detail)形式以及曲线表面(curved
surfaces)的模型。还有就是,Direct3DX现在无需再经过GDI就能够直接输出字体,并且能够生成3D字体模型。最后要说的是,Direct3DX
library的重要性在于它将成为一个可以与OpenGL library相提并论的DirectX Graphics GLUT。
所有这些改进,都将简化DirectX Graphics的使用并减少新游戏中的漏洞。
DirectX Shaders
新的shaders(光影处理器)数据处理方式被认为是DirectX 8中最具意义的创新。
那么,Shader到底是什么呢?DirectX Graphics中的Shader采用了新的数据处理程序模型,这与旧有的预定义模型是不同的。在这种模型中,数据是透过virtual
machine以一个类似于带有特殊汇编指令集的pre-arranged(事先安排好)程序进行处理的。
如图所示,DirectX Graphics的shaders被划分为两种类型。
vertex shaders:这种类型的shaders的测定操作是基于vertices(顶点)的,shaders的测定能够在顶点进行transformation
& lighting的时候进行控制。
pixel shaders:这种类型的shaders的测定操作是基于像素(pixels)和材质(textures)的。
Shaders,在编写程序的时候并没有严格的术语。它们的指令集缺乏分支操作。比较合乎逻辑的说法应该是,对源数据使用一系列的连续操作。
作为DirectX 8中Shaders的标准指令集,已经分别为两种shaders(vertex方式和pixel方式的shaders)进行了优化。这意味着,当使用vertex方式的shaders操作时,其指令集很象SSE和3Dnow!这种处理器SIMD指令集。而当使用pixel方式的shaders时,由于是基于整数运算的,所以指令集与MMX很类似。
DirectX的开发人员指出,shaders接口的新编程模型能够获得以下优势:
* 在shaders(光影处理器)方面,一个针对顶点或像素特别操作的执行仅需要该场景中若干个参数即可决定。与标准接口的本质区别是,新功能的加入带来的好处依赖于一个几何级别数目般增加的各类标记的独特操作。程序与驱动程序之间相互作用的调整和测试也许将使编程人员头痛异常。
* shaders的应用有助于充分发挥现有硬件的机能。这可以通过当前接口来实现各种不同的操作。但是它们的执行方式都太过陈旧或者说会收到约束、限制。这类事情通常在DirectX
7的顶点混合模式中最容易发生。
* shaders的应用简化了DirectX在硬件新功能方面的扩展。举个例子,即将由3dfx引入的super-tricky
environment mapping就可以作为一个新的操作加入到shader的特性清单中。如此一来,在DirectX的内核也没有察觉的情况下,程序就可以使用这样的新功能了。
* DirectX的开发人员坚信,采用可编程shaders将使游戏开发人员的工作不再那么沉重。
* 最后但并非最次要的意义在于此方式通常被用于透过程序来生成照片般真实的画面,比如RenderMan以及MentalRay就常被好莱坞用于电影的制作(这些电影有Jurassic
Park、Bug's Life、Toy Story 2等等)。
但这些毕竟只是承诺而已。下面,就让我们来看一下,通过shaders到底能够干些什么,还有就是相对于DirectX 7来说,哪些操作已被取代。
在DirectX 8当中,顶点(vertex)shaders和像素(pixel)shaders都能够让使用者随意地进行运用,而在先前的DirectX版本中,用户就需通过固定的接口才能完成:先是人工智能运算,接着是顶点的transformation与
lighting、multitexturing。下面,我们给出的是Direct3D新的流水线示意图。微软引入它们的真正意图是希望能够把编程人员的生活变得更轻松。多亏这个任意的选择,现在,他们能够在其中拥有加入新的操作的机会,突破以往预先设定的范围。
在图中加了蓝色方框的流水线单元正是DirectX 8所新增加的。微软在引入新的数据处理方式的同时,依然保留旧有的一套处理模式,很明显,这可以让新版本的DirectX在程序上获得最大的兼容性和简便性。除了shaders模块外,你可以从图中发现新版本的DirectX
8还增加了一个被称作tessellation的模块,关于tessellation的细节,我们将在后面详细介绍。
下面我们来看一看不同方式的shaders之间各有什么特点吧。
Vertex Shaders
在DirectX开发的时候,vertex shaders被计划用于:
* 在ATI已经公布的Radeon芯片中得到支持的Key frame interpolation(关键帧插补)。
* 配合四个转换矩阵(four transformation matrices,经已在DirectX 7中获得支持)一同使用的vertex
blending(顶点混合);这是实现复杂模型骨架动画(skeletal animation)而无需将其拆开为几截独立部分的一种简便途径。
* 当顶点网(vertex mesh)通过程序为了下一步的渲染传送完毕后,可编程几何运算能够对对象通过参数进行变形(distorted)处理,这可以不仅可以让角色皮肤下的肌肉显露出动感,让原本平静的湖面由于风的吹拂出现涟漪效果,还可以应用于各种各样的位移映射(displacement
mapping)。
* 光照模型(lighting models)的使用比以往的DirectX更加复杂;它们能够更好地反映出光照对象的所使用的不同物料的差别。举例,根据皮肤和金属入射角的差异来改变光照的散射率。对于玻璃杯来说,就不能千篇一律地使用反射模型。
图注:左面的画面是错误的,右面的效果才是正确的
值得注意的是,在大多数的情况下,为了使对象获得更自然的光照效果,通常都会同时应用vertex shaders和pixel shaders。当然,这其中也有可能应用到可编程几何处理。
Pixel Shaders
DirectX 8中的Pixel Shaders已经为取替multitexturing(多重材质贴图)接口做好准备。在未来的DirectX版本中,Pixel
Shaders将会发展到实现pixel fogging(像素级雾化朦胧)等特殊处理。
Pixel Shaders的优势:
* 非子序列(non-subsequential)应用的能力
在以前的DirectX中,multitexturing需要使用在上一个工序中已经获取过的颜色值。当使用pixel shaders的时候,就可以根据其特有的判断力把这些颜色值联合应用,上图展现的是其中一种可能性。
* 基本操作步骤的减少成为可能(以前,只有加法和乘法的运算步骤是可以减少的)。
* 通过pixel shaders的应用,将能够实现各种基于材质(包括从一个从当前材质的坐标)取样的功能。
Shaders的执行
DirectX 8的特性列表给出了对显示芯片的最低要求,只有满足这些最低需求,该芯片才能够符合DirectX 8的标准。假如该图形芯片不能满足硬盘空间其中至少一项的参数或者特性的话,就不能宣称与shaders的规范兼容。根据每种shaders的方式,这些需求被划分为两组:
Vertex shaders
在Vertex shaders的执行方面,虚拟机至少必须支持下列不同寄存器的数量:
* 16个顶点输入寄存器(vertex input registers)
* 96个常量寄存器( constant registers,是不能透过shader来改变的)
* 12个变量寄存器(temporary registers)
命令的序列能够高达128个操作长度
虚拟机必须执行的指令集相当庞大,包括:
* 通过一个“数”进行顶点的加法、减法、乘法
* dot product和顶点的交叉product
* 乘法与加法的混合运算
* 最小值和最大值的取样,如果取样获得的数值小于或者大于所需,就把寄存器设定为0或者1
* 指数和对数
* 通过矩阵的不同大小对顶点进行乘法的宏指令操作
Pixel shaders
在pixel shaders的执行方面,虚拟机必须至少能够提供以下数量的寄存器:
* 两个彩色输入寄存器
* 6个常量因素寄存器
* 6个变量寄存器(包含最初的材质值)
pixel shaders的执行在必须至少支持8-bit的精度(24/32 bit渲染深度时),推荐使用10-12bit的内部精度。
图形芯片必须保证能够支持高达6种像素操作。
虚拟机需要执行的一套指令集是由两部分组成的。指令集的第一部分相当庞大,其中的操作主要是用于颜色混合(color blending):
* 加法、减法、乘法
* dot product,乘法与加法的混合混算[r = a×b+c]
* linear interpolation [r = b×a+c×(1-a)]
注意:dot product也许会成为pixel shaders规范的一个可选操作。
指令集的第二部分主要用于材质寻址(texture addressing)——根据每个被请求的坐标来控制材质取样。举例,通过这些指令就可获得EMBM(环境凹凸映射)的效果。
Shaders支持可能存在的变数
Pixel shaders和vertex shaders之间的不同主要在于硬件的支持方式。vertex shaders可以通过任何配备有SSE或者3D
Now!(当然还有其他相对应的指令集)处理器的电脑来提供支持,这些电脑都可以通过它们的“software emulation”(软件仿真)方案来实现。然而,尽管这种仿真方案可以提供比标准T&L操作管线更多的优点(这个优势到底有多大就要取决于中央处理器自身了),但此时的操作可能并不包括shaders。
在Pixel shaders的支持方面,它必须由显示芯片自身执行。尽管shader并不是必须的,但是shaders就必须以图形加速器的方式来实现。例如,GeForce和GeForce2
GTS就拥有一个具备很多shading和材质混合的multitexturing单元。有可能的是,早期的图形芯片也能够通过驱动程序来实现其中的某些shaders操作(不过,到目前为止,还没有完全能够执行shaders的图形芯片)。
Shader的支持对于硬件厂商来说是重要的,因为这样一来,它们都可以在渲染管线的阶段中增加新的旗标,从而可以在Direct3D
8的渲染管线中引入厂商自己特有的功能(有点类似于OpenGL的extensions)。众所周知,能够在API中提供相应的特性支持,是产品进入市场主要原动力之一。
DirectX 7已经由于硬件Transformation & Lighting支持被引入API内,而发展出了一个新的设备以求实现对它的支持。这就是T&L
HAL(由标准HAL分离而来)。因此,随着shader体系的引入,DirectX 8已经获得了一个新的设备类型——Pure
HAL。Pure HAL意指的是,那些提供完全DirectX 8 shaders规范支持的设备所拥有的一个硬件与软件之间的最小的软件中间层(minimum
software interlayer)。
下面,我们将看看在Direct Graphics中除了shaders以外,还有什么新的特性以及它们的细节。
Volumetric textures
如果不出所料的话,新版本的DirectX将会增强材质的寻址能力,使其能够对两个以上的坐标轴进行寻址。类似的寻址方式已经在DirectX7中引入,并且被应用于立方体映射的渲染当中。
如今,当三个坐标轴同样能够被应用于在一个volumetric (cube) texture(具体积的材质,即所谓的3D材质)内部对三角形进行的寻址,而这个三角形将成为一个真正的材质来使用。
类似的材质将会被用于表现游戏中各种“volumetric(这里的意思应该是有立体感觉的)”效果,例如3维雾化、3维光照效果等。在OpenGL中,volumetric
textures获得应用已经很久了。不过在此之前,OpenGL的volumetric textures主要是应用于显现不同的数据阵列,比如:医学方面的线断层摄影术(tomography),静力的可视化分析等。
Multisample rendering
Multisample rendering(多次取样渲染)是按照3dfx的T-buffer原理进行一系列改动后的DirectX版本。这种DirectX的新功能允许你实现各种T-buffer特效。这种新的画面原理所生成的所有特效都将在所有支持新版本DirectX的显示芯片上得以呈现(前提是他们的驱动程序必须因此而改变)。这种方案的唯一限制将是填充速率,但是,特别定制的加速芯片将能够较好地满足其需求。
Multisampling的特点是同时对数帧画面进行渲染而不仅仅是渲染一帧。而画面显示的最后一步是把这几帧画面混合成最终显示到屏幕的画面。当数据被输出到屏幕时,程序可以允许或者禁止临时帧的渲染。下图给出的是Multisampling的实现原理。当图像持续输出的时候,同时对几帧画面进行渲染,所获得的画面相对于其它帧将稍有不同。
图注:这是一个使用四个buffers来进行Multisampling的例子。在图的左边,你会看到第一个数据包包含了作为生成最终帧的所有帧,它们都被同时进行光栅化处理,但是当实际显示到屏幕的时候,你只会看到它们被整合为一帧后的画面。除此之外,其他的数据包也能够只输出全部帧中的某一帧画面或者画面的某部分。在画面呈现到屏幕之前,这些multisample用的frames将会被互相混合。
下面,我们给出采用multisample技术后所能实现的各种特效的清单:
* 各种类型的full-scene anti-aliasing(全场景抗失真)
* Motion Blur(运动模糊)——快速移动画面的模糊
* Depth of Field(视野景深)——镜头的聚焦效果模拟。
Multiple data streams(多数据流)
新版本的DirectX将会提供同时多个数据流的支持。例如:一个数据流用于传送3D模型的顶点坐标数据;一个数据流则负责顶点的色彩数据;甚至还可以有专门用于传输材质坐标的数据流。这可以使得动态切换模型时的渲染速度得以提升。例如:在每一个新帧的画面,模型的材质位置都(需要)根据特殊的算法而改变。如此一来,当我们在分离式数据流的情况下只改变材质的坐标数据时,驱动程序就可以为那些坐标不变的数据流而优化了。
Particle systems(粒子系统)
Particle systems(粒子系统)的支持已被引入。粒子,是三维系统中的一个“点”,具有位置、速度、加速度、颜色、寿命和年龄等属性,而“粒子物体”则是具有相同属性的多个粒子的集合,在一个粒子物体中,可以只包含有一个粒子,也可以包含有成千上万个粒子。而粒子的碰撞可以在粒子物体(包括软体——soft
body,粒子与几何体的结合,比如海面、肚皮、脖子)和几何体之间发生,在碰撞的过程中,粒子会发生分裂、发射出新的粒子或者衰竭、死亡。
这种新功能的引入,无疑会对爆炸、雨、雪等效果的渲染有莫大的帮助。过去,若要实现这些效果,就必须使用半透明材质的映射输出才能完成。
High level primitives
3D模型镶嵌(model tessellation)的支持是DirectX开发的另一项努力。它有点类似于Quake 3中的曲线表面(curved
surfaces)支持方式。Bezier curves(贝塞尔曲线)、B-splines(B-样条函数)、triangulation(拆分为三角形)以及vertex
interpolation(顶点插补)都将随着model tessellation的引入而被带出。
下图给出的是,一个标准的3D模型经过高级tessellation后的变化。需要注意的是:模型实际上并没有因此而增加新的细节度。
总结
新版本的DirectX所包含的支持将能够满足大多数未来游戏硬件的需求。这些新的特性中的绝大多数都能够在DirectX中方便地应用。由于具备上述的特性,我们可以这么说:在游戏的开发过程中,DirectX将具备与OpenGL一样的能力,而且在使用上也非常的简便。
DirectX 8的进步是革命性的,是以往任何一个版本都无法与之相提并论的。最重大变革主要集中在Direct3D方面。它很多方面的进步都是自DirectX
5以来最重大的变革。其中,尤为突出的就是,shaders的引入为一系列的新特性铺平了道路。
DirectX 8在其它方面的改进也丝毫不逊色于它在图形部分的努力。作为总结,我们有必要提一下正在开发中的交叉平台多媒体接口——OpenML,它将是基于Windows平台的DirectX
8的强大的假想敌。