踏上遊戲引擎之路
還記得剛開始上班的第一天,手裡抱著DirectX相關的幾本書,準備好好學習一下關於哪些炫酷畫面的單機遊戲是如何做出來的。結果小組組長拉著我和剛來的一位同學到會議室,面前擺在一張關於伺服器框架的圖,一句話:「團隊暫時不缺客戶端,你們做伺服器吧!」。當時都懵掉了,大學期間找好工作後,為了準備實習,都是在自學Windows操作系統原理和DirectX,Linux只是簡單會裝系統,簡單的玩玩而已。我表明了自己的狀況後,組長說了句:「沒事,只要會C++就可以的」,就這樣開始了遊戲伺服器端的開發,一晃就是十年。
如今,當年的衝動和激情仍在涌動,每每看到哪些精美的遊戲畫面,都會被深深吸引,想要一探究竟。本周走馬觀花地閱讀了一遍《遊戲引擎架構》,被遊戲引擎涉及到知識量深深地震驚了,遊戲開發的精華和激動人心的部分,原來都在引擎裡面。幡然悔悟,原來自己也就只能算個偽遊戲程序員罷了。
《遊戲引擎架構》這本書,涉及的面比較廣,每個知識點深度一般,全書都是圍繞這下面這張引擎知識框架圖展開。
不同層級的知識量都是驚人的,憑記憶大概介紹下:
Hardware(硬體):
遊戲所運行的硬體主要涉及到的核心硬體那當然是GPU了,GPU據我所知它的計算方式和CPU有非常大的區別,GPU的架構是基於向量運算的,對於圖形圖像的數據處理起來要高效許多,也被大量用於科學計算。現在包含GPU的設備如普通的PC、遊戲主機、手機,現在的性能都非常牛。
Drivers(驅動):
通往OS和硬體的中間層,就是驅動。鍵盤、滑鼠、顯示器都是需要驅動程序才能進行高級編程。
OS(操作系統):
說起操作系統也是五花八門,PC端如:Windows、Linux、Mac等,手機端如:iOS、Andriod、Windows phone等。做遊戲開發,涉及到性能問題,如果對操作系統原理和相應的平台有不了解,那會死的很慘。
3rd Paryt SDKs(第三方SDK):
遊戲引擎的最基本的編程元素,圖形渲染如:DirectX、OpenGL、貌似還有一個最新的叫Vulcan。C++基本庫:STL、Boost、還有超級炫技的Loki。
Platform Independence Layer(平台獨立層):
硬體、OS、圖像渲染各種都是五花八門,為了基於引擎開發的遊戲能夠運行在這些平台下,就需要封裝一層用於隔離這些依賴。花樣又多了:平台偵測、原子數據類型、容器和迭代器、文件系統、網路傳輸、高精度定時器、多線程、圖形渲染的封裝、物理引擎的封裝等。看到這一層有種想哭的感覺,C++功力不夠,多個平台不了解,看懂尚需時間,自行封裝簡直要命。各種兼容性,搞不死也半殘。
Core Systems(核心系統):
該層基於平台獨立層提供的介面,進一步封裝遊戲引擎需要的核心模塊。如:模塊的啟動和終止、斷言機制、單元測試、內存管理、數學庫、字元串庫、語言的反射機制、非同步IO等等。
Resources(資源管理):
遊戲涉及的資源也是五花八門,號稱第九藝術真不是吹的,紋理、材質、3D網格、視頻、音頻、字體、碰撞和物理參數等等,都需要非常好的工具和機制才能分管好線下和運行時的資源。
Low Level Render(低階渲染):
說到這裡,準備好積累多年的數學知識開始要用上拉,再往上層走,再次領略數學的重要性和自己的無知。圖形圖像的知識早都還給老師了,如何是好。光柵圖形渲染、紋理和材質的渲染、靜態動態光照模型、攝像機、圖元剔除等等名詞。
Scene Graph(場景):
2D、3D場景的繪製、各種神奇的框架分割數據結構和導航演算法。
Visual Effects(視覺特效):
粒子、貼花、HDR光照、動態陰影、後期效果等等。
Front End (前端):
繪製完場景、和各種模型後,需要覆蓋在其上一層UI、菜單等。
Skelton Animation(骨骼動畫):
角色動畫的基本方法,骨骼節點加蒙皮,至於演算法和空間變換,現在腦子裡面還說一片漿糊。一個有趣的IK(反向動力學)解決3D角色在與場景或其它模型互動時如何進行完美貼合,比如一個3D角色去開門,踩在起伏不平的地表上,手和腳如何完美貼合,沒有違和感。演算法挺神奇,對我來說暫時也是一頭霧水,涉及到的數學真是尼瑪太複雜了。
Collion & Physics(碰撞檢測和物理引擎):
碰撞檢測還好理解,物理引擎簡直太逆天,理論知識涉及到剛體動力學,瞬間覺得大學物理都是渣渣。一座大橋被炸毀,漫天石塊,最終落在地表上,角色模型走上去還得咯噔一下。自己體會下,涉及到碰撞和物理引擎。這一模塊,沒敢深究,以後要做遊戲,物理沒學好的情況下,物理引擎自動選擇放棄。
Gameplay Foundation(遊戲性基礎):
遊戲性的基礎模塊,如:消息/事件機制、腳本系統、靜態世界元素、動態模型數據等等。
臨了,作者寫了一句,這僅僅是開始,尚有大部分內容還沒有寫進去,如:音頻、視頻、多人網路、AI等等。看完之後,整個人都不好了,做了這麼多年遊戲,原來還TMD沒有上路。知恥而後勇,看完此書對遊戲引擎的大體構架有了大概的認識,剩下的道路還有很長,每個知識點都需要深入學習才能研究透徹。
《遊戲引擎架構》這本書對於我等新手來說,最重要的意義我認為是下面兩點:
1. 指明了遊戲引擎學習的道路。對遊戲引擎的各個模塊和元素都做了簡單介紹,讓新手腦子裡面有一個大的框架和方向。
2. 研究某些遊戲引擎的時做類比。拿到一個開源或商業引擎,不至於懵逼狀態,可以根據上圖來研究該引擎,不明白的再回來翻此書,進而查閱更多的資料。
就由這張圖開始我的遊戲引擎之路吧!作為一個菜鳥重新上路!


TAG:狂暴的遊戲程序員 |