在DirectX 10的图形流水线系统中,最大的结构变化是在几何处理阶段增加了几何着色器。几何渲染单元附属于顶点渲染单元,但不像顶点渲染单元那样输出顶点,而是以像素为处理对象。
图元比层次结构中的顶点高一级,它由一个或多个顶点组成。由单个顶点组成的图元称为点,由两个顶点组成的图元称为线,由三个顶点组成的图元称为三角形。几何单元支持点、线、三角形、具有相邻点的线、具有相邻点的三角形等。它一次最多可以处理六个顶点。有了丰富的图元类型支持,几何渲染单元可以让GPU提供更精细的模型细节。
几何渲染单元赋予GPU创建新几何对象和向场景添加内容的神奇能力。的灵活处理能力让GPU的用途更加广泛,很多过去必须由CPU完成的任务现在都可以由GPU来处理。这样CPU就有更多的时间来处理人工智能、寻址等工作。更令人惊讶的是,几何渲染单元还可以更容易地添加物理操作。DirectX 10可以创建具有物理特性的盒子并模拟刚性物体,物理操作有望在其主导下逐渐普及。可以预见,在几何渲染单元这一武器的帮助下,显卡的性能将会有质的飞跃,我们也将体验到速度更流畅、画面更精美、剧情更细致的游戏。
提高API和驱动程序效率
我们知道,每个游戏角色、武器和场景都是3D程序中的一个对象,每个游戏画面中可能会出现数百个对象。显卡工作时,每一个对象都要从应用程序传到API接口,再通过显卡驱动到达显卡。在现有的DirectX系统中,任何对象操作或渲染都会导致系统资源的额外消耗。游戏中的物体越多,传输时间越长,额外消耗越多。据统计,现有的DirectX 9图形芯片只有60%的性能用于计算3D程序,其余40%的计算能力被浪费了!
为了改变这种情况,DirectX 10在渲染程序中采用了动态索引功能,对象由驱动程序自动加载,数据可以分类连续输入。这样一来,单次传输的数据量就增加了,从而大大减少了额外的时间。通过引入新的API和驱动程序,DirectX 10将图形芯片的执行效率提高到80%。在不增加显卡硬件成本的前提下,大幅提升了显卡的性能。
并行发动机支持技术
为了提高多显卡协作的工作效率,微软在DirectX 10中提出了“并行引擎支持”的概念,可以将两个GPU所需的数据提前传输到两个对应的GPU,帧渲染将完全由驱动程序控制和分配,使两个显卡的工作强度得到很好的平衡。但在目前主从卡的操作模式下,主卡要判断从卡帧和渲染量。引入并行引擎支持技术后,主从卡的概念将会消失,两个甚至更多显卡的协作力量将会得到充分体现。
统一渲染架构
DirectX 10最大的创新是统一着色器架构。目前各种图形硬件和API都采用分离渲染架构,即顶点渲染和像素渲染独立进行。前者的任务是用3D坐标信息构造多边形顶点,后者的任务是将这些顶点从3D转换到2D,使“3D”场景以视觉欺骗的方式显示在屏幕上。相应的,GPU中也有专门的顶点渲染单元和像素渲染单元来分别执行这两个任务(由于工作量不同,这两个渲染单元的数量并不相等,顶点渲染单元通常只有像素渲染单元的1/3 ~ 1/2)。在过去的几年中,这种分离的设计为计算机图形学的发展做出了一定的贡献。
然而,微软认为这种单独的渲染架构不够灵活。不同的GPU有不同比例的像素渲染单元和顶点渲染单元。软件开发人员在编写代码时必须考虑这个比例,这就大大限制了开发人员自由发挥的空间。此外,不同的图形游戏或软件对像素渲染和顶点渲染的要求不同,导致GPU的计算资源利用不足。因此,微软在DirectX 10中提出了统一渲染架构的思想:在同一物理类型的渲染单元上执行不同类型的渲染程序。换句话说,只使用一个渲染单元,这样它就可以完成顶点渲染,像素渲染,甚至几何渲染。这样可以最大限度的利用渲染单元,减少资源闲置的情况。目前Xbox 360的显示芯片Xenos采用的是统一渲染架构。该芯片共有48个渲染单元,均可用于顶点渲染或像素渲染,没有固定的分配比例。此外,ATI还打算在新一代R600芯片中采用统一渲染架构。
当然,统一渲染架构并不完美。与顶点渲染相比,像素渲染会面临大规模使用纹理带来的材质延迟,这是统一渲染架构亟待解决的问题。不过有一点可以肯定,在微软的大力推动下,统一渲染架构是大势所趋。