作者:Rowan 文章来源:本站原创 点击数: <script language="javascript" src="/Article/GetHits.asp?ArticleID=464" type="text/javascript"></script> 85 更新时间:2007-8-13
编者按:这篇文章成文于2006年8月8日,发表在《大众硬件》杂志上。是一篇非常不错的技术解析文章。DX10的文章,写了好几篇。其实都是说的那么几个进化的特点。现在DX10的游戏已经渐渐浮出水面,这些游戏的画面确实让人惊叹。希望这篇文章能让你更深的体会DircetX10的技术架构。
我觉得我文章的题目起的是越来越有特色了。这篇文章,我送给杂志编辑两个题目。你猜猜她用的是哪个题目呢?我觉得两个题目都不错。
春江水暖鸭先知
大腿内侧加强一下
——新一代DirectX10前瞻
在2007年春,微软即将发布新一代操作系统Windows Vista。随着Vista一同到来的还有DirectX10。届时不仅仅你将拥有一个非常华丽的操作系统,而且电脑游戏也会更加的精彩逼真。你将难以用肉眼分辨出游戏画面与真实世界的差异,你将可以全身心的沉浸在游戏所营造的氛围中。DX10将会作为游戏与电脑硬件的纽带,充分发挥出显卡的性能。今天笔者就为大家深入介绍微软的新一代DirectX 10技术,让大家先知先觉为未来做好准备。
什么是DirectX
在Windows 95问世后不久,微软发布了第一个DirectX版本——v1.0。DirectX是由微软公司建立的游戏编程接口,由C++编程语言实现,遵循COM规范。同时它建立了一种机制:由硬件制造厂商和游戏开发商协同制定新的标准。也正是由此DirectX的功能越来越强大起来。此后它的影响力渐渐超越OpenGL并被多数PC游戏开发商采用。在业界有人也将它简称为DX。
在DirectX7出现以前它一直是默默无闻的,当时市面上有很多3D API接口。当NVIDIA发布了GeForce256芯片时,首次在桌面电脑中引入了硬件级别的T&L光照转换技术。而DirectX7凭借对它良好的支持赢得了游戏开发商的广泛认同。在DirectX8中,首次引入了Pixel Shader像素着色处理单元并完善了Vertex Shader顶点着色处理单元。使得游戏开发人员可以精确的控制游戏中的每一个像素。到了DirectX8.1的时代,又追加支持更高版本的Shader 1.4。在DirectX9.0时代可以支持Shader 2.0,并且确立了3D API领域中无免的霸主地位。
图1_从DX7到DX9画质对比.jpg
当然在DirectX中也不仅仅是3D图形,它还包括了多个组成部分。其中DirectDraw是负责2D绘图,Direct3D负责3D绘图,DirectSound负责游戏中的音频部分,DirectMusic则是MIDI数字乐器界面,DirectInput控制着各种输入输出,DirectPlay负责网络数据的传送,DirectSetup则会对各种参数进行设定,DirectShow负责播放动画,DirectAnimation整合动画环境。
现在主流的Windows游戏都需要DX的支持。目前最新版本是DirectX9.0c,而在微软的下一代操作系统Windows Vista中它将被WGF2.0所取代。WGF意思是Windows图形基础。微软将所有关于图形子系统的功能都包罗在WGF中,因此DirectX10也将被称作WGF 2.0。在新一代DX10中将支持统一Shader架构,引入了几何Shader的概念,支持流输出等先进的性能优化技术,支持物理加速特效API,并且支持最新的SM4.0规范。
图2_DirectX10即将到来
什么是Shader?
很多人都能理解象素、多边形、材质的概念,但始终对Shader一词难以理解。翻开字典Shader是阴影的意思,但它和3D加速卡又有怎样的关系呢?事实上Shader就是一段可以改变象素和顶点的小程序。因此在Shader规范模型中又划分出两个分支,一个叫做像素着色器(Pixel Shaders)一个叫做顶点着色器(Vertex Shaders)。这个Shader小程序可以为游戏场景添加一些基本的几何学特效。例如湖水的涟漪,它会让特定的蓝色材质发生移动、扭曲和倒映,这样就会给人波光粼粼的感觉了。若是要将一个物体渲染成玻璃的风格,它就会让一些材质发生透明和扭曲。Shader技术主要是应用在目前的电脑游戏当中,它让我们的电脑游戏画面更加逼真,现在的主流3D游戏画质要比几年前逼真许多。Shader是具有可编程性的,开发人员可以用它创造出非常图特的游戏场景。像NVIDIA和ATI的显卡都严格支持Shader的规格,并且为Shader程序作了很多优化。当然除了游戏的特效之外,游戏开发人员也可以用Shader作很多其他工作。总之Shader在未来的游戏中将发挥越来越重大的作用。在新一代DX10中将支持最新的Shader Model v4.0规范
图3_水面使用pixel Shader像素着色处理
统一的Shader处理单元
今后在WGF中无论是顶点的Shader还是像素的Shader都会被统称为“统一Shader”,两种Shader都将包含在内。像素和顶点的Shader信息交换直接由硬件层来完成,这样信息传递和处理的速度会更快。这是因为像素和顶点的Shader在漫长的演化过程中,他们的结构和所实现的功能都非常近似了。我们都知道在处理游戏场景时,像素的数据处理量要远远多于顶点的数据量。顶点Shader处理单元经常会处于闲置状态。在像素和顶点Shader统一化后,顶点Shader可以利用空闲的时间来处理像素Shader。
图4_Xbox360中使用的就是统一Shader
像素和顶点的Shader运算单元结构统一化后,有个非常显著的优势:像素Shader单元中处理的材质贴图可以直接装载到顶点Shader中,这样就直接可以生成置换贴图。因为材质都是以点阵像素的形式构成的数据。以前要想设置材质的顶点数据,必须先将材质转换为顶点Shader所匹配的数据格式。但当两类Shader规格统一后,基于像素的材质贴图数据可以直接装载到顶点贴图单元中,这样就可以更快的运算出所要置换的顶点数据。由此,数据处理的流程就会大大简化,数据不必在两种Shader单元中跑来跑去。
当两类Shader单元得到统一后,我们的GPU还具备了新的功能——整数运算。这可以演化成一种全新的图形处理架构。举例来说,在以前的GPU中系统要查找一个材质数据都要在内存地址中进行检索,每次系统都会使用浮点数据格式进行查找。但是当两类Shader统一之后,我们就可以通过更加精密准确的整数格式对内存地址进行检索。所有的数据再也不用含糊不清的四舍五入了。无论是显存、虚拟内存或系统主存都可以更加高效的存取数据。
当显存开始支持新的整数数据类型后,显卡就完全像是处理器一样可以自由的使用虚拟内存了。我们都知道从Shader 3.0以后,理论上讲Shader指令的长度不再有任何限制了。今后的游戏中可能会出现许多超长的Shader指令。只要有足够的存储空间,无论多么长的Shader指令GPU都能应付。当Shader单元支持整数数据后,系统可以轻松的将这些超长的Shader指令转化成在GPU内部运作的固定长度的微指令。运行短小而简单的指令时,GPU的处理速度会更快。
几何Shader处理单元
在新一代DX10中为了增强显卡的处理效能,在统一Shader的基础上又增加了一个Geometry Shader几何处理单元。通过以上的介绍,我们不难理解,Pixel Shader是专门处理像素的,Vertex Shader是专门处理多边形顶点的。那么Geometry Shader是专门用来处理场景中的几何图形。在过去Vertex Shader每一次运行只能处理一个顶点的数据,并且每次只能输出一个顶点的结果。在整个游戏场景中,绘制的几何图形的任务量是非常庞大的,如果仅仅依靠Vertex Shader来完成,处理场景的效率会很低下。并且如大爆炸,粒子效果,瀑布流水等复杂的场景都很难逼真的表现出来。
现在DX10的设计师们在顶点与像素的处理过程中又加入了Geometry Shader几何着色器。它可以根据顶点的信息来批量处理几何图形。Geometry Shader可以将点、线、三角形等基本的构图元素连接起来,创造出新的多边形。快速的将这些处理结果传递给其他Shader或显存,并且这个过程无需处理器参与。
Geometry Shader最重要的工作就是接点,将顶点之间用线连接起来。例如,当Geometry Shader拥有两个顶点的信息时,它就可以将两个点连接起来组成一条线。通过这条线可以绘制其他延长线上的点。而通过连接三个顶点就可以绘制出一个三角形。最后通过计算延长线上的点,就可以绘制出更为复杂的几何图形。
图5_Geometry Shader绘制几何图形的原理
在显卡的工作流水线中几何着色器工作在顶点与像素着色器之间。当显卡中的顶点着色单元生成顶点信息之后,就会将这些结果交给几何着色器来构成更为复杂的几何图形,最后交由像素着色器来为这些几何图形添加各种材质。
图6_Geometry Shader几何着色器工作在顶点与像素着色单元之间
Geometry Shader的出现使得游戏开发人员可以设计出更为复杂的烟雾、爆炸、天气等效果,并且游戏场景中的模型可以设计的更为复杂细腻。而处理器也可以从这些繁重的计算任务中解脱出来。
为了游戏提速!再提速!
在未来的DX10游戏中,场景会非常逼真,物体会使用更多的多边形绘制,而场景中也会包含海量的物件。例如在森林中,你将会看到无数的树木,而每棵树上又会包含无数片精致的树叶。为了让游戏运行的更流畅,在DX10中引入了许多提速理念。
例如一个游戏场景中有角色、场景、敌人等元素,都会在3D程序中生成一个处理对象,而每一帧中会有成百上千这样的处理对象。以前在DX9中,每个处理对象的数据都要在API和驱动程序中来回迁移。当传送到驱动程序里时都会被附加一些驱动程序的设定指令。处理这些附加的设置指令都会造成GPU资源额外开销(Overhead)。若游戏要表现浓密的树林,郁郁葱葱的杂草,在游戏中就会有更多处理对象。相应的也会造成大量GPU资源的额外开销。
图7_DX10中的游戏场景将非常复杂
在今后的DX10中,会大幅弱化API与驱动程序之间的数据迁移,让3D处理程序能够顺畅处理对象。目前在基于DX9的游戏程序中,GPU只有60%的时间是在执行程序,而其他40%的时间用来处理各种各样的额外开销。在DX10中GPU的处理效率会提升到80%,由此在游戏中就可以显示出更多的物体,而游戏性能也会大幅提高。
图8_DX10中要淡化API和驱动
渲染一词是随着T&L技术而提出的3D流水线处理方式,不过在今后的DX10中,将会淡化渲染的概念,所有的一切都将使用Shader处理。一旦处理流水线完全Shader化之后,就可以进行流输出(Steam Out)。这有点类似使用跳转分支语句控制程序的走向。例如某些处理对象在生成顶点着色之后可以通过流输出操作让结果直接返回流水线的源头进行几何着色处理,而不必经过像素着色阶段。由此就会大幅简化GPU的开销,提高程序运行速度。
物理特效API
自从AGEIA提出了物理特效加速这一概念时就被各大媒体炒的沸沸扬扬。目前AGEIA已经推出了第一代物理特效加速子卡PhysX。两大显卡芯片设计巨头NVIDIA和ATi也都纷纷宣布,未来的GPU将具备物理特效加速功能。在大势所趋之下,微软也宣布在新一代DX10中将引入物理特效API。
图9_物理特效会使游戏变得非常生动有趣
不过现在的物理特效处理分裂出两大阵营,一方面是AGEIA提出的使用PPU物理加速子卡实现物理特效。另一方面是Havok提出的使用FX引擎调用GPU来实现物理特效。微软为了不偏袒任何一方在DX10中会发布两个SDK版本,他们分别支持两个互不兼容的物理特效引擎。
不过作为普通的消费者来说更希望GPU直接带有物理特效加速功能。这样会节省下一笔购买物理加速子卡的开支。其实目前的GPU功能已经十分强大,而且应用范围也更加通用化。GPU已经将越来越多的处理任务揽在自己身上。相信NVIDIA和ATI也会用事实证明他们的GPU可以胜任物理特效加速任务。
DX10是Vista的独生子
在微软的官方文档中我们可以明确的看到“Requires Vista”的注释。这也就是说仅有新一代操作系统Vista才可以支持DX10。为了能将新一代DirectX革命到底,微软的工程师们对DX10进行了较大的改动,使之难以兼容旧的XP操作系统。这也就意味着我们要想体验DX10游戏的魅力,必须升级到Vista。
在Vista中最为凸显的就是极为华丽的新一代用户操作界面——Aero。它是操作系统用户界面的一套API接口,程序员在编写程序界面时通过Aero可以给用户带来全新的电脑操作体验。Aero通过主题、布局、样式以及本机控件表现出来。很多媒体在对微软发布的Vista Bate版本进行评测的时候都有这样的评论:没有开启Aero的系统根本就不能称作Vista。Aero可以利用3D加速卡对桌面进行硬件级别的渲染加速显示。它可以利用3D显卡中的许多图形特效来渲染出华丽的桌面。因此支持硬件级别的DirectX9图形加速卡会成为下一代Windows用户的标配。目前为了降低Vista的硬件门槛,Aero使用DX9 API编写,而不是最新的DX10。微软的开发人员表示只有当支持DX10的显卡市场占有率达到一定规模时,才会在Vista SP补丁中考虑将Aero升级到DX10。
图10_华丽的Aero界面其实使用的是DX9 API
在DX10中提供了兼容模式可以运行DX9的游戏。尽管很多新款游戏会支持DX10,但是游戏开发商也照顾到广大老显卡用户,游戏会尽可能支持更多的显卡。因此使用DX9显卡的用户依旧可以在Vista上玩新款DX10游戏。NVIDIA的G80和ATI的R600都是支持DX10的显卡,他们会在今年年底前陆续登场。而支持DX10显卡的普及率要想真正超过DX9显卡还需要数年的时间,因此各位玩家不必急于购买昂贵的DX10显卡。
总结
微软的Vista操作系统给了我们太多的期待,DirectX10也给了我们对未来游戏太多畅想。各大游戏公司公布的DX10游戏截图都让我们惊叹不已。DX10不仅仅让游戏变得更为华丽,也会大幅提高硬件的工作效率。虽然目前还没有一款真正支持DX10的GPU,但是微软的Xbox360中所使用的Xenos是最为接近DX10规范的硬件。由此Xbox360的游戏和PC游戏之间可以更快的相互移植。待到DX10真正发布时,操作系统、电脑硬件、游戏软体都将会有一轮新的革命。