激情碰撞物理加速技术解析(下)

技术空间

通过GPU的硬件模拟,游戏的物理效果可以在很多方面得到长足的进步,比如碎渣四溅的爆炸效果。爆炸的碎片、烟雾等在游戏中都是以最基本的粒子形式进行运算的,碎片的掉落、烟雾的飘浮和逐渐散去的运算让CPU的负载极大,是现有游戏极难做好的一种效果,但借助GPU支持的物理引擎则可以轻松实现。

GPU让物理加速更为有效

1.GPU比CPU更高效

PhysX可以支持多种高级物理运算特效,那么究竟用什么载体去实施这些运算从而达到高效率呢?如果拿GTX280显卡和四核CPU对比,GTX280拥有240个运算单元,每个单元带有16KB高速缓存,可以大大节省运算时调用较慢的外部显存消耗的时间,在浮点能力上也大大超越CPU,有近十倍的优势。而且对于物理运算这类需要大量并行计算的项目,GTX280的G200核心支持冲突处理、重组排序、单指令多纹理,同时其标量架构以及其支持的高级线程化,也就是轻量的线程都能很好地适应非常密集的物理运算。所以据称在大部分物理运算项目,如流体特效、布料特效、人体柔性特效上的处理能力上GTX280都能提供领先四核CPU数倍以上的性能。

不仅如此,使用GPU还可以支持多GPU并行物理加速。当系统中存在两块或者多块显卡时,就能将图形加速和物理加速这两项工作分配到多个GPU上执行。由于图形渲染仍然是最高要求的部分,因此物理运算会交给性能相对较弱的产品。

2.通用计算扩大应用范围

支持物理加速是目前GPU发展的一大趋势,NVIDIA已经通过收购AGEIA,利用CUDA技术让GPU实现PhysX物理加速。随着GPU越来越强大,在部分计算上已经超越了通用的CPU,因此NVIDIA推出CUDA,让显卡可以用于图像计算以外的领域。借助CUDA技术,开发人员能够使用C语言来为CUDA架构编写程序,进行极其复杂的密集型计算,应用到诸如物理加速、媒体处理,甚至石油与天然气的开发、金融风险管理、产品设计、科学研究等领域。简单说就是利用GPU强大的运算能力代替CPU进行科学运算。

而在Havok方面,在GDC2009上展出的Havok Cloth已融入AMD的ATI Stream技术。Havok Cloth是Havok中的一部分,主要特性包括基于物理的布料模拟、多线程与平台优化(包括PS3)、拉伸/阻尼/弯曲等布料行为属性、基于人物模型的布料创建工具等。由于OpenCL标准并不是某一家GPU专用的,所以从技术上讲,AMD和Havok开发的技术在NVIDIA GeForce显卡上应该也能执行,只是不知道与NVIDIA PhysX相比效率如何。

19-d19-1-7.jpg
Havok Cloth在人物上的效果

GPU物理加速的真实效果

通过GPU的硬件模拟,还可设计结构复杂的各种几何模型,以完成更加逼真的物理运动和交互动作。逼真细腻的河水、岩浆等流体运动模拟也能实现。虽然目前游戏的水面渲染的效果已经非常出色,但是在游戏中还极少看到流动的水与物体发生互动,流体运动的运算难度很高,而GPU支持的物理引擎则能很好支持流体运动与物体发生互动的计算。衣物、旗帜等软性物体因受外界各种影响做出不同的撕裂或变形。特别是钢性物体之间相互碰撞的运动计算,在一定力度之下形成拟真的成千上万个碎片运动,CPU仅能支持少量钢体的互动(比如赛车的碰撞),而大量的钢体碰撞只有依靠硬件加速的物理引擎。

比如在《镜之边缘》游戏当中,PhysX加速的物理引擎在整个游戏中为真实感提供了至关重要的作用,包括随风摇摆、武器伤害及运动效果等。游戏中的横幅、旗帜可以被子弹击穿撕裂、随风摇曳,地面上的薄雾会随着玩家脚步散开,爆炸后会让空气中弥漫着烟雾和碎片,子弹在建筑和环境物体上的损伤效果也得到了增强。

19-d19-1-2.jpg
《镜之边缘》的水蒸气喷射效果
19-d19-1-3.jpg
《镜之边缘》的玻璃粉碎瞬间

物理加速的软硬件支持

到目前为止,已经有数百款游戏支持PhysX,比如《兄弟连》、《镜之边缘》、《雪域危机》、《Mstar》等。UE3、Gamebryo、Diesel、Vision3D等几个游戏引擎全部支持PhysX。在开发工具上Softimage、XSI、3DSMAX、Maya也都支持PhysX。此外三大游戏主机也都加入了对PhysX的支持。而且为了给游戏开发商提供便利,PhysX有完整的开发包来帮助开发,该软件不但包含了业界先进的物理模拟引擎,而且它还可以作为现在主流的3D建模开发工具以及插件运行,开发人员只要通过拖放和点击就能完成对目标施加物理模拟效果,这对于任何专业的开发人员都不是什么难事。在未来对于PhysX的支持可以说会更加广泛。

目前所有GeForce 8、GeForce9、GTX200系列的NVIDIA显卡,且显存达到256MB的产品都可以支持PhysX物理加速。而且PhysX物理运算支持多GPU协同计算,也就是说支持SLI。SLI的工作可以分为两种模式,直接打开SLI模式,这时候PhysX控制面板不会出现物理运算选择显卡的窗口,两款显卡会基本平分物理运算的负载。这种模式比较适合用户拥有两款相同的中、高端显卡。如果用户希望有一块显卡专门进行物理运算,而另一块显卡全部运行图形渲染,那么在为显卡安装好驱动程序之后不要开启SLI模式,这时候PhysX控制面板就会弹出一个对话框让用户选择专门负责物理运算的显卡。这种模式比较适合用户拥有两块不同的显卡,一块中高端,而另一块则相对低端。但是从测试来看,主板整合显卡是无法应付大量物理运算的,用户至少保证较低端显卡应该是9500GT或者更高级别的显卡,而在SLI模式下,物理加速的兼容性目前仍要差一些。

19-d19-1-4.jpg
GPU SLI物理加速示意图

小结

游戏发展已经进入了崭新的时代,现在的高端GPU已经能在很高的分辨率下运行主流的高负载3D游戏,物理运算的加入不仅进一步提高了游戏的真实感,还能释放目前在游戏中稀缺的CPU资源,让CPU更好地协调整个系统并去做更有意义的事情,例如人物AI、协调运算甚至是天气变化等,这些都能够让游戏拥有一个全新的体验。但与此同时物理加速也再次将游戏画面速度拉慢,这也是新技术融入导致GPU运算的新负载,所以物理加速的加入将再次推动图形产业的新发展。

延伸阅读:让PhysX运行在A卡上

其实使用PhysX物理加速的一部分游戏也是可以运行在AMD显卡上的,这里我们就用《虚幻锦标赛3》为例看看如何破解PhysX的物理加速。

步骤1:首先安装《虚幻锦标赛3》,然后安装Patch1.3补丁。由于光盘版的《虚幻锦标赛3》已经包含旧的PhysX v2.7.4驱动程序,它只支持AGEIA PhysX物理卡硬件加速和CPU软件加速,我们在下面的工作中要将其替换。接着运行一遍游戏,以生成用户配置文件。下面安装物理包的安装文件UT3_PhysXModPack.msi(这个软件可以从NVIDIA网站http://www.nvidia.com/content/forcewithin/us/download.asp下载,这个网址包括NVIDIA已发布的三个物理加速大礼包)。

步骤2:物理包安装完毕后进入游戏主菜单→Instant Action→Death Match界面,可以看到地图列表中多出了一个Heat Ray PhysX地图。而在Capture The Flag界面可以看到另外的LightHouse PhysX和Tornado PhysX两个物理地图,

步骤3:下载最新的Forceware驱动程序,将其解压,找到其中的nvcuda.dl_文件,它负责PhysX和GPU的沟通。因为nvcuda.dl_仍处于压缩状态,在DOS命令中输入“expand nvcuda.dl_ nvcuda.dll”,将其还原为nvcuda.dll文件。

步骤4:安装Forceware驱动中附带的PhysX驱动程序。此时在NVIDIA PhysX驱动程序控制面板中会显示未安装NVIDIA PhysX GPU,硬件加速信息也显示为“No Acceleration”。但这并不影响之后的破解使用。

步骤5:拷贝“nvcuda.dll”到“C:\WINDOWS\system32”和“C:\Program Files\Unreal Tournament3\Binaries”中。然后在“C:\WINDOWS\system32”中找到另外一个主文件PhysXLoader.dll,将其拷贝到“C:\Program Files\Unreal Tournament 3\Binaries\PhysXLocal”,取代老版本的同名文件。

步骤6:在“C:\Program Files\AGEIA Technologies\demos”目录,拷贝“nxcooking.dll”和“nxcharacter.dll”到“C:\Program Files\Unreal Tournament 3\Binaries”当中,取代老版本的同名文件。最后在“C:\Program Files\AGEIA Technologies\Vx.x.x(为版本号)”目录中将“PhysXCore.dll”文件拷贝到“C:\Program Files\Unreal Tournament 3\Binaries”中取代同名文件。

至此,破解完成,AMD显卡在这些物理地图中也可以取得不错的加速效果,完全可以流畅游戏。但和NVIDIA的原生效果相比平均速度还是要低一些,CPU占用率也更高一些,而且这种方法也很可能会被NVIDIA屏蔽,所以我们仍非常希望AMD赶快正式推出自己的物理加速驱动。