專訪葉勁峰:漫談游戲開發和游戲優化

>>>  技術話題—商業文明的嶄新時代  >>> 簡體     傳統

摘要:社區之星第50期采訪了騰訊互動娛樂研發部引擎技術中心專家工程師葉勁峰,他講述了譯著《游戲引擎架構》經歷,并就游戲引擎、優化、游戲開發學習等進行了分享。與此同時,葉勁峰也將坐鎮社區問答第8期回答大家問題。

寫在之前:騰訊互動娛樂研發部引擎技術中心任專家工程師葉勁峰將攜他的《游戲引擎架構》一書做客我們社區問答欄目,担任第八期的嘉賓,屆時會接受廣大網友的提問,歡迎各位網友前來與著名游戲開發者葉勁峰一起探討游戲開發。在社區問答開始之前,我們先通過一篇《社區之星》專訪來認識葉勁峰。以下為采訪正文: 


在GDC2014上,葉勁峰與《游戲引擎架構》原作者Jason Gregory合影

葉勁峰,騰訊互動娛樂研發部引擎技術中心任專家工程師,曾合著《DirectX9游戲編程實務》,譯著有《游戲引擎架構》。2008年在担任上海育碧引擎工程師間開發《美食從天而降(Cloudy with a Chance of Meatballs)》,2009年在麻辣馬開發《愛麗絲:瘋狂回歸(Alice: Madness Returns)》,2011年加入騰訊互動娛樂引擎技術中心担任專家工程師,所研發的技術已用于《斗戰神》、《天涯明月刀》、《眾神爭霸》等項目中。

CSDN:能簡單介紹下自己及所從事的工作嗎?

葉勁峰:香港同胞一名,每天花三小時往返香港深圳間。現于騰訊互動娛樂研發部引擎技術中心任專家工程師,主要從事游戲引擎組件技術的研發及顧問工作。雖然自稱游戲程序員,卻非計算機專業出身,而是在香港大學認知科學本科畢業,并在中文大學攻讀系統工程及工程管理,獲取哲學碩士(MPhil)。什么是哲學碩士?就是英式教育里的研究型的碩士課程,有別于修課型碩士,我的研究方向是與人工智能相關的基于內容的影像檢索(CBIR)。

但說到編程,其實我在小學時已有幸學習Basic,在初中自學C和C++,并在高一高二時開發了一個DOS的單機SRPG《王子傳奇》,并在臺灣發行,在十人團隊中除了是主程還是主策呢。我在理工大學從事游戲引擎相關的研發,并在上海育碧及麻辣馬開發過多游戲平臺的《Cloudy with a Chance of Meatballs》和《Alice: Madness Returns》。在騰訊我雖然不是在游戲制作團隊中,但一些研發成果獲應用于《斗戰神》、《天涯明月刀》等項目中。

要數和程序有關的事,我把兒子命名為Lua──除了是一種我喜歡的編程語言的名稱,也由于兒子是在中秋出生,而Lua是葡萄牙文的月亮。

CSDN:為什么會選擇翻譯《游戲引擎架構》這本書?翻譯的過程一帆風順嗎?

葉勁峰:這個念頭源于我還在上海麻辣馬工作的時候。不得不提,麻辣馬是一家很人性化的公司。公司的目標之一是提高員工的生活質量,不加班之余,若能及早完成里程碑還可能直接放假。在這種輕松的環境中,我有更多時間閱讀。其中在美國網購回來的《Game Engine Architecture》,可謂愛不釋手,因為許多書里的內容接近真實的工作,很容易引起共鳴。我興致勃勃地推薦給同事們,但他們覺得讀英文原版書比較吃力,不太愿意讀。如果只因語言而令國內的同好者錯過這本好書,實在可惜。雖然我的翻譯經驗為零,但在一次偶然的聚會中,向第一次見面的周筠老師毛遂自薦,提出翻譯該書的意愿。

翻譯過程,得周老師相助,試譯及之后的流程都尚算順利,但我在試譯中深深體會技術翻譯的困難,港臺和內地的中文用語甚至中文的使用習慣也有差異,唯有從頭開始學習一點翻譯理論及知識,并編寫詞匯表給業界朋友審查。

在麻辣馬的日子,翻譯進度雖然比預想落后(低估時間是程序員的天性?),但只身在上海,工作結束后的時間十分充裕,成果總能一點一點累積起來。但過了半年,女兒出生了,我決定回到香港與家人團聚。在香港遠程完成《Alice: MR》的工作后,麻辣馬也轉型暫時不做游戲機平臺了,公司還幫忙讓一些同事和我集體面試騰訊和幾家公司。后來就變成每天從香港往返深圳的日子了。家庭、工作和交通占據了許多時間,于是出現了嚴重的跳票,原來預計一年多的工作,經歷了三年半才完成。

CSDN:翻譯完這本書后,有什么感想嗎?

葉勁峰:無論這本書的評價如何,我也已盡力完成了它。除了翻譯原文,我也盡量審查原文的正確性,并在一些地方加上補充說明。之前曾和周老師提及一本暢銷書籍中的排版問題,為了不出現那些問題我就自行用LaTeX排版,保證數學公式符號、代碼等各方面都達到專業水平。最后連圖片都自行翻譯修圖。中英雙語索引也是自行編制的,參考書目中加入中譯本信息,這些都是希望能方便讀者。希望讀者能原諒翻譯的延誤。

CSDN:你怎么評價這本書,你覺得這本書能給哪些人帶來幫助?

葉勁峰:這本書在游戲開發書籍中是非常獨特的。作為譯者也感到翻譯就要花很長時間,實在很難想像,原作者是怎么能在開發縷獲年度大獎《神秘海域(Uncharted)》系列的同時,還能寫出這本著作。這本書是原作者把二十年的游戲開發知識經驗濃縮后系統化的展現,也見證了這些年的一些游戲技術進展。

我想,對于業界的游戲程序員(包括我)都能在本書中獲得一些得著,補足一些之前可能知道大概但未仔細研究的地方。這本書更最重要的潛在讀者群,應該是未來的專業游戲開發者。他們可能正在大學學習編程,卻不知道那些編程怎樣能開發游戲及其相關技術。他們也可能是游戲開發的愛好者,或許懂得使用一些游戲引擎,卻未能掌握許多技術原理及細節,可能想做一些游戲獨特的內容卻難以入手。我希望本譯作對于國內游戲業的未來有所幫助。

游戲開發

CSDN:在你開發的眾多游戲中,你最喜歡哪個游戲?為什么?

葉勁峰:其實我開發的游戲井不多,最喜歡的應該是《王子傳奇》。除了該作品是由自己主策主程,當時對它的技術及游戲性還是感到相當滿意的,而不平凡的開發經歷也是令人回味。中三的時候,在學校里的休息時間寫劇本及游戲設計,說服公司開發這個專案,然后每天放學后就脫掉校服到工廠區里的辦工室開會、編程,直到很晚才回家,還和家人吵架。大概我現在作為人父也不一定接受兒子這么干。雖然游戲的銷售成績并不太理想,但當中的經驗的確造就了今天的我。

CSDN:游戲開發中常用的工具有哪些?

葉勁峰:除游戲引擎,程序員最常用的是Visual Studio、XCode、Intel GPA/VTune等,而美術最常用的是Photoshop、3D Studio Max、Maya等,策劃是Word、Excel、SketchUp等。

CSDN:能不能介紹下一些常用的游戲引擎?另外,游戲開發中使用開源引擎的比例高不高?為什么?

葉勁峰:現在由于手機游戲的盛行,最常用的大概是Unity及Cocos2D-X。而傳統PC客戶端網游最常用的是Unreal、CryEngine、Gamebryo、OGRE等。其中Cocos2D-X和OGRE是開源引擎。Cocos2D-X大概是使用比率很高的游戲引擎,我認為主要是因為本身2D游戲引擎的功能需求比較簡單,而Cocos2D-X在跨平臺方面的支持比較好,剛好適合當時快速開發智能手機游戲的潮流。

CSDN:開發一款游戲,要進行所謂的優化都包括哪些方面?

葉勁峰:游戲軟件的優化和一般軟件是有一些區別。

游戲通常是軟實時(soft real-time),就是說運行上有時間限制,但沒有硬實時般嚴格。

先談固定硬件的游戲平臺,如游戲機和街機。在這些平臺上,通常會設置固定的幀率目標,例如30 FPS(即每幀33.3毫秒)。游戲開發者希望在這個時間限制下,盡量提升游戲的品質,例如更精細的角色和場境、加入更多效果、提升人工智能水平等。優化的目的除了令游戲順暢,也是提升游戲品質的必要條件之一。

對于PC或手機平臺,因為硬件的性能有很大差異,優化就沒有一個具體的目標,而是希望盡可能在大部分平臺上都能做得最好(雖然PC游戲有幾百FPS的情況,但實質上幾乎不能增加流暢性)。

從玩家角度,我認為游戲的性能指標大概有這幾方面:

 

  1. 平均幀率

  2. 流暢性(不要「卡」,專業地說就是少spikes)

  3. 互動延遲(輸入后至看到反應的時長)

  4. 等待時間(讀盤、寫檔、網絡連接等)

  5. 內存用量

  6. 游戲體積

  7. 網絡流量(主要是移動平臺)

  8. 耗電量(主要是移動平臺)

 

而在開發的角度來說,我認為優化方法可以分為無損和有損的。無損是指不影響品質,純粹通過技術上的優化去提升整體性能。而有損是指通過簡化、近似化去改善性能,例如簡化著色器(shader)、要求美術降低某角色的三角形數目、要求關卡設計師減少一些NPC等。

優化前我們要先進行性能剖析(profiling),找出性能問題的核心,然后再看看有什么方法可以嘗試。主要可分為算法上的和底層的優化方法。不詳細說明,就舉個例子吧。

例如,在二維彈幕射擊游戲中,需把大量子彈與飛機做碰撞測試(相交測試)。如果有n顆子彈,m個可被擊中的目標,蠻力法需要mn次測試。我們可以看情況,使用一些空間分割的算法,把子彈和目標分配到不同的空間范圍里,只需對每個范圍里的物體做測試。而在底層方面,我們可以考慮使用多線性、SIMD指令,并考慮到緩存一致性等方面去優化。

上述例子主要是在CPU上進行的游戲邏輯方面的優化,而許多游戲中也需要在CPU/GPU上對圖形方面進行優化。在PC/手機平臺上,因為瓶頸不固定,游戲開發者通常會盡力優化每一個部分。

CSDN:你覺得內地的游戲開發和香港有沒有差距?另外,這兩個不同地域在游戲開發理念上是否有什么不同?

葉勁峰:現時香港的游戲公司屈指可數,最近商業上較成功的例子是Mad Head公司的《神魔之塔》。但香港的游戲業從公司數量和規模而言,都難以和內地的公司比較。

理念上沒覺得有太大差距,一些游戲主要是以運營為主,而另一些則是以獨立創意為重點。

游戲開發如何入門?

CSDN:可能很少人知道,作為游戲開發大牛的你不是計算機專業畢業的,因此能否分享下如何系統地學習和入門游戲開發?

葉勁峰:我或者我那個年代的游戲開發者,學習路徑和今天的會有很大不同。在DOS年代,我們可能都是先學習一些底層知識。DOS如其名,提供文件系統等功能,其余大部分現時稱作驅動的軟件,幾乎都要自己做,例如怎么利用VGA的中斷和內存映射去畫圖,怎么寫匯編去優化那些過程,類似的還有鍵盤、鼠標、不同品牌的立效卡等,而較高層次的是管理內存、資源等。

二十年前互聯網未普及,我主要是從書本中學習編程及游戲技術知識,還有就是在BBS上流傳的一些外國的游戲及圖形技術文檔,可以說是非常雜亂無章地學習,并不斷嘗試。現時的環境很不一樣,有很好的編程和游戲開發書籍,也有很多開源項目可以參考,還可以很容易在網上找到各種答案。但相對的,現在游戲用到的技術,廣度和深度都比以前復雜得多。

由于游戲開發涉及很多不同領域,以入門來說,具基本的編程知識之后,我建議先學習使用一些游戲引擎,開發一些簡單的游戲。那些游戲可能是三消、打飛機等小游戲,盡可能做不同類型的游戲。做出來的游戲自己要玩,也給別人玩,吸取意見,作出改善。不介意的話最好是開源開發,并且寫博客把過程心得都記錄下來,有助于整理思考,并能與網友交流。充分了解游戲性編程后,可以按興趣發展其他專門的技術范疇,例如圖形學、物理模擬、人工智能等。

CSDN:做游戲開發,你認為學什么計算機語言比較好?

葉勁峰:我想應該是C++、C#和Lua,分別是游戲開發中最流行的原生開發語言、.NET平臺語言和腳本語言。多數游戲引擎及相關組件都是由C++開發,而C#則主要用于Unity及開發工具,Lua則適合編寫經常改動的游戲邏輯。

愛好和工作

CSDN:你會經常玩游戲嗎?都會玩什么?除了這個,工作之余你還喜歡做些什么?

葉勁峰:現在玩得比較少,通常是和兒子玩平板電腦的游戲。除了最近花比較多時間做開源項目,一直有閱讀的習慣。以前比較喜歡風光攝影,但這幾年都變成兒童攝影了。

CSDN:最后談談你在騰訊互娛研發部的這份工作吧,感覺如何?

葉勁峰:我想是有點兒幸運。在上海從事游戲開發時都是在外資公司,我幾乎不太了解國內的游戲公司。實際上我是在面試時,才知道騰訊在國內游戲市場的地位。在我從事商業工作的生涯中,這里是給我最大技術自由度的公司,可以研發不同類型的技術,并有許多工作室可以提供需求及反饋。我也樂于做一些培訓項目及撰寫技術文章,并在一些流程中做一些技術評審工作。我覺得在國內已沒有更適合收留我的地方了。不過要做技術突破是很困難的,希望能夠努力找到缺口。


網載 2015-05-19 15:54:34

[新一篇] “限免一天”:提高App Store排名

[舊一篇] Android、IOS和windows phone三個主流平臺分辨率大全-截至2013年3月15日
回頂部
寫評論


評論集


暫無評論。

稱謂:

内容:

驗證:


返回列表