DirectX 10
DirectX 10
几何渲染单元
在DirectX 10的图形流水线体系中,最大的结构性变化就是在几何处理阶段增加了几何渲染单元(Geometry Shader)。几何渲染单元被附加在顶点渲染单元之后,但它并不像顶点渲染单元那样输出一个个顶点,而是以图元作为处理对象。图元在层次上比顶点高一级,它由一个或多个顶点构成。由单个顶点组成的图元被称为“点”,由两个顶点组成的图元被称为“线”,由三个顶点组成的图元被称为“三角形”。几何渲染单元支持点、线、三角形、带邻接点的线、带邻接点的三角形等多种图元类型,它一次最多可处理六个顶点。借助丰富的图元类型支持,几何渲染单元可以让GPU提供更精细的模型细节。
几何渲染单元赋予GPU自行创造新几何物体、为场景添加内容的神奇能力。灵活的处理能力使GPU更加通用化,以往很多必须倚靠CPU才能完成的工作,现在完全可交由GPU处理。如此一来,CPU就有更多时间处理人工智能、寻址等工作。更令人惊喜的是,几何渲染单元还让物理运算的加入变得更简单,DirectX 10可创建具备物理特性的盒子、模拟刚性物体,物理运算有望在它的带领下逐渐走向普及。可以预见,借助几何渲染单元这一武器,显卡性能将产生质的飞跃,我们也将体验到速度更流畅、画面更精美、情节更细致的游戏。
改进的API和驱动功效
我们知道,每一个游戏角色、武器和景物在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芯片中采用统一渲染架构。
当然,统一渲染架构也并非完美无瑕。相对顶点渲染来说,像素渲染将面临大规模使用纹理所带来的材质延迟,这是统一渲染架构急待解决的问题。据悉,NVIDIA下一代的G80有可能继续坚持分离式设计。到底是统一架构好还是分离设计好?相信只有等G80和R600同台竞技后,答案才会揭晓。不过有一点可以肯定,在微软的大力推动下,统一渲染架构是大势所趋。
Vista
除统一渲染架构外,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的理想“伴侣”。
SM 4.0
从DirectX 8开始,Shader Model(渲染单元模式)在DirectX体系中的地位就日趋重要,其版本和渲染单元的规格也成为了决定显卡性能高低的关键因素(编注:关于Shader Model的具体介绍,请大家参阅本报今年第7期D15版)。随着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在设计上也将更加复杂。
DirectX 10.1
正如以前的DX版本一样,DX10.1也是DX10的超集,因此它将支持DirectX 10的所有功能,同时它将支持更多的功能,提供更高的性能。
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和驱动页面错误的方式也更为成熟。
几何渲染单元
在DirectX 10的图形流水线体系中,最大的结构性变化就是在几何处理阶段增加了几何渲染单元(Geometry Shader)。几何渲染单元被附加在顶点渲染单元之后,但它并不像顶点渲染单元那样输出一个个顶点,而是以图元作为处理对象。图元在层次上比顶点高一级,它由一个或多个顶点构成。由单个顶点组成的图元被称为“点”,由两个顶点组成的图元被称为“线”,由三个顶点组成的图元被称为“三角形”。几何渲染单元支持点、线、三角形、带邻接点的线、带邻接点的三角形等多种图元类型,它一次最多可处理六个顶点。借助丰富的图元类型支持,几何渲染单元可以让GPU提供更精细的模型细节。
几何渲染单元赋予GPU自行创造新几何物体、为场景添加内容的神奇能力。灵活的处理能力使GPU更加通用化,以往很多必须倚靠CPU才能完成的工作,现在完全可交由GPU处理。如此一来,CPU就有更多时间处理人工智能、寻址等工作。更令人惊喜的是,几何渲染单元还让物理运算的加入变得更简单,DirectX 10可创建具备物理特性的盒子、模拟刚性物体,物理运算有望在它的带领下逐渐走向普及。可以预见,借助几何渲染单元这一武器,显卡性能将产生质的飞跃,我们也将体验到速度更流畅、画面更精美、情节更细致的游戏。
改进的API和驱动功效
我们知道,每一个游戏角色、武器和景物在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芯片中采用统一渲染架构。
当然,统一渲染架构也并非完美无瑕。相对顶点渲染来说,像素渲染将面临大规模使用纹理所带来的材质延迟,这是统一渲染架构急待解决的问题。据悉,NVIDIA下一代的G80有可能继续坚持分离式设计。到底是统一架构好还是分离设计好?相信只有等G80和R600同台竞技后,答案才会揭晓。不过有一点可以肯定,在微软的大力推动下,统一渲染架构是大势所趋。
Vista
除统一渲染架构外,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的理想“伴侣”。
SM 4.0
从DirectX 8开始,Shader Model(渲染单元模式)在DirectX体系中的地位就日趋重要,其版本和渲染单元的规格也成为了决定显卡性能高低的关键因素(编注:关于Shader Model的具体介绍,请大家参阅本报今年第7期D15版)。随着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在设计上也将更加复杂。
DirectX 10.1
正如以前的DX版本一样,DX10.1也是DX10的超集,因此它将支持DirectX 10的所有功能,同时它将支持更多的功能,提供更高的性能。
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和驱动页面错误的方式也更为成熟。