3d引擎開發需要那些技能儲備?
想從事這方面開發,opengl初學者。很想3d引擎開發,學習了圖形學以後,發現自己懂得太少了,好桑感,不過還是個不打算放棄,努力!!
我已決定要厚著臉皮來回答這個問題。-------------------------------------------------題外話---------------------------------------------------- 答主今年3月碩士畢業,現就職於國內某遊戲公司遊戲引擎組,入職時沒有引擎方面的知識和經驗,承蒙引擎組BOSS不棄將我納入帳中,跪謝!---------------------------------------------------------------------------------------------------------------
入職後,開始陸陸續續接觸一些引擎方面的知識。
首先,引擎是一個包含了眾多模塊的一個集合。不止是渲染,還有物理碰撞、UI、動畫、AI、音效、腳本、場景、profile等。 可以這麼說,能夠掌握全部模塊的通才應該是少之又少,(在我所認識的從事引擎工作的人里只有公司里負責帶我的導師能夠算得上是各方面都有涉及且具備一定研究深度的,畢竟在育碧做了好久的引擎) 在引擎組,周邊也不乏有渲染、物理、UI、骨骼動畫、AI等各路大神,但大多都是負責其中一個部分,並進行深入的研究。----------------------------------------------------------------------------------------------------------------- 其實從事這一行,無非就是多看書、看paper、看別人的代碼,遇到什麼問題就針對性地去解決。 在引擎開發的學習過程中,可參考一些開源的引擎。如渲染方面,可以看看Ogre、Horde3D等,Ogre是我的導師極力推薦我看的,不止是它的渲染,從設計模式角度來說也是堪稱經典。Horde3D的渲染也是蠻不錯的,我們目前有在考慮利用Horde3D來做一些渲染的工作。 物理引擎的話現在在看的是Bullet Physics,不過官方的文檔比較少的,資料也比較殘缺,好在有Havok的文檔可作對照。 其他的部分我還沒涉及,所以也比較難給出好的建議。-------------------------------------------------------------------------------------------------------------------關於技能儲備:
正如 @Xi Yang 所說,渲染管線、C++以及一些演算法都是必不可少的,答主不才,額外再補充幾點。 1、理論基礎:雖然我極力反對只理論不實踐,但理論的基礎還是必要的,如圖形學、OpenGL、Shader都是需要好好學習的。 2、演算法:關於一些主流/非主流演算法還是應該多看看paper,一些好心的paper作者會給出代碼,動手去實現看看吧,一定會受益匪淺。 3、讀懂代碼:答主覺得最重要的還是讀懂別人的代碼,在這樣一個站在巨人肩膀上看世界的時代,無數的開源引擎工作者利用數十年來的相關領域的研究成果搭建起來的引擎,對我們來說相當於是免費的午餐,如果能夠掌握並為自己所用,想必已是大神。我在努力中,你也加油!遊戲引擎工程師 / game engine engineer 分工會很細,成熟的企業不會要求一個員工既做 graphics,又做 physics,又做 scene editor,又做 game play。
我認識一些 senior engine engineer 是不懂 graphics 的,也不需要懂 graphics,關鍵在於你的職業定位,你{ 希望 | 熱衷於 | 有能力 } 解決哪方面的問題。
現在國內的趨勢是用 Unity3D 或 cocos2d-x 進行開發,那麼你可以參考這兩個進行學習。- 基於它們進行大量的遊戲開發
- 思考它們的設計模式,比如 U3D 的 component 模型、surface shader,C2D 的場景-節點、"兼容" obj-c 的語法
- 為什麼要實現這些功能
- 如果換做你能否實現
- 能否換種方式實現
- 基本上做到這一步就可以了
- 你也可以挖個坑自己實現一個引擎,或者在 C2D 中實現 deferred shading -。-,對於找工作來說都是亮點。
找家靠譜的遊戲公司進行實習也是個捷徑,早點確定技術方向,少走彎路。
書籍的話推薦 milo 翻譯的《遊戲引擎架構》。
編程語言的話還是 C++ 為主,多關注下矩陣運算。
總之,知識點不要鋪太大,找一個方向深入下去。職業生涯長著,慢慢來。1:了解顯卡管線,在裡面的各種小坑大坑巨坑掉一遍。2:熟練掌握C++,在裡面的各種小坑大坑巨坑掉一遍。3:一些空間演算法,比如空間劃分,射線投射,相交檢測等等。
俺寫過自己的手游渲染引擎,也coding過前公司的demo引擎,現在寫一個webgl渲染引擎,開發遊戲引擎需要的知識挺多的,這裡只說說我還熟悉的渲染引擎的知識。
1. 圖形API要掌握熟練至精通,從opengl 2.0到dx12,不但要玩過,最好積累過優化經驗。沒用過各大廠的profiling工具就不叫精通。
2. C++要好,數據結構要玩的來,自己實現個紅黑樹,hash啥的沒有問題。然後各種數據結構的空間時間複雜度要了解。場景管理要做好得靠這個硬功夫。3. 計算機體系得學好啊,現在程序bound在cpu多,怎麼把cache用好對性能提高差好多。sse,mmx這些要能玩得轉,不然math庫咋寫? 對哦,還有arm的neon。4. 計算機圖形的知識要懂,懂多少不好說。這就好比你要舉起100公斤的杠鈴得具備200公斤的爆發力,因為多餘的100公斤力量要用在控制上。引擎要寫好,要具有擴展性,至少要具備深厚的graphics知識。比如舉個簡單例子,如果不了解deferred shading和forward rendering的具體差別,咋讓兩者實現在一個引擎中呢?5. 編譯知識要玩得轉啊,還得自己搞個高級的shader語言封裝低級shader
6. 各個平台的編譯系統和基本庫得知道,整套全平台的工程文件都折騰2個禮拜。7. 數學要知道些,不過用到不多,四元數和矩陣會用會寫就好啦暫時說這麼多吧,手機打字,版面有礙觀瞻,見諒。這個問題的權威回答還是得請 龔大大書可以給你一切,我的建議在這裡http://zero3d.cn/blog/post/38.html,我又來導流量了,見笑。
建議從UE4源代碼來看吧,學習一下,一個成熟引擎是怎麼做的。可能上手麻煩一些。
同作為小白,我嘗試過寫一個簡單的遊戲引擎,應該不能稱之為遊戲引擎,只是對學過知識的一次嘗試運用。《遊戲引擎架構》這本書真的得看,不然都不知道引擎有哪些功能,這個就很尷尬了。其次最好用遊戲引擎做過小遊戲,對遊戲引擎感性上有認識。有些開源的引擎還可以進去瞅瞅源碼,思考為什麼人家這麼寫,可以有哪些改進。這些都從宏觀上把握。對於引擎的細節,又分好多。大塊的比如渲染,這個就要求圖形學的知識,數學知識,熟悉底層的API。場景管理需要多注意四岔樹、八岔樹等數據結構。讓引擎漂亮點還可以寫導入模型,骨骼動畫的東西。物理系統比較難,自己視情況而定吧,並不是遊戲引擎必備的部分。集中到遊戲引擎上,可以就使用STL的容器,方便。如果這些都能弄漂亮,相信題主對遊戲引擎會有一個更好的認識。祝題主實踐順利
找到d3d的sdk,一個sample一個sample的看,看的差不多了的話 基本常用的圖形學trick也能知道個差不多了。
如果你是想作為職業方向的話,最好的方式還是到業內來,比如我們公司(北京),哈哈哈哈。你要有興趣的話可以私信我1:有代碼組織能力;2:會搜索,會翻牆,能英語閱讀;3:能在國外論壇發帖提問。國內有些Blog,x吧,x群等,太差勁,要麼錯誤百出,要麼所答非所問,有些人還挺愛裝B嘲諷,愛答不理的!4:堅韌不拔!記住,寫遊戲引擎不是讓你重新發明什麼,而是在重複,重複別人走過的路,趟過的坑!
推薦閱讀:
※求實時渲染基本演算法好書推薦?
※如何判定一點是否在給定頂點的不規則封閉區域內?
※WPF 使用 OpenGL 4.5 繪圖太卡?
※渲染的時候是不是頂點數目越少越好?
※WebGL 和 OpenGL ES 有什麼區別?