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

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

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

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

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只有进一步加强几何性能,我们才能看到大规模置换贴图带来的更精细逼真的画质。

分享到:

用户评论

用户名:

密码: