|
我是在香港土生土長、現于上海工作的游戲程序員。有曰人生如戲,當代若說人生如游戲或更有共鳴。然而,我們是這游戲的玩家而不是設計師,世事往往并非各遂其愿,卻又帶來無盡驚喜。游戲中與其以賺取貨幣提升等級為目標,不如享受過程,盡興而歸。適逢其會,有緣和大家分享我的成長點滴。
童年玩意
我生于1977年英國殖民時代的香港。家境并不富裕,童年羨慕其他小朋友擁有許多玩具,曾經想過將來要做玩具設計師,現在做游戲編程,也許也不差太遠。當年缺乏玩具,就找到些不花錢的玩意兒,例如折紙。從小父母每周帶我去借閱圖書,包括折紙書籍。回想起來,我懷疑幼年的我是從折紙中學到如何閱讀說明去自我學習的,并且嘗試做事情以完美為目標。那時候我的技術還不錯,例如可以用一張正方形紙,不用粘貼折九只頭尾相連的鶴。當然,單單按照說明來執行并不太有趣,后來便學會設計紙模型。
首先是做些長方體、錐體之類,記得有一次按書用紙做足球形的截角20面體,被同學取笑說足球應該是圓的。設計了一些規則的幾何體之后,就可以設計一些不規則形狀的,例如一輛跑車。由于要在紙上畫設計圖,也學會了一些作圖法,后來也學習了建筑設計的透視技法。大約從小學三年級開始,父母讓我參加了校內開辦的電腦興趣班。課程之初,是通過教育軟件去學一些電腦知識(用BBC Micro),之后再慢慢加入一點BASIC編程內容。不過我最喜歡的,都是課堂結束前的電腦游戲時間。
小學四年級,我當上了學校圖書館的管理員。有一天館里送來一臺Apple IIe,聽說是一家公司換IBM PC而留給學校的。那臺沒軟盤沒錄音機的Apple IIe,只能用來編寫BASIC程序,不能玩游戲。當時心里傳來一道聲音——
“想玩游戲?自己寫啊!”
我借來一堆Apple IIe書籍,閱讀、上機編程,把午休和放學后的時間都用上了。課上和晚上,還會把程序寫在紙上,在腦海中運行程序。那時候寫的程序,主要圍繞游戲和圖形。記得曾經在Apple上重寫BBC Micro上玩的“撞磚”游戲,從中學到了一點游戲模擬技巧,后來還學習了一點6502匯編。在學習的過程中,我意識到編程的世界是虛擬的、完美的,不像機械或電子等物理系統有許多限制,幾乎凡是想得到的事情都能用編程實現,并且能完全自動化地執行。這讓我感到,編程本身,比使用軟件的樂趣要大得多。
初試啼聲
從小學升上中學,1990年的暑假我終于獲得人生第一臺電腦——一臺二手的286。那個暑假我躲在家中,使用GW-BASIC繼續編程。286可以存檔,意味著可以寫更大型的程序。規模越大,更讓我認識到BASIC語言在編程上的局限。盡管如此,當時仍然很快樂地編寫了不同類型的程序:圖形、音樂、游戲。通過閱讀書籍,我還學會了畫不同的二維圖形,包括曲線、分形(fractal)、簡單的三維渲染等。
在升中二的那年暑假,我就開始轉為學習C語言。DOS對許多設備都沒有直接支持,不同的設備甚至連標準的接口都沒有。所以那時編程,還必須學一些x86匯編知識,以及使用不同設備的底層技術。
中二時得知有一個“微電腦教育(MIE)”比賽,這是我個人電腦比賽生涯的開始。我用Turbo C寫了一個名為《3D Solid Maker and Viewer(三維實體制作及檢示工具)》的軟件,其實只是個非常原始的三維建模軟件,可以設置簡單的攝像機動畫。當時花了許多時間去編寫GUI系統,就是要由繪畫控件、處理滑鼠鍵盤事件等做起。基于知識經驗所限,系統架構很糟糕,并有大量硬編碼。初試啼聲,這個作品最后獲得全場總亞軍,大大增強了我對編程的信心。
進入業界
1992年前后,我在BBS上結識了一群有意開發游戲的朋友,成立了香港首家游戲工作室M&P System。最初我并沒有直接參與開發,只是向朋友們學習更多游戲開發的知識,寫過一些引擎和工具的原型,有時幫忙做點小事情。例如在公司首個作品《瘋狂雙響炮》(1993年)中,我設計了一個游戲關卡和做游戲測試。之后公司開發RPG《勇者傳奇》(1994年)時,我在開發另一個RPG,做了地圖編輯器和引擎,可操控主角行走,也有初步的戰斗模式。
后來公司改組為阿博克。我在新項目里首次擔負重任,那時我在讀中四理科班。這個新項目《王子傳奇》是我發出的提案,一個奇幻背景的策略角色扮演游戲(SRPG),采用等角(isometric)的無縫(seamless)游戲世界。我主要負責游戲策劃、編劇、游戲性編程(gameplay programming)。項目的野心很大,或是太大。整個項目約由6位成員,歷時18個月完成。
當時DOS運行于真實模式,能直接使用的內存只有640KB,完全不足以做無縫的地圖渲染。最后,我們做了個大膽的決定,用匯編開發32位保護模式的引擎,用Turbo C++開發16位真實模式的游戲性部分。引擎部分由我那牛人拍檔開發,而我主要編寫游戲性部分。那個引擎,基本上就是要先從頭寫一個32位保護模式的操作系統,管理內存、磁盤讀寫、設備驅動等,再開發地圖渲染引擎。游戲的“腳本”使用C語言來編寫(包括用宏來做數據驅動),利用覆蓋(overlay)機制的按需載入。
在那漫長的制作期,星期一至星期五,放學后經常會返回辦公室,有時候晚上11點才回家。周末和假期,也會經常到公司干活。后來一些伙伴在項目結束前就離開公司,最后在不太歡樂的氣氛下完成了這個作品,游戲內容有點虎頭蛇尾。聽說這作品在臺灣賣得還不錯,可是由于一些問題,我最終除了暑假獲得的一點津貼外就沒有其他經濟上的收益,當然,開發經驗除外。自此我離開了游戲業界,繼續求學之路。
比賽生涯
自中二參加第一次電腦比賽之后,我又陸續參加了多次這類比賽。中三開發了一個教學軟件,采用圖形冒險游戲的形式去做幾個化學實驗。中四開發《王子傳奇》時,同期開始學習C++,中五參加電腦輔助學習(CAL)比賽時,就試驗用C++開發了一個地理科輔助教學軟件《Landscapist(地形設計家)》,它其實是一個三維地形編輯及可視化工具,希望借此學習不同的地形,以及認識讀取相應等高線圖的方法。為了這個軟件又開發了第二個GUI系統,這個系統采納了面向對象設計思想。賽前自信滿溢,可惜大熱倒灶,只獲小組季軍。那個反差使我很失落,但后來也學會,單靠技術能力,不能做出大眾喜愛的軟件。而且也覺得名次對我越來越不重要,開發過程的樂趣和收獲才是最重要的。
升上中六后,雖然我仍以個人名義參賽,但為了師弟師妹們也能參加比賽,就用Turbo Pascal開發了一個簡單的二維游戲引擎,配合圖像轉換工具可以較容易做出作品來。為這個系統設計了易用的API,并多做了些測試以避免應用時出現問題,這些都為我積累了很好的經驗。而我在這屆比賽中,開發了《Logicmate(邏輯伙伴)》,這個軟件是一個數字電路的設計工具和模擬器。配合高考電腦科的內容,這個軟件可以用邏輯門設計數字電路。另外也有一個模式,是老師可以定義輸入輸出訊號,儲存為習題,學生按要求去設計電路,并自動評分。周而復始,我又寫了第三個GUI系統。該作品獲得科學組亞軍、全場總亞軍和最佳教育獎。而師弟師妹們用了我的引擎拿了小組冠軍和很多獎項,那又是另一種喜悅。
中七,最后一次參加CAL,我和一個同學組隊參賽,用兩個月的業余時間開發了兩個組別的軟件。在科學組制作了《Cyber Optics(奇妙的光學)》。當時Windows 95成為主流,我首次采用Visual Basic 開發這個軟件。最初的感覺就是語言倒退,一大堆C++的特性都沒有了。但后來也適應了,并覺得程序員不應該受語言所限,腦里能想到的,這些通用語言都能實現。另一個是語言組作品《Angel’s Adventure in English Land(小天使英語歷險記)》,是一個馬利奧式的橫向平臺動作寓教于樂(edutainment)軟件。基本上是把英文詞匯拼寫問題加進游戲關卡里,除了跑、跳、踏、射,每關還有Boss戰。這是過往軟件中最好玩的一個,經過實際測試,目標對象(小學生們)也很喜歡。
大學之道
一直以為,我會順利入讀計算機系。因為一個意外,我未能如愿,當打算要重考,卻又竟然進了香港大學的認知科學(Cognitive Science)。我當時百感交集,覺得人生走上了未知之路。那是1997年的夏天,香港回歸祖國。
認知科學是一門以科學方法去研究人類心靈(Human Mind)的跨領域學科。出生以來從沒想過自己會去心理學系、哲學系、語言學系、神經科學系上課,而這學科又同時含計算機系的課。回頭想來,認知科學也許更適合我,開闊了我的視野,而不是把我變成一個電腦極客。再者,這學科容許文、理、商科的同學報考,能和不同背景的同學一起學習,互補長短,而那一屆男女比例也剛好是1比1,不禁同情選了讀工科的舊同學們。
港大校訓是“明德格物(Sapientia et Virtus)”,在迎生營中卻學到了另一傳統口號“Working hard and playing hard in HKU”。前者出自《禮記·大學篇》,可理解為修養自己的道德,探求外在世界的物理;后者是港大學生的生活態度,努力工作學習,游戲同樣盡力。
港大課程都用英語教學,起初還怕會成障礙,但很快就適應過來了。教學方式比較互動,教授也樂見學生指出黑板上的錯誤。雖然編程課無甚驚喜,兩門算法課卻都很具啟發性,也系統地彌補了我這方面知識的不足。此外,還有一門人工智能課,作業內容是做黑白棋(reversi),或有額外加分的象棋。為了挑戰,我選擇了后者,也試用剛學不久的OpenGL做三維圖形用戶界面,歷時兩個月完成《美綠中國象棋》。
科學之上,還有哲學。學習哲學中的邏輯學是理性思考的基礎,而哲學亦講究如何清晰表達抽象思維。因為學科關系,課堂主要講述心靈哲學此分支,例如二元論、物理主義、功能主義等,和人工智能有關的有圖靈測試、中文房間論證、瑪麗房間論證等。然而,對我人生觀影響更深的,是接觸有關宗教、自由意志和道德方面的哲學命題。雖然學習哲學并不能像學習算術,能找到問題的“正確解答”,但是哲學提供了一些問題的可能答案,或是揭開事物的表象,嘗試分析其本質。我相信,能認清自己的卑微無知,及盡量避免盲目相信別人的答案,是哲學帶給我一生的收獲。
本科最后一年,我選擇了計算機系的教授作為畢業論文導師。題目是基于內容的圖像檢索(CBIR),主要使用了名為自組織地圖(SOM)的人工神經網絡算法,進行自動圖像分類。題目也許不太重要。重要的是,我從中學到了科學研究的方法,諸如搜索和閱讀論文等訓練,并且能以盡量客觀的方式書寫學術或業務上的文章。現在每逢遇到技術問題,都能應用那時學習到的技巧,先找相關書籍和論文,分析后再思考采用哪些方案,甚至嘗試一些新的點子。每年也留意工作相關的學術會議,篩選一些論文細閱,從而掌握最新技術趨勢。
本科畢業時,我的導師去了香港中文大學系統工程及工程管理系任教,他邀請我到該系念碩士研究生。而得到獎學金的學生,每個學期都要擔任一門課的助教。我比較特殊的經歷是擔任計算機架構課的助教。因為我本科不是計算機系或工程院的,沒有正式上過這門課,唯有在學生上課時又一起上課,回去讀教科書寫導修課教程。教學也是有趣的人生經歷,當嘗試以最簡單最好的方式向學生講解時,自己同時也對題目有更深的了解,或許也算是教學相長之體驗。作為學生,上研究院的課也和本科有莫大差別。以一個中級數據庫課程為例,教授在第一課講解了一些研究題目,同學們在那些題目中抽簽取得一篇論文,之后每課就是由同學輪流講解抽到的論文,其實就是互相教學、互相學習。
碩士的研究題目其實是深化本科論文題目,配合使用者的實驗數據,找出不同算法的實際應用效能。最后成功通過答辯,也獲得了博士入學資格。然而,經過兩年的研究,雖然我對從事研究感興趣,但對這方面的研究并不是特別熱衷。那時,反復詢問自己,最想做的是什么,最適合做的是什么。我決定,最終要回歸游戲,而在進入游戲產業之前,希望在這一學習階段做游戲方面的研究。
回歸游戲
碩士畢業后,我加入了香港理工大學的多媒體創新中心,先做項目研究員,再思考申請博士生的研究提案。最初我參與增強現實(Augmented Reality)游戲項目。首個游戲中,玩家手里拿著一塊紙板,但看到的卻是一個虛擬的木制迷宮,用雙手把紙板傾側,便可把虛擬的金屬珠滾到終點,當中要小心控制力道避開洞穴。另一個是跳舞游戲,能在現場環境中看見虛擬的舞伴,并要按箭頭移動身體。
增強現實游戲用于控制真實物件,并混合現實和虛擬畫面
至于兼讀攻博方面,我的研究方向是游戲世界內容的自動生成。最初做對自然環境方面的研究,利用雨水侵蝕等模型去生成地形、河流等。剛剛中文大學舉辦一個游戲開發的比賽,便建議聯合正在中心念三維美術的同學一起創作一個作品。想法是利用之前的研究,加上自動道路生成,去制作一個全地形車(ATV)賽車游戲,游戲中的環境、賽道每次都能自動產生。最后我們十多個組員一起完成的作品《Infiniti Rally(無限賽車)》順利奪冠。可惜,攻博中期和導師出現了嚴重的分歧,便暫停了歷時兩年的兼讀博士生生涯。
接著主要是開發一個三維在線游戲平臺的大型項目,供香港業界、學界使用,后來要參與較多的業務和管理。因為洽談項目和合作,多次到英國和中國臺京滬杭穗等地,見識各地業界狀況。直到而立之年,有感缺乏大型游戲制作經驗,便毅然離家,漂泊上海,重新投身于游戲業界。有幸能于育碧完成四平臺的《美食從天降》,之后到了現在任職的麻辣馬,開發我喜愛的游戲的續作《Alice: Madness Returns》。
《Alice:Madness Returns》截圖
2010年初,因讀了一本有點失望的書,并在豆瓣網站寫了一篇書評,認識了許多IT、出版業界朋友,也促使我建立博客、翻譯游戲開發書籍以回饋社會。我的路并非一帆風順,但是遇到出人意表之事,是好是壞,也只由自己心態去決定,隨遇而安。制定或接受挑戰,因為有難度的游戲才好玩。凡事獨立思考,盡心盡力而為。祝你也能享受這個名為人生的游戲。
it知識庫:上海麻辣馬資深程序員葉勁峰:我的游戲人生,轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。