很多朋友想了解下游戲引擎開發和游戲客戶端開發有什么區別?今天就來跟大家分享下!
一、 工作內容上的區別
客戶端開發更偏重於游戲玩法的實現,也就是常說的Gameplay,比如戰斗系統怎么實現、任務流程怎么進行、UI界面如何交互等等,細分來說,其實客戶端也有很多方向,比如3C(Character、Camera、Controller)、AI(怪物、尋路)等。再具體一點,一般新人進去大概率是從UI做起,你可能會接到一個需求,比如實現一個簡單的背包界面,背包里面會存放人物身上的物品,點擊的時候會顯示物品的具體信息(屬性、數量、價格等),並且可以出售、丟棄、購買、整理等。因此客戶端開發,更多的會跟策划打交道,每當機智的策划同學想到了一個什么新的點子(需求),你就需要把他們精妙的想法實現到游戲中。
游戲引擎開發則更偏重於游戲的畫面和性能,以及游戲開發中的工具鏈,並且引擎會更多地涉及底層的技術知識。引擎崗也有很多細分方向,最大的一塊肯定是渲染(或者說人們一般最關注的),除此之外還有動畫、物理、編輯器、腳本、性能等等,以及一大堆開發工具。
即使是最受關注的渲染方向,也還分為光照、着色、陰影、抗鋸齒、后處理、特效等等,其實細分方向真的很多。
我本人是渲染方向的,具體的工作而言,你可能會去實現某種畫面表現的特性,比如天氣系統,你怎么實現動態晝夜變化的效果?比如粒子系統,UE的Niagara已經非常強大了,你當然不需要自己去實現一個粒子系統,但是你如何運用它的強大功能去實現一些酷炫的效果?比如像最后的生還者2中的雪粒子附着到人物身上、隨着手電筒的光束照射,蟲粒子群會隨之聚集和擴散等。Niagara系統是可以在內置的腳本中寫邏輯的,因此幾乎你想要的粒子行為和表現效果,都可以通過代碼(和美術)來實現。
此外,引擎崗之所以是引擎崗,肯定是要寫引擎的代碼的,不過除了極少數擁有自研引擎的工作室之外,大部分引擎崗的工作就是如何"用好"和"改好"商業引擎,不需要重造輪子。不過如果現在的商業引擎沒有這個功能,但是你的項目又需要用到這個功能,你就需要去實現;如果這個引擎的功能,無法滿足項目的需要或者太爛了(無論是功能還是性能),你就需要進行改進。包括一些引擎工具的開發,一些系統功能的擴展和優化(有時候你甚至需要修復引擎自身的Bug),這些,都是引擎崗的工作內容。當然,引擎還有很大的一塊是性能優化,這一部分工作一般都是組里技術實力比較強悍、工作經驗比較豐富的老司機來完成。因此引擎崗的話,平時更多的會和美術打交道,一起去實現更牛逼和酷炫的效果。
不過我想提的重要一點是,其實客戶端開發和游戲引擎開發,很多時候並不是分得那么清的。比如我曾經在網易實習的時候,那個項目的程序組只分為客戶端和服務端,所以無論是客戶端開發還是引擎開發,都由客戶端的同學來完成。在這種組里面,一般會有一部分人做Gamplay的工作,還有一部分人,其實會做引擎的工作,比如渲染、性能優化、工具鏈等,而且客戶端組長確實就是做渲染的(他一個人),但項目主程是服務端。即使在我現在的這個組,分了客戶端和引擎崗,客戶端很多一部分工作,都會與引擎崗交叉重疊,比如他們也會有做動畫的(3C),做工具鏈的(資產檢查工具、各種編輯器等),也會有一些改到引擎代碼的工作。甚至我們引擎崗的很多工作,都需要客戶端的同事來做支持。
二、難度區別
一般來說,引擎崗的要求會比客戶端崗稍微高一點,因為引擎更多地涉及到底層,並且很大一塊是圖形學技術,因此需要較強的數學功底。但門檻的區別,不代表引擎崗做的工作一定比客戶端難,客戶端的很多進階方向,比如上面提到的戰斗、AI、動畫、系統架構等,都是很有技術深度,值得深耕的。
說到難度了,就順便提一提游戲公司對於兩個崗位的區別。其實我推測,題主問這個問題的目的應該是想知道這兩個崗位到底哪一個未來的發展會好一點(比如待遇和晉升),以及引擎崗究竟難不難學,是否能夠入門,這其實也是我當時的困惑所在。但從我的經驗來看,可能不需要太糾結這個問題,因為無論是客戶端還是引擎方向,都可以擁有很好的發展前景,客戶端一樣可以作為主程、組長甚至總監,我們項目中也有一些職級很高的客戶端大佬。一個人的職業發展更多的是取決於你的能力,以及你工作上的表現,而不是取決於你選擇了什么崗位。
不過客觀地來說,引擎確實是一個門檻更高,以及天花板更高的崗位,騰訊中我所知道的3個T14的巨佬,都是引擎方向的(或者說客戶端+引擎),我之所以說不需要糾結這個問題,是因為絕大多數人,都不會觸及到客戶端開發的天花板。而且隨着你開發能力的提升,肯定是越來越往底層做的,客戶端多多少少會涉及到引擎的工作,后期轉引擎也是很簡單的。我建議最好從自身的興趣出發,找到一個自己喜歡的方向,做到精通,喜歡GamePlay,游戲玩法相關的就做客戶端開發,對於畫面表現、底層技術感興趣的,就選引擎。有時候要做選擇,不從功利的角度出發,也許反而能得到更好的結果。
但話說回來,咱實在點也沒事(我真的很喜歡轉折.jpg),如果真的關注薪資的問題,我也可以告訴你,客戶端和引擎崗,如果是相同級別的OFFER,其實差距不大,可以說基本沒啥差別。如果真要說差別,那就是引擎崗的上界會比客戶端更高,畢竟這技術區間擺在這里,那些發了Siggraph的學神,那些浙大CAD的大佬,不給多點也說不過去啊。不過還是那句話,我們當中的大多數人都...不需要糾結這個問題。
三、技術要求的區別
其實這兩個崗位的要求,可以直接去參考一下各個游戲大廠對於這兩個崗位的jd(崗位描述),對於我自身的經驗來說(我參加過客戶端的秋招和引擎的秋招),有一部分技術要求是公有的(Public),比如計算機基礎知識(數據結構、操作系統、計算機組成)、計算機語言能力(C++、C#、Lua)、算法能力;當然還有項目經歷(項目、比賽、實習都算);區別來說,其實主要就是計算機圖形學的知識了。除此之外,引擎崗可能還會更注重你的底層技術知識,比如計算機組成中的緩存技術,C++編譯鏈接的原理(動態鏈接、靜態鏈接),操作系統中的內存管理等。此外,游戲客戶端可能更看重於你對游戲引擎的熟悉程度(使用),以及開發游戲的經驗。如果你自己嘗試開發過很多或者質量很高的游戲,面試的時候肯定是很加分的。
在圖形學這一塊,其實客戶端開發也會問一些,但我個人覺得,其實客戶端問圖形學的意義不是很大,除非像我之前說的客戶端和引擎都在一個組,不進行區分,否則進了客戶端組大概率不會參與到渲染相關的開發(當然可能也會有一些用,比如一些渲染的基礎知識,如果你要做一個美術資產管理工具,你連Mesh、Texture、Material這些都不懂,是不可能做出來的)。然后根據我的經驗而言,我實習面客戶端的時候,一點渲染知識沒問,秋招的時候倒是問了一點,不過也是比較基礎的東西,客戶端更注重的還是軟件開發的工程能力,問我圖形的原因我認為是跟我自己的簡歷背景相關,如果你有很多Gameplay方面的經驗,我想客戶端的面試官肯定會更感興趣問這些東西。
那么對於引擎崗來說,圖形學基本是必問的了。游戲引擎主要關注實時渲染,所以離線渲染可能要求不是那么高,當然如果你光追學得很牛逼,實時光追很了解得話還是有用的。至於數字幾何處理、計算幾何這些,感覺算是一些前置基礎知識,不用太過系統和詳細地去學,用到的時候再學可能效率會更高。還有模擬,這些其實與你做的方向相關,比如我自己就對流體模擬、布料模擬很感興趣,因此這些可以多深入學習,上面也說了引擎崗也分很多方向,如果你就是擅長物理,那么你的技術深度越深越好。
四、如何准備
和職業發展一樣,面試關注的是你的實力,跟本科生研究生沒有太大的關系,只是一般研究生對於技術和知識的積累更深厚,導致了可能會被認為引擎崗研究生會更容易進入,其實我們組里就有幾個本科生,實力也挺強。
如果想要系統地學習,那么還是我剛才說的那幾點,計算機基礎、圖形學基礎知識、算法和Coding能力,以及項目經驗。對於圖形學而言,現在的學習資料太多了,有空的話直接GAMES套餐來一套,學一學閆神的101和202,只要全部理解掌握了,把作業都獨立完成了,面試肯定沒問題。
如果你只是想達到招聘的門檻,那么其實圖形學也有一些八股文。我可以簡單說一下,渲染管線、變換矩陣、着色模型、抗鋸齒處理、輻射度量學(BRDF)、PBR、陰影、全局光照等。。面經也很多,自己找吧。但是光靠八股文還是有可能會翻車的,干程序員這行的,還是得有真材實料不是。