用了一段時間Gamebryo了——做了2個月的demo,由於一些不可抗拒的因素,demo被迫喊停,我和另外一個同事被調到了項目組,做了2個月的東西完全被否決掉,心頭總是有些失落的。最近在反思的同時也想把使用Gamebryo的感受記錄下來。
首先說明,在3D方面我就是一打醬油的,也就知道那麼點基礎概念,所以這篇文章的內容和所表達的觀點可能會有一些偏差。
首先,Gamebryo是一個成熟的3D商業引擎,已經有不少的遊戲公司在採用它作為引擎開發3D項目,具體的項目可以到GB 的Wiki上去找。GB的應用方式,大致有2種,一種是基於2.6版本的,直接使用Core Runtime,另外就是截至目前發布的最新lightspeed。直接使用Core Runtime的方式應該是lightspeed出來之前的應用方式,它和lightspeed很大的區別在於2個方面,1是lightspeed自身具備更高層的架構封裝,2是擁有一個很強大的工具Toolbench。
Toolbench應該是GB的工具開發戰略:所有的功能都能依靠外掛程式整合到Toolbench中,Toolbench本身是一個開放式的工具架構,目前發布的lightspeed版本中,Toolbench內建3個外掛程式:world builder ,script debugger,Entity Modeling Tool。world builder是世界編輯器,有點類似於情境編輯器,script debugger是指令碼調試器,目前支援lua和python兩種指令碼語言,這裡順便提一下,Toolbench的指令碼系統非常方便,它整合了swig,可以在很短的時間就能搭建一個指令碼模組,調試器雖然功能還不是很豐富,但也還算方便(缺少某些很好用,實現起來也很簡單的功能,就連查看一個變數值都只能輸入到watch視窗查看),另外它的指令碼編輯器就不敢恭維了,非常難用。Entity Modeling Tool是建模工具,可以在裡面拖拉幾個model,然後定製其行為和屬性,很自然就和指令碼系統聯絡上了。
lightspeed的另一個特點是高層的架構封裝,比如在這個架構下,要實現攝像機,只需要寫一個具備攝像機功能的CameraService,然後add到ServiceManager裡面就行了,同樣如果需要實現天氣系統,寫一個WeatherService add到ServiceManager即可。這樣的設計是正交的。
GB對美術的考慮是採用3dmax,maya等工具的外掛程式方式,讓美術直接在這些他們經常使用的工具中編輯。美術工作的流程大概是這樣的,首先在max中編輯好物件,然後使用GB的外掛程式匯出成相應的格式(Nif或kfm等),然後視具體應用加入到scene designer等工具中編輯。
由於公司是購買的source版本,所以可以看到代碼,總的來說,代碼很規範,設計思路也很明確,典型的OO設計,到目前為止沒看到啥意料之外的代碼(因為代碼看的很少:D)。大部分工具GUI採用C#編寫,邏輯採用C++/CLI編寫,其實也就是介面那層使用。我想,這樣設計有2個好處:其一,C#的優勢是開發效率高,有龐大的.net類庫支援,也能做出一些複雜的介面,其二,可以強制分離介面和邏輯,因為這樣設計的話通常是需要做介面把c#和c++代碼結合起來,做介面的人不參與邏輯,做邏輯的人不參與介面。
物理方面,GB整合了PhysX,這個就不多說了。GB裡面內建了一些PhysX的demo。
工具方面,除了Max外掛程式 和Toolbench之外,GB還有scene designer,animation tool,assert viewer等幾個工具
再說說文檔,文檔的內容很豐富,但錯誤很多,我們就發現好幾處,很花了一些時間來解決,遺憾的是沒有記錄下來。對文檔錯誤我還是比較能夠理解的,編寫文檔是一項細緻的工作,而且各個版本不同升級和修訂,都會對文檔維護工作帶來很多麻煩。在用GB正是開始做項目之前,建議團隊裡面最好有人能通讀一遍文檔,在遇到問題的時候腦袋裡有那麼一點點印象,能夠很快的定位到文檔。很榮幸我們公司裡面有這麼一個人:D
最後談談目前我們遇到的一些問題,首先是特效編輯這塊,GB的方案是在max中製作,然後匯出成Nif等檔案,然而美術對這種工作方式有較大的意見,主要體現在效率太低,據美術的經驗,在max中編輯特性和專用工具相比,可能會有5倍左右的效率差距,這是一個不小的資料,基於這種情況,應該有必要專門開發一個特效編輯器。另外一個問題是地形方面的,GB的情境最多隻支援一個Terrian(據說下個版本會支援多個),並且地表貼圖只能支援4層(同樣是據說,有人改到了支援16層,貌似不太困難),總來的來說,感覺地形方面還比較薄弱。
最最後,紀念一下我們的demo——supersonic,已完成的功能有以下幾點,計劃最近能整理到blog中。
全3D視角攝像機,包括俯仰,旋轉,攝像機和地形及物件的碰撞
地形,物件pick
指令碼控制角色動畫
投影紋理
碰撞檢測:Walkable & Non-walkable
粒子方面:天氣系統,雨雪天氣的實現
shader:水面效果
真的是最後了,再次重申以上是打醬油的觀點和經驗,由於使用時間太短,其他方面接觸也不深,就不談了。