PhysX

PhysX

物理運算引擎
PhysX,讀音與Physics相同,是一套由AGEIA(音譯為“阿吉亞”或“奧加”)公司開發的物理運算引擎,由AGEIA開發的一套實時物理模拟運算引擎。現已被Nvidia收購。[1]Havok、PhysX、Bullet是當今世界三大物理模拟引擎。目前,支持用顯卡加速計算PhysX的遊戲共有16種,支持CPU計算PhysX的約有百餘種。
  • 中文名:物理運算引擎
  • 外文名:PhysX
  • 所屬學科:

運算引擎

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引擎。不過絕大多數都是使用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計算。

AGEIA遊戲

一些早期的,在AGEIA時代開發的遊戲,雖然完美支持AGEIA物理加速卡(PPU)加速,但是卻并不支持Nvidia GPU加速。也就是說,在這些遊戲中,Nvidia顯卡根本無法參與PhysX計算,必須要有AGEIA物理加速卡才能流暢運行PhysX特效。

CPU計算遊戲

除上述遊戲之外,其他所謂的PhysX遊戲。無論你的顯卡是否支持PhysX GPU加速,都是由CPU完成物理計算的。

例如《極品飛車13》、《劍俠情緣網絡版3》、《變形金剛:塞伯坦之戰》、《龍騰世紀:起源》、《彩虹六号:維加斯》、《彩虹六号:維加斯2》、《三位一體》、《奇點》、《QQ飛車》、《細胞分裂4:雙重間諜》、《子彈風暴》等。

事實上,《劍俠情緣網絡版3》的演示版确實是用GPU計算PhysX,但是正式發布後,就變成了CPU計算。同樣《魚雷快艇:海上騎士》也在正式發布後改用CPU計算PhysX。)

直至2014年2月,PC平台上共有429種遊戲僅支持CPU計算PhysX。 下邊列表列出了比較著名的194款遊戲,其中多為網遊。

視覺指示器

辨别一款遊戲的是不是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還大聲疾呼:不要讓私有封閉标準為你選擇硬件!一旦它們滅亡,這些硬件就會成為廢物。

相關詞條

相關搜索

其它詞條