物理运算让轻裙飞扬——物理引擎的应用与未来

技术空间

在T型台上,时装模特在强劲的音乐声中挨个出场,个个穿得光鲜靓丽,裙摆随着模特走路时腿的动作而摆动、旋转,布料与腿触碰然后抖动,让我们可以明显感觉到这条是丝做的,那条是皮做的。通过模特的各种姿态,作为观众的我们,都能明显地感觉到衣服的质地。这种极度真实、让人心潮澎湃的效果就是我们所说的“物理效果”。

1.物理引擎的由来

可能有些朋友会觉得无法理解——以前在游戏中并没有现在所说的这种“物理效果”,还不是一样可以让人看到,该运动的东西还是在动啊,并非是很死板地在那里一动不动。要说清楚这个问题,其实也很简单,在以往的游戏中,比如我们打坏一个油桶,它就会按照游戏设计者预先设计好的动作来运动。

自从游戏中加入了物理引擎后就不一样了,它完全突破了以往按预定脚本执行的方式,而是要求在3D游戏中的那些物体都要遵循现实中的运动方式来进行。这样的好处就是如果你的显卡和处理器足够强大,它就能模拟真实世界中各种物体运动的规律来运动。不过所谓的“物理引擎”并不是指那些实实在在的物理效果,它和我们此前理解的3D游戏引擎类似,是给予游戏开发者的一个平台,允许游戏开发人员只用几行代码就能在游戏中加入烟雾等效果,非常方便。

举个简单的例子,在几年前还没有物理引擎的时候,在那种FPS游戏中,一位士兵往一个油桶旁边扔一个手雷,手雷爆炸,引起了油桶的爆炸。不过这个过程显得相当死板,不管是把手雷丢在油桶的左边还是右边,油桶都只会按照预先设计的样子爆炸,不会有区别。如果有了物理引擎,手雷扔在油桶的左边或右边都会产生不同的爆炸效果,石块会朝不同的角度飞起来,烟雾也会慢慢冒起来……通过物理引擎,实现这些物体之间相互影响的效果是相当简单的。这是物理计算最初给我们的印象,虽然这样的设计有点意思,但是这些爆炸场景看多了以后,总让人感觉物理引擎的效果也就仅局限于那些爆炸后石头飞起来的场景,感觉有点单一。其实,物理引擎在游戏中还能做很多事。

32-d14-2.jpg
《MStar》是一款采用了虚幻引擎3、以舞蹈为主题的游戏,它很好地表现了布料与人各个关节活动时,做物理运动的感觉

2.物理引擎能做什么?

前段时间,当NVIDIA宣布正式收购Ageia及该公司的PhysX物理软硬件组件后,所有人都在期待,期待着NVIDIA会推出新的有关物理运算的东西出来。果不其然,最近当NVIDIA发布Forceware 177.79驱动后,意味着GeForce 8/9和GT200系列的GPU都支持PhysX引擎。这是因为NVIDIA将PhysX引擎集成到CUDA架构的物理运算中。这样,显卡就能自动进行物理加速运算。当然,PhysX在游戏上的运用仅仅是它众多运用的一方面,在整个CUDA通用运算领域上,都会有它的身影,比如计算天体间在相互引力的作用下,各自的运动轨迹等。

32-d14-3.jpg
NVIDIA的PhysX引擎

PhysX在目前在游戏中有粒子、流体、软体、关节和布料五大应用。所谓的粒子运动,主要是指大规模的物理运动,比如我们此前提到过的用手雷将油桶引爆后所形成的碎石头、冲击波造成的尘土飞扬等效果,这些效果如果都让传统的CPU来进行运算的话,无疑是相当困难的。

32-d14-4.jpg
物理计算在游戏中的五大物理效果

流体运动更多的则是展现水从水管内喷出,水冲击到物体后,物体的表现,比如木箱被冲翻。而那些被冲翻的木箱翻倒的方向每次都各不相同,又比如在一个NVIDIA Logo形状的玻璃容器中,我们用鼠标来控制玻璃容器的位置,让容器里的液体流动,这种流动的效果和现实中的效果已经相当接近了。

32-d14-5.jpg
粒子效果展示

在NVIDIA展示的演示画面中,还有一个则是“食人花”的场景。该场景展示的是一朵巨大的食人花(也可以说是花形状的怪兽),当它被人抓住以后,玩家用激光去攻击它,然后这朵“花”就会作出反应。食人花软软的身躯扭动起来非常像我们现实生活中看到的鼻涕虫之类的虫在蠕动一样,感觉相当恶心。

32-d14-6.jpg
流体效果展示

至于在关节和布料方面的应用,我们在文章的开始处已经提到了,美女们在T型台上用夸张的姿态行走,虽然动作夸张,却丝毫没有虚假的成分在里面,而身上的裙子也跟着关节的移动而跟着摆动。这在传统的3D游戏里是很难做到的。

32-d14-7.jpg
软体效果展示
32-d14-8.jpg
加入了物理效果的游戏和传统游戏的区别

综上所述,所谓物理效果,都是在游戏中模仿现实中真实物理世界的运动方式,在游戏中,我们甚至能感受到箱子、石头、布料以及那些恶心的无脊椎动物的触感。现在的游戏之所以能实现如此多的动态效果,都要归功于物理运算。

3.物理运算用GPU还是CPU?

通过前面实例的讲解,相信大家已经了解到,物理引擎以及物理运算能为我们的游戏添加不少乐趣。而这些让游戏变得现实的东西都是由GPU来运算的。从理论上说,做物理运算需要大量的并行运算,熟悉GPU的人都知道,并行运算是GPU的强项,因此让GPU来做这种运算也显得合理。当然,理论归理论,它也并不是绝对的,在高分辨率特效全开的游戏情况下,GPU大部分时候都是在全速工作,这时候再让GPU来做物理运算的话,游戏在流畅性上肯定会受影响。不过我们也别忘了,现在物理引擎也并非NVIDIA一家在做,Intel和AMD也在努力。

在NVIDIA收购Ageia前,Intel就收购了Havok,让Havok FX引擎的主导权掌握在自己手里,照现在的情况来看,AMD也支持Havok FX。也就是说,在日后,Intel和AMD很可能在自己的CPU中加入对Havok FX引擎的支持。这样当GPU感到工作吃力的时候,CPU也很可能会出来协助GPU工作,使游戏流畅度在不受影响的情况下,表现出更好的物理效果。

4.写在最后

从游戏发展的轨迹来看,大家都在寻求一种“现实”的效果,从1994年Doom Ⅱ那种粗糙的3D效果到2007年的Crysis,游戏的3D效果和光影效果都有了长足的进步。如何让游戏表现出更真实的一面,摆在大家面前的有两条路。第一条就是增加特效,如DX8、DX9、DX10,这样的特效更多表现的是一种“静态”的效果。而另一条路则是增加如爆炸、布料摆动、关节运动等“动态”方面的真实效果。

从现在来看,不管是NVIDIA的PhysX还是Intel的Havok FX,它们的目标都是相同的,都是为了让游戏看起来更加真实。而“物理运算”也完成了从两年前的“出现”到现在“实际应用”的进化。相信在以后的游戏中,物理运算在游戏中的应用将无处不在。至于物理运算该GPU还是CPU来完成,其实这个问题并无太多争论的必要。因为此前大家认为Intel非常强调让CPU来进行物理运算,所以就认为Intel和NVIDIA存在一种是让CPU还是GPU来完成物理运算的“标准制定”争夺关系。其实这种想法也不完全正确,毕竟Intel以后也要推出代号为Larrabee的独立显卡,让这块多核的独立显卡参与到物理运算中也是完全有可能的。也就是说,在未来,不管是显卡还是处理器,都会共同担当起物理计算的重任,唯一需要解决的可能就是哪个多做一点和如何分工的问题。

32-d14-9.jpg
游戏发展的轨迹——日渐趋于真实