1. 程式人生 > >手把手教你架構3D引擎高階篇概述

手把手教你架構3D引擎高階篇概述

前幾年寫過一本書《手把手教你架構3D遊戲引擎》電子工業出版社,主要內容講的是固定流水線程式設計,目的是讓讀者理解第一代引擎是如何實現的,從本篇部落格開始,給讀者介紹關於使用可程式設計流水線自己搭建3D遊戲引擎,我將它設為高階篇,我會從查資料學習技術最基本的講起,教給讀者如何一個人搭建一款接近商業的自研引擎,希望讀者能學習到搭建引擎的一些小技巧,幫助你理解可程式設計流水線引擎流程,以及提升你優化引擎的能力,3D遊戲引擎其內在的本質是相同的,只是表現方式不同而已,所以學習自己搭建一款引擎對你技能的提升幫助非常大,至少你再接觸其他引擎時,做二次開發信心還是大大的有滴,而且更有助於你理解Unity引擎的開發以及後期優化。

市場上對於3D遊戲引擎的開發需求還是非常大的,雖然Unity和UE4非常成熟了,還是有很多大廠自研引擎,另外一些做虛擬模擬公司也在自研引擎,畢竟自研引擎的程式碼是我們自己寫的,有什麼問題可以快速的定位,而且可以針對專案的需求做一些定製開發,非常方便,底層程式碼也可以根據專案需求做一些優化。有自研引擎的公司都會有自己的引擎部門,它們的職能就是負責引擎的開發以及優化。對於自研引擎,說的明白一些就是我們可以針對自己的專案針對性的開發一款引擎,這款引擎功能並不需要多強大,能滿足我們專案求即可。引擎的開發是一個團隊的事情,一個人很難製作出一款成熟的商業引擎,工作量太大,開發週期也會漫長,涉及到的技術點也比較多,但是作為引擎開發人員對於引擎常用技術還是需要掌握的。假設公司讓你組建引擎團隊,開發一款商業引擎,我們應該從哪幾方面入手:
首先要清楚我們的引擎是用於什麼專案開發?


我們的引擎需要解決什麼問題?
需要開發哪些編輯器?
如何利用現有技術幫我們解決問題等等
這些問題我們引擎開發人員必須要解決的,從本篇部落格開始,我就教大家如何開發商業引擎?同時回答上面提到的問題。
下面我們先從引擎能解決的問題講起,這個非常重要的,因為它關係到你的引擎是否足夠強大,能否解決專案提出的各種需求。
每款引擎都有自己的特色,比如Unity引擎和UE4引擎,我們自研引擎也有自己的特色,後面的開發也就是圍繞這些特色展開,給讀者列舉如下:
- 引擎平臺支援

,我們的引擎支援windows和Linux,OS是64位的,在Windows平臺的編輯器是Visual Studio2017,在Linux平臺的編輯器是GCC5。
- 引擎基本功能

這個關乎我們程式碼的編寫:
引擎架構是基於元件模式開發的;
支援程式碼以及資源熱更新;
資料驅動的;
支援外掛模式,
跨平臺的
便於其他外掛的使用,擴充套件引擎功能;
支援指令碼Lua程式設計;
內建偵錯程式;
支援資料打包;
下面再介紹渲染模式。
- 引擎渲染

引擎渲染也是引擎非常重要的模組:
我們的引擎支援D3D11和OpenGL圖形API;
支援延時渲染;
支援PBR,
支援HDR,
多執行緒渲染,
資料定義管線,
支援Shader指令碼熱更新,
著色器語法類似GLSL。
FBX模型
支援9種紋理格式,
支援材質熱更新
支援模型的LOD,
地形採用CDLOD,
可自動例項化模型,
基於高度的霧效
水的渲染,
毛髮渲染
空氣散射
延時貼花
天空盒等等。
再介紹後處理渲染,先介紹實時陰影渲染,我們的演算法採用的是CSM,後處理演算法有
景深渲染
Tone Mapping,
HDR,
GodRays,
Bloom,
SSAO,
抗鋸齒FXAA等等。
聲音我們採用的是OGG格式,另外還有粒子系統,網路,物理碰撞,骨骼動畫,GUI,Navigation等等。
- 引擎編輯器

判斷一款引擎是否成熟,我們需要開發相對應的編輯器工具鏈:
Shader 編輯器用於Shader指令碼開發以及除錯,
Packing打包編輯器用於資源的打包,
粒子編輯器,
Animation動畫編輯器,
UI編輯器,
場景編輯器等等。
- 第三方庫
我們的引擎不可能什麼事情都需要自己從頭寫到尾,即使Unity和UE4也用了很多外掛,我們的引擎也不例外,我們也需要用到第三方外掛,比如:
Lua
BgFX等等,後面會給讀者詳細說明。
- 小結

以上是我們自研引擎的要實現的功能,雖然相比Unity和UE4,功能方面還不完美,相信隨著我們把引擎框架搭建起來後,功能可任意擴充套件,從而把引擎功能持續完善起來。每一款引擎都是從不成熟到成熟,Unity和UE4也是這樣的,上面列舉的要實現的功能,對於個人開發者來說已經非常龐大了。明知山有虎,偏向虎山行,從下篇文章開始,我教大家怎樣去實現每個技術點,怎樣查閱資料,以及把現有的,成熟的技術模組嫁接到我們的引擎中。