在DirectX 10的图形流水线体系中,最大的结构性变化就是在几何处理阶段增加了几何渲染单元(Geometry Shader)。几何渲染单元被附加在顶点渲染单元之后,但它并不像顶点渲染单元那样输出一个个顶点,而是以图元作为处理对象。
基本介绍
- 外文名:DirectX 10
- 属于:图元在层次上比顶点高一级
- 包含:一个或多个顶点构成
- 含义:由三个顶点组成的图元
几何渲染单元
图元在层次上比顶点高一级,它由一个或多个顶点构成。由单个顶点组成的图元被称为“点”,由两个顶点组成的图元被称为“线”,由三个顶点组成的图元被称为“三角形”。几何渲染单元支持点、线、三角形、带邻接点的线、带邻接点的三角形等多种图元类型,它一次最多可处理六个顶点。藉助丰富的图元类型支持,几何渲染单元可以让GPU提供更精细的模型细节。
几何渲染单元赋予GPU自行创造新几何物体、为场景添加内容的神奇能力。灵活的处理能力使GPU更加通用化,以往很多必须倚靠CPU才能完成的工作,现在完全可交由GPU处理。如此一来,CPU就有更多时间处理人工智慧、定址等工作。更令人惊喜的是,几何渲染单元还让物理运算的加入变得更简单,DirectX 10可创建具备物理特性的盒子、模拟刚性物体,物理运算有望在它的带领下逐渐走向普及。可以预见,藉助几何渲染单元这一武器,显示卡性能将产生质的飞跃,我们也将体验到速度更流畅、画面更精美、情节更细緻的游戏。
改进驱动功效
我们知道,每一个游戏角色、武器和景物在3D程式中都是一个Object(对象),而每一帧游戏画面就可能出现数百个Object。在显示卡工作时,每一个Object都要从应用程式传输到API接口,然后通过显示卡驱动程式到达显示卡。在现有的DirectX体系中,任何一个Object进行操作或者渲染,都会导致系统资源的额外消耗,游戏的Object越多,所耗费的传递时间就越长,造成的额外消耗也就越多。据统计,现有的DirectX 9图形晶片在工作时,只有60%的性能用于运算3D程式,其余40%的运算能力被白白浪费了!
为了改变这一现状,DirectX 10在渲染程式中採用了动态索引功能,Object被驱动程式自动载入,数据可以分类并连续输入,这样一来,单次传输的数据量就增加了,从而大大降低了额外耗费的时间。通过引入新的API及驱动程式,DirectX 10将图形晶片的执行效能提升至80%。在不增加显示卡硬体成本的前提下,显示卡性能得到了大幅提升。
引擎支持技术
为了提升多块显示卡协作的工作效率,微软在DirectX 10中提出了“Parallel Engine Support(并行引擎支持)”的概念,它可以预先把两个GPU需要的数据分别传输到两块对应的GPU当中,帧渲染将完全由驱动控制和调配,两块显示卡的工作强度可以获得很好的平衡。而在目前主从卡的运作模式中,主卡要对从卡框架、渲染数量进行判定,而引入并行引擎支持技术后,主从卡的概念将消失,两块甚至多块显示卡的协作威力将充分体现。
统一渲染架构
DirectX 10最大的革新就是统一渲染架构(Unified Shader Architecture)。目前各类图形硬体和API均採用分离渲染架构,即顶点渲染和像素渲染各自独立进行,前者的任务是构建出含三维坐标信息的多边形顶点,后者则是将这些顶点从三维转换为二维,这样便可以通过视觉欺骗在萤幕上显示出“三维”的场景。与此对应,GPU中也有专门的顶点渲染单元和像素渲染单元来分别执行这两项工作(由于工作量不同,这两种渲染单元的数量不相等,顶点渲染单元通常只有像素渲染单元的1/3~1/2)。在过去几年中,这种分离式设计对计算机图形领域的发展做出了一定的贡献。
不过,微软认为这种分离渲染架构不够灵活,不同的GPU,其像素渲染单元和顶点渲染单元的比例不一样,软体开发人员在编写代码时必须考虑这个比例,这就大大限制了开发人员自由发挥的空间。另外,不同的图形游戏或软体对像素渲染和顶点渲染的需求不一样,导致GPU的运算资源得不到充分利用。为此,微软在DirectX 10中提出了统一渲染架构的思想:在相同物理类型的渲染单元上执行不同类型的渲染程式。换句话说,只用一种渲染单元,让它既能完成顶点渲染,也能完成像素渲染,甚至还能实现几何渲染。这样一来,渲染单元可以得到最大程度的利用,减少了资源闲置的情形。目前,Xbox 360的显示晶片Xenos就採用了统一渲染架构,该晶片一共有48个渲染单元,它们可全部用于顶点渲染或像素渲染,没有固定分配比例。此外,ATI也打算在新一代的R600晶片中採用统一渲染架构。
当然,统一渲染架构也并非完美无瑕。相对顶点渲染来说,像素渲染将面临大规模使用纹理所带来的材质延迟,这是统一渲染架构急待解决的问题。不过有一点可以肯定,在微软的大力推动下,统一渲染架构是大势所趋。
适应系统
除统一渲染架构外,DirectX 10的另一大特色就是与Windows Vista紧密结合,Vista系统将调用GPU资源来渲染Aero Glass 3D界面,这样图形API就与作业系统核心高度整合在一起。举个例子,当我们点击应用程式时,CPU将立刻收到驱动程式的指令,而软体界面渲染指令则通过DirectX 10直接传送给GPU,这样,Vista就能与CPU和GPU同时沟通,让3D界面渲染工作变得更高效。
相比之下,在DirectX 9环境中,Vista(软体)界面的渲染工作就要“迟钝”一些了:用户点击运行某个软体,Vista将相应的指令传送给CPU,要求CPU进行后续处理;CPU接到运行指令的同时向GPU发出请求,要求GPU在萤幕上渲染出界面。GPU(支持DirectX 9)识别Vista界面渲染指令后完成相应的工作(注意:DirectX 8显示卡无法完成渲染工作,必须让CPU通过软体模拟来实现,此时系统速度非常缓慢)。换句话说,在“DirectX 9显示卡+Vista”的平台中,CPU还是核心,GPU必须在CPU的控制下工作,而Vista系统也必须通过CPU来调用GPU的资源。
DirectX9还有一个不足之处,那就是它只能进行单任务渲染,即无法同时完成两个场景的渲染工作(如无法在运行游戏的同时为软体渲染3D界面),套用範围受到极大的限制。而DirectX 10则允许GPU同时渲染多个不相关的3D场景,工作效率大为提高。因此,儘管DirectX 9显示卡大都能驱动Vista华丽的Aero Glass视觉模式,但很多方面受到了限制,只有DirectX 10显示卡才是Vista的理想“伴侣”。
可惜,微软决定DirectX10不会“下嫁”WindowsXP,想体验DX10特效只能依赖Vista。
渲染单元模式
Shader Model 4.0
从DirectX 8开始,Shader Model(渲染单元模式)在DirectX体系中的地位就日趋重要,其版本和渲染单元的规格也成为了决定显示卡性能高低的关键因素。随着DirectX 10时代的到来,Shader Model也升级到了4.0版本。与眼下如日中天的Shader Model 3.0(以下简称SM 3.0)相比,Shader Model 4.0(以下简称SM 4.0)有哪些可喜的变化?
首先,SM4.0中的指令长度被提升到大于64K(即64×1024)的水平,这是SM 3.0规格(渲染指令长度允许大于512)的128倍。显然,SM 4.0在为渲染出电影级别的游戏画面做準备。由于渲染指令长度大幅提升,SM 4.0中相应的暂存器规格也有所增强,如Constant暂存器採用16×4096阵列、tmp暂存器则有4096个、input暂存器採用16/32规格等,上述指标都比以前的DirectX有明显的改进。其次,SM 4.0在纹理数量方面也有提高。DirectX 10允许程式设计师在渲染物体时使用128个纹理,而DirectX 9只提供4/16规格,更多的纹理意味着物体表面精度更接近真实,游戏开发者拥有更广泛的选择。
从上述情况不难看出,DirectX 10在性能方面的提升是巨大的,它将进一步解放CPU的资源。当然,我们也必须看到,DirectX 10对硬体(尤其是显示卡)的要求也更为苛刻,GPU在设计上也将更加複杂。
新版功能
正如以前的DX版本一样,DX10.1也是DX10的超集,因此它将支持DirectX 10的所有功能,同时它将支持更多的功能,提供更高的性能。
改善的shader资源存取功能
DX10.1的一个主要提高是改善的shader资源存取功能,在多样本AA时,在读取样本时有更好的控制能力。除此之外,DX10.1还将可以创建定製的下行採样滤波器。
DX10.1还将有更新的浮点混合功能,对于渲染目标更有针对性,对于渲染目标混合将有新的格式,渲染目标可以实现独立的各自混合。阴影功能一直是游戏的重要特效,Direct3D 10.1 的阴影滤波功能也将有所提高,从而可望进一步提高画质。
支持多核系统有更高的性能
在性能方面,DirectX 10.1将支持多核系统有更高的性能。而在渲染,反射和散射时,Direct3D 10.1将减少对API的调用次数,从而将获得不错的性能提升。
其他方面
其他方面,DX10.1的提高也不少,包括32bit浮点滤波,可以提高渲染精确度,改善HDR渲染的画质。完全的抗锯齿应用程式控制也将是DX10.1的亮点,应用程式将可以控制多重採样和超级採样的使用,并选择在特定场景出现的採样模板。DX10.1将至少需要单像素四採样。
DX10.1还将引入更新的驱动模型,WDDM 2.1。与DX10的WDDM2.0相比,2.1有一些显着的提高。
首先是更多的内容转换功能,WDDM2.0支持处理一个命令或三角形后进行内容转换,而WDDM2.1则可以让内容转换即时进行。由于GPU同时要并行处理多个执行绪,因此内容转换的即时性不仅可以保证转换质量,还可以提升GPU效率,减少等待时间。另外,由于WDDM 2.1支持基于过程的虚拟记忆体分配,处理GPU和驱动页面错误的方式也更为成熟。