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