一、簡介
物理引擎通過爲剛性物體賦予真實的物理屬性的方式來計算運動、旋轉和碰撞反映。爲每個遊戲使用物理引擎並不是完全必要的—簡單的“牛頓”物理(比如加速和減速)也可以在一定程度上通過編程或編寫腳本來實現。
然而,當遊戲需要比較複雜的物體碰撞、滾動、滑動或者彈跳的時候(比如賽車類遊戲或者保齡球遊戲),通過編程的方法就比較困難了。
物理引擎使用對象屬性(動量、扭矩或者彈性)來模擬剛體行爲,這不僅可以得到更加真實的結果,對於開發人員來說也比編寫行爲腳本要更加容易掌握。好的物理引擎允許有複雜的機械裝置,像球形關節、輪子、氣缸或者鉸鏈。有些也支持非剛性體的物理屬性,比如流體。
物理引擎可以從另外的廠商購買,而一些遊戲開發系統具備完整的物理引擎。但是要注意,雖然有的系統在其特性列表中說他們有物理引擎,但其實是一些簡單的加速和碰撞檢測屬性而已。
自從遊戲中加入了物理引擎後就不一樣了,物理引擎完全突破了以往按預定腳本執行的方式,而是要求在3D遊戲中的那些物體都要遵行物理參數來運行。這樣的好處就是如果你的顯卡和處理器足夠強大,物理引擎就能模擬真實世界中各種物體運動的規律來運動。不過所謂的“物理引擎”並不是指那些實實在在的物理效果,物理引擎和此前理解的3D遊戲引擎類似,是給遊戲開發者的一個平臺,允許遊戲開發人員只用幾行代碼就能在遊戲中加入煙霧等效果,非常方便。
舉個簡單的例子,在幾年前還沒有物理引擎的時候,在那種FPS遊戲中,一位士兵往一個油桶旁邊扔一個手雷,手雷爆炸,引起了油桶的爆炸。不過這個過程顯得相當死板,不管是把手雷丟在油桶的左邊還是右邊,油桶都只會按照預先設計的樣子爆炸,不會有區別。如果有了物理引擎,手雷扔在油桶的左邊或右邊都會產生不同的爆炸效果,石塊會朝不同的角度飛濺起來,煙霧也會慢慢冒起來……通過物理引擎,實現這些物體之間相互影響的效果是相當簡單的。這是物理計算最初給的印象,雖然這樣的設計有點意思,但老是看這些爆炸場景看多以後,但總讓人感覺物理引擎的效果也就僅侷限於那些爆炸後石頭飛起來的場景,感覺有點單一。
1. Havok:
效率來說Havok是軟件模擬最快的。網址,http://www.havok.com/ 要license的。
老牌的君王,支持功能如下:
· 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
而PhysX提供的接口是非常好和簡單易學的。physX SDK是可以免費使用的,只要註冊就可以下載。網址,http://www.ageia.com/
屬於NVIDIA。
新興的王者,支持功能如下:
· 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的技術。
擴展:(PPU介紹)
PPU就是Physics Processing Unit(物理運算處理器),如果CPU是爲了達到更快的運算速度,GPU是爲了達到更好的圖像效果,那麼PPU就是爲了使遊戲更加真實。在以前的3D遊戲中,大多數的背景和物體都只是一些死死的貼圖效果,毫無真實感可言。而在去年發佈的FPS遊戲大作Half Life 2(半條命2)中,遊戲開發商就給了玩家們一個非常真實的物理世界。你可以在遊戲中撿起一個廢紙盒,然後把它拋向遠處,然後可以看見它撞擊到牆壁以後反彈到上地面上,濺起一陣灰塵。接近於真實物理效果使得遊戲不再是由一個個的貼圖組成,任何物體都是可移動的,它們都遵守着遊戲中的物理參數,組成了一個“真實”的遊戲世界。
3. Bullet
開源屆的霸主,支持功能如下:
· 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(Open Dynamics Engine)
開源的名角,支持功能如下:
· 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
更多的專注於生活中的實例模擬。
⒍ 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與其他軟件系統結合的難度,使用戶在瞬間即可建立一個具有真實物理屬性的世界。