DX10显卡的魔术棒——几何渲染单元全面剖析

技术空间

显卡发烧友和游戏玩家可能都记得,早在GeForce3诞生时,NVIDIA给我们带来了两个新“武器”:Vertex Shader(顶点渲染单元)和Pixel Shader(像素渲染单元),它们使显卡的3D性能获得了空前的提升。如今,DirectX 10时代即将来临,我们也将在下一代显卡上看到一种全新的渲染单元——Geometry Shader(几何渲染单元)!

回顾渲染单元的发展史

渲染单元的概念是从DirectX 8.0时代开始引入的,其前身就是T&L技术。因此,要全面地了解渲染单元,我们还得从GPU谈起。

1. T&L开创3D新时代

显示核心被称作GPU(Graphics Process Unit,图形处理器),是从GeForce 256开始的,它出自NVIDIA的手笔。从此,GPU的概念就逐渐深入人心。GeForce 256提供了对DirectX 7.0的支持,具备了当时先进的T&L(Transform and Lighting,几何转换和光源处理)技术。在没有这项技术之前,位置转换和光源处理等基础图形运算都需要CPU来完成。由于CPU还要负责基本的系统运行等任务,游戏开发商也不敢对游戏画面做更多的美化处理。图形运算量的需求已经超出CPU发展的步伐,如果显卡再不挺身而出,图形性能将难以实现突破。GeForce 256的出道可谓生逢吉时,它把几何转换和光源处理等工作从CPU手中“夺”过来,显卡开始具备初步的几何处理能力,系统的图形性能因此上了一个台阶。

2.Shader引发GPU革命

在近几年显卡的发展过程中,微软的DirectX无疑是一根指挥棒。第一代GPU取得的成功,证明了把更多图形运算工作从CPU中分离出来是正确的。到DirectX 8.0时代,当前GPU最重要的“武器”——Shader(渲染单元,也叫着色器)开始被引入。事实上,Shader就是一段可以改变顶点和像素的小程序,其中顶点程序对应的处理单元就是顶点渲染单元,用于描述和修饰3D物体的几何形状,同时也可以控制物体的光亮和阴影;像素程序对应的处理单元就是像素渲染单元,负责对最终输出的像素进行操作运算,比如像素的色彩、深度坐标等信息。

38-d10-01.jpg
首次加入顶点和像素渲染单元的GeForce3

渲染单元具备可编程的灵活特性,游戏开发者可根据需要为游戏设计出独特的视觉效果。为了规范渲染单元的功能及接口,微软从DirectX 8开始加入Shader Model(渲染模式,以下简称SM),而且以后每一次更新DirectX,SM版本都会相应地进行升级。有了DirectX的帮助,GPU也更具灵活性,并为CPU分担了许多图形运算工作。

3.现有渲染架构的不足

从表面上看,顶点渲染单元和像素渲染单元的分工很合理,DirectX 8.0、DirectX 9.0这两代版本都围绕它们而设计,GPU也依靠渲染单元数量的增加实现了性能的提升。但实际上,顶点渲染单元有不少需要改进的地方。

我们知道,顶点渲染单元只能逐个处理顶点,而3D图形通常由很多个顶点构成,逐个顶点处理的方式显然效率不高。这就好比我们一次可以搬运3件货物,但我们却一次仅搬运1件,必然要多走好几个来回。因此,如果能让渲染单元一次完成多个顶点的批量处理,工作效率显然要高多了。而几何渲染单元的工作职责就是实现顶点批量处理。引入几何渲染单元后,以往很多必须依靠CPU才能完成的工作完全可以交给GPU处理,如此一来,CPU便可从繁重的几何处理工作中解放出来。

解析新一代GPU体系架构

目前主流GPU的图形流水线(Graphics Pipeline)一般分为几何处理(Geometry Processing)和光栅化(Rasterization)两大部分,前者为后者准备好几何信息,而后者负责将输入的几何信息绘制到帧缓冲区(Frame Buffer),并最终呈现在显示器上。在即将出台的DirectX 10的图形流水线中,有一个最大的变化——几何处理部分增加了几何渲染单元(Geometry Shader)。

38-d10-02.jpg
新一代GPU的图形流水线

具体来说,几何渲染单元被加在顶点渲染单元(Vertex Shader)的后面,而其他部分没有什么变化。输入组装器(Input Assembler)负责接收游戏(或其它软件)发送过来的原始数据,这些数据被整合、优化等系统化处理后,便输出至顶点渲染单元进行相关的顶点渲染处理。顶点渲染单元输出的是一个个顶点,加在它后面的几何渲染单元接收的就是这些顶点,但与顶点渲染单元不同的是,几何渲染单元的处理单元是图元!也就是我们前面所说的,它可以对顶点进行批量处理。

38-d10-03.jpg
几何渲染单元支持5种类型输入图元

图元是什么?图元是由一个或多个顶点构成的,它在层次上比顶点高一级。DirectX 10中的几何渲染单元支持5种类型的输入图元:点、线、三角形、带邻接点的线、带邻接点的三角形。前三者是最基本的图元:由单个顶点组成的图元被称为点;由两个顶点组成的图元被称为线(Line);由三个顶点组成的图元被称为三角形(Triangle)。后两者是新增的图元类型:线的两端都带有一个额外的邻接点,这种线被称为带邻接点的线(共有4个顶点)。同理,当三角形的每条边都带有一个邻接点时,这种三角形被称为带邻接点的三角形(共有6个顶点)。

几何渲染单元对基本的图元进行处理后,可生成图形外观的完整数据。这些数据将被送到“Rasterizer/Interpolator”(光栅/分类)单元进行光栅化处理,该单元会根据图元的属性决定哪些像素需要绘制,这些像素分好类后,就可以输出至像素渲染单元(Pixel Shader)加以处理。

几何渲染单元带来哪些好处?

1.有利于游戏设计者充分发挥想象力

对于游戏设计人员来说,能把自己的设计或创意融合到游戏当中,无疑是一件非常惬意的事情。可惜现有GPU几何处理机制不够灵活,如果转移至CPU完成,则又加重了CPU的负担,结果许多美妙的想法被迫“胎死腹中”。几何渲染单元的加入就好比给GPU添加了一根魔术棒,它不但可以看到“图元”本身,还能“看到”与之相邻的一小块区域,仿佛它拥有自己的“思想”。因此,GPU可以在不依靠CPU的帮助下提供更精细的模型细节,并完成更灵活的工作,这对设计者而言无疑是一个福音。

38-d10-04.jpg
几何渲染单元可以生成任意数目的图元

尤其值得一提的是,几何渲染单元输出的图元类型可以和输入的不同,而且对于每一个输入图元,几何渲染单元可以输出任意数目的图元。这种变戏法的功能以往只有CPU才能做到,但现在几何渲染单元可以做到,CPU在几何处理上的负担减轻了很多。玩过《DOOM3》的朋友可能知道,要想体验到精美的游戏画面,一块比较高档的CPU是不可或缺的。事实上,出现这种现象的原因就在于很多几何处理工作要由CPU来完成,比如该游戏大量使用了阴影技术,而这些阴影的生成又需要CPU进行大量的运算。如果有了几何渲染单元的帮忙,阴影生成对于GPU来说只不过是小菜一碟了。

几何渲染单元给设计者提供了一个大展拳脚的舞台,至于戏该如何表演,那就要看设计者自身的功力高低了!

2.精美画面和流畅速度两者皆得

精美画面和流畅速度两者皆得?这在现代游戏中似乎只有高端显卡配合高端CPU才能做到。但有了几何渲染单元的帮忙,即便是使用中低端平台的用户,也有机会享受运行流畅、画面精美的游戏。

游戏发烧友可能知道,置换贴图(Displacement Mapping,也叫位移贴图)可以令游戏表现出真实的3D效果,但时至今日很多游戏并不敢大量运用,这是为什么?原因很简单,置换贴图的运算量实在是太恐怖了。如果再加入光源、材质等必要细节,很多电脑都无法胜任。为了在画质和速度之间达到平衡,ATI曾在X800系列上引入了虚拟位移贴图技术。但不管如何,其表现效果在真实度上仍然有所欠缺。几何渲染单元亮相以后,凭借它强大的几何运算能力,置换贴图的应用完全可以走向普及。当CPU从繁重的几何处理中解脱以后,它就可以专注于人工智能、自动寻址等擅长的工作,CPU、GPU真正做到各司其职,我们从此就能享受性能更高、画质更佳的游戏了。

38-d10-05.jpg
阴影效果对于几何渲染单元来说是小菜一碟

小知识:置换贴图就是通过一幅图片来改变模型表面的凹凸感,原理上类似于凹凸贴图(Bump Mapping),即通过给3D物体表面贴上一幅黑白图片,在最终渲染时产生与之对应的简单凹凸阴影的感觉。这种方法可改变3D物体各个点的位置,做到真正改变模型外观,使阴影、折射、反射等效果更加真实。

写在最后

时至今日,GPU的浮点运算能力已经远远超过CPU,Radeon X1900 XTX的FP32精度像素运算能力高达374.4G FLOPS(每秒十亿次浮点运算),这是任何桌面CPU望尘莫及的,把图形运算全部转移至GPU势在必行。回顾近几年来GPU发展的过程,我们不难发现这是一个GPU从CPU手中夺权的过程!着色架构的改变,比单纯提高管线数量更能带来实质性的效果。新一代显卡带来的变化是令人振奋的。从目前来看,ATI的R600、NVIDIA的G80和S3的Destination都将支持DirectX 10。如果一切顺利,采用新渲染架构的显卡将在今年年底出现在市场上,届时我们就可以感受几何渲染单元带来的强大震撼了。