PhysX,读音与
Physics相同,是一套由AGEIA(音译为“阿吉亚”或“奥加”)公司开发的物理运算引擎;也是世界三大物理运算引擎之一,另外两种是
Havok和
Bullet。PhysX
物理引擎的演示程序 的另外一种含义是指专门计算PhysX引擎的
物理加速卡。
基本概述
物理运算引擎的作用,简而言之,就是令
虚拟世界中的物体运动符合
真实世界的
物理定律,以使游戏更加富有真实感。
物理模拟计算需要非常强大的整数和浮点计算能力。更为重要的是,物理处理具有高度的
并行性,需要多线程计算,演算非常复杂,需要消耗很多资源。
PhysX可以由CPU计算,但其程序本身在设计上还可以调用独立的
浮点处理器(例如GPU和PPU)来计算,也正因为如此,它可以轻松完成像流体力学模拟那样的
大计算量的物理模拟计算。
PhysX物理引擎可以在包括
Windows,
Linux,Xbox360,Playstation3,
Mac,
Android等在内的全平台上运行。
AGEIA公司后来被
Nvidia收购,PhysX引擎也就跟随划入Nvidia旗下。
运算引擎
AGEIA时代的PhysX
PhysX物理运算引擎由五名年轻的技术人员开发,他们成立了AGEIA公司。PhysX最初称为NovodeX,后改名为PhysX。
AGEIA曾为《
虚幻竞技场3》开发几张加入PhysX引擎的MOD地图,物理效果非常出色。同时AGEIA也自己开发一个免费的名为《好战者》的
物理游戏。此后的一些PhysX游戏,也大都基于
虚幻3引擎。例如《
镜之边缘》、《
蝙蝠侠:阿卡姆疯人院》、《
一舞成名》等。可以说虚幻3引擎与PhysX物理引擎已经成了一对黄金搭档。
AGEIA提供一流的PhysX软件开发包AGEIA PhysX SDK,它不仅可以应用于次世代
PC游戏开发,还可应用在Console游戏开发中。AGEIA声称,PhysX 将会使设计师在开发游戏的过程中使用复杂的物理效果而不需要像以往那样耗费漫长的时间开发一套新的物理引擎,而且使用了物理引擎还会大量消耗CPU资源使一些配置较低的电脑无法流畅运行。AGEIA 更宣称 PhysX 执行物理运算的效率比CPU 与物理处理软件的组合高出 100 倍。
游戏设计语言 Dark Basic Pro 将会支持 PhysX,并允许其用户利用 PhysX 执行物理运算。
加速卡
由于PhysX物理引擎在设计上就并不适合用CPU去计算,因此AGEIA公司还为PhysX引擎设计了专门的运算硬件,PhysX
物理加速卡。PhysX物理加速卡的核心被称为PPU,即
物理处理器(Physics processing Unit)。
PhysX物理加速卡在运行游戏时不参与任何3D渲染,只计算PhysX引擎。按照AGEIA当初的设想,未来的
个人电脑将由CPU、GPU、PPU三大核心构成。其中CPU居中调度,GPU负责图形渲染,PPU则做物理计算。2006年,AGEIA公司发布了第一张PhysX
物理加速卡,称为PhysX 100 Series。
公版设计为搭载128MB
GDDR3显存,采用
PCI接口。生产PhysX 100 Series的包括
华硕和BFG,其中华硕的PhysX物理加速卡搭载了256MB GDDR3显存。
后来,AGEIA公司又开发了第二代PhysX物理加速卡,称为PhysX 200 Series,与第一代产品最大的不同在于采用了
PCI-E插槽,增强了
数据交换能力。
AGEIA公司被Nvidia收购后,PhysX
物理加速卡停止了开发。但有评测表明,PhysX 100 Series的PhysX物理计算能力,超过了Geforce
9600GT,至少与Geforce
9800GT相当。可见PhysX物理加速卡在设计思路上是非常成功的。
基于PhysX SDK 2.8.1及其以下版本开发的游戏都支持AGEIA PhysX物理加速卡。需要说明的是,部分基于PhysX SDK 2.8.1开发的游戏是被人为屏蔽物理加速卡而造成物理加速卡无法工作的,例如《
一舞成名》和《
蝙蝠侠:阿卡姆疯人院》,这种情况是可以通过修改驱动破解的。但是基于PhysX SDK 2.8.3及其以上版本、基于PhysX APEX开发的游戏就无法支持AGEIA PhysX物理加速卡了。
加速技术
2008年,在
Intel收购了
物理引擎界的领军者
Havok后,Nvidia也收购了排名第二的AGEIA。正式将
PhysX技术划入旗下。
NVIDIA PhysX承袭自AGEIA PhysX,但Nvidia在此基础上推出了NVIDIA PhysX物理加速,并将PhysX物理加速功能移植到NVIDIA GPU中,用户不必额外购买PhysX
物理加速卡就能享受到PhysX物理加速功能。借助
CUDA架构,NVIDIA重新编写了PhysX物理
加速程序,将PhysX物理加速引擎从AGEIA
PPU移植到了NVIDIA GPU上。
通过重新编写程序,NVIDIA GPU中的
线程调度器将承担原来PPU中“控制引擎”的工作,即负责具体任务的指派工作;
流处理器将承担原来PPU中“矢量处理引擎”的工作,即负责物理计算;在物理计算完成后,由DME来负责输出;而后,GPU再通过
硬件抽象层实现布料模拟、毛发模拟、碰撞侦测、流体力学等物理技术。简而言之,就是利用
CUDA,将PhysX引擎中的计算指令,翻译给GPU,让GPU去计算。这样做是因为GPU具有优秀的
浮点计算能力和并行处理能力。
通过这种方法,Nvidia
Geforce 8系列,9系列,
GT200系列,
GT300系列,GT400,GT500系列桌面显卡;Geforce 8M系列,9M系列,
GT100M系列,GT200M系列,GT300M系列,GT400M,GT500M系列
移动版显卡;基于同一渲染架构的NVIDIA Quardo系列专业绘图显卡;ION
离子平台,只要流处理器大于32个且
显存大于256MB,都可以支持PhysX物理引擎的计算,也就是支持PhysX物理加速。
所谓PhysX物理加速,是指相对于
CPU来讲,GPU加快了PhysX物理引擎的计算速度。并不是说PhysX引擎只能由NVIDIA GPU处理。
Nvidia曾承诺PhysX加速技术是公开的,且支持第三方厂商让PhysX运行在竞争对手ATI的显卡上,然而当2010年ATI
HD5000
系列产品全线对Nvidia形成优势时,Nvidia又表示PhysX加速技术只能运行在自家的显卡上。可以说PhysX物理加速已经成为了Nvidia在显卡产品线上被竞争对手力压后,唯一可以用来反击的技术手段。
在设计上,Nvidia显卡是同时进行3D计算和物理计算,且显卡不断的在3D计算和物理计算模式间切换。显卡已经被高分辨率、高
全屏抗锯齿等压的喘不过气来,根本没有剩余精力再去计算PhysX指令。因此主流的单显卡运行PhysX游戏,虽然效果上更加逼真,但根本达不到流畅标准,得不偿失。除非是双卡SLI,或顶级显卡(如
GTX680、GTX295等),才有足够精力去做物理计算。
Physx的未来完全掌握于
NVIDIA之手。Physx仅仅是作为NVIDIA宣传自家显卡的卖点。
应用程序常见于
虚幻3引擎,由于NVIDIA公司推行的“游戏之路”计划,NVIDIA会极力撮合使用虚幻3引擎的游戏开发商支持Physx ,同时扩展其它
游戏引擎。
能够使用显卡加速的Physx的优点也是最大的缺点。因为必选要有一块支持CUDA的NVIDIA显卡。面对
ATI显卡的竞争,消费者对NVIDIA劣化Physx CPU处理能力,突出自家显卡的做法颇有微词。
另外Physx的竞争对手Havok再被Intel收购后也得到大力发展,应用的游戏数量远远超过Physx。Havok引擎具有
嵌入性和高效性的特点,随着
CPU多线程技术的发展,其仅依靠CPU就能带来良好的物理效果。此外
intel宣称Havok可以免费使用后,NVIDIA也宣称Physx在一定范围内
免费开放。
Physx是仅仅作为NVIDIA显卡的卖点来应付来自ATI的竞争,还是打算长久的开发下去我们拭目以待。
劣化效率
前文曾经反复提到:PhysX并不是只能运行在NVIDIA GPU上,而是也可以由CPU执行处理的。理论上,随着CPU多核
多线程技术的发展,一些简单的
物理模拟计算,CPU处理起来也并没有问题。但是在实际中运行采用了PhysX GPU加速技术的游戏时,如果用户的显卡不支持PhysX 物理加速技术(例如
AMD-ATI显卡用户或Intel
集成显卡用户),即使物理模拟效果并不复杂,游戏的流畅度也会大打折扣。
其原因在于:在这些游戏中,如果使用CPU处理PhysX时,PhysX引擎只会调用CPU
单线程计算,而物理特效本身是可以很方便地使用类似
多线程的技术来处理的,实际上在打开GPU硬加速时情况便是如此,因此游戏厂商此举很有故意放着处理器的
多核条件不用的作弊之嫌。
更糟糕的是,RealWorld Technologies网站的作者David Kanter最近的研究让这些游戏厂商的作弊嫌疑又加重了几分。他使用Intel的VTune进程查看工具分析了多款支持PhysX特效的游戏,结果发现当这些游戏使用CPU处理物理特效时,大部分的代码使用的仍然是老旧的x87浮点算数指令,而不是早已深入人心,并且效率高得多的
SSE扩展指令,他在自己的文章中写道:
x87已经在
故纸堆里埋了好些年了,Intel和AMD这都一直在劝说开发者使用更快的SSE扩展指令集来编写程序。在市面上的处理器里,
SSE指令的完成同样任务的速度很轻松就能达到x87指令的1.5-2倍。而这些PhysX引擎还在使用x87指令,这显然对CPU非常不利也不够公平,让我们对GPU在处理PhysX引擎时是否真如官方宣传的那么高效率也打上了一个问号。
Kanter还进一步分析称,这些游戏厂商在应用CPU的SSE指令方面几乎不存在任何技术上的困难,虽然x87指令的精度和
兼容性会稍微好些,但是在游戏中根本不需要考虑这些问题,从开发难度上讲,使用SSE甚至还有可能会减轻开发者的负担,他表示:“单就CPU运行PhysX引擎方面讲,要使用
SSE指令集一点也不费事(坦率说还有可能比用x87指令开发更省事些)。
也就是说,即使在PhysX引擎只支持CPU
单线程处理的条件下,其实其执行性能本该也还有很大的提升空间。
把缺乏多线程支持与还在使用x87指令的情况综合起来考虑,我们认为Nvidia公司的PhysX引擎用最好听的话来讲就是优化得太差,讲的难听点就是有意为之。当然PhysX引擎的主动权握在Nvidia手上,他们可以爱怎么玩就怎么玩。但是这种过火的行为也可能会带来一些恶果,Kanter在文中这样总结道:
....Nvidia可以爱怎么玩就怎么玩,不过这种行为对开发者和消费者而言毫无益处,而且也会让人们对他们口中成天挂着的什么GPU比CPU性能更好的鬼话产生很大的怀疑。
PhysX Logo曾经是那些支持Nvidia显卡游戏的一大卖点,不过看来这个Logo似乎又有了新的一层含
义,那就是让所有非Nvidia的其它硬件设备跑得更慢。
《
地铁2033》这款游戏在开发时,便针对多线程CPU进行了优化,评测表明使用GPU运算PhysX和使用CPU运算PhysX时,
帧数差距在
个位数。在针对多线程CPU进行优化的PhysX
测试软件FluidMark 1.2中,
Intel Core 2 Q9400的成绩轻松击败了NVIDIA
Geforce GTX275 。这也说明了nVIDIA确实有劣化CPU执行效率的嫌疑。
2011年6月10日,NVIDIA公布了最新版的PhysX开发包:PhysX
SDK 3.0 。PhysX SDK 3.0将采用一个新的模块化架构和重新编写的PhysX引擎,以简化碰撞预测,分流等等;除此之外PhysX SDK 3.0还增加了对
多核心CPU的支持,以便更好的发挥多核CPU在游戏时的性能。新的
任务管理器将可以允许游戏更加优异地利用各个平台的多核心处理器,这将会极大地提升游性能表现以及游戏体验。
APEX
2010年8月24日,随着《黑手党2》的发布,一个全新的名词映入广大玩家的眼帘,那就是NVIDIA PhysX APEX。
2009年3月26日,在美国
加利福尼亚州旧金山市召开的
游戏开发者大会上(GDC2009),NVIDIA正式发布了NVIDIA PhysX APEX。APEX是PhysX
技术开发软件开发包(SDK)中的一个全新功能,它能够为艺术家、
游戏关卡设计师以及游戏开发人员提供一套易于使用的工具。得益于此类工具,基于多种平台的下一代游戏中可扩展的物理效果都将得以更为流畅得实施。
NVIDIA APEX被设计为一个模块化的框架,能够与现有的PhysX软件开发包一起使用,使开发人员能够轻松地在其游戏中添加细腻的物理效果。而且通过简单易用的“单次制作”跨平台内容创作特性,APEX还能够帮助开发人员优化多种平台上的游戏体验。 这些特性让APEX不仅能够帮助开发人员加快设计新游戏的速度,更能帮助开发人员降低这一过程中的总体
开发成本。 已获认证的PhysX开发人员可免费获得APEX
工具包,该工具包现已集成到一些全球最流行的开发库以及
游戏引擎中,其中包括
Emergent游戏技术公司的Gamebryo LightSpeed引擎。
APEX可实现诸多特效,比如物体销毁、仿真物体断裂、树木植被碎裂等,另外APEX一家入住MAYA、3D MAX等3D设计软件之中,可以帮助设计者更加直观的展示物理特征,而不再需要第三方的插件。
第一个使用NVIDIA PhysX APEX模块的游戏是《黑暗之日》。AGEIA
物理加速卡(PPU)不支持APEX模块。
支持游戏
在全平台上(PC,
Xbox,Playstation)共有约309种已发布的游戏采用了PhysX引擎。
其中在PC平台上,共有460个游戏采用PhysX引擎。
不过绝大多数都是使用CPU计算PhysX指令。这也就意味着,在这些用CPU计算PhysX的游戏上,无论你使用Nvidia显卡还是ATI显卡都没有关系。因为显卡根本不参加PhysX物理运算。物理运算效果的好坏是取决于CPU的。
PhysX物理引擎本身是可以由CPU计算的,只是不大适合。所以在PhysX CPU游戏中,物理特效都点到即止,以免增加CPU负担。
PhysX来讲是属于Nvidia的封闭技术,因此大多数游戏开发商即使选择PhysX引擎,也会选用CPU方式,以免丢失ATI显卡的
用户群。只有Nvidia 游戏之路计划的参与者才选择用GPU方式计算PhysX。
同时,绝大多数用GPU计算PhysX的游戏也支持AGEIA PhysX 物理加速卡(PPU),毕竟PhysX引擎是由AGEIA开发的。
游戏支持
下面的列表,列出了PC平台上真正支持Nvidia GPU计算PhysX物理引擎的游戏列表,在这些游戏中,如果使用支持PhysX加速技术的Nvidia显卡,那么Nvidia显卡会参与PhysX物理引擎的计算;如果用户显卡不支持PhysX加速,则会由CPU计算。已发布37种,未发布7种(包括
测试阶段的),项目取消1种 。
AGEIA游戏
一些早期的,在AGEIA时代开发的游戏,虽然能够支持AGEIA物理加速卡(PPU)加速,但是却并不支持Nvidia GPU加速。也就是说,在这些游戏中,Nvidia显卡根本无法参与PhysX计算,必须要有AGEIA
物理加速卡才能流畅运行PhysX特效。
下面列表中的游戏,列出了仅支持AGEIA PhysX物理加速卡(PPU)计算,但是不支持Nvidia GPU计算的游戏,共计14种
CPU计算游戏
除上述游戏之外,其他所谓的PhysX游戏。无论你的显卡是否支持PhysX GPU加速,都是由CPU完成物理计算的。
例如《极品飞车13》、《剑侠情缘网络版3》、《变形金刚:塞伯坦之战》、《
龙腾世纪:起源》、《
彩虹六号:维加斯》、《
彩虹六号:维加斯2》、《三位一体》、《奇点》、《QQ飞车》、《
细胞分裂4:双重间谍》、《
子弹风暴》等。
事实上,《剑侠情缘网络版3》的
演示版确实是用GPU计算PhysX,但是正式发布后,就变成了CPU计算。同样《鱼雷快艇:海上骑士》也在正式发布后改用CPU计算PhysX。
直至2014年2月,PC平台上共有429种游戏仅支持CPU计算PhysX。 下边列表列出了比较著名的194款游戏,其中多为网游。
非PC游戏
下面的列表中,列出了非PC平台(
Xbox360独占,
PS3独占,
Wii独占,MAC独占)中使用PhysX引擎的游戏
辨别一款游戏的是不是GPU计算PhysX时,可以用Nvidia控制面板中的“PhysX视觉指示器”。(仅限于Nvidia显卡,190以上驱动)
如果这个游戏是GPU方式计算PhysX物理引擎,那么屏幕左上角就会显示“PhysX→GPU”
如果这个游戏是CPU方式计算PhysX物理引擎,那么屏幕左上角就会显示“PhysX→CPU”
当然,对于某些游戏对PhysX视觉指示器不兼容,例如
战地之王,
QQ飞车(
腾讯),不管是大陆服务器的战地之王,还是台湾服务器的战地之王,在打开CPU计算PhysX物理引擎时,PhysX视觉指示器都不会显示“PhysX→CPU” ,这可能是由于引擎或其他的技术原因导致的。
混合交火
使用
AMD显卡执行图形渲染、辅以NVIDIA显卡进行PhysX物理加速是个很不错的方案,不过NVIDIA在新驱动中封杀了这种做法,会自动禁用PhysX。不过
人民群众的智慧是无穷的,破解补丁已然出炉,来自一位名叫“Liandri / THETA”的国外高手。根据说明文件,该补丁可以在使用非N卡作为系统主显卡的时候开启N卡的物理加速,但是仅限
Windows 7操作系统(
WDDM 1.1),而且不能让单独一块AMD显卡支持PhysX。
但Nvidia表示,他们没有测试过A-N
混合交火的稳定性,对这种破解带来的一切后果,将由用户自行承担。
Liandri / THETA还大声疾呼:不要让私有封闭标准为你选择硬件!一旦它们灭亡,这些硬件就会成为废物。