內容提要
《大象無形:虛幻引擎程式設計淺析》以兩位作者本人在使用虛幻引擎過程中的實際經歷為參考,包括三大部分:使用C++語言進行遊戲性編程、了解虛幻引擎本身底層結構與渲染結構、編寫外掛程式擴展虛幻引擎。提供了不同於官方文檔內容的虛幻引擎相關細節和有效實踐。有助於讀者一窺虛幻引擎本身設計的精妙之處,並能學習到定製虛幻引擎所需的基礎知識,實現對其的按需定製。
《大象無形:虛幻引擎程式設計淺析》適合初步了解虛幻引擎編程,希望了解虛幻引擎本身架構或者希望定製和擴展虛幻引擎的讀者。
目錄
第一部分虛幻引擎C++編程1
第1章開發之前——五個最常見基類2
1.1簡述2
1.2本立道生:虛幻引擎的UObject和Actor2
1.2.1UObject類2
1.2.2Actor類5
1.3靈魂與肉體:Pawn、Characterh和Controller6
1.3.1Pawn6
1.3.2Charactor7
1.3.3Controller7
第2章需求到實現9
2.1分析需求9
2.2轉化需求為設計10
第3章創建自己的C++類12
3.1使用UnrealEditor創建C++類12
3.2手工創建C++類14
3.3虛幻引擎類命名規則15
第4章對象16
4.1類對象的產生16
4.2類對象的獲取18
4.3類對象的銷毀18
第5章從C++到藍圖20
5.1UPROPERTY宏20
5.2UFUNCTION宏20
第6章遊戲性框架概述22
6.1行為樹:概念與原理22
6.1.1為什麼選擇行為樹22
6.1.2行為樹原理22
6.2虛幻引擎網路架構26
6.2.1同步26
6.2.2廣義的客戶端-服務端模型27
第7章引擎系統相關類30
7.1在虛幻引擎4中使用正則表達式30
7.2FPaths類的使用31
7.3XML與JSON32
7.4檔案讀寫與訪問33
7.5GConfig類的使用35
7.5.1寫配置36
7.5.2讀配置36
7.6UE_LOG37
7.6.1簡介37
7.6.2查看Log37
7.6.3使用Log37
7.6.4自定義Category38
7.7字元串處理38
7.8編譯器相關技巧39
7.8.1“廢棄”函式的標記39
7.8.2編譯器指令實現跨平台39
7.9Images40
第二部分虛幻引擎淺析45
第8章模組機制46
8.1模組簡介46
8.2創建自己的模組47
8.2.1快速完成模組創建47
8.2.2創建模組資料夾結構48
8.2.3創建模組構建檔案49
8.2.4創建模組頭檔案與定義檔案49
8.2.5創建模組預編譯頭檔案50
8.2.6引入模組51
8.3虛幻引擎初始化模組載入順序52
8.4道常無名:UBT和UHT簡介55
8.4.1UBT55
8.4.2UHT57
第9章重要核心繫統簡介62
9.1記憶體分配62
9.1.1Windows作業系統下的記憶體分配方案62
9.1.2IntelTBB記憶體分配器63
9.2引擎初始化過程65
9.2.1引擎初始化簡介65
9.3並行與並發67
9.3.1從實驗開始68
9.3.2執行緒71
9.3.3TaskGraph系統73
9.3.4Std::read77
9.3.5執行緒同步78
9.3.6多進程80
第10章對象模型81
10.1UObject對象81
10.1.1來源82
10.1.2重生:序列化83
10.1.3釋放與消亡92
10.1.4垃圾回收94
10.2Actor對象99
10.2.1來源101
10.2.2載入104
10.2.3釋放與消亡105
第11章虛幻引擎的渲染系統107
11.1渲染執行緒107
11.1.1渲染執行緒的啟動108
11.1.2渲染執行緒的運行108
11.2渲染架構109
11.2.1延遲渲染109
11.2.2延遲渲染在PostProcess中的運用110
11.3渲染過程111
11.3.1延遲渲染到最終結果112
11.3.2渲染著色器數據提供123
11.4場景代理SceneProxy126
11.4.1邏輯的世界與渲染的世界126
11.4.2渲染代理的創建127
11.4.3渲染代理的更新128
11.4.4實戰:創建新的渲染代理128
11.4.5進階:創建靜態渲染代理132
11.4.6靜態格線物體渲染代理排序148
11.5Shader150
11.5.1測試工程150
11.5.2定義Shader152
11.5.3定義Shader對應的C++類153
11.5.4我們做了什麼162
11.6材質163
11.6.1概述164
11.6.2材質相關C++類關係166
11.6.3編譯167
11.6.4ShaderMap產生168
第12章Slate界面系統170
12.1Slate的兩次排布170
12.2Slate的更新170
12.3Slate的渲染171
第13章藍圖173
13.1藍圖架構簡述173
13.2前端:藍圖存儲與編輯174
13.2.1Schema174
13.2.2編輯器175
13.3後端:藍圖的編譯176
13.4藍圖虛擬機187
13.4.1便箋紙與白領的故事187
13.4.2虛幻引擎的實現189
13.4.3C++函式註冊到藍圖193
13.5藍圖系統小結194
第三部分擴展虛幻引擎197
第14章引擎獨立應用程式198
14.1簡介198
14.2如何開始198
14.3BlankProgram199
14.4走得更遠202
14.4.1預先準備203
14.4.2增加模組引用203
14.4.3添加頭檔案引用203
14.4.4修改Main函式為WinMain204
14.4.5添加LOCTEXT_NAMESPACE定義204
14.4.6添加SlateStandaloneApplication204
14.4.7連結CoreUObject205
14.4.8添加一個Window205
14.4.9最終代碼205
14.5剝離引擎獨立應用程式207
第15章外掛程式開發208
15.1簡介208
15.2開始之前208
15.3創建外掛程式210
15.3.1引擎外掛程式與項目外掛程式210
15.3.2外掛程式結構210
15.3.3模組入口213
15.4基於Slate的界面213
15.4.1Slate簡介213
15.4.2Slate基礎概念214
15.4.3最基礎的界面214
15.4.4SNew與SAssignNew219
15.4.5Slate控制項的三種類型220
15.4.6創建自定義控制項222
15.4.7布局控制項225
15.4.8控制項參數與屬性227
15.4.9Delegate228
15.4.10自定義皮膚234
15.4.11圖示字型239
15.4.12組件繼承241
15.4.13動態控制Slot244
15.4.14自定義容器布局248
15.5UMG擴展255
15.6藍圖擴展261
15.6.1藍圖函式館擴展261
15.6.2異步節點264
15.7第三方庫引用270
15.7.1lib靜態程式庫的使用270
15.7.2dll動態程式庫的使用273
第16章自定義資源和編輯器276
16.1簡易版自定義資源類型276
16.2自定義資源類型278
16.2.1切分兩個模組278
16.2.2創建資源類281
16.2.3在Editor模組中創建工廠類281