Sunday, May 30, 2010

To Compromise 妥協的意義

長久以來,很多人說,妥協是一種藝術,而在遊戲製作的過程中,妥協不只是藝術,也是認知。怎麼樣的認知?有關遊戲製作的認知:技術上,能力上,規模上,時間上。

技術:在甚麼平台上製作呢?Programming Language、2D、3D、Shader、Physics、A.I. 及 Network 等等,能夠做得到遊戲設計的要求嗎?要開發 iPhone 遊戲,懂得 Objective-C 嗎?2D 技術比較舊,Artist 及 Programmer 認識嗎?3D 及 Shader 技術上完整嗎? Physics 能夠順利駕馭嗎?A.I. 可以滿足 GamePlay 的要求嗎?Network 技術有否足夠支援?遊戲製作的工具成熟嗎?

能力:是關於製作人員的能力為主,Programmer 能否做出遊戲設計的要求嗎?Artist 可以做出 2D Pixel artwork 嗎?3D Modeling 及 Shader 上,他們能夠清楚掌握嗎?

規模:製作人員數量能否應付製作所需的要求?過多人員或過少人員,都會對製作產品過程有不同的影響。

時間:有技術,有能力,規模恰當,但時間是否充裕?先不談論製作期間的任何改動導致的延誤,製作開始時所預計的時間是否恰當?

以上種種因素,其實也可以從「妥協」中找到出路,例如在 Wii 上不能做出 XBox360 / PS3 圖像質數,便要將圖像要求降低。亦不能要求在 iPhone / iPod 上,製作出一個超越 God of War 的 3D 動作遊戲。甚至不應該要求,在 2D Pixel 中,要表現出浮點數 ( floating point ) 的精確度。時間上不容許延誤,那麼可以嘗試刪減遊戲的內容,來縮短製作期。但可惜的是,剛剛所說的,也可以是完全沒用的,因為還有一個元素,令「妥協」變成不可取,令整個遊戲製作翻天覆地,那是甚麼?就是 Game Designer,一個對以上所說的都毫無認知的 Game Designer。

所以,Game Designer 不好做,做得好的 Game Designer 都不能「想當不想做」( 廣東話 : 恨撈唔恨做 )。

Monday, May 03, 2010

忽發奇想 - Timer

在電腦裡,Timer 是一個很重要的部份,在 Hardware 和 Software 中也亦然。很多 Program 程式中也有 Timer 來作計算的用途,在遊戲程式中亦當然也很多用呢。

今晚忽發奇想,究竟 Timer 是否一個很費時的工具?想到這裡,我便想用 Ogng'3D 中的 Timer 工具做個小實驗。

建立 256 個 Timer,每個 Timer 設定的 Delay 都有不一樣,究竟程式在這麼多的 Timer 下,會否被拖垮呢?答案是:不會!

在 Ogng'3D 中,使用了 256 個 Timer 雖然會令程式變得慢了很多,足足慢了十倍之多,但要在 60 FPS 中運作,還卓卓有餘。

其實,Timer 並不是那麼恐怖的呢......。

Sunday, May 02, 2010

Ogre on the iPhone

昨天在 Ogre Forum 裡看到有位用家,在 iPhone 3GS 測試了 Ogre 的效能,結果很吸引的說:
  • 150,000 triangles, 1 directional light, 1 texture at 30fps
  • 140,000 triangles, lighting off, 2 textures (multitexture) at 30fps
  • 100,000 triangles, 1 directional light, 1 texture, 25 batches at 30fps
  • 16 1,400 triangle characters with 24 skinned bones and a 50,000 triangle, 25 batch static backdrop and 1 directional light at 30fps
  • 32 of that same character playing the same animation using blend shapes at 30fp
以上的數據,顯示 Ogre 在 iPhone 3GS 中的表現很不錯,很適合做些小型遊戲。

[ Forum 原文 ]

Saturday, May 01, 2010

可惡的GUID古董

我自己很喜歡用 C 寫程式,所以我是用一個叫 PellesC 的工具,來編寫遊戲程式。

早在一年多前,PellesC 更新了新版本 ( 是個 Major release 呢 ),我很興奮地下載來用,但是惡夢開始了,因為用這個新版本 Compile 的時候,出現了一大堆如下的 Error:
......
xxxXXX_GUID is multiply defined - in YYY.obj and ZZZ.obj
yyyXXX_GUID is multiply defined - in YYY.obj and ZZZ.obj
zzzXXX_GUID is multiply defined - in YYY.obj and ZZZ.obj
......

我不知道是甚麼問題,完全不明白新的 PellesC 為何會出現這些 Error ( 舊的版本卻完全沒有以上的問題... )。上網查查看,一大堆不明所以,又或者不相關的搜尋結果,看得我頭也大了。這一大堆古怪的 Error,令我只能回到舊版本的 PellesC 中,直到今天。

雖然近月的工作超級忙,但也抽了丁點的時間做些 Ogng'3D 的改善工作,決心再在那堆 GUID 問題裡鑽一鑽。上網再細心地看那些不明所以的搜尋結果,發現了 INITGUID 這個東西,原來這個東西可以說是個古董 ( 有點誇張 ... ),心裡忽然想到可能和這個有關係,再回看 Ogng'3D 中的 Source code,搜查一下,發現我確實用了這個 INITGUID,這時忽然覺得曙光漸露,即時裝上那個 PellesC 新版本 ( 但已是一年多前了... ),刪除了那句 INITGUID,然後 Compile,成功了!

原來是 INITGUID 這個老古董,害我不能用 PellesC 新版本達一年多,很令我討厭的說!( 同時也覺得自己很戇居,超級的那種... )