2017年2月14日 星期二

談 Irrlicht

http://irrlicht.sourceforge.net/

因緣際會之下,
2011年底我換工作來到一家新創遊戲公司,
這家公司的決定讓我覺得很有趣(本來是這樣),
他們想要擁有自家 game engine技術,
想要發展自己的 game development 工具與製程,

而那時他們的選擇是 irrlicht 這款 open sourced game engine.
就這樣開啟了 5 年來我與 irrlicht 交手的過程.

先說結論,
就像任何一個 open source 專案一樣,
irrlicht 管理方都只是用自己 part time的時間幫忙維護與開發.
所以可以想像這是一個你看完 demo 之後,
其他功能要什麼沒什麼的工具.
唯一可說嘴的就是 source code 可以無用途限制地讓人修改.

但世界上最有名的一句名言即是:
"免錢的最貴".
所以真的要拿這種工具來製作商業產品,
我想只能用 painful 來形容了.

大致上介紹一下它的架構:
以 source code 來分析的話, irrlicht 主要分為以下幾個 component:
1. VideoDriver : 處理所有繪圖底層與資源相關 API 功能.
2. SceneManager : 場景管理相關功能與演算法.
3. FileSystem : 檔案系統化處理功能.
4. GUIEnvironment : 處理 UI, 最悲劇的部份.
5. Device : 實作各平台視窗顯示與遊戲啟動機制, 坦白說這部份他們做的還蠻用心的.

嗯, 主要的都介紹完了,
那麼重點來了, 是的, 它們並沒有提供 editor (當然他們沒有義務).
但沒有 editor 也是個嚴重的問題,
因此當時我們公司的做法是找到幫 irrcliht 實作過 editor 的某個第三方對象,
直接跟他們購買 source code, 拿回來做我們要的客製化.

再來接下來就是抱怨時間了(誤).
可以透過以下幾個描述來說明"免錢的最貴" 這點.

首先官方自己在 stable release 版中支援的底層 graphics API 只有:
1. D3D8, D3D9,
2. OpenGL 1.x-2.0 (fixed function + programmable).
3. 他們自己寫的 software based driver(看起來比較像是學術研究用途).

因此第一個面對到的情況便是:
如果真的打算用 OpenGL 3.x+ 以上的功能,
就必須自己全部 wrap 一遍, 重寫自己的 video driver.
而更嚴重的問題便是,
想當然地他們官方還沒開始正式支援 OpenGL ES API.
雖然有很多第三方的人幫忙他們擴充,
但直到現在, 仍沒有正式將那些 iOS/Android branch merge 回到 stable release版.
也因此, 在3-4年前我們開始正式啟動手機遊戲開發時,
我們必須有人去 merge 那些 code.
除了 OpenGL ES API之外, 同時還要處理相關圖檔格式的支援,
如 ETC, PVR, webp 等.
以上種種, 當時我們剛好有神人級同事幫忙 carry,
在很快的時間內補完這些功能,
才讓手機遊戲專案避免延遲進度的災難.

另外就是對美術與企劃同事來說要面對的災難級問題:
編輯器.
之前已提過我們必須自己改寫自己要用的編輯器,
也因此編輯器上的所有功能都必須自行想辦法解決,
當然寫出來的功能方便性無法與其他商用工具相比,
結果就變成編輯能力有限, 又讓同事邊用邊罵的工具了.

其實平心而論,
irrlicht 還是對開發者很友善的 open source 團體,
畢竟他們提供的一切都是免費開放, 並同意任何用途的修改的.
我們的製作團隊就在靠自己雙手的情況下,
陸續補完重要的模組:
shaders (lighting / transparent / reflection / refraction / ...)
shadow mapping,
image / mesh import,
particle system,
animation effect editor,
navigation,
parallel processing (for animation / skinning / ...),
state machine,
....
之後, 像跑過一次有點奇幻的旅程般, 把遊戲即時完成並成功上架.

坦白講我一開始聽到要接手 irrlicht 時我還覺得可能蠻有趣的,
但老實說最後我對這個過程只留下負評.
重點即是我們花了太多工時在做本來不必做的事.
很多功能諸如 image / mesh ; navigation ; UI 等等,
在使用其他 engine 工具時都是可以不必花這麼多時間去處理的,
這樣拖慢了開發進度,
但同時對公司整體的開發能量又沒有太大幫助,
(因為我們開發出來的工具連公司內部其他同事都不會去用).

So,
大致上 5 年來的使用經驗介紹到此.
有興趣的人也可以去官網下載來玩, 跑一些他們的 sample.

1 則留言: