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