論遊戲程式設計師的自我修養:專訪魔方工作室群技術總監、專家工程師葉勁峰
Milo曾在香港理工大學做多媒體相關的技術研究,後來加入上海育碧和麻辣馬,並於2009年加入騰訊。他也是知名的知識分享者,在知乎上他的粉絲超過27萬;在Github上,他梳理的《遊戲程式設計師的學習之路》獲得了9000多個收藏;最近他還主編了《騰訊遊戲開發精粹》,聚合了一批優秀的騰訊內部技術文章。
本期《論道》欄目,Milo將分享他個人職業發展的多樣歷程,並提供遊戲程式設計師自我提升和個人發展的實用建議。
文字實錄
壹、關於個人經歷與職業選擇
Q、你當初是怎麼進入遊戲行業的?
Milo Yip:我初中時就接觸了遊戲行業,當時自學了圖形學、程式設計的一些知識後,在BBS上認識了一群想要開公司做遊戲的朋友,於是就加入了他們,每天3點鐘下課去公司,有的時候做到晚上11點才回家,就和正式參加工作差不多。
後來我繼續讀書,2002年碩士畢業後,在香港理工大學的多媒體部門做相關的技術研究,也涉及了一些遊戲引擎開發的應用研究,當時一些技術成果被香港的遊戲公司採用。2008年我加入了上海育碧,後來又去了麻辣馬,做圖形學的工作。
Q、那後來為什麼選擇了騰訊?
Milo Yip:在麻辣馬做完《愛麗絲:瘋狂迴歸》,大家未來沒有做下一個專案的計劃,於是就集體去見了一些公司,包括英偉達、騰訊等等。我老婆一直在香港,當時她又懷孕了,而騰訊在深圳,可以支援我每天往返。
Q、最開始是做什麼崗位?
Milo Yip:還是客戶端開發。最開始我是在互娛研發部研發遊戲引擎,也會幫一些專案做做優化。當時做的一些中介軟體,後來還被應用到《天涯明月刀》等專案裡面。
待了4年左右,騰訊做了組織結構調整,我通過內部渠道轉崗,選擇了魔方工作室群。開始是在專案組裡解決技術難點,專案成熟後又成立了引擎中心建立團隊,我也被任命做了總監。
Q、你覺得遊戲程式設計師在選擇工作崗位和公司該注意什麼?
Milo Yip:每個人的價值觀不同,有人可能會選擇最有錢的領域,最流行的領域,比如現在去改做AI。但我覺得做自己感興趣的事情會走得更長遠,從小學開始,我就對圖形學、動畫、3D感興趣,所以一直專注於這個領域。
我覺得在遊戲行業,如果想鑽研得足夠深入,那找一家大公司還是會更合適。如果在一個只有50-100個人的小公司,你不可能成立一個幾十人的引擎研究團隊。像魔方工作室群,有數百人的規模,所以就可以有一個支援中臺,允許員工更深入地研究某個領域。
最後,選擇崗位時也要注意個人能力和工作室的需求。比如魔方以前做Flash比較多,當時魔方又處於轉型手遊的階段,我認為自己在3D上的能力對魔方的幫助會更大,所以就選擇了這裡。如果當初我去了一些3D積累更深的工作室群,可能反而就沒什麼發揮的空間。
貳、關於自我提升:遊戲程式設計師該如何終身學習?
Q、在刻板印象裡,遊戲程式設計師是一個特別需要終身學習的崗位,你覺得原因是什麼?
Milo Yip:十幾年、二十幾年前,如果你在大學讀圖形學,那工作後這些技術就可以直接應用起來。但現在圖形學已經發展得很深了,只寫渲染引擎裡物體的陰影就可以有特別厚的一本書,講相關的5、60個技術。所以現在學校裡的課程就只能讓你接觸到皮毛,想進入遊戲行業做相關的工作,就要補很多課。
Q、那應該如何制定學習計劃?比如是自己建立一個知識體系,還是跟著專案需求走?
Milo Yip:一般說起這個問題都會講到廣度和深度。剛開始學習時,你要擴寬知識面的廣度,對每個部分都有理解。
比如最開始你可以不知道圖形、物理、音訊等底層功能是如何實現的,但你可以試著用一個遊戲引擎實現一些玩法。但後面如果發現有一個問題,引擎沒有提供相關的功能或工具,那你就需要自己去解決它,一級級深挖。
我通常會建議同學慢慢理解自己喜歡什麼部分,比如引擎方向可以分為動作動畫、物理效果等等,玩法方向也可以分為不同的遊戲型別,比如MOBA、FPS的技術框架需求都不一樣。一個人最好長時間在一個領域累積經驗,慢慢加深深度。
Q、你比較推薦的學習方法是什麼?之前看你梳理了一份《遊戲程式設計師的學習之路》,列了很多書單。
Milo Yip:可能我是老一輩的思路,相對於看視訊,我更喜歡看書。書籍的知識體系更加規範,知識點消化起來也更系統,可以補充你看視訊時遺漏的部分。
所以在《遊戲程式設計師的學習之路》裡我由淺到深地列了一些具體知識點,然後在每個知識點上都推薦了一些經典書籍,把它們連線起來,做成了一份圖譜。前面的知識大多是基礎,後面就是一些可供選擇的領域了。比如圖形學有哪些分支,你需要學習哪些細節。
Q、你怎麼看待基礎知識和實際問題之間的關係?
Milo Yip:我覺得遇到具體的工程問題時,最好先看看別人是怎麼解決的,有什麼理論基礎,對整個問題看得更透徹之後再選擇。比如A方法和B方法都能解決,那是不是要結合兩個方法的優點,做一個C方法出來。
我看過很多人遇到問題馬上就想方案,寫程式碼,貌似也能解決問題。但可能後面就有人告訴他,說你這個問題其實是什麼什麼問題,最好的演算法是這樣的,你這個是一個很弱的做法。
如果要進入一個新的領域,我同樣建議先搭建一個知識體系,看看這個領域最好的書,比方說領頭人的著作,或者是本科階段的教材——這種比較容易學。
Q、分享會不會也是進一步掌握知識的一種技巧?
Milo Yip:我會要求我們中心的人都去講課,或者多多寫作。如果能用一篇文章,或者一個課程把一件事情繫統地講出來,那你肯定能清楚每一個細節,對事物有更深刻的認識。
我覺得很多同事在騰訊內網發了很多不錯的技術文章,可以梳理一下出版,讓整個業界一同成長,於是就花了1年多的時間,編了一本《騰訊遊戲開發精粹》,它將在這個月上線發售。這本書的形式和《遊戲程式設計精粹》(Game Programming Gems)有點兒像,每篇文章都相對獨立,而且技術也不依賴於某一個引擎,可以廣泛使用。這也算是一種分享的方式。
分享對工作還會有更多幫助,你的影響力大了,專案組自然就會知道你有能力實現哪些技術,這會方便合作。影響力在招募人才的時候也很有用。現在還有新員工在入職的時候,跟我說大一就是因為看到我很多年前的博文,才會選擇做圖形學的事情。
Q、你認為做遊戲程式設計師最難掌握的能力是什麼?
Milo Yip:一個難點是技術創新,因為它意味著能夠突破現有的框架,實現新的功能甚至新的玩法。就比如《Doom》想到用3D渲染迷宮的方法,這個技術對於單個產品和整個行業的價值都很大。這是一個很高的目標。
另外還有一點是把握技術未來的方向,決定投入哪些領域。這有點兒像買股票,需要判斷哪些才是潛力股。
比如2014-2015年,我參考GDC上一些遊戲機廠商的方案,幫《天涯明月刀》做了一套中介軟體,在PC上實現了一些突破性的大世界的美術細節效果,實現了大量物體的同屏。後來這套技術也被用到了《和平精英》裡。
當時手遊還處在《天天酷跑》的階段,我其實不知道大型開放世界手遊會成為很重要的戰場,但我也在考慮跨平臺和跨引擎的應用,幾年之後才發現當時的投入是正確的。
Q、在技術領域,很多從業者都在討論專家路線和管理路線的選擇,你的建議是怎麼樣的?
Milo Yip:真的是看性格。一些人可能技術挺好,但如果讓他做組長,管理下屬的工作流程,制定計劃,他真的做不來。而且管理路線也不好走,一般的組織架構都類似金字塔,一級一級往上升也很困難。我覺得成熟的行業應該允許程式設計師做到60歲。
Q、你覺得做技術管理的難點主要在哪兒?
Milo Yip:做技術研究只要拿到一個題目,逐一拆解,一步步做出來就行。但做管理考慮的維度很複雜,比如說工作室群有什麼策略,我要如何配合策略,研究哪些技術,同時還要考慮人力、財政的情況。
比如說你的團隊構成要多樣化,比方我們有人很熟悉C++,喜歡學習最新的功能;有人喜歡圖形學,自己寫一個Demo試驗新技術的效果;有人在學術方面的能力更強,跟進每年會議上最新發表的文章;有人有超強的數學能力,其他人遇到數學問題,或者看不懂論文就會找他。
另外做管理還要和人打更多交道,你需要了解大家的想法。在團隊人數比較少的時候,每個成員過生日我都會自己烤一個不同的蛋糕,展現一下關心,也創造一個大家一起開心的機會。當然現在人變多了,已經烤不過來了……
叄、關於刻板印象:程式設計師是高階民工嗎?
Q、幾個關於程式設計師刻板印象的問題。第一個是一些程式設計師覺得自己在做重複工作,提高有限,有一種當高階民工的感覺。
Milo Yip:程式設計師就是要解決重複的工作啊,你為什麼不寫一個程式來解決重複的問題呢?
程式設計師應該做其他人做不了的事情。很多時候我們希望寫一個工具,讓策劃和美術自己去配,而不是策劃看到人物走的太慢,也要程式設計師幫忙改一下,這也能提升專案的迭代速度。
如果你覺得自己的工作內容完全沒有挑戰性,那可能換個環境會有幫助。程式設計師應該不斷面對新的挑戰,不停學習,解決越來越難的問題。
Q、另外行業一直覺得35歲是個檻,很多程式設計師都表示35歲之後實在拼不動了。
Milo Yip:國內這個行業可能還不太成熟,加班成了競爭的一個條件,這個情況肯定不太健康。現在我們團隊的節奏還好,服務的專案遇到節點也需要加班,但我會努力為他們爭取調休,比如最近做完現在的專案,每個人會有8天調休。
怎麼讓團隊不加班也是一個管理上的挑戰,可以分享一個技巧:我會要求一些主導的專案做單元測試(unit test),就是自動化測試,這可以保證軟體的品質。
最理想的情況是程式每提交一套程式碼都會出一個版本,經歷一次自動測試,這樣如果出問題,就能迅速知道是具體哪個位置出了問題,以此減少人力成本。
Q、作為一個實現功能的崗位,程式設計師應該如何避免和提出需求的崗位發生衝突?比如很多人都會開程式和策劃的玩笑。
Milo Yip:提需求,做事情一定要寫文件,做完事情也要寫報告,讓其他專案組都知道我們幫這個提需求的專案組解決了什麼問題,有什麼量化的結果。
文件也是傳播知識的方法。在寫文字的時候,程式設計師可以把抽象的思路沉澱下來;而其他成員再遇到相關的問題,也不用跑來跑去地問別人。所以寫作是很重要的工作。
Q、你對技術人員還有什麼其他建議嗎?
Milo Yip:保持身體健康哈哈。之前我很容易病,也容易累。剛來魔方不久,我們出去開會,開到中間還睡著了。後來堅持運動,減了20公斤,做事情就精神了很多。如果想運動,那就要制定一個計劃,一週運動多少天,然後把它變成生活的一部分。
Q、你現在一週運動幾次?
Milo Yip:週一到週五做力量訓練,週一、週三、週五晚上去游泳,冬天就去跑步。最近我還成功游到了5000米。
肆、對未來遊戲技術趨勢的判斷
Q、最後問幾個我們向技術人員徵集的問題。第一個,一家遊戲公司做自研引擎需要考慮哪些要素?
Milo Yip:其實Unity、Unreal等商業引擎已經很成熟了,做自研引擎最大的原因,是要匹配自研專案的特性。
比如《天涯明月刀》的Quicksilver引擎,3-4年前上線時就實現了帶有超廣視野的渲染效果特性,而且在低端機上也能流暢執行。如果是用通用引擎,就很難針對特定的場景做出最極致的優化。
在我看來,做自研引擎要滿足3點:相關的技術實力、長遠投資的計劃、合適的自研專案。只有需要突破現有引擎框架,滿足獨特的技術特性需求,才最值得投資做自研引擎。
Q、現在很多公司都在講技術中臺,這個詞應該如何定義?什麼樣的公司應該考慮搭建中臺?
Milo Yip:技術中臺的目標應該是聚合重複的工作,用最好的人搭建公用的平臺、工具、技術(比如客戶端側的遊戲引擎、後臺側的伺服器框架等等),降低多個專案間的重複勞動和人力不匹配問題。如果一家公司同時有4-5個,甚至10幾個專案在並行研發,那搭建中臺的需求就比較大。
Q、如何看待光線追蹤對遊戲的影響?未來什麼時候這項技術會成規模地應用?
Milo Yip:現在在PC上光線追蹤已經可以實現比較前沿的效果,比如反射和精確的陰影計算,不過它只是一個光柵化的輔助形式。目前這一代遊戲主機還沒支援光線追蹤,新一代支主機面世後,相信很多3A廠商會積極改造引擎和工作流,使用這項技術。
長遠來看,未來光線追蹤有機會完全代替光柵化技術,屆時可能會出現和現在完全不一樣的建模方法,比如模型可以基於曲面,而不是三角形來定義,不過這要等待硬體的進一步發展。
但在手游上,這項技術的應用還會經歷更加漫長的過程。以過去的統計來說,當前手遊的效能,大概會落後PC和主機10年左右。
Q、你認為5G對遊戲行業會有什麼影響?技術人員該怎麼適應雲遊戲的趨勢?
Milo Yip:當前5G已經可以達到低延時、高bandwidth的網路環境,理論上已經能比較好地支援雲遊戲了。但我覺得雲遊戲發展最大的問題不是技術,而是商業模式。
現在一兩千塊就能買到一個效能不錯的手機,如果要把遊戲的所有計算放到後臺去做的話,那反而意味著更高的運營成本,而目前還沒看到支撐這個成本的成熟商業模式。
對於開發者來說,雲遊戲對遊戲開發的影響沒那麼大,PC遊戲只需要很少的改動就可以放到雲上面,建議大家目前不用投入太多精力。
來源:騰訊遊戲學院
原文:https://mp.weixin.qq.com/s/ETgJj4ZC-oV5ulW5ePUp-w
相關文章
- GGAC專訪魔方工作室群美術總監,遊戲美術“寬久需專,專久求寬”遊戲
- 程式設計師的自我修養程式設計師
- 《程式設計師的自我修養》讀書總結程式設計師
- iOS 程式設計師的自我修養 — 讀《程式設計師的自我修養 連結、裝載與庫》iOS程式設計師
- 程式設計師自我修養之程式設計經驗總結程式設計師
- 遊戲設計師的自我修養(三):理解玩家遊戲設計師
- 程式設計師的自我修養之全棧程式設計師程式設計師全棧
- 一個野生程式設計師的自我修養程式設計師
- 程式設計師如何提高自我修養(4)程式設計師
- 程式設計師修煉之道—程式設計師如何提高自我修養(2)程式設計師
- 程式設計師修煉之道——程式設計師如何提高自我修養(1)程式設計師
- 《程式設計師的自我修養》-讀書筆記程式設計師筆記
- 程式設計師的自我修養-編譯連結程式設計師編譯
- 讀書筆記 - 《程式設計師的自我修養》筆記程式設計師
- 程式設計師的自我修養:溫故而知新程式設計師
- SegmentFault 技術週刊 Vol.26 - 年中覆盤 --- 程式設計師的自我修養程式設計師
- 《程式設計師自我修養》讀書筆記程式設計師筆記
- 程式設計師自我修養之實現自我的10大方法程式設計師
- 程式設計師自我修養之IT人學習方法論—學習方向程式設計師
- IT技術人員的自我修養
- 程式設計師的自我修養筆記之裝載程式設計師筆記
- 【程式設計師的自我修養①】iOS記憶體管理程式設計師iOS記憶體
- 產品經理看程式設計師的自我修養程式設計師
- 論軟體工程師的自我修養:角色、重構與質量軟體工程工程師
- 遊戲設計師的自我修養(一):認識玩家、理解玩家遊戲設計師
- 遊戲設計師的自我修養(一):認識玩家,理解玩家遊戲設計師
- 程式設計師自我修養之IT人學習方法論——學習誤區程式設計師
- IT技術管理者的自我修養
- 《程式設計師的自我修養》(三)——庫與執行庫程式設計師
- 很認真的談一談程式設計師的自我修養程式設計師
- 很認真地聊一聊程式設計師的自我修養程式設計師
- 很認真的聊一聊程式設計師的自我修養程式設計師
- 積累→設計→執行:論遊戲系統策劃的自我修養遊戲
- 技術專家or專案專家-專案管理MSN群線上討論(2009.6.23)專案管理
- 如何當個優秀的文件工程師?從 TC China 看技術文件工程師的自我修養工程師
- 《程式設計師的自我修養筆記之靜態連結》程式設計師筆記
- 《程式設計師的修煉之道:從小工到專家》程式設計師
- 【讀後總結】程式設計師修煉之道---從小工到專家程式設計師