你好,歡迎來到川北在線
微信
騰訊微博
新浪微博
經驗分享:3D游戲引擎開發(fā)研究與實踐
時間:2017-04-11 15:17   來源:gamelook   責任編輯:毛青青

  很多游戲開發(fā)者認為自己能寫邏輯就等于掌握了游戲開發(fā)技術,引擎對自己來說無足輕重,這種想法是有問題的。首先你寫邏輯是在引擎的基礎上寫,其次如果你對引擎一無所知,非常不利于你去深入理解邏輯開發(fā)。相反如果你對引擎有深入的研究,你調用引擎提供的接口時可以很清楚的知道其內部是如何實現(xiàn)的,這樣有助于寫一些引擎的輔助功能算法,提升自己的編程能力。

  我以前在網(wǎng)龍工作時,項目組就有一位邏輯程序員在做功能時,需要在原有引擎接口的基礎上增加一些算法編程以滿足游戲玩法,當時他并沒有求助引擎組的同事,而是自己寫出來了,因為他自己平時就喜歡鉆研3D游戲引擎,了解引擎接口內部是如何實現(xiàn)的,這本身就證明了他的編程能力。最后將其吸納到擁有公司最核心技術的引擎項目組,薪酬和職位同時得到了提升。因為在公司里面會寫算法或者會GPU編程的人相對來說非常少,如果你掌握了3D引擎開發(fā)技術不僅對于邏輯開發(fā)更加有利,而且對于你技能提升幫助非常大。

  學習3D引擎需要經歷一個由淺入深的過程,首先你要了解最基本的一些3D知識,比如固定流水線,可編程流水線,3D模型結構,骨骼動畫等這些知識,并且能利用Dirct3D或者OPENGL或者OPENGLES這些圖形庫中任何一個,做個簡單的Demo。通過Demo了解程序運行的原理后,再嘗試封裝一些簡單算法,一些常用函數(shù),利用這個簡單封裝做一款小的游戲Demo。最后再研究一下GPU編程比如CG、HLSL語言的語法,在GPU編程的基礎上再學習一些大型游戲開發(fā)中常用的算法,比如PSSM實時陰影算法,Bloom算法等這些與Shader編程緊密相關的后處理渲染算法。

  目前各大游戲公司比如網(wǎng)易,騰訊,EA,任天堂等國內外知名的IT公司,還有許多新興的VR/AR公司非常緊缺3D引擎資深程序或者圖形學引擎開發(fā)人員,開出了非常誘人的薪水和待遇,從中可以看出目前游戲市場對于這類人才需求還是非常緊缺的。這正是一個學習3D引擎開發(fā)的好機會,俗話說,“機不可失,時不我待”。

  筆者曾經在國內知名IT游戲公司參與過3D游戲引擎項目組的研發(fā),利用業(yè)余時間也開發(fā)過3D游戲引擎,從底層算法到架構設計都是一個人完成的,當然開發(fā)周期也是比較長的;氐秸},3D引擎這么重要,那作為新手應該如何著手學習?換句話說關于開發(fā)3D引擎要具備哪些條件?網(wǎng)絡上有許多這方面的解答,筆者經過多年對3D游戲引擎的開發(fā)研究和實踐經驗,在此主要總結了以下四點供大家學習參考。

  首先,必須要掌握主流開發(fā)語言C、C++、Java或者C#至少一門編程語言,編程離不開數(shù)據(jù)結構,大學課程里面學的數(shù)據(jù)結構對于游戲開發(fā)非常重要,數(shù)據(jù)結構在游戲開發(fā)中主要用于數(shù)據(jù)存儲以及內存管理,開發(fā)3D引擎常用數(shù)據(jù)結構有數(shù)組、鏈表、哈希表等以及常用的一些查找算法:快速排序,二叉樹查找,二分查找等,對于常用的數(shù)據(jù)結構要重點掌握。為引起讀者重視,在此再重點強調一下,數(shù)據(jù)結構對于游戲開發(fā)非常重要。

  其次,線性代數(shù)對于開發(fā)同樣非常重要,掌握線性代數(shù)的目的是在游戲開發(fā)中靈活的運用向量、矩陣、四元數(shù)以及歐拉角這些基本的數(shù)學運算解決問題。3D固定流水線中的坐標變換和可編程流水線的頂點和像素轉換都是使用線性代數(shù)運算完成的,運算主要涉及游戲開發(fā)中的物體移動、旋轉、縮放,以及點乘和差乘等。

  再次,現(xiàn)在的3D游戲引擎渲染都是基于DirectX或者是OPENGL、OPENGLES這些圖形庫完成的,這就需要開發(fā)者能夠熟練的使用圖形庫的接口開發(fā)程序,在當前移動端跨平臺非;馃岬那闆r下,建議大家學習OPENGL圖形庫。3D引擎的核心功能就是對游戲的嘲渲染和物體的材質渲染,對于材質中有Alpha通道的要做特殊處理,Alpha通道就是說材質有透明的部分。在移動端為了減少透明材質的消耗,會通過GPU編程在Shader中進行處理,比如把有Alpha通道的圖片切分成無Alpha通道和有Alpha通道的圖片,通過Shader編程將其再合在一起。嘲渲染使用的是后處理渲染效果,比如Bloom、Blur、Ssao、Pssm等等。這些效果實現(xiàn)與GPU編程息息相關,要求大家至少掌握GLSL、HLSL或者CG這些基于顯卡GPU編程語言的一種。

  最后是圖形學算法,游戲要實現(xiàn)一些逼真的效果離不開算法的支持,比如柔體的模擬,剛體碰撞效果以及曲線插值算法等。學習圖形學算法,建議大家看一下《算法導論》這本非常經典的書籍,以上說的這些是引擎中比較深層次的知識點。另外在框架設計方面,需要掌握設計模式里常用的比如工廠模式,單件模式,狀態(tài)模式,MVC模式等。設計模式的使用不是靠死記硬背,需要將其靈活運用到項目開發(fā)中,這樣才能逐步深入領會其設計精髓。初學者在使用設計模式的過程中會出現(xiàn)一個誤區(qū):千萬不要為了使用設計模式而使用設計模式,過度的使用會得到適得其反的效果,凡事要把握一個度。以前公司的同事為了使用設計模式,不論設計什么模塊都要用設計模式,最后導致在模塊擴充時出現(xiàn)了很多問題,舉這個例子是告訴讀者好東西也不能亂用。筆者從沒有在做架構設計時去特意考慮用哪種設計模式,都是順其自然的使用,真正的用劍高手,可以做到手中無劍,心中有劍的境界。

  以上四點是筆者對3D游戲引擎開發(fā)的心得體會,建議大家循序漸進的學習,優(yōu)先掌握第一、第二點,其次第三點,最后是圖形學算法,由易到難的學習。希望讀者通過本書的學習,能夠對引擎開發(fā)有更深入的理解,寫出更好的3D游戲引擎或者更好的渲染算法。

  游戲開發(fā)最核心的技術是算法,在游戲開發(fā)中占非常大的比重,也可以說是引擎核心中的核心,以筆者親身開發(fā)項目經歷給大家分享一下,希望起到拋磚引玉的效果。近期與高校科研機構合作研發(fā)了一款海水渲染3D引擎,可以逼真的模擬真實海浪,以及海浪在不同的天氣實現(xiàn)不同的效果,模擬船在海中隨海浪上下浮動和直升機在海浪上空懸停風力與海浪的作用效果等。在實現(xiàn)的過程中使用了很多算法比如Perlin噪音算法,弗洛伊德算法,以及物理算法等。

  技術的學習掌握不是一朝一夕能夠完成的,關鍵在于堅持,首先要做的是打好基礎,在真正掌握了基礎知識后,再提升是非?斓。做游戲引擎也是知識積累的過程,雖然現(xiàn)在的3D引擎非常多,自己開發(fā)游戲引擎已經不現(xiàn)實,但是要想真正的深入學習游戲開發(fā)核心技術,至少應該知道引擎的底層是如何實現(xiàn)的,換句話說就是其工作原理要搞清楚,這對于開發(fā)者來說非常重要。不要再把自己局限于代碼操作工簡單的寫寫邏輯,這對自己的技術提升沒有任何幫助的。

  要做到對游戲開發(fā)知其然知其所以然,就必須學習3D引擎開發(fā)技術,特別是對剛踏入游戲行業(yè)的從業(yè)者,每天堅持不斷的學習,如果你能持續(xù)不斷的堅持10000個小時學習,你肯定會成為3D引擎高手。這就跟鍛煉身體一樣,其實鍛煉身體非常能夠磨練一個人的心性,鍛煉一個人的意志力。自己嘗試開發(fā)一款小的游戲引擎,即使不能成功但是過程也是非常重要的,你從中可以學習到很多知識,經驗的積累對自己的發(fā)展幫助非常大,這也是為什么游戲公司招聘,首要的條件是應聘者要有實際開發(fā)項目工作經驗。

   投稿郵箱:chuanbeiol@163.com   詳情請訪問川北在線:http://www.sanmuled.cn/

川北在線-川北全搜索版權與免責聲明
①凡注明"來源:XXX(非在線)"的作品,均轉載自其它媒體,轉載目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點和對其真實性負責,本網(wǎng)不承擔此類稿件侵權行為的連帶責任。
②本站所載之信息僅為網(wǎng)民提供參考之用,不構成任何投資建議,文章觀點不代表本站立場,其真實性由作者或稿源方負責,本站信息接受廣大網(wǎng)民的監(jiān)督、投訴、批評。
③本站轉載純粹出于為網(wǎng)民傳遞更多信息之目的,本站不原創(chuàng)、不存儲視頻,所有視頻均分享自其他視頻分享網(wǎng)站,如涉及到您的版權問題,請與本網(wǎng)聯(lián)系,我站將及時進行刪除處理。



圖庫
合作媒體
金寵物 綠植迷
法律顧問:ITLAW-莊毅雄律師