做遊戲與搞圖形學有什麼聯繫?
題主在讀大學打算以後去應聘遊戲開發崗位,最近在學著OpenGL,在學習過程中發現圖形學不僅僅是OpenGL有很多東西可以去專研,想問問大牛以後想去遊戲公司搞遊戲開發的需要專研那麼深嗎?如果要深,請問我之後要學習什麼呢?還有想問問遊戲公司想要的應屆生是什麼樣子?
遊戲不是很了解,我來說說圖形學吧
求認識我的大神在評論區指正……
現在的圖形學已經不是當初Sutherland等前輩們搞的那一套東西了,前輩們看到後輩的工作肯定很欣慰的……(●ˇ?ˇ●)
傳統的,"經典意義"上的圖形學,就是你在本科學的OPENGL那種東西,比較側重渲染,如何在屏幕上畫出來一個什麼東西,光照怎麼算,這些東西在20世紀末21世紀初很火,但是肉比較多的骨頭都啃完了……這種經典圖形學也帶動了遊戲的發展,電子海洛因也是那個時候才慢慢出現的XD
比如:
Phong shading - WikipediaAnti-aliasing - Wikipedia現代意義上的圖形學方向已經很廣泛了,不才,嘗試列舉一些:
Fabrication:
世界第一Fabrication組在這裡:The Computational Fabrication Group這裡也會牽涉到幾年前特別火(現在好像又火起來了……)的3D列印,國內做的人很多,比如Prof. Ligang Liu at USTC (中科大劉利剛教授)Fluid Simulation:
研究流體怎麼運動,努力向實時交互方向發展。當然這個跟CFD其實有很大重合,不過大家的關注點不太一樣,CFD更多是關注怎麼准,CG更多是關注怎麼快年輕一代比較出名的做流體的,這一位:Chris Wojtan,以及知乎大神 @張心欣稍微再往前推幾年,這一位大神還在帶學生:Robert Bridson
Acoustic:
怎麼通過聲音來還原出發生的器物?嗯對這種看起來很不可能的從2D信息還原3D模型的事情,已經有一堆人在做了……比如Changxi Zheng"s HomepageGeometry:
Play with triangles!每天的工作就是擺弄三角網……要懂一些微分幾何,方向大神比如:igl | Interactive Geometry LabAR/VR:
交叉領域,CG在AR/VR的主要作用是做實時建模/渲染。原來經典意義上的渲染/建模都是離線的,當你戴上了眼睛,當然不能等電腦算完了再給你看了- -這方面的黑科技大家都知道:Microsoft HoloLens當然,新技術也在不斷出現,比如沒事看看SIGGRAPH每年都劃分了什麼section(不過有的名字是挺詭異的……)http://kesen.realtimerendering.com/
是不是感覺跟你想像的「遊戲製作」不太一樣呢( ̄▽ ̄)"這是個好問題。
遊戲只是圖形學應用的一小部分而已。
知乎上有個偏見就是覺得圖形學=渲染=實時渲染+GPU=OpenGL/DirectX,於是應用只剩下遊戲了。之所以出現這種誤解大概是因為國內圖形學教育還停留在三十年前,即圖形學=計算機輔助設計的年代,與現實脫節。圖形學的一大應用板塊,影視工業,依然處於很初級的狀態,很多人還覺得特效=視頻處理=after effects。於是大多數人能接觸到的最前沿就是在遊戲方面的應用了。
而至於像計算3D列印、計算攝影、物理模擬、聲音合成、動作捕捉、蒙皮、數字幾何處理等等,因為國內缺乏相應的工業基礎,很多人沒接觸過,就不知道這些也是圖形學一部分了。
搞遊戲開發的話,目前很多公司都處於買引擎用的狀態,對於圖形學的需求並不高。就像上面說的,沒有圖形學一樣可以做遊戲,很多賺的很厲害的爆款頁游手游根本不需要圖形學。當然如果是去自研引擎的公司做核心開發自然要求會高一些,不過這種公司也是屈指可數的。
於是深入研究圖形學卻找不到對口工作的情況在國內也是有一些的,這種情況下,要麼轉行,做通用程序猿,要麼就得海外發展了。
所以如果題主是對圖形學很感興趣同時比較有情懷的話,倒是可以深入研究一下;如果只是想找一般遊戲公司的一般職位,那沒有必要研究圖形學,有那個時間不如多刷刷面試題。明確兩點:1.遊戲開發只是藉助了電腦和圖形學,沒有這兩個,一樣可以開發遊戲。
2.圖形學是為了在電腦里模擬物體而形成的一門研究領域。
目前,遊戲公司偏重於成熟穩定的框架,這樣更有利於快速開發遊戲,畢竟根本是為了賺錢。只有很少一部分大公司需要自己去搞遊戲引擎,只有當開發或者定製遊戲引擎的時候,才會用到一點圖形學的知識,不過總的來說,遊戲只用到了很少一部分圖形學知識。更多的圖形學知識,會用於建模/電影之類的。如果你感興趣於遊戲,那麼圖形學會讓你走的更遠,不過短期來看並沒有什麼卵用,不如踏踏實實把一款遊戲引擎用好,這樣遊戲公司大部分的工作才適合你。上面全是廢話,下面才是我想說的: 首先,無論外部環境如何艱難,作為一個有志於遊戲開發的程序員,你都不該自暴自棄,學習更高深的東西,有百利而無一害。同時,作為社會人,你需要提供高質量的服務,這是你應該承擔的責任。下面主要是針對對遊戲開發和圖形學有興趣,卻不知如何下手的同學的一些小小的建議。--------------------------------------遊戲工程---------------------------------------------在中國,遊戲在很大程度上是服務業,不是製造業。一款遊戲更多的是內容驅動(美工,策劃),程序員反而成了輔助,為遊戲的實現而提供技術方案。
其次,1.遊戲顧名思義是為了娛樂而制定的一套規則,它的可玩性高於一切。可玩性是遊戲施加給玩家的挑戰組合,一個遊戲如果能讓玩家覺得有無限的可能性,那麼就說明這個遊戲可玩性比較高。一個規則可能很簡單,但是當多個規則組合起來,就會產生不可預測的結果,這就是遊戲的魅力。More is Different。可以試試用編程來玩玩生命遊戲。還有一個梗,如果計算機在一個遊戲中無法戰勝玩家,那麼就說明這個遊戲有很高的可玩性。2.遊戲是一場賭博,比如遊戲中的生物,如果它們的屬性都千篇一律,是不是很無聊,而如果僅僅是加入了一點隨機,會讓玩家感覺這個遊戲更真實,更有想玩的衝動。 計算機的出現,讓遊戲開發變得更加學科化,因為計算機可以代替人腦來執行規則。這意味著,作為程序員,你就是秩序的象徵,你就是上帝。
建議:
0.如果只想寫遊戲邏輯,只用熟悉框架,熟悉語言。客戶端框架推薦unity3d,unreal4,cocos2d,這些框架都有完整的工具鏈(腳本,資源管理,編輯器),可以讓你快速上手,同時社區也比較火熱,不用擔心遇到問題沒地方問。服務端不太了解,每個公司都有自己的服務端引擎吧,我比較看好一款叫kbengine的開源引擎和雲風大哥的skynet(不過是c寫的,裡面有很多trick,我沒敢去看,-。-),希望朋友們可以推薦一下還有哪些開源的遊戲網路引擎對初學者比較友好。1.如果覺得引擎不符合你的要求,你想自己定製,做一個引擎geek。那麼ogre是個很好的選擇(雖然有人說它過分設計,但是你如果很厲害,還是可以改的嘛)。另外,龔大大(叛逆者)的klayGE很優秀,我喜歡龔大大這樣的人0.0。2.如果想本科畢業後從事更為核心的設計。學好線代/信號系統/數學分析/概率統計(重要程度由高到低)很重要,然後去找一些圖形學初期的論文看看,主要是理解別人的意思。線代不用說了,遊戲中的各種變換都依賴於線代提供的數學工具。信號系統提供的思路,如何從不同的基來表達信號,很大程度會改變你的世界觀,對,世界觀,然後遊戲中的pre/postprocess很多用到信號系統(本科的同學Oppenheimer懂得吧)。數學分析,會培養你的數學演繹能力,這點在數學建模,特別是遊戲這樣一個理想國里,是非常有用的。概率統計,AI不能多說。3.大學期間,如果想開發遊戲證明自己,絕對不要要求太高。如果你能找到一個美工同學,那麼跟他/她一起成長再好不過。千萬別因為想自己做一款遊戲而走偏了方向。我就因為想做遊戲而自學了建模,在youtube上下載了將近200G的blender教程,到最後,可以做一些基本的物體,調一些動作,做一些紋理,而且全是用一個滑鼠完成,至今不會用數字板。這些工作你可以投入一些時間,但是這些時間你可以用來做更有意義的事情,比如成為一個編程高手。
4.可以考慮實現一個軟渲染器,很多人推薦,雖然我沒去做過,不過應該收益蠻大。它可以讓你對渲染的本質有所理解,同時增加你的代碼掌控力。推薦《3d遊戲編程大師》,理解核心即可。5.電子遊戲開發,需要各方面學科的能力,c++/directx(問我為什麼不寫opengl),軟體架構,編譯原理,網路,資料庫。都要嘗試動手去做(比如學操作系統,你就可以試著給一些簡單的cpu寫個系統,不要是x86架構,因為你還只是個學生;資料庫的話,你可以先嘗試寫keyvalue型的資料庫;網路的話,可以自己試試寫個網路庫(推薦@陳碩大哥的muduo,因為有書可以配合理解,另外陳碩大哥的c++很厲害);編譯原理,一個簡單的腳本語言;這些你都可以去嘗試,比你考高分有用的多)。這句話我想說三遍。6.gamedev/stackover,希望你常去看看。7.記得把你作品保留下來,然後不斷對它迭代,如何把它保留下來是門學問,我就因為太關注於本身能力的修鍊而忽略了這個。大四之前寫過的代碼和硬碟因為一杯咖啡全送進了回收站Forever。如果你是一個有心的人,那麼找一份遊戲相關的工作完全不是問題。8.緊接著上面的一點。學會使用github,自己寫個博客。很重要,不要嫌麻煩。血淚教訓。9.說到圖形學與遊戲的關係。不得不談到一個人,也是我最崇拜的一個人。3D遊戲引擎之父-john carmack。關於他的逸聞趣事有許多。最出名的是那個開根號的magicnumber,0x5f3759df,讓遊戲中最常用的函數快了4倍!也是那本《doom啟示錄》讓我對圖形學和遊戲開發更加神往。10.上面說了點工程方面的,更多是圍繞遊戲領域。然而在圖形學這個領域中,有許多細小的分支更值得關注。具體的一些見碩鼠醬的答案。我的答案會更偏向於保守經典的領域。-------------------------------圖形學--------------------------------------圖形學還是交給大牛們介紹比較好,不過作為入門,我挑了幾個經典有趣核心的方面說說。0.Physic中的Deformable Body。這是我比較喜歡的一個子領域。它主要是研究物體的物理性質,如何模擬物體的受壓形變及其恢復過程。比如一個植物,你將它折彎,鬆開,它會擺動,如何在計算機中表示這些擺動呢?有兩個可選方案,1.Mass Spring System.是將物體受壓運動看成由很多小彈簧共同震動產生的。我記得我剛讀大學的時候就拜讀了Milo Yip大神在麻辣馬《愛麗絲夢遊魔鏡》中關於頭髮的建模(如果我記得沒錯,就是MY大神寫的吧?關於MY大神同時感謝他翻譯的《遊戲引擎架構》,質量非常高),那篇文章算是DBody的一個入門吧。2.有限元方法。
剛加入知乎,如果稍微有點幫助,希望讀者給個贊。接下來不斷的迭代這個答案,希望把一個問題回答得完美一點。不斷的迭代是個很有意思的事情,我都不想去干正事了,特別是有許多朋友給的贊,讓我很開心~作為選擇遊戲開發崗位的應屆生,結合我面試和實習經驗來回答一下這個問題。1.題主想知道遊戲公司想要的應屆生什麼樣子,我們就直接看下這些公司的招聘需求啊。拿國內遊戲行業一流的騰訊遊戲和網易遊戲來說,騰訊校園招聘:
所以遊戲公司想要的應屆生和其它互聯網公司大方向都是一樣的,
就是計算機基礎紮實,會編程,以及有能力解決一些有難度的問題。你可能會問,這些只是官方套話,實際面試是不是一樣?我就拿自身和同學面試這些遊戲開發崗位的經歷來談一下。我個人找實習和工作崗位參加了這3家遊戲公司的招聘,多益網路實習(1筆+1輪面試),騰訊tst計劃實習(2輪面試),網易遊戲校園招聘(1筆試+2輪面試)。運氣不錯,這5輪技術面都過了,因為騰訊tst有一點特殊(稍後會講),其它面試都沒有和圖形學相關的問題,即使簡歷上寫了愛好圖形學。這些面試通常都會:- 考察你編程語言的熟悉程度,比如c++的一些概念,一些底層細節。
- 考察計算機基礎知識,操作系統,計算機網路等一些概念。
- 考察演算法和編程基本功,需要手寫代碼。
面試過程中一般都會遇到你沒準備過讓你措手不及的問題,需要結合所學知識(不一定大學所學)加上一定思考才能解決。
在tst二面中,因為自我介紹提到了了解熟悉opengl,喜歡圖形學,被問到pipeline和基礎光照模型。而我根據其它同學的經歷,走正常實習招聘和校招面試渠道,都沒問到圖形學的知識。另外比如遊戲開發面試還是較大可能會問到數學題的,tst也被問到一道立體幾何相關的問題。
因為難度和高中那種幾何題差不多,我就直接說,
"xxx,有幾個未知量,可以根據xx,xxx,xx列幾個方程,待定係數解就好了:)"面試官點點頭,"解方程啊,這麼麻煩,你能不能不解方程來求出來"我想了一會,"應該可以這樣,xxx,xx"他聽了幾句,然後目瞪口呆,"你這不還是解方程?"尷尬,然後我想他之前還特意問了下向量相乘的一些概念,就想了下用向量的做法解決了
再講一個小片段,我室友面騰訊ieg兩輪的過程,他原本沒有選事業群,但是筆試成績好,被分到ieg來面,所以你看基礎知識很重要。
第一輪 面試官特意表揚了一下筆試成績,沒問什麼基礎問題,面試官給他一張紙,紙上有不同類型的題目,有系統設計題,有數學題... 所以說大公司會考慮到各種情況,讓你展現出自己的特長。
第二輪 主要面的問題應該就是mlioyip大神專欄提到的那個小球碰撞問題知乎專欄,室友回來跟我吐槽,這個題目啊坑很多,他不告訴你可以xx樣,可以xx樣...然而他通過了面試,所以展現出你的思維和解決問題的能力很重要
另外再舉一個失敗的例子,另外一個同學面ieg實習生,因為面試官說他沒有具體的遊戲開發項目,所以沒有通過。
同時,一般面試完,我都問了面試官如果在遊戲行業發展,希望給一些建議。下面都不是原話了,我個人理解的複述(不是來自同一人):
- 對遊戲,遊戲開發一直要有感覺或者興趣
- 要有自己的強項,遊戲開發其實也可以分的很細了,渲染啊,AI啊,服務端啊,AR/VR啊,技不在多而在於精
- 最少接觸一款遊戲引擎(因為我基本用的都是opengl),多體驗
- 還是盡量使用dx,雖然opengl只是xxx,實際上開發上還是用dx
所以總結一下:如果畢業想進遊戲開發崗,
- 先學好基礎,除了一般的計算機課程(計網,操作系統這種), 如果能學習線性代數,概率論,數字圖像處理這些課程,還是可以好好學學,這些知識可以幫助你更好學習圖形學。
- 多在這方面實踐,體現出你在這方面的興趣,看看知乎用戶文刀秋二他的個人經歷,就明白如果一心鑽研圖形學, 應該什麼樣,其實我更建議像知乎上王選易這樣,從遊戲入手,本來就是遊戲開發崗,為什麼不直接做遊戲demo,帶上你的遊戲直接去面試難道不更令人印象深刻?
- 最後老老實實刷點題
2.想去遊戲公司搞遊戲開發的需要專研那麼深嗎
如果僅僅是遊戲開發,我覺得不需要太深;如果引擎開發,就鑽研越深越好,但引擎開發,也需要你基礎紮實的。把遊戲開發過程抽象一點,假設我們開發人走動的功能,分三個步驟:從人能走-&>人走的正確-&>人走的逼真,動作好看一般而言,圖形學知識主要用於第3個步驟,提升畫面質量,前兩個步驟雖然也涉及圖形學的問題,但是基本上遊戲引擎已經給你解決了,你只要寫一些簡單邏輯就可以了。嚴格的說,遊戲開發是圖形學的應用,但不了解這些知識,你也能開發遊戲。不是很恰當的例子,就好像計算機可以說是數學的應用,但你不需要去學了數學才能用計算機。雖然沒正式開發上線的遊戲,但在實習期間小組也做了一個MiniGame。取我自身實習過程作為例子,一部分因為開發周期的限制,另一部分因為遊戲本身的業務邏輯需求就很複雜,基本很少來處理渲染質量的需求。我們項目是酷跑小遊戲,我負責的部分包括人物動作及狀態維護,一開始策劃說:
"我們先實現簡單的,基本跑,跳,下蹲你得有把,二段跳也要加。"好了,我給它加上,過了兩天說:"我最近玩幾何衝刺,它們那個空中彈簧和地面彈簧很有意思,我們也加上吧,天空彈簧啊,就是有一個區域,空中進入了這個區域,就處於可觸髮狀態,就算你之前已經經過二段跳了,只要你按跳,它還可以進行一次一段跳....."然後過了兩天,"xx啊,我覺得我們這個不夠流暢啊,你看這個啊,其實我視覺上人物已經落地了,但是它還不能跳躍次數清0啊,你得弄一下就算它物理邏輯上判斷還沒觸地,畫面上看已經觸地就能重新起跳了啊"又過了幾天,"xx啊,我們這個得有幾個特色功能啊,我想加幾個副作用的怪物,碰了這些怪,就處於負面狀態,比如這個延遲怪啊,你碰了它,任何操作都得在一段時間後才響應...."
因為當時還不知道設計模式中的狀態機模式,我只能寫很長的if else來判斷狀態,這些處理起來很麻煩,沒有精力顧的上去寫shader實現一些效果。
題主覺得可能遊戲很多酷炫的畫面都需要複雜的圖形學,其實很多用幀動畫,粒子動畫就解決了,什麼,不夠好看?你去找個好看的動畫換一下不就好了。我個人覺得遊戲能夠正確流暢的運行的重要性在畫面質量之上,遊戲開發是一個需要取捨的過程,不像圖形學研究可以在一個方面追求極致,性能,穩定性,畫面質量...得需要綜合多方面來平衡。
最後,希望題主如願以償,作為將要入遊戲行的新人,希望各位前輩多多指教:)做遊戲的人並不是都需要圖形學基礎
比如策劃、測試、音響、概念美術。。。但是做圖形學的可以去做遊戲
國內這方面不是很清楚國外遊戲產業里,圖形學的研究挺多的,年年的SIGGRAPG還有GDC都有不少關於這方面的文章主要研究的問題的話有比如:如何更高效並且更好的實現光照、如何更有效的設計開放世界的場景處理、如何更好的實現世界的細節處理(比如雪地效果、物件效果),以及抗鋸齒的研究。。。遊戲開發崗位也有細分。
一般分客戶端和伺服器。客戶端會負責所有顯示以及遊戲邏輯的實現。伺服器會負責後台數據交互邏輯的實現。題主在看OpenGL說明有意向做客戶端? 那麼國內凡是沒有自研引擎的遊戲公司都不需要你研究的太深,因為進去之後大多數是寫邏輯的。
但是,技多不壓身。
一個懂圖形編程,甚至能夠自研圖形演算法提高渲染效率的遊戲客戶端程序員身價會高過一般的。在競爭中多少有點優勢吧。
以上。遊戲公司多數程序員不需要掌握深刻的圖形學理論。
然而圖形學理論在電腦數學應用中,算是最簡單的分支之一。呃。
好歹也在遊戲公司工作過一段時間,來誤導大家一下。
--------------------------
* 還是別學OpenGL了吧。OpenGL基本上是快要過時的東西了,桌面遊戲的霸主絕對是DirectX。OpenGL過於陳舊,特別是狀態機的設計一直遭到詬病(珍愛生命遠離OpenGL)。DirectX雖然我也覺得不怎麼樣(尤其是我也不喜歡OOP),但是畢竟更加貼合新的硬體體系結構,設計思想上與時俱進一些。
很多引擎會對OpenGL或者DirectX這種底層的圖形API再做一次封裝,而這些封裝常常看起來,很像DirectX的API……
--------
補充下:有朋友提到移動端不用OpenGL ES用啥,請注意原文說的是桌面。另外,移動端可以看看Metal, Vulkan這些設計上比較新的東西,往往更接近於DirectX。所以學習上還是建議DirectX,歷史包袱小。OpenGL雖然可以不斷升級,但是畢竟歷史包袱在那裡。--------------------------------
* 計算機圖形學,到底是個啥?計算機圖形學我們可以籠統的認為是包含以下幾個領域的學科:
- Modeling
- Animation- Simulation- Rendering- Image Processing- User Interface----------------------------
* 遊戲引擎,又是個啥?遊戲引擎所需要用到的技術範圍似乎就更廣一些了:
- Modeling需要的吧,至少涉及到模型的數據格式表示什麼吧。
- 動畫支持需要的吧,人物骨骼動畫(Skinning)什麼的總要的吧。
- Simulation需要的吧,總要模擬下剛體物理啊、碰撞啊、爆炸啊什麼的吧。
- Rendering顯然是需要的,但是這也是很多人誤解的地方。注意:Rendering只是遊戲或者遊戲引擎裡面很小的一部分!渲染引擎不等於遊戲引擎!之前見過不少人寫了個渲染引擎就說自己寫的是遊戲引擎,拜託……
- 圖像處理也是常見的,比如做個屏幕空間的特效,比如預處理遊戲中的貼圖資源等等。
- 用戶界面也是需要的。別小看這塊。話說Scaleform這種專門用來做遊戲GUI的軟體還是賣錢的呢。設計個成熟穩健又易用的GUI系統,很不容易。而且主機遊戲的話,還需要考慮對各種操縱設備的支持。
除此之外,我們再來看看遊戲引擎裡面還包含了啥:
- 現在大家喜聞樂見的網路遊戲,總需要計算機網路相關的東西了吧。這就涉及到客戶端、服務端、網路協議、信息加密等。有了服務端少不了資料庫、負載平衡、軟硬體防火牆、管理後台等。
- 遊戲邏輯。這塊又涉及到很多引擎會提供自己的腳本語言,或者是集成現有的語言,給數值設計或者寫邏輯的程序員配置和編程。這就涉及到計算機語言、編譯原理、運行時庫。
話說其實在遊戲公司,寫遊戲邏輯的程序員佔了大多數。剛去公司就很難指望做多麼酷炫的技術了,做好心理準備寫個幾年Python或者C#的遊戲邏輯或者用戶界面吧……
- 文件系統。遊戲資源怎麼打包?玩家數據怎麼存檔?還得跟操作系統各種不兼容、各種坑打交道。
------------------------------------
* 怎樣的遊戲程序員最受公司歡迎?其實我覺得這個問題跟怎樣的程序員最受歡迎沒有本質區別,遊戲程序員無非多了:
- 熱愛遊戲,有開發遊戲的激情
- 玩的一手好遊戲(玩的不好怎麼有豐富的閱歷啦)- 熟悉至少一個遊戲引擎- 熟悉至少一種圖形API(還是推薦DirectX)簡單再回顧下怎樣的程序員最受公司歡迎(不代表我喜歡這樣的):
- 容易溝通、為人踏實
- 薪資要求與職位職責對應- 能夠穩定工作,而不是三天兩頭跳槽- 技術基礎紮實- 能夠獨立完成工作、獨立思考- 不怕苦、不怕累(遊戲公司基本上上線前瘋狂加班到失去人形;上線後打個補丁或者發個更新包也能把團隊折磨的死去活來。話說回來其它大部分程序員工作的地方也都差不多這樣)------------------------------------------
* 想去遊戲公司工作,需要鑽研到很深嗎?上面聊了這麼多,可能題主也看出來了,如果只是去國內前十的遊戲公司工作,還真的不需要鑽研的多深。
如果單純比較技術的話,還不如找找朋友內部推薦來的直接。畢竟很多時候,一兩次筆試或者面試,很難完整反映一個人的水平和潛力,很大一部分評價其實來自於溝通和印象上,這就存在很多不公平或者不確定的地方。再次:並不是技術最好就能給人好印象。
鑽研的深本身並沒有錯,但是調整好心態,面對現實,否則可能因為英雄無用武之地感到很不平衡。
但我覺得鑽研深淺這個話題,不是為了眼前的工作,而是主要是為了未來你能走多遠,能不能嶄露頭角,能不能獨當一面。這是為了自己,並不是為了任何人。
做圖形也好,做遊戲也好,都未必會做一輩子。所以在任何事情上花多少時間精力,鑽研到什麼程度,考慮下自己想要什麼最重要。
-----------------------根據評論區提示編輯了一下回答,Computer Vision是個比較綜合的領域,不能算作Computer Graphics的分支,應該替換為其中用到的Image Processing才嚴謹些,謝謝提醒。圖形學算是遊戲開發的一個分枝,但絕對不是最重要的分枝
但是學了也不會有啥壞處,可以加深你對遊戲開發的理解大約是:CAD原理和畫建築圖之間的關係圖形學肯定是學的越深越好,如果你想深入學習OpenGL的話,推薦兩個網站Learn OpenGL, extensive tutorial resource for learning Modern OpenGL 和 OpenGL Step by Step,書的話就是紅寶書和藍寶書啦,但是不能光看書還是要多多實踐。其實遊戲開發不光是圖形學方面,還有很多方面的,例如遊戲邏輯開發,伺服器開發等,很多人即使完全不會圖形學也能在遊戲開發行業混得很好。
如其他答主所說,遊戲開發包括很多方面:遊戲引擎、UI 設計、市場營銷等等,詳細的可以參考下面這本書
Game Engine Architecture, second edition, Richard Lemarchand的 1.1 節:Structure of a Typical Game Team該章節介紹了遊戲開發團隊的大致分工,以及每種分工的職責。所以綜合來說,得看題主對那個方面的工作感興趣。
既然題主仍在大學階段,那麼可以無所畏懼地嘗試很多東西,從而最終找出自己最感興趣的方向。比如,我經過多年的嘗試和思考,確定了我最感興趣的方向是 graphics engineer,負責遊戲引擎中,渲染模塊的構建 (如《神秘海域4》《看門狗2》中,水面的渲染)
至於題主到底該學什麼,學到多深,遊戲公司希望應屆生是什麼樣子,題主不妨去各大遊戲公司的招聘頁面看看,招聘條件怎麼說。
比如 Naughty Dog 的 Graphics ProgrammerNaughty Dog | Naughty Dog(1) 鞏固的線性代數知識(2) 鞏固的 C/C++ 編程語言知識(3) 鞏固的 graphics API 知識 (如 DirectX, OpenGL)(4) 渲染語言知識 (e.g. GLSL, HLSL)(5) GPGPU (並行計算) 知識etc.再比如 Ubisoft 的 Graphics Programmer
Careers / Search for Jobs(1) 鞏固的 C++, 面向對象設計,數據結構和演算法的知識(2) 鞏固的線性代數知識(3) 3D Graphics 相關的知識etc.像這樣,先找到目標職位,再根據該職位的要求提升自己,我認為是最有效的方法如果想做圖形沾邊的你去遊戲圈只能找做引擎的,但是除非你自己很牛逼比如已經做了個渲染引擎demo,然後運氣爆棚大廠的大佬心情好願意要你,不然最多就是用unity給手機遊戲寫邏輯.
如果把做遊戲比作製造汽車(類比不是那麼嚴謹),那麼,圖形學有點類似發動機的製作原理,也可以類似輪胎的製作技術。
做遊戲需要深入研究圖形學嗎?不需要。因為有現成的商業遊戲引擎可以直接拿來用(unity, unreal, cocos等)。就好比製造汽車需要深入研究發動機的製作原理嗎?不需要。直接拿發動機生產廠商提供的成熟發動機產品,研究其介面,對接組裝到我們自己設計的汽車上即可。同樣,也不需要了解輪胎是怎麼製造出來的,直接拿來用,是最省事、最高效、成本最低的做法。
當然你也可以利用圖形學的知識自己從頭開發遊戲引擎,進而基於自己的遊戲引擎來製造遊戲;就好像你可以自己造發動機,自己造輪子,然後再製造汽車一樣。不過這樣做的公司越來越少了,因為任何行業分工都是越來越細化的。那麼,現在學圖形學到底有沒有用?
如果興趣點是製作遊戲,而不是製作遊戲引擎,那確實用處不大,但是,了解圖形學原理和相應技術,會對遊戲引擎的理解上一個檔次,能夠最大化發揮出引擎的威力來。就好像了解了發動機底層原理的汽車製造工程師,製造出來的汽車肯定也能把發動機的性能發揮到極致。最後,學圖形學如果想學以致用,能去哪些公司工作呢?目前公司招聘對圖形學有要求的,印象中主要有Adobe和nVidia,大的遊戲公司之前會有獨立的引擎部或研究院,這些年隨著商業引擎的興起,這些部門也越來越邊緣化,所以,除非是對圖形學技術有真愛,對遊戲引擎的製作充滿熱情,否則從實際出發只想單純製作遊戲的話,確實沒有必要花太多時間在圖形學上。比如泡個妹子來得實在
做遊戲像造車。
圖形學是開發發動機。兩者有交集。造車是把包括發動機在內的很多子系統結合起來的系統工程。其中發動機是最複雜精密的一個子系統。跑車用V10增壓,菜車用老L4,還有電動車。有車廠沒有發動機技術怎麼辦,直接去買啊,比如康明斯,這就是遊戲引擎。
造發動機也不全是為了車,有船用巨型內燃機,更牛B的RR造航空發動機,這些比造車高到不知哪裡去了。圖形學是基礎,是一輛叫做「遊戲」的車上的發動機
可以說遊戲技術開發是圖形學的下遊學科,搞遊戲開發了解圖形學很好,但也不是必要的。好比說我學計算機是不是要懂數學物理,這個關係。
做遊戲,或者說發布一款遊戲,涉及的面更廣,與技術,設計,商業,市場,宣傳推廣等都有關係,技術開發只是一個方面。
題主問做遊戲與圖形學有什麼關係,類似於賣電腦與量子力學有什麼關係一樣。你如果比較叼,賣電腦賣到世界第一,當然要有一幫人研究量子力學開發最高性能的電腦啦。如果一般般,就是從別人那裡進貨倒賣出去,就不用搞那個。圖形是屬於多媒體技術的範疇,然而我國的技術核教育落後西方發達國家太遠了,感覺比造發動機都難。
並不是特別清楚,但是說說我的理解。首先做遊戲這個範圍其實挺廣的,有編程有美工有策劃有測試等,可能題主指的是編程方面,確實有了遊戲引擎不需要太深的圖形知識,不過多少也需要一點,不然以後怎麼和美工協商呢?而且其他方面比如引擎開發,這個沒有深厚的圖形學知識那還真的是行不通的,遊戲引擎的好壞直接影響遊戲的水準。還有一點我覺得的多學點總是對你在遊戲行業百利而無一害的。(3dmax挺好玩的)
大學的java入門課寫走迷宮的小遊戲只用system.out.print就可以打到效果了(逃
一般來說,如果想從事遊戲開發,圖形學知識越多越好。遊戲開發有很多崗位,會根據每個人的專長分配不同的工作,如果你懂opengl,會寫shader,就可以去接觸圖形相關的功能實現。但是,遊戲畢竟不同於搞研究,引擎和框架基本都是成熟的,發揮的空間不大,而且現在基本都是手游,用到的圖形學知識不多。最後,多學總是好的,以後硬體性能提升了,說不定就用到了很複雜的渲染方法呢。
推薦閱讀:
※既然 C++ 是 C 的超集,為什麼還是有不少人認為 C++ 不如 C?
※為什麼 C# 的語法特性並不比 C++ 簡單,但編譯速度卻比C++快那麼多?
※學C++真的需要看那麼多書嗎?
※既然建議盡量避免使用goto語句為何C++還要支持goto呢?