NVIDIA的PhysX GPU物理加速概述

来源:互联网 发布:安卓 api 网络请求 编辑:程序博客网 时间:2024/06/09 20:10

PhysX,读音与Physics相同,是一套由AGEIA(音译为“阿吉亚”或“奥加”)公司开发的物理运算引擎;也是世界三大物理运算引擎之一,另外两种是Havok和Bullet。PhysX物理引擎的演示程序 PhysX物理引擎的演示程序PhysX 的另外一种含义是指专门计算PhysX引擎的物理加速卡。

物理运算引擎的作用,简而言之,就是令虚拟世界中的物体运动符合真实世界的物理定律,以使游戏更加富有真实感。

  在PhysX引擎诞生之前,就已经有Havok物理引擎存在。但那时的Havok引擎主要依靠CPU运算,受当时CPU性能影响,物理模拟的计算量不宜太大,因此物理模拟效果不佳。

  PhysX虽然也可以由CPU计算,但其程序本身在设计上更适合用运用独立的浮点处理器(例如GPU和PPU)来计算,也正因为如此,它可以做大计算量的物理模拟,物理效果更胜一筹。

  PhysX物理引擎可以在包括Windows,Linux,Xbox360,Playstation3,Mac等在内的全平台上运行。

  AGEIA公司后来被Nvidia收购,PhysX引擎也就跟随划入Nvidia旗下。

  2010年5月,AGEIA公司创始人、Nvidia主管PhysX技术副总裁Manju Hegde跳槽至AMD公司。外界猜测其跳槽原因是AGEIA被Nvidia收购后,PhysX并没有得到良好的发展。

AGEIA时代的PhysX

PhysX物理运算引擎由五名年轻的技术人员开发,他们成立了AGEIA公司。PhysX最初称为NovodeX,后改名为PhysX。

  AGEIA曾为《虚幻竞技场3》开发几张加入PhysX引擎的MOD地图,物理效果非常出色。同时AGEIA也自己开发一个免费的名为《好战者》的物理游戏。此后的一些PhysX游戏,也大都基于虚幻3引擎。例如《镜之边缘》、《蝙蝠侠:阿卡姆疯人院》、《一舞成名》等。可以说虚幻3引擎与PhysX物理引擎已经成了一对黄金搭档。

  

虚幻竞技场3 PhysX地图包

AGEIA提供一流的PhysX软件开发包AGEIA PhysX SDK,它不仅可以应用于次世代PC游戏开发,还可应用在Console游戏开发中。AGEIA声称,PhysX 将会使设计师在开发游戏的过程中使用复杂的物理效果而不需要像以往那样耗费漫长的时间开发一套新的物理引擎,而且使用了物理引擎还会大量消耗CPU资源使一些配置较低的电脑无法流畅运行。AGEIA 更宣称 PhysX 执行物理运算的效率比CPU 与物理处理软件的组合高出 100 倍。游戏设计语言 Dark Basic Pro 将会支持 PhysX,并允许其用户利用 PhysX 执行物理运算。

 

 

 

 

 

 

PhysX物理加速卡(PPU)

BFG生产的PhysX物理加速卡

由于PhysX物理引擎在设计上就并不适合用CPU去计算,因此AGEIA公司还为PhysX引擎设计了专门的运算硬件,PhysX物理加速卡。PhysX物理加速卡的核心被称为PPU,即物理处理器(Physics processing Unit)。

  PhysX物理加速卡在运行游戏时不参与任何3D渲染,只计算PhysX引擎。按照AGEIA当初的设想,未来的个人电脑将由CPU、GPU、PPU三大核心构成。其中CPU居中调度,GPU负责图形渲染,PPU则做物理计算。

AGEIA当初设想的未来PC组成

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相当。[1]可见PhysX物理加速卡在设计思路上是非常成功的。

 

 

Nvidia时代的PhysX

2008年,在Intel收购了物理引擎界的领军者Havok后,Nvidia也收购了排名第二的AGEIA。正式将PhysX技术划入旗下。

PhysX by Nvidia

Nvidia利用CUDA架构,将PhysX引擎与自家的GPU结合起来。简而言之,就是利用CUDA,将PhysX引擎中的计算指令,翻译给GPU,让GPU去计算。这样做是因为GPU具有优秀的浮点计算能力。通过这种方法,所有Nvidia Geforce 8系列,9系列,GT200系列,GT400系列的显卡,只要显存大于256MB,都可以支持PhysX物理引擎的计算,也就是支持PhysX物理加速。

  现在的PhysX,理论上只能运行在Nvidia显卡上。当初Nvidia曾承诺PhysX是公开的,且支持第三方厂商让PhysX运行在竞争对手ATI的显卡上,然而当2010年ATI HD5000系列产品全线对Nvidia GT400形成优势时,Nvidia又表示PhysX只能运行在自家的显卡上。可以说PhysX已经成为了Nvidia在显卡产品线上被竞争对手力压后,唯一可以用来反击的技术手段。

  在设计上,Nvidia显卡是同时进行图形渲染和物理计算,且显卡不断的在图形渲染和物理计算模式间切换。目前的显卡已经被高分辨率、高全屏抗锯齿等压的喘不过气来,根本没有剩余精力再去计算PhysX指令。因此主流的单显卡运行PhysX游戏,虽然效果上更加逼真,但根本达不到流畅标准,得不偿失。除非是双卡SLI,或顶级显卡(如GTX295、GTX480等),才有足够精力去做物理计算。

  Physx的未来完全掌握于NVIDIA之手。目前Physx仅仅是作为NVIDIA宣传自家显卡的卖点。应用程序常见于虚幻3引擎,由于NVIDIA公司推行的“The Way It's Means To Be Played”计划,NVIDIA会极力撮合使用虚幻3引擎的游戏开发商支持Physx ,同时扩展其它游戏引擎。

  能够使用显卡加速的Physx的优点也是最大的缺点。因为必选要有一块支持CUDA的NVIDIA显卡。面对ATI显卡的竞争,消费者对NVIDIA劣化Physx CPU处理能力,突出自家显卡的做法颇有微词。

  另外Physx的竞争对手Havok再被Intel收购后也得到大力发展,应用的游戏数量远远超过Physx,而且仅应用CPU就能带来良好的物理效果。此外intel宣称Havok可以免费使用后,NVIDIA也宣称Physx在一定范围内免费开放。

  Physx是仅仅作为NVIDIA显卡的卖点来应付来自ATI的竞争,还是打算长久的开发下去我们拭目以待。

 

支持PhysX的游戏

 目前为止,在全平台上(PC,Xbox,Playstation)共有273种游戏(已发布245种)采用了PhysX引擎。 在PC平台上,共有237种游戏(已发布210种)采用PhysX引擎[1]

  

  不过,在这237种游戏中,绝大多数都是使用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开发的。

  总之,并非所有带PhysX Logo的游戏都与Nvidia显卡有关,Nvidia显卡也不支持所有带PhysX Logo的游戏

nVIDIA劣化CPU执行PhysX效率

Nvidia公司一直把PhysX游戏引擎当作宣传GPU计算能力强于CPU的噱头,而且几年来多款游戏也确实采用了这种GPU加速技术,这类游戏开启 PhysX之后确实物理特效华丽不少,不过如果没有打开GPU硬件加速,只用CPU来计算物理特效,那么游戏的流畅度就会大打折扣。不过,我们曾指出,有 些这样的游戏在用CPU处理物理特效时只使用了单线程技术,而物理特效本身是可以很方便地使用类似多线程的技术来处理的,实际上在打开GPU硬加速时情况 便是如此,因此游戏厂商此举很有故意放着处理器的多核条件不用的作弊之嫌。

  更糟糕的是,RealWorld Technologies网站的作者David Kanter最近的研究让这些游戏厂商的作弊嫌疑又加重了几分。他使用Intel的VTune进程查看工具分析了多款支持PhysX特效的游戏,结果发现当这些游戏使用CPU处理物理特效时,大部分的代码使用的仍然是老旧的x87浮点算数指令,而不是早已深入人心,并且效率高得多的SSE扩展指令,他在自己的文章中写道:

  x87已经在故纸堆里埋了好些年了,Intel/AMD这5年来都一直在劝说开发者使用更快的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的其它硬件设备跑得更慢。

原创粉丝点击