物理引擎

編寫腳本來實現的運動

物理引擎通過為剛性物體賦予真實的物理屬性的方式來計算運動、旋轉和碰撞反映。為每個遊戲使用物理引擎並不是完全必要的—簡單的“牛頓”物理(比如加速和減速)也可以在一定程度上通過編程或編寫腳本來實現。然而,當遊戲需要比較複雜的物體碰撞、滾動、滑動或者彈跳的時候(比如賽車類遊戲或者保齡球遊戲),通過編程的方法就比較困難了。

簡介


物理引擎使用對象屬性(動量、扭矩或者彈性)來模擬剛體行為,這不僅可以得到更加真實的結果,對於開發人員來說也比編寫行為腳本要更加容易掌握。好的物理引擎允許有複雜的機械裝置,像球形關節、輪子、氣缸或者鉸鏈。有些也支持非剛性體的物理屬性,比如流體。物理引擎可以從另外的廠商購買,而一些遊戲開發系統具備完整的物理引擎。但是要注意,雖然有的系統在其特性列表中說他們有物理引擎,但其實是一些簡單的加速和碰撞檢測屬性而已。

由來


遊戲中並沒有所說的這種“物理效果”,還不是一樣可以讓人能看到該運動的東西還是在動啊,並非就是很死板地一堆放在那裡。要說清楚這個問題,其實也很簡單,在以往的遊戲中,比如打壞一個油桶,物理引擎就會按照遊戲設計者預先設計好的腳本來爆炸,這就是為什麼在以往的3D遊戲中,那些物體只會按照原定計劃做規定動作的原因。
自從遊戲中加入了物理引擎后就不一樣了,物理引擎完全突破了以往按預定腳本執行的方式,而是要求在3D遊戲中的那些物體都要遵行物理參數來運行。這樣的好處就是如果你的顯卡和處理器足夠強大,物理引擎就能模擬真實世界中各種物體運動的規律來運動。不過所謂的“物理引擎”並不是指那些實實在在的物理效果,物理引擎和此前理解的3D遊戲引擎類似,是給遊戲開發者的一個平台,允許遊戲開發人員只用幾行代碼就能在遊戲中加入煙霧等效果,非常方便。
舉個簡單的例子,在幾年前還沒有物理引擎的時候,在那種FPS遊戲中,一位士兵往一個油桶旁邊扔一個手雷,手雷爆炸,引起了油桶的爆炸。不過這個過程顯得相當死板,不管是把手雷丟在油桶的左邊還是右邊,油桶都只會按照預先設計的樣子爆炸,不會有區別。如果有了物理引擎,手雷扔在油桶的左邊或右邊都會產生不同的爆炸效果,石塊會朝不同的角度飛濺起來,煙霧也會慢慢冒起來……通過物理引擎,實現這些物體之間相互影響的效果是相當簡單的。這是物理計算最初給的印象,雖然這樣的設計有點意思,但老是看這些爆炸場景看多以後,但總讓人感覺物理引擎的效果也就僅局限於那些爆炸后石頭飛起來的場景,感覺有點單一。

應用


當NVIDIA宣布正式收購Ageia及該公司的PhysX物理軟硬體組件后,所有人都在期待,期待著NVIDIA會推出新的有關物理運算的東西出來。果不其然,如今當NVIDIA發布Forceware 177.79驅動后,意味著GeForce 8/9和GT200系列的GPU都支持PhysX引擎。這是因為NVIDIA將PhysX引擎集成到CUDA架構的物理運算中。這樣,顯卡就能自動進行物理加速運算。當然,PhysX在遊戲上的運用僅僅是物理引擎眾多運用的一方面,在整個CUDA通用運算領域上,都會有物理引擎的身影,比如計算天體間在相互引力的作用下,各自的運動軌跡等。
此次在GDC09上展示的Havok物理引擎包括了三個場景,分別為爆破、布料和AI計算。演示平台使用了i7 965至尊版處理器搭配HD4870X2顯卡,運行效果比較流暢。不過唯一讓人感到稍稍驚訝的是,Havok物理引擎並非是專門針對ATI顯卡而設計,它能夠支持OpenCL架構(布料演示DEMO就是基於OpenCL架構開發的),也就是說NVIDIA的GeForce 8以上級別顯卡也很有可能能夠支持Havok物理引擎。

常見


1. Havok:
老牌的君王,支持功能如下:
· Collision Detection - including Continuous Physics?
· MOPP? Technology - for compact representation of large collision meshes
· Dynamics and Constraint Solving
· Vehicle Dynamics
· Data Serialization and Art Tool Support
· Visual Debugger for in-game diagnostic feedback
有不少遊戲和軟體都選擇了他做物理引擎,比如HALO3、失落星球、HL2、細胞分裂、指環王Online等等。etc如今Havok被Intel收購了,以後可能對Intel的CPU會有特別的優化。
Havok對PS2、XBOX、GameCube、PC多種遊戲平台都有支持。也是世界頂級遊戲公司Valve(Half Life的公司),Pandemci,Remedy等的合作夥伴。這個物理引擎曾經支持過各種類型的遊戲,包括racing game,first-persion shooter,MMOGs,adventure games,puzzle games等等。Hovak還曾經負責電影Matrix的部分效果處理。
成功案例:
Crash Nitro Kart、Half-Life 2、Max Payne 2、Medal of Honor、F.E.A.R.、Lord of the Rings: Middle Earth Online。
2. NovodeX --- AGEIA PhysX
新興的王者,支持功能如下:
· Massively Parallel Physics Architecture
· High-speed GDDR3 Memory Interface
· AGEIA Universal Continuous Collision Detection
· AGEIA Physical Smart Particle Technology
· AGEIA Complex Object Physics System
· AGEIA Scalable Terrain Fidelity
· AGEIA Dynamic Gaming Framework
因為特有的硬體卡(物理加速卡-PPU)支持,所以能處理大量的物理運算,其他幾款暫時沒得比。Unreal3,GameBryo, Reality Engine等多款商業引擎和遊戲都使用了它。
NovodeX是由開發PPU的公司AGEIA進行維護,因此對於將來PPU硬體的支持,無疑NovodeX是最有優勢的。NovodeX是一個模擬剛體動力學的物理引擎,支持速度,加速度,動量,衝量,碰撞等等的物理概念。NovodeX的開發庫支持跨平台,多線程,高速碰撞檢測等特性,專門對汽車物理的模擬做了優化。案例:
根據官方文檔,已經有超過60個遊戲工作室、公司和研究機構採用了NovodeX的技術。
開源屆的霸主,支持功能如下:
· Multi Platform support
· Supports various shape types:
· Discrete Collision Detection for Rigid Body Simulation
· Single Queries:
· Sweep and Prune Broadphase
· Documentation and Support
· Auto generation of MSVC project files,comes with Jam build system
· Bullet Collision Detection works with Bullet Dynamics,but there is also a sample integration with Open Dynamics Engine.
· Framework with 2 different Constraint Solvers
· Hinge,Point to Point Constraint,Twist Cone Constraint (ragdolls)
· Automatic de-activation (sleeping)
· Generic 6 Degree of Freedom Constraint,Motors,Limits
· LCP Warm starting of contact points
· Collada 1.4 Physics Import using FCollada and COLLADA-DOM
· Convex Decomposition Code
這款物理引擎的歷史也比較久了,但似乎國內知道的ODE的人更多一些,這款物理引擎被Nvidia的開發人員所關注(Nvidia前些時候說過,要用GPU來實現物理加速,可能會最先在這款物理引擎上實現。)
(Tip: 這款引擎是開源的,有興趣的朋友,可以看看。)
4. ODE
開源的名稱,支持的功能如下:
· Rigid bodies with arbitrary mass distribution.
· Joint types: ball-and-socket,hinge,slider (prismatic),hinge-2,fixed,angular motor,linear motor,universal.
· Collision primitives: sphere,box,cylinder,capsule,plane,ray,and triangular mesh,convex.
· Collision spaces: Quad tree,hash space,and simple.
· Simulation method: The equations of motion are derived from a Lagrange multiplier velocity based model due to Trinkle/Stewart and Anitescu/Potra.
· A first order integrator is being used. It's fast,but not accurate enough for quantitative engineering yet. Higher order integrators will come later.
· Choice of time stepping methods: either the standard ``big matrix'' method or the newer iterative QuickStep method can be used.
· Contact and friction model: This is based on the Dantzig LCP solver described by Baraff,although ODE implements a faster approximation to the Coloumb friction model.
· Has a native C interface (even though ODE is mostly written in C++).
· Has a C++ interface built on top of the C one.
· Many unit tests,and more being written all the time.
· Platform specific optimizations.
· Other stuff I forgot to mention...
嘿嘿,這個就不用做過多的介紹了,國內使用和學習這個的人比較多了。只是如今看到他的網頁上有這麼一句話:“Russell Smith is the primary author of ODE.”不知道是誰又傷害了這位仁兄。
(Tip: Google一下,中文文章一大把。)
5. TOKAMAK
如今想通了,決定開源了。支持功能如下:
· Joints
· Friction
· Stacking
· Collision Detection
· Rigid Particle
· Breakage
這個物理引擎出現也比較早了,作者是日本人,其實日本的遊戲也很發達的,能把技術共享出來,難得啊。(日文的技術網站還是很多的。)
6. Newton
更多的專註於生活中的實例模擬。
7. Simple Physics Engine
國產精品,支持功能如下:
· 使用獨創的快速而穩定的Tri-Mesh碰撞檢測演演算法,使載入模型數據異常簡單。SPE的碰撞檢測系統從一開始就是針對三角形網格(Tri-Mesh)而設計,所以用戶可以方便地使用mesh文件創建任意形狀的剛體,SPE內部將自動處理所有工作。同時,SPE支持球和膠囊兩種基本幾何形狀,方便用戶創建粒子特效和ragdoll系統。此外,SPE支持一定條件下的連續碰撞檢測,可以正確地處理大多數情況下的高速運動物體。
· 碰撞信息分析。SPE對碰撞檢測系統產生的數據進行智能化分析,為碰撞反應計算提供更可靠更正確的原始數據,極大地提高了系統的穩定性。
· 穩定的碰撞與接觸解決系統。從1.5版開始,SPE採用全新的解決演演算法,更正確地計算摩擦與反彈,而且更穩定。
· SPE提供一種穩定的基本Joint功能,支持最大距離、彈性係數以及破壞力等參數的配置,用戶可以使用它方便地創建各種其他類型的Joint。
· 實時剛體破碎。(Beta)。SPE提供“形狀操作”的功能,任何模型均可被一組平面或另一個模型切成小塊,SPE生成的模型中包括用於區分原始表面與切面的屬性信息,方便用戶更合理地渲染出新的形狀。如今,可破壞剛體的API已經開放。
· 高并行計算。SPE已經完成了多線程化以充分利用多核心CPU的性能. 90%以上的計算任務都可均勻地分配到任意數量的線程中去. 與單線程相比,雙線程至少能提供60%的性能提升,而四線程可以帶來150%以上的性能提升。使用SPEWorld::SetNumThreads()即可在任何時候開啟多線程計算。
· 簡單易用而人性化的介面,極大地降低了SPE與其他軟體系統結合的難度,使用戶在瞬間即可建立一個具有真實物理屬性的世界。

比較


開發公司/作者HavokCMLabsRussell SmithAGEIADavid Lam
版本32.30.52.1.21.21
發行日期2005.32004.72004.52004.112005.3
是否支持C++開發
文檔/Demo詳細詳細較詳細詳細較詳細
License
商業
價格需要協商
商業
價格需要協商
GNU LGPL/BSD/價格和使用需要協商
商業
價格需要協商
免費
技術支持全面全面全面
其他NANA開放源碼支持PPUNA

技術


PhysX在在遊戲中有粒子、流體、軟體、關節和布料五大應用。

粒子

所謂的粒子運動,主要是指大規模的物理運動,比如此前提到過的用手雷將油桶引爆后所形成的碎石頭、衝擊波造成的塵土飛揚等效果,這些效果如果都讓傳統的CPU來進行運算的話,無疑是相當困難的。

流體

流體運動更多的則是展現水從水管內噴出,水衝擊到物體后,物體的表現,比如木箱被沖翻。而那些被沖翻的木箱翻倒的方向每次都各不相同,又比如在一個NⅥDIA Logo形狀的玻璃容器中,用滑鼠來控制玻璃容器的位置,讓容器里的液體流動,這種流動的效果和現實中的效果已經相當接近了。

軟體

在NⅥDIA展示的演示畫面中,還有一個則是“食人花”的場景。講述的是一朵巨大的食人花(也可以說是花形狀的怪獸)被人抓住以後,玩家用激光去攻擊食人花,然後這朵“花”就會作出反應。這種軟軟的身軀扭動起來非常像現實生活中看到的鼻涕蟲之類的蟲在蠕動一樣,感覺相當噁心。

物理

至於在關節和布料方面的應用,在文章的開始處已經提到了,美女們在T型台上用誇張的肢勢行走,雖然動作誇張,卻絲毫沒有虛假的成分在裡面,這在傳統的3D遊戲里是很難做到的。而身上的裙子也跟著關節的移動而跟著擺動。
可以看出,所謂物理效果,都是在遊戲中模仿現實中真實物理世界的運動方式,在遊戲中,大家甚至能感受到箱子、石頭、布料以及那些噁心的無脊椎動物的觸感是怎樣的。遊戲之所以能實現如此多的動態效果,都要歸功於物理運算。

技術分類


PhysX

Physx
Physx
PhysX 是一套由NⅥDIA 設計的執行複雜的物理運算的技術。NⅥDIA PhysX基於NⅥDIA CUDA,允許其用戶利用 PhysX 執行物理運算。在遊戲中實現物理運算效果絕非易事。物理運算效果是一種對計算性能要求極高的環境,以一整套獨特的物理學演演算法為基礎,需要大量同步運算的能力。採用支持PhysX™技術的NⅥDIA®(英偉達™)GeForce®;處理器是實現實時物理學特效的最佳途徑,這些特效包括塵土飛揚、令物體碎片四射的爆炸、生動逼真的人物動作以及衣服布料的自然下垂與撕裂等。PhysX技術被廣泛應用於150多個遊戲中,其註冊用戶數量已超過10,000名。這項技術在索尼的Playstation 3、微軟的Xbox 360任天堂的Wii以及個人計算機上均得到了良好的支持,把遊戲推向全新的境界。
此外,NⅥDIA PhysX是一種功能強大的物理加速引擎,可在頂級PC和遊戲中實現實時的物理學計算。PhysX設計用途是利用具備數百個內核的強大處理器來進行硬體加速。加上GPU超強的并行處理能力,PhysX將使物理加速處理能力呈指數倍增長並將您的遊戲體驗提升至一個全新的水平,在遊戲中呈現豐富多彩、身臨其境的物理學遊戲環境。其中特色如下:
⒈爆炸引起的煙塵和隨之產生的碎片
⒉複雜、連貫的幾何學計算使人物的動作和互動更加逼真
⒊其視覺效果令人嘆為觀止的全新武器
⒋布紋的編織和撕裂效果非常自然
⒌運動物體周圍煙霧翻騰
⒍採用NⅥDIA支持PhysX的GeForce處理器是實現真實物理加速效果的唯一途徑,其可縮放、複雜、逼真、高度互動的特性將徹底顛覆您的娛樂體驗。
NⅥDIA將PhysX引擎集成到CUDA架構的物理運算中,這樣就可以使GeForce 8/9及GT200系列全部都支持PhysX引擎,所有已使用PhysX技術的遊戲都支持新版驅動程序,如果裝有支持CUDA平台的顯卡,遊戲將自動選取顯卡進行物理加速運算,仍會使用性能較慢的CPU進行運算。此外,PhysX並不只使用於遊戲市場,同時亦會運用CUDA通用運算領域上,應用更廣。
無論是GPU還是CPU、PPU、Cell(PS3)都可以通過HAL翻譯層來實現軟、固質體動力(Soft or Rigid Body Dynamics)、通用碰撞偵測(Universal Collision Detection)、有限元素分析(Finite Element Analysis)、流體動力(Fluid Dynamics)、毛髮模擬(Hair Simulation),以及更高級開發平台APEX中的更先進的布料模擬(Cloth Simulation)、自然模擬(Natural Motion)等在內新穎技術。
通過CUDA通用介面,PhysX引擎將NⅥDIA GPU中的Thread Scheduler(線程管理器)模擬成Control Engine(控制引擎CE),而Streaming Processors來模擬Vector Processing Engine(矢量處理引擎,VPE),其中CE控制引擎負責任務的指派,相當於PhysX中的主管機構,而真正的物理運算任務則是由VPE矢量引擎來完成,最後通過Data Movement Engine(數據移動引擎DME)輸出。

Havok

Havok原是一家業界領先的軟體服務提供商,其物理引擎被超過200款遊戲使用,許多電影也應用了這家公司的軟體技術。2007年9月,Intel突然宣布收購Havok,業界普遍猜測此舉是為了抑制NⅥDIA、AMD在遊戲物理引擎領域的擴張。
Havok
Havok
日前,Intel使出了擴展Havok物理引擎市場的殺手鐧——免費!Havok在網站上開始提供其物理和動畫引擎產品的全免費下載。內容包括Havok SDK庫、樣例、技術文檔以及支持Maya、3ds Max和Avid XSI等3D建模軟體的格式轉換工具。所有的一切只要簡單註冊一下姓名郵箱就可以免費下載。
物理引擎
物理引擎