1. 程式人生 > >四大開源3d遊戲引擎探究

四大開源3d遊戲引擎探究

本人水平有限,只對於長久以來研究的幾個經典3d遊戲引擎的設計思想、程式架構和應用行深入剖析的結果與遊戲開發同行分享,文件有不妥之處請指出,期待我們的共同進步。
引擎名稱:
1.       orge(鬼怪)
2.       Irrlicht(鬼火),
3.       Nebula(星雲)
4.       klayGE(。。)

前言:目前,開源3d遊戲引擎已經趨近於商業化引擎標準,許多引擎在圖形渲染,記憶體分配,網路通訊方面甚超越了許多商業引擎。這些開源引擎的共同特點是這樣的:
(1)引擎框架:多數的3d引擎框架為樹形結構。框架最為清晰、經典的遊戲引擎是Nebula星雲引擎。父子節點構成了整個框架的層次,首先nebula有一個叫nRoot的類,它是所有物件類的基類,nRoot中有一個名字變數,有一個parent指標指向它的父結點,
  還有一個childlist連結串列儲存它所擁有的子結點.因為結點也是nRoot類,所有結點的子結點中也可能有子結點,
  這樣就形成了一個樹形目錄結構.nRoot中有一個nRoot* Find( const char* name )方法,功能很簡單,就是遍歷自已的
  childlist連結串列對比每一個nRoot結點物件的名字,如果相同就返回些物件的指標.。其他引擎也有類似的框架,比如orge的root根節點下面子節點代表每一個功能模組。

(2)記憶體管理:多數採取引用計數模式(引用計數為每當初始化一個指標,在函式執行完畢後自動釋放,並且把這個過程進行計數)這樣的好處在於對於專案的可控性很有保障,避免記憶體洩漏,重新命名物件等。但是這種
(3)圖形處理:多采取三個經典模組:場景管理器,資源管理器,渲染器。這種劃分模式以orge鬼怪引擎和irrlicht鬼火引擎最為典型。先進的引擎還配有一套專門從事對於圖形程式設計的指令碼語言。比如orge內建一套指令碼,可以控制場景管理器,資源管理器的圖形引數及圖形演算法進行編輯,這樣可以跳過c++繁冗的程式編寫過程和漫長的專案編譯時間而直接執行察看修改後程式的效果。當然,這種指令碼語言模式有些效仿目前最著名的商業遊戲引擎unreal3虛幻3引擎。關於場景的圖形演算法大多數採用8叉樹與bsp(二叉空間分割)方法,支援大遊戲場景的區域性渲染功能。
(4)跨平臺性:
本文要介紹的4個3d引擎都具有跨平臺開發效能,一般可以支援多種作業系統和開發工具,比如windous下的vs.net,linux下的codewarrior等。而且像irrilicht鬼火這種引擎還支援多種語言,vc,vb等,但是目前版本其本身並無指令碼可用。這些引擎還支援多種底層圖形api,比如dx,opengl等。開發者可以隨意選擇熟悉的3d渲染api來驅動遊戲程式。注意:KlayGE是本文唯一入選的國產引擎,但該引擎沒有支援多api渲染機制,底層圖形方面只是用opengl實現。
(5)網路部分功能較差:目前說到的幾個引擎在網路方面都不是很強大,比如著名的orge引擎就是專注的圖形引擎,不具備伺服器-客戶端的網路工作模式。目前,只有北京塗鴉產的起點引擎在網路方面在國產引擎中可以算是比較出色。值得一提的是在網路方面比較強大的商業引擎目前最火的就是bigworld,如果利用適當的渲染演算法該引擎可以輕鬆支撐上百人
的線上pk。
(6)可接收多種3d美術資源,比如鬼火引擎可以接受Maya,3DStudio Max,COLLADA,DeleD,Milkshape,Quake 3 levels,Quake2 models,DirectX,Pulsar,My3DTools,FSRad以及Cartography Shop工具匯出的資源。但是orge可接受的種類要更多。
支援骨骼動畫和關鍵貞動畫兩種經典動畫形式。

好了,目前我們基本瞭解了市面上著名的3d引擎的基本共同點,那麼下面就列舉以下他們的特性及優缺點。
1.Orge鬼怪:
優點:(1)強悍的圖形渲染質量。該引擎的粒子系統很強,製作的光影,霧化效果極佳,圖形方面全面超過torque,朱位元等普通商業引擎的能力。
(2)高效的圖形程式設計機制。內建的特殊指令碼語言,並且具有視覺化的編輯工具,可以直接進行外部資料修改,內部除錯。
缺點:(1)網路部分的空白
(2)高度計算量和高精度的渲染模式,使得記憶體和視訊記憶體的壓力都很大,做出的程式整體效率不高。沒有相關隨著硬體加速調整渲染演算法和引數的api。
2.Irrlicht鬼火:
優點:(1)精悍的引擎框架,和orge及其相似。
(2)高質量的圖形渲染,雖然沒有orge的質量優越,但是比起一般的商業引擎仍然略勝一籌。
(3)清晰單一的c++語言實現使得引擎沒有繁冗龐大的外部指令碼編譯器。
(4)支援根據硬體加速調整渲染模組的引數和演算法的機制。整體程式會跑得很快流暢,但是畫質降低。犧牲畫質來保證效能。
缺點:(1)缺乏高效開發的指令碼。無法像orge那樣高質量高效率的進行圖形程式設計。
(2)相對其它遊戲引擎鬼火的框架可擴充套件性不強,設計模式相對單調而簡潔。
(3)支援圖形演算法單一,比如骨骼動畫多貼圖需要很麻煩的過程。