物理学——物理引擎
物理引擎
有了基本物理學的新知識,現在你可以較容易地比較現有的物理引擎了。實現了基本的東西和確定在系統中已定義了正確的常量并感覺良好之后,你應該考慮一下游戲的需求。物理引擎往往可以做很多不同的東西,許多物理演示和教程看上去很酷,但往往不能用于大多數游戲。第一次看到一堆箱子互相碰撞很有趣,但很少有游戲允許直接控制箱子并推動它們,而且看多了箱子翻倒就會覺得無趣,這就好象再一次回到了幼兒園一樣。
但是,并非所有的演示僅僅是一堆方塊。有許多很好的示例向你展示物理引擎的特殊功能,但我的觀點是,大多數游戲只需要某些特定功能。第一人稱射擊游戲可能會用到大多數的功能,這點你可以在近幾年中發售的游戲中看到。幾乎所有的第一人稱射擊游戲都會實現某些物理系統,但其他類型的游戲,如角色扮演游戲、策略游戲等等,要么沒有物理系統或只有最基本的物理系統,而且往往只是用來改善視覺效果而不是游戲邏輯本身。
我個人不喜歡在策略游戲中使用物理效果,因為它們實現得并不好,往往只是添加更好的視覺效果,比如周圍建筑物倒塌時你的單位也會被壓死。這就像在下棋時發生地震,這破壞了游戲規則,因為一切都在搖晃,你將無法作出任何聰明的舉動。也許要過一段時間后開發商才會弄清楚如何正確地使用物理效果,并使游戲仍然是可預見的,而不是靠運氣。
我真正喜歡的物理效果是爆炸,特效和視覺質量的改進。有幾個游戲非常好地模擬了水,爆炸,煙霧效果,而且這些效果還能與周圍的環境互動。
正如我前面所說,當在Xbox 360上使用XNA時你將無法使用任何物理引擎,因為它們都是基于非托管代碼的,而這在XNA中不被支持。在Windows平臺上可以使用任何你喜歡的物理引擎,但即使在Windows平臺上很多物理引擎也沒有適當的. NET接口可讓你在游戲中輕松地使用和處理物理效果。.NET的可能性將在接下去討論。總之,快速瀏覽一下現今的物理引擎提供的一些功能:
-
諸如像重力,摩擦力,動力和接觸摩擦,浮力等等的一些力。
-
基本的物理物體支持,用來定義并處理方塊,球,圓柱,平面等等。通常,這些引擎也支持連接物體和更復雜的預定義模型,如汽車、飛機、氣墊船、船舶等等。
-
物體間的碰撞檢測,特別是物體不一定是球體時。因為碰撞計算使用得非常頻繁,需要檢查大量的物體,包圍球體甚至是多邊形為基礎的檢測,所以這通常也是優化的主要地方。Rocket Commander游戲展示了一個如何檢測許多碰撞的解決方法,這個方法通過分區進行優化,極大地提高了性能。
-
碰撞反應,這是在碰撞被檢測到時執行的。要么你讓物體反彈(如在Rocket Commander),或者你也可以破壞它們(碰撞的力轉化為動能并破壞模型)。游戲通常使用預定義的爆炸、殘骸或破損的三維模型,因為實時產生這些模型很難,但如果美工很棒的話效果還是會很好。
-
彈丸物理學處理子彈、火箭彈和其他發射的彈丸。你上一章中你看到彈丸是如何被使用的,如果你有一個物理引擎,你只需添加彈丸,并設置物理參數,并根據環境增加特殊的行為(例如,子彈在水中會減速),物理引擎會幫你處理彈丸。
-
完整的粒子系統也要用到物理學,正如我前面所說,我很喜歡利用物理引擎實現的特效系統,但特效系統要做大量的工作。
-
物理引擎還有更多的功能,如支持剛體模擬,布娃娃系統,像衣服,旗幟,液體之類的可變形物體和其他復雜的物體。
PhysX
PhysX是AGEIA公司的物理引擎和SDK的名稱,以前被稱為NovodeX SDK,PhysX也是Ageia開發的PPU(物理處理單元)的名稱。PhysX PPU是世界上第一個專門用于計算物理的硬件,可用于任何使用PhysX SDK的游戲。目前支持PhysX物理引擎的游戲還不是很多,但許多引擎和即將發布的游戲已經獲得了PhysX SDK的授權,而索尼公司也獲得在Playstation 3游戲機使用PhysX的授權。
即使沒有PPU,PhysX引擎也是強大的,開發商研究物理引擎已經很長一段時間了。它可能是僅次于Havok引擎排名第二的物理引擎,后者的應用更加廣泛,不僅在游戲,而且在諸如3D Studio Max之類的3D建模程序中。將繁重的物理計算交于一個特殊的硬件處理,這個想法雖然不錯,但PPU太貴了(250美元~300美元),有這種卡的人也不多。多數買這種物理卡的人是開發者或藝術家,他們可以從中受益,但你不能指望玩家要有物理卡才能運行你的游戲。但是PhysX在多核CPU也運行良好,只是不像在PPU上這么優異。
現在沒有多少游戲使用PhysX,你只能找到屈指可數的幾個。例如幽靈行動,哥特3,聯合特遣部隊以及最近的戰爭機器(Xbox 360游戲機)。但未來有虛幻競技場2007和虛幻3引擎,細胞分裂,Monster Madness等等。
PhysX關注于游戲、游戲引擎、特效處理、利用物理學的游戲邏輯,有許多看上去很酷的例子和教程。它們的主要優勢是:借助PPU硬件,運行速度比其他物理引擎快很多,PhysX還采用了統一架構以相同方式處理所有的物理計算。
你可在PhsyX官方網站http://www.ageia.com上找到更多信息。
Havok
Havok是非常受歡迎的Havok Game Dymamics SDK(目前是第4版,在2006年發布)的名稱,它也是開發這個SDK的公司的名稱。這個公司成立于1998年,第一個SDK(v1.0)于2000年公布。今天有超過100個游戲使用Havok物理引擎,最有名的是游戲是半條命2和Valve公司的Source引擎,Source引擎也用在了許多以半條命為基礎的改編游戲。Havok主要用于第一人稱射擊游戲,但其他一些游戲類型也已使用了Havok引擎。
Havok可用在許多平臺上,包括個人電腦(Windows和Linux )和幾乎每一種家用機(Xbox,Xbox 360,PS2,PS3,Wii,Game Cube)。它用C / C++編寫,在允許編譯C代碼的任何系統上是非常精簡的。但對.NET開發者來說沒太多支持,我沒聽到過任何使用Havok的.NET游戲或引擎。
這個物理引擎不僅用于游戲,也可用于3D Studio Max,它利用了內部中間件,在模擬物理效果的3D藝術社區是很流行的。在以前的版本中通過一個叫reactor的插件實現,但最新版本已經在3D Studio Max的基本版中實現。Havok引擎甚至還用在了電影黑客帝國三部曲中。
Havok支持兩個主要的物理操作。特效物理引擎可用于支持Shader Model 3.0的GPU如GeForce 7系列和8系列,特別是GPU很快時。然后是游戲物理引擎,這在CPU中計算。Havok是PhysX的主要競爭對手,它證明了無需額外的PPU你也可以干得很棒,2004年的半條命2游戲證明了實現很棒的物理效果是可行的,通過物理效果還能改進游戲。
你可以在Havok的官方網站http://www.havok.com/找到更多信息。
ODE
ODE表示“開放的動力學引擎(Open Dynamics Engine)”,與PhysX和Havok不同,它不是一個商業引擎,這也許是初級開發人員或小組最感興趣的地方,初學者往往苦于沒有足夠的錢去使用一個大型的商業物理引擎。
ODE是一個開源物理引擎,它使用BSD許可證(或LGPL如果你喜歡)。它開始于2001年,已經有一些游戲通過這個引擎被開發出來,但它沒有像PhysX或Havok那么完善的功能,也沒那么成功。
ODE支持剛體動力學和碰撞檢測。要提供更加先進的物理效果你仍然有很多工作要做,但ODE為你提供了一個很好的基本框架,給了你所有的基本幾何形狀(如正方體、球體、圓柱體等)和物理計算,你可以用來做一些基本的物理演示。還有一些框架是建立在ODE之上或使用ODE。
下面是酷的地方:ODE有一個很好的.NET包裝叫做ODE.NET,可以在下面的網址找到。上面有幾個示例,很多游戲引擎使用C++代碼并只提供C++示例,很高興能見到一些.NET代碼了。示例展示了基本的物理處理,如堆箱子并推動它們,布娃娃物理和控制一些如汽車或玩具之類的基本物件。
你也可以看看ODE的官方網站http://www.ode.org/。如果關閉了,可查看維基百科的有關條目。
Other
還有許多其他的物理引擎,我不可能全知道。也許還有其他引擎可用于.NET,但我尚未沒有發現像ODE.NET那樣有用的物理引擎。
下面是我遇到過的一些其他物理引擎:
-
Newton Game Dynamics是一個免費的物理引擎,有很好的示例和文檔。它可用于業余愛好和商業用途,并支持Windows,Mac和Linux平臺。
像這樣的一個免費引擎很不錯了。我記得一年前看到國這個引擎的.NET包裝,但源代碼沒有公開。這使得很難落實到.NET中,當你想改進引擎時也很難改變代碼。而ODE能根據你的需求自由改編。可到網址http://www.newtondynamics.com/中查看。
-
Tokamak Game Physics是另外一個不錯的物理引擎,而且對非商業和商業項目都是完全免費的。它也有不少示例和教程,但仍沒有提供源代碼。引擎有近兩年沒有更新了,看來開發者好像放棄了。論壇上最新的留言在2005年3月。幾年前我實現了一個簡單的.NET包裝,但我沒時間改進。今天,我可能只是利用其他的現有引擎,特別是ODE.NET,因為它已經工作在.NET中。可訪問http://www.tokamakphysics.com/。
-
Physics and Math Library(也稱為Game Physics Engine)是一個德國的引擎,最初是為一本書開發的。它著重于實現許多如Havok或PhysX之類的商業引擎的功能。它是免費使用的,但我無法找到許多截圖或論壇的討論。很難說這個引擎是否值得你花力氣研究(使它運行你的項目中,甚至移植到.NET中),但看來這個項目非常有前途。該網站是http://game-physics-engine.info/。
-
nV Physics Engine(也稱為The Physics Engine)有一個很好的網站和一些截圖(對網站介紹產品而言有截圖總是好的)。它看起來很有希望,但所有示例使用的是C++,你可能沒法改編源代碼。該網站是http://www.thephysicsengine.com/ 。
-
Bullet Physics Library是另一個免費的物理引擎,它包括完整的源代碼,這很好。作者以前曾在Havok工作,這個引擎已經被其他幾個引擎使用,尤其是開源引擎和三維建模工具Blender 3D。它也支持最新的文件格式,并有幾個先進的功能。該網站是http://www.continuousphysics.com/Bullet/ 。
-
可能有更多的物理引擎,尤其是較小的。當你遇到某些問題時,嘗試去尋找一些特定的引擎,通常無需一個成熟的物理引擎。
如你所見,有許多物理引擎可用,但在.NET環境中使用它們不是很容易。你也不能在Xbox 360上利用它們,因為它們都是用C++和非托管代碼開發的,這意味著在Xbox 360上使用XNA時沒有可用的。
但是,即使你最后不使用物理引擎而只是查看示例和教程,你也可以更清楚地了解物理引擎能干什么和哪些部分可能會很難重新自己實現。在賽車游戲不需要一個復雜的物理引擎。那么,這將有一個堅實的基礎,但由于在.NET中實現物理引擎是如此困難,而且我想讓游戲也能運行在Xbox 360上,所以你必須自己實現物理引擎。
轉載于:https://www.cnblogs.com/AlexCheng/archive/2010/10/09/2120192.html
總結
- 上一篇: Web拾遗--字符集的困扰?
- 下一篇: 如何利用.pdb文件去调试