一、簡介
實體引擎通過為剛性物體賦予真實的實體屬性的方式來計算運動、旋轉和碰撞反映。為每個遊戲使用實體引擎并不是完全必要的—簡單的“牛頓”實體(比如加速和減速)也可以在一定程度上通過程式設計或編寫腳本來實作。
然而,當遊戲需要比較複雜的物體碰撞、滾動、滑動或者彈跳的時候(比如賽車類遊戲或者保齡球遊戲),通過程式設計的方法就比較困難了。
實體引擎使用對象屬性(動量、扭矩或者彈性)來模拟剛體行為,這不僅可以得到更加真實的結果,對于開發人員來說也比編寫行為腳本要更加容易掌握。好的實體引擎允許有複雜的機械裝置,像球形關節、輪子、氣缸或者鉸鍊。有些也支援非剛性體的實體屬性,比如流體。
實體引擎可以從另外的廠商購買,而一些遊戲開發系統具備完整的實體引擎。但是要注意,雖然有的系統在其特性清單中說他們有實體引擎,但其實是一些簡單的加速和碰撞檢測屬性而已。
自從遊戲中加入了實體引擎後就不一樣了,實體引擎完全突破了以往按預定腳本執行的方式,而是要求在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)
網址, http://www.ode.org/
開源的名角,支援功能如下:
· 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與其他軟體系統結合的難度,使使用者在瞬間即可建立一個具有真實實體屬性的世界。