很多游戲開發(fā)者認(rèn)為自己能寫邏輯就等于掌握了游戲開發(fā)技術(shù),引擎對自己來說無足輕重,這種想法是有問題的。首先你寫邏輯是在引擎的基礎(chǔ)上寫,其次如果你對引擎一無所知,非常不利于你去深入理解邏輯開發(fā)。相反如果你對引擎有深入的研究,你調(diào)用引擎提供的接口時可以很清楚的知道其內(nèi)部是如何實現(xiàn)的,這樣有助于寫一些引擎的輔助功能算法,提升自己的編程能力。
我以前在網(wǎng)龍工作時,項目組就有一位邏輯程序員在做功能時,需要在原有引擎接口的基礎(chǔ)上增加一些算法編程以滿足游戲玩法,當(dāng)時他并沒有求助引擎組的同事,而是自己寫出來了,因為他自己平時就喜歡鉆研3D游戲引擎,了解引擎接口內(nèi)部是如何實現(xiàn)的,這本身就證明了他的編程能力。最后將其吸納到擁有公司最核心技術(shù)的引擎項目組,薪酬和職位同時得到了提升。因為在公司里面會寫算法或者會GPU編程的人相對來說非常少,如果你掌握了3D引擎開發(fā)技術(shù)不僅對于邏輯開發(fā)更加有利,而且對于你技能提升幫助非常大。
學(xué)習(xí)3D引擎需要經(jīng)歷一個由淺入深的過程,首先你要了解最基本的一些3D知識,比如固定流水線,可編程流水線,3D模型結(jié)構(gòu),骨骼動畫等這些知識,并且能利用Dirct3D或者OPENGL或者OPENGLES這些圖形庫中任何一個,做個簡單的Demo。通過Demo了解程序運行的原理后,再嘗試封裝一些簡單算法,一些常用函數(shù),利用這個簡單封裝做一款小的游戲Demo。最后再研究一下GPU編程比如CG、HLSL語言的語法,在GPU編程的基礎(chǔ)上再學(xué)習(xí)一些大型游戲開發(fā)中常用的算法,比如PSSM實時陰影算法,Bloom算法等這些與Shader編程緊密相關(guān)的后處理渲染算法。
目前各大游戲公司比如網(wǎng)易,騰訊,EA,任天堂等國內(nèi)外知名的IT公司,還有許多新興的VR/AR公司非常緊缺3D引擎資深程序或者圖形學(xué)引擎開發(fā)人員,開出了非常誘人的薪水和待遇,從中可以看出目前游戲市場對于這類人才需求還是非常緊缺的。這正是一個學(xué)習(xí)3D引擎開發(fā)的好機會,俗話說,“機不可失,時不我待”。
筆者曾經(jīng)在國內(nèi)知名IT游戲公司參與過3D游戲引擎項目組的研發(fā),利用業(yè)余時間也開發(fā)過3D游戲引擎,從底層算法到架構(gòu)設(shè)計都是一個人完成的,當(dāng)然開發(fā)周期也是比較長的;氐秸},3D引擎這么重要,那作為新手應(yīng)該如何著手學(xué)習(xí)?換句話說關(guān)于開發(fā)3D引擎要具備哪些條件?網(wǎng)絡(luò)上有許多這方面的解答,筆者經(jīng)過多年對3D游戲引擎的開發(fā)研究和實踐經(jīng)驗,在此主要總結(jié)了以下四點供大家學(xué)習(xí)參考。
首先,必須要掌握主流開發(fā)語言C、C++、Java或者C#至少一門編程語言,編程離不開數(shù)據(jù)結(jié)構(gòu),大學(xué)課程里面學(xué)的數(shù)據(jù)結(jié)構(gòu)對于游戲開發(fā)非常重要,數(shù)據(jù)結(jié)構(gòu)在游戲開發(fā)中主要用于數(shù)據(jù)存儲以及內(nèi)存管理,開發(fā)3D引擎常用數(shù)據(jù)結(jié)構(gòu)有數(shù)組、鏈表、哈希表等以及常用的一些查找算法:快速排序,二叉樹查找,二分查找等,對于常用的數(shù)據(jù)結(jié)構(gòu)要重點掌握。為引起讀者重視,在此再重點強調(diào)一下,數(shù)據(jù)結(jié)構(gòu)對于游戲開發(fā)非常重要。
其次,線性代數(shù)對于開發(fā)同樣非常重要,掌握線性代數(shù)的目的是在游戲開發(fā)中靈活的運用向量、矩陣、四元數(shù)以及歐拉角這些基本的數(shù)學(xué)運算解決問題。3D固定流水線中的坐標(biāo)變換和可編程流水線的頂點和像素轉(zhuǎn)換都是使用線性代數(shù)運算完成的,運算主要涉及游戲開發(fā)中的物體移動、旋轉(zhuǎn)、縮放,以及點乘和差乘等。
再次,現(xiàn)在的3D游戲引擎渲染都是基于DirectX或者是OPENGL、OPENGLES這些圖形庫完成的,這就需要開發(fā)者能夠熟練的使用圖形庫的接口開發(fā)程序,在當(dāng)前移動端跨平臺非;馃岬那闆r下,建議大家學(xué)習(xí)OPENGL圖形庫。3D引擎的核心功能就是對游戲的嘲渲染和物體的材質(zhì)渲染,對于材質(zhì)中有Alpha通道的要做特殊處理,Alpha通道就是說材質(zhì)有透明的部分。在移動端為了減少透明材質(zhì)的消耗,會通過GPU編程在Shader中進行處理,比如把有Alpha通道的圖片切分成無Alpha通道和有Alpha通道的圖片,通過Shader編程將其再合在一起。嘲渲染使用的是后處理渲染效果,比如Bloom、Blur、Ssao、Pssm等等。這些效果實現(xiàn)與GPU編程息息相關(guān),要求大家至少掌握GLSL、HLSL或者CG這些基于顯卡GPU編程語言的一種。
最后是圖形學(xué)算法,游戲要實現(xiàn)一些逼真的效果離不開算法的支持,比如柔體的模擬,剛體碰撞效果以及曲線插值算法等。學(xué)習(xí)圖形學(xué)算法,建議大家看一下《算法導(dǎo)論》這本非常經(jīng)典的書籍,以上說的這些是引擎中比較深層次的知識點。另外在框架設(shè)計方面,需要掌握設(shè)計模式里常用的比如工廠模式,單件模式,狀態(tài)模式,MVC模式等。設(shè)計模式的使用不是靠死記硬背,需要將其靈活運用到項目開發(fā)中,這樣才能逐步深入領(lǐng)會其設(shè)計精髓。初學(xué)者在使用設(shè)計模式的過程中會出現(xiàn)一個誤區(qū):千萬不要為了使用設(shè)計模式而使用設(shè)計模式,過度的使用會得到適得其反的效果,凡事要把握一個度。以前公司的同事為了使用設(shè)計模式,不論設(shè)計什么模塊都要用設(shè)計模式,最后導(dǎo)致在模塊擴充時出現(xiàn)了很多問題,舉這個例子是告訴讀者好東西也不能亂用。筆者從沒有在做架構(gòu)設(shè)計時去特意考慮用哪種設(shè)計模式,都是順其自然的使用,真正的用劍高手,可以做到手中無劍,心中有劍的境界。
以上四點是筆者對3D游戲引擎開發(fā)的心得體會,建議大家循序漸進的學(xué)習(xí),優(yōu)先掌握第一、第二點,其次第三點,最后是圖形學(xué)算法,由易到難的學(xué)習(xí)。希望讀者通過本書的學(xué)習(xí),能夠?qū)σ骈_發(fā)有更深入的理解,寫出更好的3D游戲引擎或者更好的渲染算法。
游戲開發(fā)最核心的技術(shù)是算法,在游戲開發(fā)中占非常大的比重,也可以說是引擎核心中的核心,以筆者親身開發(fā)項目經(jīng)歷給大家分享一下,希望起到拋磚引玉的效果。近期與高?蒲袡C構(gòu)合作研發(fā)了一款海水渲染3D引擎,可以逼真的模擬真實海浪,以及海浪在不同的天氣實現(xiàn)不同的效果,模擬船在海中隨海浪上下浮動和直升機在海浪上空懸停風(fēng)力與海浪的作用效果等。在實現(xiàn)的過程中使用了很多算法比如Perlin噪音算法,弗洛伊德算法,以及物理算法等。
技術(shù)的學(xué)習(xí)掌握不是一朝一夕能夠完成的,關(guān)鍵在于堅持,首先要做的是打好基礎(chǔ),在真正掌握了基礎(chǔ)知識后,再提升是非?斓。做游戲引擎也是知識積累的過程,雖然現(xiàn)在的3D引擎非常多,自己開發(fā)游戲引擎已經(jīng)不現(xiàn)實,但是要想真正的深入學(xué)習(xí)游戲開發(fā)核心技術(shù),至少應(yīng)該知道引擎的底層是如何實現(xiàn)的,換句話說就是其工作原理要搞清楚,這對于開發(fā)者來說非常重要。不要再把自己局限于代碼操作工簡單的寫寫邏輯,這對自己的技術(shù)提升沒有任何幫助的。
要做到對游戲開發(fā)知其然知其所以然,就必須學(xué)習(xí)3D引擎開發(fā)技術(shù),特別是對剛踏入游戲行業(yè)的從業(yè)者,每天堅持不斷的學(xué)習(xí),如果你能持續(xù)不斷的堅持10000個小時學(xué)習(xí),你肯定會成為3D引擎高手。這就跟鍛煉身體一樣,其實鍛煉身體非常能夠磨練一個人的心性,鍛煉一個人的意志力。自己嘗試開發(fā)一款小的游戲引擎,即使不能成功但是過程也是非常重要的,你從中可以學(xué)習(xí)到很多知識,經(jīng)驗的積累對自己的發(fā)展幫助非常大,這也是為什么游戲公司招聘,首要的條件是應(yīng)聘者要有實際開發(fā)項目工作經(jīng)驗。
投稿郵箱:chuanbeiol@163.com 詳情請訪問川北在線:http://sanmuled.cn/