在大量3D游戏大作中,虽然我们可以看到许多华丽的场景和特效,但这些场景和特效都是预先设计好的,只是由大量贴图组成的,游戏没有互动性。爆炸不会引起烟尘和碎片、当风吹过头发,头发并不会随风飘动。例如在《使命召唤4》中,如果一颗炸弹在你周围爆炸,可你不会被爆炸气浪推开,周围只会呈现一些烟雾。这仅仅表示这里曾经发生过爆炸,碎屑、纷飞的杂物都不会出现。
在《蝙蝠侠:阿卡姆疯人院》游戏中,当主角进行打斗、
碰到地上的纸片时,纸片会根据受力发生位移
之所以出现这种情况,是因为这类3D游戏里面的物理效果都是事先设计好的,碰撞、倒地等物理效果并不会遵循客观事实。例如在足球类游戏中,球员之间的冲撞永远都只有那几个动作。一旦发生身体接触和冲撞,球员将会是很生硬地摔倒在地,毫无物理处理可言。这说明,只有华丽的游戏画面是远远不够的,我们需要更为真实的物理效果。于是游戏开发人员开始在游戏中设计更多的、接近真实环境的物理效果,PhysX物理加速就是在这样的背景下出现的。
在PhysX物理加速游戏中,所有物理效果都会被真实地展现出来。人倒地的姿势会通过三维坐标计算出来,人在摔倒过程中,会根据受力的大小,做出符合真实情况的倒地动作。此外,其它所有物理效果都将遵循重力、惯性和阻力等客观规律。例如爆炸会根据实际情况产生碎片、布料会随风飘动、当利用枪械射击布料时,布料会被击穿。
要全面了解PhysX物理加速,我们就必须从PPU(Physics Processing Unit,物理运算处理器,早由AGEIA提出,也是AGEIA开发了PhysX物理引擎)说起,来看看它和GPU和CPU的关系。众所周知,GPU的作用是利用高效的并行处理生成实时3D渲染、光照效果和3D转换,即负责
3D图像和画面的生成;CPU在游戏中的主要作用是负责AI计算,也会负责生成场景、模型等其它程序的计算。不过和GPU不同的是,CPU并没有特别为游戏做优化,因此在遇到多线程计算时,会比较吃力;PPU就单独负责处理游戏中除AI计算、3D渲染之外的物理效果。
在《镜之边缘》中,玻璃的破碎完全遵循客观事实
可问题是,过去用户如果要享受PhysX物理加速,就必须再单独购买一张价格不菲的物理加速卡(物理加速卡只负责物理处理,不负责3D计算)。这对大部分用户来说是一件很难接受的事情——价格贵不说,还占空间,难道PhysX物理加速和GPU就不能合二为一吗?在收购AGEIA、经过一段时间研发以后,NVIDIA让这种设想成为了现实。
借助CUDA,NVIDIA重新编写了PhysX物理加速程序,将PhysX物理加速引擎移植到了GPU上。通过重新编写程序,NVIDIA GPU中的线程调度器(Thread Scheduler)将承担原本控制引擎(Control Engine)的工作,即负责具体任务的指派工作;PC(Processing Core,处理核心)将承担原本由VPE(Vector Processing Engine,矢量处理引擎)的工作,即负责物理处理的运算工作;在进行了物理处理运算后,再由DME(Data Movement Engine,数据移动引擎)来负责输出;而后,GPU再通过HAL(Hardware Abstraction Layer,硬件抽象层)来实现Cloth Simulation(布料模拟)、Hair Simulation(毛发模拟)、Universal Collision Detection(碰撞侦测)和Fluid
Dynamics(流体动力学)等物理技术。
在《压制橄榄球》中,球员之间的冲撞都不是事先模拟好的,
而是根据球员之间的受力大小、受力部位等计算出来的
在游戏中,要进行物理处理就需要非常强大的整数和浮点运算能力。更重要的是,物理处理具有高度的并行性,需要进行多线程计算,演算是非常复杂的,需要耗费很多资源。但CPU在游戏中的并行处理能力非常有限。而GPU的多线程、出色的并行计算能力正适合处理物理效果。这也从原理上论证了将PhysX物理加速引擎移植到NVIDIA GPU上的可行性。
在《雪域危机:沉睡之谜》中,水的流淌轨迹非常真实
不难看出,负责物理计算的主要是处理核心,即NVIDIA GPU的物理加速能力主要取决于处理核心的数量。但在大部分情况下,物理加速和3D计算是同时存在的,3D计算也主要依赖处理核心。那么需要同时进行物理处理和3D渲染工作时,GPU内部是如何来协调分配处理核心的数量呢?是分离式结构吗?即固定一定数量的处理核心去运算物理特效,固定一定数量的处理核心去计算3D特效。事实上,在遇到上述情况时,NVIDIA GPU内部的处理核心数量的分配是比较灵活的。它遵循的是自动分配、动态调节的原则,即根据实际情况来选择应该使用多少数量的处理核心去进行什么工作。不过总的来说,3D计算会有优先级,处理核心会优先进行3D计算的工作。因此,性能越强的
NVIDIA显卡的物理加速能力越强,因为处理核心数量会更多,可以很好地平衡3D计算和物理加速的矛盾。