MCPLive > 杂志文章 > 从曲面细分看GPU图形和游戏的发展

从曲面细分看GPU图形和游戏的发展

2010-06-02望穿秋水《微型计算机》2010年5月上

游戏的发展永远是以真实为基础。在经历了DirectX和OpenGL的历代升级后,我们突然发现,3D游戏对光影、贴图的处理已经达到了非常精细的地步,各种各样的特殊贴图技术能够模拟凹凸不平的视觉效果,甚至能让平面贴图看起来充满立体感。但为何游戏主人公的头部依然充满棱角?为什么肩膀仍然像个立方体?别急,这些答案,本文将为你一一揭示。

你无法用好莱坞大片中的场景去对比电脑游戏的画面,因为它们的差距确实太大。即使它们都叫做《阿凡达》,但极为明显的画面差异还是可以让你一眼就看出来谁是电脑游戏,谁是电影。电影大量应用了光线追踪等更为逼近真实的计算算法,并对每一个模型和对象做出了极尽细腻的计算。反观电脑,只是在有限的成本下取得性能和画质的平衡而已。

说到底,还是成本的问题。没错,谁也不可能要求制作成本在一万元左右的计算机画质能和几亿美元制作成本的大片相媲美。不过我们依旧需要思考,究竟是什么原因让它们的差别看起来如此之大?在“影院级渲染”呐喊了多少年之后,游戏画质还有哪些差距尚需弥补?换句话来说,电脑游戏和电影的画质差距,除了光线效果、材质细腻程度以及一些物理场景和抗锯齿、甚至还有光线追踪等算法方面大相径庭之外,在基础部分还有什么差异?3D游戏和图形处理的发展,下一步的方向是什么?

计算机的三步走—从数据到3D游戏

下面,我们先来看看游戏中的3D图像是如何生成的,然后来一步步看看目前游戏和图形的发展究竟遇到了什么瓶颈,未来应该朝什么方向去发展。对计算机而言,它必须根据程序员的需求,真正“想象(或计算)”出真实的、带有x、y、z三坐标的空间场景,才能进一步处理并根据用户的视角和需求,将图形展示在显示器上。

为了清晰了解计算机在3D处理中的方法,我们不妨仔细观察一下雕塑家的工作。一般说来,很多雕塑家会在雕塑开始之前,用支架建立起一个简单的结构,尽可能模拟终目标的形态,然后在这些支架上用各种各样的材料填充、并制作出栩栩如生的表面。在展示整个雕塑灵魂或者特别需要关注的地方,雕塑家还会用特殊的材质和手法进行雕刻,以达到终的目的。


“框线世界”构成了所有场景的基础,没有这些框线,
我们将无法看到3D立体的几何图形。图为3D Max生成的3D模型示意图。

在计算机的处理过程中,我们将第一部分,也就是雕塑家搭建的支架,叫做建模。这部分内容由CPU和GPU共同完成(CPU为主、GPU为辅)。在这个步骤,计算机会将整个3D模型完全建立起来,并根据计算能力和计算需求,使用一定数量的三角形和框线来搭建一个“框线世界”。并将这些框线内容传递给GPU的顶点处理单元。

第二步,顶点处理单元收到了由CPU传来的数据后,会根据终显示的图形需求,将图形由3D的模型转换成屏幕可以直接显示的2D图形。顶点处理单元输入原始3D模型的每一个顶点,再根据实际情况处理并输出2D画面的顶点。在这个过程中,那些被遮挡起来的、在屏幕上无法显示的场景,往往会根据Z轴也就是画面深度的数据,予以剔除或保留(如果是透明图形的话)。这个步骤被称作“平面化”。

第三步,计算机会利用各种手段,尽可能地让这个模型在场景中看起来足够真实。比如为物体加上阴影,对表面进行贴图处理,给予各种各样的光照效果等等。此阶段需要大量的像素和纹理操作,基本上全部交由GPU的像素处理引擎和纹理处理单元完成。我们称此步骤为“像素化”。

处理好的图像再经过一些后端处理(Render Back-Ends,游戏中常见的景深、动态模糊、色调映射、边缘侦测、平滑和锐化处理都是由后端处理来完成),就能转化为我们在屏幕上看到的内容。需要说明的是,我们在本文对图形处理的描述非常简单,但实际情况远比上文描述的内容更为复杂。但总的来说,上述三个步骤:建模、平面化和像素化,覆盖了计算机处理图形的大部分重要内容。

为什么看起来很假?—模型决定结果

下面我们来看看电影制作人是如何处理图像的,和传统游戏有何不同?当然,我们这里的考察仅仅针对图像处理而言,不考虑物理处理、碰撞等问题。

在电影中,建模是整个图形的根本。没有好的、逼近真实的模型,就不会有接下来足够拟真的场景出现。就像雕塑家一样,如果不能在一开始就确定雕塑的大致姿势,终结果肯定不够令人满意。因此电影制作人员在强悍性能的支撑下,可以对电影中的各种目标、物体使用尽可能精细的模型。比如树木、草叶这种平凡无奇的“配角”动用几万甚至几十万个三角形的情况都非常常见。而对那些关乎电影主题的主角人物而言,采用几十万个三角形的精细建模很常见。一些表现力夸张的场景甚至需要十亿级别的三角形才能做到精细、逼真的建模。


《阿凡达》电影带来的震撼还未远去,高达几十亿三角形的模型带来的场景依旧让人难忘。

采用更多三角形处理的好处很明显,但首先你要记住一点:电脑不会画曲线。你在屏幕中看到的所有曲线,如果将其放大,都终会成为一节一节以整数坐标为端点的线段。在这种情况下,电脑只能依靠足够小的显示单位(比如一个像素)和更多的图形(比如三角形)数量来逼近终结果。

我们假设现在要画一段曲线,如果你对精度要求不高,电脑会先在曲线上以一定的规律取出多个顶点,然后把它们用直线连接起来—取出的点越多,终绘制成的曲线就越平滑;如果目标是二维的圆,电脑会以圆心为三角形顶点,用全等等腰三角形来描述圆,同样,三角形越多,就越接近圆本身,当三角形无穷多的时候,就近似认为和目标圆相等。同理,如果目标是三维的圆球,电脑终也会将光滑的圆球表面分成无数个小三角形,小三角形数量越多,越接近目标圆球,也就越光滑。

让我们回到电影制作的建模过程中来,电影制作可以几乎肆无忌惮地使用超级计算机庞大的计算资源来用尽可能多的三角形表达图形。随之而来的代价是:这种精细无比的计算难以达到流畅的帧数。对一个可能只有三分钟的电影场景而言,计算机往往需要几天甚至一周持续不停地运算,才能得到终想要的画面。

说到这里,我们已经基本了解为什么电脑游戏不可能和电影相提并论了—就算电脑能使用诸如光线追踪等高级算法,但在第一步建模的过程中,按照目前电脑的性能根本不可能实现几十亿顶点的精细模型。当然,电影制作人员也会使用诸如曲面细分等特色技术,但无论如何,电脑的建模能力和制作电影使用的巨型计算机还是差得太远太远,这不是百分之几百的差别,而是两个甚至三个数量级的差别。

《魔兽争霸》中著名英雄娜迦女妖法斯琪的脸,只有寥寥几个三角形组成。另外,特别注意后面酒馆的屋顶,完全是用整张贴图完成,屋顶瓦楞并无任何凸起、凹陷,完全是平面。还有正在燃烟的烟囱,顶部并没有凹陷的烟道,也仅仅只是一张贴图而已。

由于建模能力不足,在目前的电脑游戏中,能够在主角的头部上使用上百个三角形已经算非常细腻的模型了。一些稍微古老的游戏如《魔兽争霸》,甚至只会在主角的脸上使用三到五个三角形。基于这样的原因,我们就不会对游戏中娜迦海妖法斯琪如同棱锥一样的脸感到诧异了。就算目前号称画质强的《Crysis》,战斗中人物依旧显得不是那么精细,总有一些地方由于三角形使用较少而显得不太和谐。其它诸如《使命召唤》、《魔兽世界》等游戏,“方脑袋”、三角眼以及“多边形胳膊”则更是家常便饭。不难看出,由于建模不足,大大影响了游戏画质的表现。

传统GPU应用的困局—几何性能停滞不前

看到这里,有读者可能会说,个人电脑也可以增加建模的精细程度,使用更多的三角形来完成图形构建,依然可以实现精细的画面—真的可以吗?

前面我们提到,目前3D游戏中的场景建模,依旧主要依靠CPU计算完成,GPU只是起辅助作用。但当下主流CPU计算能力难以承担大规模的三角形计算,即使多核心CPU发展如此迅速,但短期内我们不可能看到一个场景模型使用几千万个三角形的情况出现。不仅如此,PCI-E总线的限制,也令CPU难以迅速和GPU交换海量的图形数据。因此,游戏开发商们只有使用比较简单的几何结构来表达创意和想法。

正因为此,技术人员将更多的目光转向了GPU。如果赋予GPU足够的自由度,在程序员的控制下让显卡能够自由为图形添加几何元素,比如框线、三角形等,这样就能在一定程度上“投机取巧”,增加模型的细腻程度,让后的图形看起来更为真实、更为细腻。


从GeForce FX5800开始,到GeForce 6800 Ultra以及后期的
GeForce 8800 Ultra,显卡的几何性能都有一定增长,但并不显著。

不过这种想法在长时间内都只是镜花水月。因为一直以来, 无论是玩家、厂商以及游戏制作公司,都极为重视画面的光影效果,比如HDR、柔和阴影、次表面散射等和像素计算相关的特效被反复被强调,这些效果的确对画面的改善更为直接,为游戏画面带来了更为精细的光影效果、更为精确的色彩过渡以及更完美的纹理表现。相对而言,GPU的几何性能就不那么受人重视。再加上过去建模等工作主要依赖于CPU,因此GPU只设计了一个前端控制电路模块来进行辅助几何性能的计算,几何性能发展非常滞后。这为游戏带来了另一方面的软肋—模型不够精细。这种不够精细的模型对画质的负面影响甚至已经超过了大幅度增强的像素处理能力带来的正面影响,毕竟没有人愿意看到精美的人物皮肤纹理下面是多边形棱角明显的头颅。

另一方面,即使有人意识到了这个问题想加以改善也找不到合适、通用的API接口进行相关设计。在DirectX 10 API之前,几乎所有的DirectX API都没有对GPU几何运算进行优化。一些厂商虽然有自己的解决方案,但鉴于技术能力和应用范围的问题,终究没有推广开来。

有数据表明,从GeForce FX 5800到GeForce GTX 285,GPU的几何性能增长只有三倍左右。相比之下,后者的像素处理能力几乎是前者的150倍!另一些测试数据表明,GeForce GTX 280相比GeForce 8800 GTX,几何性能几乎没有增长。而之前GeForce 7900 GTX到GeForce 8800GTX,几何性能有增长,但也不足够显著。


DirectX 10的几何引擎第一次带来了真正意义上的通用的几何处理规范

这一局面终于在DirectX 10 API上得到了改善。在DirectX 10发布后,其新加入的几何引擎就引起了众多厂商和玩家的注意。这说明API已经为单独的几何处理留出了空间。DirectX 10内含的几何引擎强大之处在于,它能够根据顶点处理单元的数据以及其它控制数据,自主地生成大量图元。几何引擎可以独立生成五种类型的图元:点、线、三角形、带邻接点的线、带邻接点的三角形。这五种类型的图元完全可以满足计算机进一步优化图形并增加新细节的需求。打个比方来说,CPU和顶点处理单元“造”出了一棵“原始树”,几何引擎就能根据这颗“原始树”,通过微调数据,自主生成一片“森林”。当你去考察这片“森林”中的树木时,你会发现这些树木甚至都存在着微小的差异。只要计算足够精细,几何引擎完全可以让所有的树木都不一样。

这样的结果就非常激动人心了。我们知道,好莱坞电影之所以震撼,是因为在原始建模的过程中就采用了足够庞大、极为精细的模型。在3D游戏里面,虽然我们尚不能采用如此“暴力”的计算方法,但几何引擎以及几何处理应用的出现已经为3D游戏打开了一个通向更细腻画面的捷径—GPU可以“半自主”生成批量的重复单元和物体,如果应用得当,将会极大增强画质,并显著改善场景的真实程度。解决方法已经有了,但GPU却尚未准备好。从实际的性能来看,GeForce 8800 GTX、Radeon HD 2900 XT级别的显卡仍然采用过去单一前端模块的设计来进行几何计算,几何处理能力极为有限,在面对重负载的几何处理时性能下降非常明显。因此在DirectX 10时代,几何处理尚未大规模走上前台。

几何性能时代的到来—曲面细分带来全新应用

DirectX 10 API已经带给我们一个明确的信息—几何引擎将在未来扮演更加重要的角色。在新的DirectX 11 API中,除了继续加强像素性能外,更进一步强调了几何性能,引入了曲面细分技术,开启了GPU图形和游戏发展的新篇章。

在DirectX 10时代,由于显卡本身计算负载过重,因此对新加入的几何引擎支持很差。在DirectX 11中,这种现象得到了很大程度的改善。微软在DirectX 11的规范中明确了曲面细分技术的重要性,并要求GPU厂商必须针对此特性在显卡设计上做出相应的调整。因为曲面细分技术的引入,不仅带来了画质和图形效果的重大改善,还对GPU的几何性能提出了空前的要求。

有关曲面细分技术我们已经多次介绍过,在本文中我们可以用这样一个例子来形象地解释:如果你有一个篮球和一些边长为40mm的方形瓷砖,现在让你用方形砖块尽量紧贴篮球表面,并尽可能直接覆盖足够多的篮球表面积,后将篮球包裹起来。当你用方形砖块全部覆盖了篮球表面时(不需要关心砖块之间的结合方法),出现在你手中的是一个棱角非常明显的复杂棱台—它几乎失去了原有篮球的模样。这是因为方砖是平面,篮球是曲面,平面只能以切面形式和曲面上的一个点接触,除此之外平面所有的点都和球面不接触。


如果面积足够大的三角形不能表达画面,那么可以将它砸碎,
用小的三角形去填充画面。这就是曲面细分简单的含义。

那有没有什么方法可以让方砖尽可能近地无缝贴近球面呢?有,你可以把方砖砸碎,让它变成一个一个面积足够小的方砖小块。这样就有更多的方砖小块和篮球球面接触。当这些方砖小块体积越小的时候,后由他们包裹的篮球就越精细。如果这些方砖被细分为无穷多个点,成为砖粉,那肯定会完美覆盖球面。没错,你可以理解为:曲面细分就是将原有的大平面砸碎。然后用这些“碎片表面”进一步贴合原有曲面。砸得越碎,细分的表面越多,就越接近目标曲面!

下面,我们依然用上述方砖包裹篮球的例子来认识曲面细分的实际计算过程。首先,在确定物体后,GPU会使用外壳着色器,利用贝塞尔曲线将一系列目标三角形细分为曲面小块。这个步骤可以简单理解为用方形瓷砖包裹篮球形成棱台,电脑正在根据瓷砖和篮球的状态,确定需要把瓷砖砸成多大的小瓷砖。

其次,细分曲面会在每个目标图元的范围内生成新的顶点。在这一步骤中,如果程序需要更多的细节,则GPU会产生更多的小三角形,反之则产生较少的三角形,一切都由程序员自由掌握。这一步就相当于电脑抡起大锤,把大的瓷砖砸成小块。后,由域着色器评估每个经过细分曲面后的小三角形在产生新的控制点后生成所需的曲面,并自动进行法线平移、置换贴图等操作。后的步骤,电脑会自动把小瓷砖块贴在篮球表面,并交给用户。GPU在利用曲面细分经过一系列“砸瓷砖”之后,能够“自主”生成大量的细节图形,从而加强画面效果,终实现以较小的性能代价呈现更精美画面的目的。

曲面细分的用途相比自动生成图元而言更为明确,应用也更为广泛。我们已经在各种曲面细分的应用中看到诸如自动生成凹凸模拟、动物尖刺等物体表面细节,或者是用于水面效果、布料抖动、毛发模拟等运动效果。根据现有的曲面细分应用来看,增加物体细节和加强运动效果是曲面细分两大发展方向。其中增强形体细节是根据程序员的设定,在几何图形之间生成有规律的几何结构,在组合成平面后直接输出至像素处理单元,终得到凹凸感鲜明的画面效果;另一种是加强运动效果,它是在已经有的少量数据或者目标的基础上,通过曲面细分技术复制目标,并给予复制出来的单位一定的自由度,终形成如浓密的头发、抖动的布料等看起来非常真实的效果。

曲面细分和物理加速

曲面细分需要GPU强大的几何性能支持,才能顺利完成计算。在这幅著名的曲面细分演示DEMO中,主人公的头发飘扬,效果极为逼真。不过,如果你对物理加速有一定记忆的话,也可能记得在物理加速的演示中,毛发也是极为重要的一个环节。

那么曲面细分和物理加速谁演示的毛发更为真实呢?从原理上来说,曲面细分实际上只有少数的头发真正参与了物理运算,剩余的“毛发簇”是根据参与了物理计算的毛发的参数,在一定程度内优化仿真出来的。这样做大大降低了物理计算的难度,甚至CPU计算就可以完成。


一头飘扬的长发,实际上只有少数头发是真正拥有物理状态的,
其余的头发都是利用曲面细分在一定程度内“仿真”出来的。

但物理加速制作的毛发就与此不同了。它的每一根毛发都拥有独立的状态,都是独立的个体。因此物理加速制作的毛发每一根都是真实的。这样高强度的物理计算显然是CPU无法完成的,只有利用GPU加速。其它诸如水波纹、布料模拟等,都可以不使用物理加速,用曲面细分技术模拟出来。不过这并不意味着物理加速会被放弃,因为诸如破坏、爆炸、碰撞等效果,曲面细分技术目前还是无能为力的。

曲面细分带来了置换贴图的大规模应用

我们介绍了很多曲面细分的应用内容。但从终面向用户和使用者的角度来说,置换贴图才是隐藏在曲面细分之后的真正杀招。在曲面细分将整个目标体细分为更多的曲面后,置换贴图会根据程序员要求将贴图与顶点结合起来,形成非常有立体感的图像。为什么说置换贴图如此重要呢?因为传统的贴图依附于事先生成的表面,它只能改变像素的情况,不能对顶点进行操作。我们在之前的例子也看到了,比如房屋的瓦楞和烟囱,都只用一张平实的贴图表述,不会依据真正的顶点状态来形成结果。虽然有诸如时差映射贴图等充分体现形体表面凹凸的技术,但那些技术都不会对顶点进行操作和改变。


应用置换贴图后,整个物体的表面会更棱角分明更有层次。

置换贴图的特异之处在于,它能够根据需求,修改目标顶点,产生真正的阴影、反射和形变。因此,在借助曲面细分增加大量新的三角形和顶点之后,置换贴图将进一步使物体表面变得凹凸有致,真正成为终需要的、充满细节感的形象。举个很简单的例子,比如我们在游戏中用枪射击墙壁,墙上会留下弹痕,但那种弹痕是简单的平面贴图而已。如果利用了置换贴图,子弹撞击在墙壁上后,会真正改变墙壁的顶点状况,并根据新顶点生成全新的像素信息。当然,新生成的顶点也需要强大的几何性能来支持。GPU只有进一步加强几何性能,我们才能看到大规模置换贴图带来的更精细逼真的画质。

未来:更强大的几何性能,更精细的画面质量

在本文结束之际,我们再来回顾一下GPU的几何性能发展历程。一、3D建模的精细程度决定了物体和人物细节的精细程度,因此电影画面和游戏画面可谓天渊之别。二、现阶段,基于PC上的游戏制作不可能像电影制作那样动辄生成上亿的三角形模型来增加画面的精细度,因此在DirectX 10中引入了几何运算引擎,GPU可以“半自主”生成批量的重复单元和物体用以改善细节精细度。三、在DirectX 11中引入了曲面细分技术,相比DirectX 10的自动生成图元而言,曲面细分的应用更为明确、精确和广泛。四、过去GPU的几何性能非常差,无法适应几何计算的需求。如今以GeForce GTX 480为代表的新一代显卡大幅提升了几何性能,基本能够满足当下的几何计算需求。

从几何性能以及相关技术应用的角度来看,在没有精细建模的支持下,GPU可以凭借“投机取巧”的方法来得到更强悍的画质和更精细的模型。从这个意义来说,曲面细分和3D建模在改善画面的精细度方面有异曲同工之妙。

曲面细分以及其它相关几何处理技术的应用,为GPU的进一步发展带来了更广阔的空间。在像素处理性能迅速增长的几年后,GPU的几何性能也终于迎来了爆发的日子。从目前的发展情况来看,真正拥有强大几何性能的GPU,才会在未来的游戏应用中更加游刃有余。作为“像素后时代”的新应用,几何性能已经成为衡量GPU性能的重要指标。在产品方面,NVIDIA走在了前面,新发布的GeForce GTX 480大大加强了几何性能。相比上一代高端GeForce GTX285,它的几何性能提升了8倍,相比竞争对手的同级别产品亦有非常明显的几何性能优势,这从本刊四月下对GeForce GTX 480的评测中可以清楚看到,已经能够基本满足目前绝大部分场景下的几何运算的需求。

毫无疑问,在未来无论是GPU还是API规范,必将进一步加重几何处理的应用,生产并制造拥有强大几何处理能力的产品就成为显卡厂商的必然选择。作为消费者来说,在关注显卡3D性能的同时,也将进一步体验到几何处理带来的完美效果。更逼真,谁不喜欢呢?

分享到:

用户评论

用户名:

密码: