那今天就來繼續昨天的部分,在Runtime game engine architecture的架構與這五層架構做對照。
所以我們還是先放上這張圖,供對照。
- Runtime game engine architecture (圖/《Game Engine Architecture》- 1.16)
Platform Layer
處理硬體、作業系統相關。就像先前所說,在開發應用程式的時候我們必須要注意到平台差異。在不同的作業系統或是硬體架構上開發時,或許會接觸到其特定的API函式或Class Library。而類似SDL的第三方函式庫就是為此而生的,他大幅的簡化了圖像、聲音、裝置的輸入輸出等功能實現的工作量。對於開發一個跨平台應用程式所需要的基礎功能可說是應有盡有。
-
SDL Library 示意圖 (圖/維基百科-SDL)
-
硬體層
執行遊戲的硬體相關。
-
驅動層
驅動程序(device driver)相關。
-
系統層
作業系統(operating system)相關。
第三方軟體開發套件(SDK)、中介軟體(middleware)等等...提供基於函式或是基於類的接口,也就是API。通常使用於實現核心層(Core Layer)的數學、物理庫、渲染、資料結構與演算法等等。
- 第三方套件層
- 資料結構與演算法
- 圖形
- 物理與碰撞
- Havok
- PhysX
- Open Dynamics Engine(ODE)
- Bullet3
- 角色動畫
- 人工智能
- 平台獨立層
處理各個平台文件系統、網路傳輸、多線程管理等等類,將其餘引擎與大部分的底層平台相隔開來。
Core Layer
遊戲引擎的核心系統,比較典型的核心系統常見功能如下。透過平台層整合了不同平台的差異性,與一些數學、圖形、物理的底層API等等,我們將其用在實現工具程式(Utility)。
- 工具程式(Utility)
- 斷言(assertion)
這是一種檢查錯誤的代碼,透過捕捉邏輯錯誤或是與假設不符的問題發生的情況。
- 記憶體管理
記憶體分配及釋放,並有效控制內存碎片的影響。
- 數學庫
提供將來所需要用到數學時的API,例如向量(vector)、矩陣(matrix)、三角學(trigonometric)、數值積分(numerical integration)、解方程組等等的操作。
- 資料結構與演算法庫
基礎的資料結構,鏈結串列、動態陣列、二元樹、雜湊表等等。或是演算法,排序、搜尋。優化記憶體分配,保證運行的效率。
Resource Layer
管理遊戲資產(Asset)、輸入數據等等的管理系統。提供一組API去訪問各種類型的遊戲數據又或是其他的輸入數據(如3D模型、物理參數、遊戲場景等等)
- 資源管理
- model資源
- texture資源
- 材質資源
- 字體資源
- 骨骼資源
- 碰撞資源
- 物理參數
- 場景圖
Function Layer
在遊戲引擎中,渲染引擎是一個龐大且複雜的組件。實現方法也不固定,將來實作環節時我會介紹另外一種實現方法,這裡就先介紹通用的基本設計,分層架構(layered architecture)。
- 渲染引擎
- 低階渲染器
- 材質及著色器
- 靜態及動態光照
- 攝影機
- 文本及字體
- 幾何圖形
- viewport
- 紋理及表面
- 調試繪圖
- 圖形設備接口 (graphics device interface)
- 場景圖/剔除優化演算法
- 視覺效果
- full-screen post effect
- 高動態範圍(HDR)
- 全屏抗鋸齒(FSAA)
- 顏色校正(color correction)
- 顏色偏移(color-shift)
- bleach bypass
- 飽和度(saturation)
- 去飽和度(desaturation)
- 前端
- HUD
- 遊戲中menu、主控台
- GUI
- full-motion viedo(FMV)
- in-game cinemation(IGC)
物理系統,又稱為剛體動力學模擬。與碰撞檢測是基於模擬物理系統使虛擬世界中的物體互動的一大重要功能。很少有遊戲引擎開發者會自行編寫物理系統,因為它是一個龐大、複雜且要求高的一套系統,最常見使用第三方物理SDK來實現。
-
物理與碰撞
- 力及約束
- 光線/形狀投射
- 剛體
- Phrantom
- 形狀/可碰撞體
- 物理/碰撞
-
動畫
- sprite/texture animation
- rigid body hierarchy animation
- skeletal animation
- 動畫狀態及層
- 反向運動學(IK)
- 遊戲用後期處理
- 線性插值及加法混和
- 動畫播放
- 子骨骼動畫
- 動畫解壓
- per-vertex animation
- morph target animation
玩家的輸入輸出(I/O)。按下、釋放按鈕,按鈕長按,不同控制器間特別的輸入方式等等處理。
- human interface device (HID)
- 音頻
- 多人遊戲/網路
- 遊戲性基礎系統
- 遊戲世界、遊戲對象
- 靜態背景、幾何物體
- 動態剛體
- 玩家角色 (PC)
- 非玩家角色 (NPC)
- 武器
- 拋射物
- 載具
- 光源
- 攝影機
- 事件系統
- 腳本系統
- 人工智能基礎
- 路徑搜尋(A*演算法等等...)
- 腦(brain)、代理(agent)、action(動作)
- 個別遊戲專用系統
Tool Layer
昨天我們提到了工具套件的概念。我們可以有些工具來編輯、調適所創作的遊戲世界,也就是世界編輯器的概念。同時,我們也需要從處理相關的外部輸入數據,也就是資產(Asset)的管理工具等等。
後記