Game Engine Architecture by Jason Gregory:1.6 實時遊戲引擎架構(3)

1.6.9 性能分析及調試工具(Profiling and Debugging Tools)

遊戲是實時系統,因此,遊戲引擎開發者一般需要查看分析他們的遊戲的性能以作性能上的優化。另外,內存資源經常緊缺,所以開發者也很認真的對待和使用內存分析工具。如圖1.23所示,性能查看和調試工具層,包含前面所提到的東西,另外還包括其它的調試工具,如調試用繪製(debug drawing),遊戲內菜單或控制檯(in-game menu/console),然後還有作爲測試及調試用的記錄及回放遊戲的能力。

有許多好的通用的軟件分析工具,如:
* Intel's VTune
* IBM's Quantify and Purify(part of the PurifyPlus tool suite)
* Compuware's Bounds Checker

不管怎樣,大多數遊戲引擎伴隨着一套自定義的性能查看及調試工具。例如,它們可能包括下列其中一個或多個:
* 一個手動分析代碼的機制,以便計算某段特定代碼的運行時間
* 一個當遊戲在運行時能夠把分析數據顯示在屏幕上的工具
* 一個能把性能情況轉存到文件文件或者Excel表格中的工具
* 一個能檢測多少內存被引擎使用,具體哪個子系統又用了多少的工具,並能以各種不同形式顯示在屏幕上
* 一個能在遊戲結束或者運行中把內存使用情況,峯值,及泄漏情況轉存的機制
* 能通過代碼改變調試輸出狀態,打開/關閉調試輸出種類及控制輸出詳細程度的工具
* 記錄遊戲事件並回放的機制。這個比較難做好,不過做得恰當的話將會是一個很有價值的追蹤bug的工具


1.6.10 碰撞及物理

碰撞檢測對每個遊戲來說都是很重要的。沒有它,物體之間就會相互滲透,不可能跟虛擬的3D世界進行任何合理的交互。有的遊戲還包含了一個真實世界的或者接近真實世界的動態模擬。在遊戲業中我們稱之爲“物理系統”,不過“剛體物理”(rigid body dynamics)這個概念更準確,因爲我們一般只考慮剛體的動作(運動學上的)及引起這個動作的力和扭矩(力學上的)。這一層如圖1.24所描述。

碰撞和物理經常非常緊密的成對出現。這是由於碰撞的被檢測,往往是物理上受力約束及綜合邏輯的結果。今天很少有遊戲公司寫他們自己的碰撞/物理引擎,代之以將第三方的SDK整合進引擎。

* Havok. 今天業界的黃金標準。非常豐富的特性及全面的優異的性能
* PhysX. NVIDIA的。這是另外一個卓越的碰撞及物理引擎。它被整合進Unreal Engine 3,還是PC遊戲開發的一個獨立的免費產品。PhysX本來是設計爲Ageia的新的物理加速芯片的接口的。SDK現在被NVIDIA所有併發布,他們修改PhysX讓它跑在了公司的最新的GPU上。

 

1.24CollisionAndPhysicSystem

圖1.24 Collision and physics subsystem

也有開源的物理/碰撞引擎。可能最爲有名的是Open Dynamics Engine(ODE). 更多信息請參見: http://www.ode.org.
I-Collide, V-Collide, 還有RAPID是另外的有名的非商業碰撞檢測引擎。這三個都是由University of North Caolina(UNC)開發的。更多信息請參見:http://www.cs.unc.edu/~geom/I_COLLIDE/index.html, http://www.cs.unc.edu/~geom/V_COLLIDE/index.html, http://www.cs.unc.edu/~geom/OBB/OBBBT.html.


1.6.11 動畫(Animation)
任何有有生命的或者類似有生命的角色的遊戲(人類、動物、卡通角色,甚至機器人),都需要一個動畫系統。遊戲中用到的動畫系統有五種:
* 精靈/圖片動畫(sprite/texture animation)
* 剛體層級動畫(gigid body hierarchy animation)
* 骨骼動畫(skeletal animation)
* 頂點動畫(vertex animation)
* 形態目標(morph targets, MT)

骨骼動畫允許一個細緻的3D角色模型的網格能被一個由動畫師用一個有關聯的非常簡單的骨骼定位。當骨骼移動,這些3D模型網格上的頂點也隨之移動。儘管有些引擎中使用MT及頂點動畫,骨骼動畫是今天的遊戲中最流行的動畫製作方式。因爲,它將作爲本書的重點。

你可能注意到圖1.11中,骨骼網絡渲染(Skeletal Mesh Rendering)是分開的渲染器跟動畫系統之間的橋樑。這兒有一個非常緊密的協作,不過接口是良好定義了的。動畫系統爲骨骼中的每一根骨頭計算出一個位置,然後將位置作爲矩陣系列(palette of matrices)之一傳遞給渲染引擎。渲染器對每個頂點用矩陣系統中的一個或多個矩陣進行座標變換,作出一個最終的混合的頂點位置。這個過程被稱之爲蒙皮(skinning)。

動畫和物理系統之間也有一個緊密的關係, 比如當使用布娃娃(rag doll)的時候。布娃娃是一個柔軟的(一般是沒有生命的)動畫角色,它的身體的動畫由物理系統模擬。物理引擎將它的身體的各個部件看作是一個有限定關係的剛體,然後算出它們的位置及朝向。動畫系統計算出渲染引擎需要用來將角色繪製到屏幕上去的矩陣系列.


1.6.12 人機設備接口(Human Interface Devices(HID))

任何一個遊戲都需要處理玩家的輸入,它們由以下各種HID獲得:
* 鍵盤及鼠標
* 遊戲手柄
* 其它特殊的遊戲控制器,如方向盤, 釣魚杆,跳舞毯, Wii遙控器,等等。

有時候我們稱這個部件爲用戶I/O組件,因爲我們也通過HID給玩家以輸出,如遊戲手柄的力反饋/震動,或者Wii遙控器發出來的聲音。
HID引擎組件有時候架構成將某個流行的硬件平臺上的底層遊戲控制跟上層遊戲控制分離開來。它轉發硬件傳來的原始數據,爲遊戲手柄的每個搖桿中間劃出一個不活動區域,檢測按鈕按下和鬆開事件,雙擊按鈕事件,突發的和平緩的加速輸入(如PS3的sixaxis手柄),等。它一般提供一個可以自定義物理輸入和遊戲功能映射的機制。它還經常包含一個檢測"合弦"輸入(多個按鍵一起按下),序列輸入(在某個限定時間內以一定次序按鍵),和手勢(對按鍵、搖桿、加速器的序列輸入).

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章