Thursday, August 31, 2006

簡單原是美

昨天,和一個朋友討論 OGRE3D,我說道 OGRE3D 令我很困惑,看多了,試多了 OGRE3D,發現她的複雜程度超符想像,而且同時再發現我自己的 Ngan-GINE'3D,在設計方面真的很簡單。

如果要將 Ngan-GINE'3D,和其他類似 OGRE3D 的 Graphic Engine 比較,我會以一個比喻來形容:若 OGRE3D 是個 3D Engine,那 Ngan-GINE'3D 是個 2D 型態的 3D Engine。我在說甚麼呢?我真的沒有說錯啊,因為 Ngan-GINE'3D 的設計,看上去真的好像個 2D Engine,讓我簡單地作一說明。在一般的 3D Engine,都會用上 Scene Management,每一樣物件,無論是場景,3D 人物.....等等,都要套入一些叫 Scene Node 的節點上,這樣整個 3D 場景可以有規律地處理好。

Simply the Best而 Ngan-GINE'3D 是沒有 Scene Management 的,亦即是沒有 Scene Node 等的節點,而且沒有設定那種物件要先畫,那種後畫,情形和一般的 2D Engine 相似。在我用它來做遊戲時,場景上的東西都是由我分配先後次序,例如先畫 Skybox,然後是 Level Map,靜態物件,3D 人物,Billboard 效果,最後是 2D Sprite / GUI,處理上真的和 2D Engine 沒太大分別,所以我會用「 2D 型態的 3D Engine」來形容 Ngan-GINE'3D。

Ngan-GINE'3D 這樣的設計,在 G-Force 2 MX 等級 3D Card 中能夠實現,要多謝科技的進步,令不可能變成可能,簡單原是美

Thursday, August 24, 2006

2D ? 沒問題 !!

2D Sprite digits哈... 終於用OGRE3D成功地做出了2D Sprite系統了,有UV Animation,也算不錯的了。這個2D Sprite確是用了我不少時間來做,最初的時候,用Overlay時有個大問題,只要我啟動任何一個2D Sprite,整個系統的其他Overlay也會消失,就連TextAreaOverlay也不能顯示出來,令我完全摸不著頭腦,後來試了多次也不能正確的顯示它們。

在近期的一個多星期工作都頗為忙碌,沒有太多時間去改做自己的Ngan-GINE'3D,就這樣我就用空餘的時間,上OGRE3D的網頁多看幾遍有關Overlay的資料。到了前晚,強迫自己坐下來再做一次,真的很奇怪,這樣重新做一次,以往的問題全都消失了,顯示出來的2D圖像都很正確,更沒有遮蔽著其他如TextAreaOverlay等2D圖像,奇怪得很。

有時候Programming就是這樣子,當有問題不能夠解決的時候,走開一會兒再回來試試,反而問題會簡單順利地解決好。

Saturday, August 19, 2006

HIMMG vol.03

在開發Ngan-GINE'3D當中,除了Skinned Mesh及Skeleton Animation外,相信最難纏的,就是如何做Object 與 Level Map之間的Collision Detection了,其實到現在我還未做好的,只是用了3rd party的Physics Engine來代替了。

Super-low for level collision我在做Level Map的Collision Detection時,想著其他遊戲是如何做的時候,我發現一個有趣的分歧,就是有些日本遊戲和其他國家遊戲的地圖Collision有點不同。看上去日本遊戲的地圖Collision資料都不是和原Level Map資料相同,我相信他們是用另一組超低Polygon資料,作為Collision Detection,減少運算量。就是這樣,我就決定用另一組超低Polygon資料做為Object與Level Map之間的Collision了,始終在我的Ngan-GINE'3D內,沒有任何類似BSP Tree的Scene Management,所以用超低Polygon資料減少運算量是最好的選擇。

這樣做解決了一般使用問題,並且以這方法參加了遊戲製作比賽,但後來想到,若果我的Level Map不只是一個Section,而是有更多不同的Section連接一起,那麼應該如何處理?後來就想到了,可以使用Portal系統了。我的Portal系統非常地簡單,當中只是有偵測Camera或Object在那個Sector,和Camera看到那個Sector的Portal,並沒有加進Camera在那一個Portal再計算Frustum Cull功能。關於我的Portal系統是如何運作,我曾經寫過一篇文章說明的呢。

到了近期,用上了Newton Game Dynamics後,已沒有再特別研究Object與Level Map Collision了,反而是用了時間研究,物理和遊戲之間如何達到和諧,融入Gameplay當中,這個才是將物理加入遊戲後真正的方向,就好像Half-Life 2就是個好例子。

Friday, August 18, 2006

老闆不可愛

老闆可愛嗎?相信在支薪水的那天,我才會覺得老闆是可愛的,所以,老闆是不可愛的。老闆除了不可愛,記憶力也不太好,讓我舉個例子。

數年前的一個早上,老闆要我做一個工作,老闆問我會怎樣做,我說「不如試試辦法A,可能有不錯的效果」,老闆聽後想了一會,回答說「還是用辦法B吧,比較穩紮穩打好了」。沒問題,我是打工仔,老闆說怎麼辦就怎麼辦。到了同一天的下午,老闆經過我的座位時,看看我的工作,老闆很驚訝地問我「你不是說用辦法A的嗎?為什麼你在用辦法B工作」,我登時感到很愕然,回答說「老闆你叫我用辦法B的,比較穩紮穩打啊」,老闆說「不、不、不,是用辦法A呀」。我無言以對,唯一可以做的,就是用辦法A重頭做一遍。

數年後的兩天前,上面的事情再次發生在我身上,只是老闆不是同一人罷了。

( 我所說的是我的老闆,不是其他人的老闆,朋友切勿誤會 )

Friday, August 11, 2006

十字路口 ~ !!

這幾晚都在研究,在 OGRE3D 中那些功能可以做到 2D Sprite,用 Overlay 嗎?不可,因為會有蓋過其他 Overlay 的問題。用 Rectangle2D?不能,因為沒有功能可以移動或旋轉。用 Billboard 呢?有大問題,不知如何設置 Camera 及 Viewport 才可以令 3D 位置轉為 2D Screen 位置。就是一大堆這類的擾人問題,如夜裡的蚊子一樣,在你耳邊不聽地飛,令你精神受到困擾。

真的很沮喪,在研究 OGRE3D 上每每都遇上難題,而且還要找不著答案。回想自己的 Ngan-GINE'3D,在製作時確實是以簡單易用為主,當然是以我對遊戲製作的認識作標準,雖然沒有甚麼利害的功能,但在速度上還算可以。這樣子下,我是繼續研究 OGRE3D,還是將時間投資在改進 / 加強 Ngan-GINE'3D 呢?是個十字路口的決擇啊。

Saturday, August 05, 2006

OGRE3D % Ngan-GINE'3D = ?

上一回說過,寫了個 OGRE3D 的 Manual Loader,但不知道是否真的起作用,後來我發現是可以強制用它來讀入資料的,隨即便試試,事實就和我預計的一樣,是不能正常運作的。所以前天晚上用了兩個小時,來測試這個 Loader,這個情況就令我想到,寫程式懂得 Debug 是非常重要的,最後當然是成功了。

終於搞清楚 OGRE3D 的 Billboard 及 Billboard Set 的分別了,試了一會後,成功做到了Texture UV Animation 了,因為在我的 Ngan-GINE'3D 內,也是用相同的方法做 Billboard 的,可以說是成功地代替了原 Ngan-GINE'3D 的 Billboard 整體功能了。

現在用 OGRE3D 的功能,來取代 Ngan-GINE'3D,大約如下:
- Skin Mesh
- Skeleton Animation Control
- Level Map with Portal-System
- Billboard with Animation

其他的功能,例如 2D Sprite 功能(用作 GUI,相信和 Billboard 差不多)還要再作研究。而Skybox/SkyDome 在 OGRE3D 內已有,不用特別研究。另外 DirectInput、WAV 及 OGG 播放等等,用回 Ngan-GINE'3D 也可以,所以沒有問題。相信只要做好 2D Sprite 功能後,就可以代替舊 Ngan-GINE'3D 了,新的名字還未想到,現時都只是叫作「OG-Ng3D」罷了。