激情碰撞:物理加速技术解析(上)
技术空间
电子游戏的出现,为人们的娱乐创造了一个新的虚拟世界,在最被人关注的图形技术方面,其历程也从早期的黑白屏幕,由几百像素组成的简单图像,发展到现在的3D时代,每一帧图像中包含上千万个多边形。图形技术的飞速发展为玩家带来最真实的游戏体验,创造了一个真实的虚拟世界。但除了图形技术,游戏的真实性还离不开另外一个要素:模拟真实世界的物理反应。
游戏需要物理引擎
1.游戏脚本化
出色的画面只是游戏大作的一个方面,仅仅有它是不够的,还必须增强游戏的互动性,让玩家觉得游戏中物体和物体之间的交互反应是符合现实世界的物理规律的,才能进一步增强游戏的真实感。在早期的游戏中,物理运算最直观的表达就是“有障碍过不去,离开地面就会下陷”。后来随着3D游戏的推出,项目化集成的游戏引擎的出现使得物理运算进一步发展。此时,碰撞探测是物理运算的核心部分,它可以计算游戏中各物体的物理边缘。
当两个物体撞在一起的时候,探测技术可以防止它们相互穿透,换句话说,就是确保了玩家遇到墙壁时不会穿墙而过,因为碰撞探测会根据玩家和墙之间的特性确定两者的位置和相互的作用关系。这是物理引擎的最基本功能。在这种物理运算的基础上,发展出了脚本化的物理引擎。所谓脚本化,就是在游戏设计阶段就已经按照游戏剧本定义了什么地方可以被破坏,什么物体可以受力运动。比如,坦克压不毁栅栏,只能从路上走;逃生打不破玻璃,只能走大门等。

_NOTES__《孤岛危机》的物理运算使得四核CPU也十分吃力
这种初级的物理引擎不仅在物体行动上死板,而且各种物体之间的物理反应也是极不符合逻辑的。所以随着GPU的出现,随着图形技术的飞速发展,早期的物理引擎已经跟不上游戏的步伐。游戏开发者和玩家都需要更强大的物理引擎,可以引入日常运动和复杂交互公式,它们可以计算3D场景中,物体与场景、物体与物体之间的运动交互和动力学特性。可以赋予物体具有质量、可以受到重力作用、可以和别的物体发生碰撞、可以因为压力而变形、可以有液体在表面上流动……
2.更高级的物理引擎
需求的发展必将推动技术的进步,高级的物理引擎已经出现,比如Half Life2使用的Havok物理引擎,就给了玩家们一个接近真实的物理世界。玩家在游戏中可以捡起几乎任何物体,然后把它抛向远处,物体会撞击到墙壁后反弹到地面,并溅起一阵灰尘。游戏中的“重力枪”就是其物理引擎的真实体现。这些接近真实的物理效果使得游戏不再是由贴图组成,几乎所有的物体都可移动,都遵守着游戏中的物理参数,组成了一个“真实”的游戏世界。
但以前这样的物理引擎都是由CPU来进行运算处理的,在类似Half Life2这样的大型3D游戏中,为了使游戏更加真实,都会有许多接近现实的物理计算,比如自由落体、物体运动、空气流动、力的反弹以及各种物体间碰撞等。在传统的处理方法中,都是CPU先运算,然后将处理后的物理参数再反馈到游戏之中,这种方式往往在遇到大规模的物理运算时就会出现运算瓶颈,这也就造成了游戏帧速明显下降。为了保证游戏的流畅运行,开发商甚至不得不删减物理效果,以求效果和资源占用的平衡(所以Half Life2之类的游戏中一般都是单个物体进行物理运动,而不会出现群体的同时互动),此时,CPU就限制了游戏中物理效果的进一步提升。
“真实性”的改变
1.物理加速卡横空出世
于是像当初GPU的出现一样,专用的物理加速卡PPU(Physics Processing Unit,物理运算处理器)出现了。AGEIA最早在GDC2005上提出了PPU的概念,同时也展出了第一块物理加速卡。
PPU有着和GPU完全不同的内部架构,PhysX拥有软、固质体动力、泛用碰撞侦测、有限元素分析、流体动力、毛发模拟和布料模拟等技术特效。PPU的这些处理技术和当时的GPU是完全不同的两个概念,PPU的物理运算需要十分强大的整数及浮点运算能力,而GPU则是将性能重点放在了画面效果上,而不是PPU所强调的“真实性”。
在2006年的E3大展上,AGEIA公布了PhysX的PPU Demo,在第一个Demo场景中,约有4200个多边形石块从一个山坡上滚下来,在运动的过程中,每块石头都以不同的物理条件自由下落。石头会因为高度、速度、重力及撞击而改变运动规则,它创造的完全是一个“真实”的随机客观世界,而不再是每个物体的移动都是按照预先规划好的路线进行运动。AGEIA称,当时的CPU在游戏中可以处理1000个左右的可自由移动的多边形物体,而PPU可以达到32000个,如果驱动程序升级改进以后,可以达到40000~50000个。理运算中的重要
2.收购,软件替代硬件
但事实状况并未能使其如愿,在2008年2月NVIDIA收购了AGEIA,并宣布将在今后的显卡中加入对PhysX的支持,而单独的物理卡将不会有后续版本,以后PhysX技术将会整合到CUDA之中,通过驱动支持GeForce 8、9系列GPU来承担物理引擎的运作。
当然,AGEIA被NVIDIA收购对于玩家来说是有百利而无一害的好事,消费者完全无需花费额外的资金购买独立的PPU物理加速卡,而只用现有的GPU显卡来加速物理效果就足够了,这对普及硬件物理加速技术也是最快捷的方式。
除了像PhysX这样硬件支持的物理引擎,还有依靠CPU支持,使用软件层面进行物理加速研究的公司——Havok,它的Havok 引擎在业内也是大名鼎鼎。为了抗衡NVIDIA 不断在GPU领域的扩张,Intel后来收购了Havok,它推出的最新Havok FX引擎号称可支持任何Shader Model 3.0显卡实现物理模拟加速功能。而且几乎是免费授权推广,由于Havok FX引擎的门槛低,不要求专用硬件支持,效果相当不错,在业界也获得了广泛的支持。


用GPU实现物理加速
其实,在NVIDIA和AMD看来,GPU架构是物理运算的最高效处理单元。因为PhysX是目前唯一大规模商用的硬件物理加速技术,所以我们这里都是以PhysX为例。在整体架构中,游戏设计者处在最上层,他们会在游戏设计中提出各种物理运算的要求,而PhysX则在SDK中提供了这些效果的实现方式,让游戏程序师可以轻松地实现这些效果,最后通过HAL“硬件提取层模块”连接各种可以支持的硬件。
PhysX加速技术可以支持的硬件很多,包括游戏机平台的处理器、x86架构的处理器以及停产的PPU,当然还有GPU。请注意这里的GPU不仅包括NVIDIA的GPU也包括AMD的GPU。原本在PhysX技术基础上发展起来的GPU物理加速不仅可以用于NVIDIA的产品也可以用于AMD的产品,只不过PhysX已经是NVIDIA旗下的公司,所以故意限制了对AMD GPU的支持。
而在AMD方面,由于AGEIA被NVIDIA收购,的确打乱了AMD的发展计划,目前还没有对应的驱动来实现广泛支持,只是放出了一些对应的物理加速技术Demo展示。不过在今年3月的GDC 2009上,AMD与Havok(已被Intel收购)联合展示了最新的GPU物理加速技术,他们采纳了通用计算标准OpenCL 1.0来实现物理加速。也就是说AMD今后将与Havok合作,通过使用OpenCL(开放式计算语言)来实现GPU的物理加速。

