蒼時弦也
蒼時弦也
資深軟體工程師
發表於

台灣學生在 3D 遊戲開發的挑戰

最近為了同學畢製的野望開始稍微摸索起 3D Game Engine 這一塊。

原本,我以為會跟過去接觸到大多數的 Open Source 專案一樣,是一個充滿和平與多元的美好世界。 但是,看起來我錯了⋯⋯

3D Game Development 是一個既沒有選擇,也無法安穩過日,一個身處於 Open Source 世界中少數的戰亂之地。

這篇文章可能會有點帶有偏見以及不完全的觀點,也希望業界的高手可以給予指正。內容都是從我探索 Unity3D 以外的世界與選擇,所得出的結論。

總之,我要先給予一個預設情境。

那就是一個 Team 裡面同時有著 Windows 以及 non-Windows 的使用者,這也意味開發上需要做到最基本的 Cross-Platform 這一點。 (同時是一個多媒體設計相關科系的學生團隊)

天生麗質的 Unity3D 就不用說了,製作 3D 遊戲這種入門門檻高的任務,最需要的就是先從好用的工具下手。既然是為了探索 Unity3D 以外的世界,就先將 Unity3D 排除。

(前一篇關於新一代的文章有提到理由,有興趣可以去看看。)

那麼,先從 Unreal (UDK), CryEngine 開始下手,但是我們一開始就碰到的巨大的障礙。即使 Unreal 支援 Build for Mac 但是整個 Tools 還是在 Windows 上。

這很明顯的可以看到目前「相對好用」的工具,大多是 Windows Friendly 的,但是也不能這麼快下定論,得找出更多確切的證據才行。

那麼,從 OpenGL 最基本的圖形繪製開始下手如何?就 Wiki 上的建議,會希望使用者搭配一個 Window Framework 因此我選擇了 Qt 作為基礎。

(當然,也是有數款以 Qt 開發遊戲的案例,以及 Qt 相對其它工具親和與方便許多)

當測試完基本的 OpenGL 繪製圖形後,就準備開始嘗試讀取 .obj 格式的模型(做 3D 遊戲讀取不了模型就不用混了啊!)

首先,我使用的是 Qt5 雖然從 OpenGL 上碰壁了(因為最新穩定版還沒提供 OpenGL Desktop 版本,而是 OpenGL ES 版,但是還是能運作既受了)

Qt5 的新功能中,有一項名為 Qt3D 的功能,可以說是一套基本的 3D 繪圖引擎,制作遊戲基於這個,搭配物理和粒子系統就非常足夠,但是很可惜的是並沒有內件包含在 Library 內,手動 Clone 安裝後,也無法正常的透過 Qt += 3d 的方式引用,手動設定 Library / Inclue Path 後,建置出來的 Qt3D App 也無法正常運作。

因此,我暫時放棄了 Qt3D 這一條路。

接下來是較有名的 OGRE 這套引擎,因為其是單純的 3D 繪圖引擎,能夠輕鬆搭配各種 物理與粒子系統,各方面而言可以說是非常理想的引擎。

既然使用了 Qt 也體會到 Qt 的美好,當然不免俗的挑戰使用 QtOgre 的方式。 但是,非常不幸的,與 Qt3D 給我的重擊一樣⋯⋯

不能運作,而且還是非常類似(甚至一樣)的錯誤。

我想,大概就是單純不 Work 或 OpenGL ES 相融問題之類的吧(苦笑

那麼,既然 QtOgre 不會 Work 那麼我用預設的方式搭配其 API 運行總行了吧? 但是,很可惜的還是一樣的錯誤! 難道是我的環境不對嗎?

(關於這點,在今天有了一些突破,後面會提到。)

很好,既然如此我就只好先從其它相關的 Library 開始下手了! (一般我選用 Open Source 專案會選擇一年以內有更新的專案,因為這會確保與其它相關套件保持相容)

然後我嘗試了另一個與 Qt 也能結合的 Panda3D 但是,除了 C++ 的資訊稀少之外。 那就是他似乎不支援在 Mac 上的 x86_64 架構,這可是一個非常神奇的狀況啊!

For Mac 卻沒有跟上 Mac 的 CPU 也太神奇了!!

好吧,那我自己寫 obj loader 總行了吧? 搜尋了一些資料,看起來有幾個現成的 Library 可以使用,先使用看看確定 Work 再自己改寫吧!

有一個叫做 GLM 的 Library 雖然是 2000 年寫的,但是別無選擇,只好嘗試看看摟!

沒想到,先是碰到 Mac 的 OpenGL Header 跟人家不一樣( OpenGl/GL.h 而非 GL/Gl.h 這也太妙了吧!)

我甚至還發現我電腦裡面除了 X11 還有 X11R6 (不知道是不是我自己有裝 X11 的關係)

總之,處理好 Library 的問題後,總能動了吧?

$ make

竟然出錯了!!

我該說什麼?(泛淚

在 Mac 上建一個 Application 使用 OpenGL 讀取一個 .obj 模型就如此的困難嗎?

但是,這就是現況⋯⋯

之後再跟同學的討論時,同學發現「火炬之光」是使用 OGRE 所制作的(我也注意到官方對 Mac 的 SDK 其實並沒有如此的注重)因此我決定重新挑戰。

之後在官方 Wiki 上找到 TinyOgre 的範例,似乎是一個非常簡單的小程式。 調整過後,我發現似乎是 Plugin 沒有讀取足夠才會發生問題,因此進一步的補齊 Plugin 後,開始運作了! 但是 Cg Program 似乎跟 Mac 不合,頻頻傳出錯誤。當我將 Cg Program 取消 Load 之後,順利看到⋯⋯

「被載入模型的視窗」以及「當掉的海灘球」

沒錯,我們的 OGRE 當。掉。了

不過,這看起來是一個好的開始,因為我們終於開始得到實際的 Render 視窗了!另一方面,我手動 Build 的 SDK 中,也看見了⋯⋯ SampleBrowser 正在正常的運作。

這也代表說,雖然程式出了問題,但是並不代表官方的 Sample 有問題,而是什麼細節我們沒有注意到。

我想,只要在努力一點就可以突破了!

(當然,如果還是不行就任命自己開發一套吧,雖然有找到對應的文件,但是消化與融入 Qt 仍需要一點時間。而且還有 Qt3D 可以期待。)

大致上來說,可以注意到對於學生制作 3D 遊戲,除了大公司提供的遊戲引擎外,並沒有太多的選擇。而在這些選擇之外的 Open Source 專案,也還是 Windows Friendly 的狀況(至少 Ogre 相關討論在 Windows上並沒有 Mac 這些相關的問題)

另一方面,多媒體設計學相關科系的學生有沒有資工系有興趣的人可以協助,在這一整個彈盡糧絕的狀況下,選擇就是又少又悲傷了⋯⋯

至少我認為,即使 Unity3D 是非常容易上手與入門的軟體,還是要有人站出來,用 Unity3D 以外的方式去呈現和表達 3D 遊戲制作領域。

恩?好像沒提到什麼挑戰,都是在講踩到地雷的感想,不管了(逃~