內容簡介
《大象無形:虛幻引擎程序設計淺析》以兩位作者本人在使用虛幻引擎過程中的實際經曆為參考,包括三大部分:使用C++語言進行遊戲性編程、瞭解虛幻引擎本身底層結構與渲染結構、編寫插件擴展虛幻引擎。提供瞭不同於官方文檔內容的虛幻引擎相關細節和有效實踐。有助於讀者一窺虛幻引擎本身設計的精妙之處,並能學習到定製虛幻引擎所需的基礎知識,實現對其的按需定製。
《大象無形:虛幻引擎程序設計淺析》適閤初步瞭解虛幻引擎編程,希望瞭解虛幻引擎本身架構或者希望定製和擴展虛幻引擎的讀者。
作者簡介
羅丁力,電子科技大學在讀學生、騰訊課堂三巫教育課程作者。自UDK開始使用虛幻引擎,有多年的虛幻引擎使用經驗。
張三,多年遊戲開發經驗,資深UE4開發者,三巫社區創始人。
精彩書評
作為UE4 的VR 遊戲開發者之一,我一直苦惱於市麵上關於UE4的書籍數量太少,大多是介紹操作技巧,而缺少對引擎內部的研究。在使用UE4 的過程中,因為對UE4 的內部機製不夠瞭解,而常常捉襟見肘狼狽不堪。
作者帶來的這本書,如同UE4 知識荒漠中的一片綠洲,細讀幾遍之後,如同久旱逢甘霖一般痛快淋灕。概覽的部分提綱挈領,指明人們繼續研究的方嚮;深入剖析的章節又能讓人細細琢磨,探究引擎的內部機製。
相信你也能跟我一樣,收獲滿滿。
——傅建釗 知乎專欄《Inside UE4》作者
作為國內早期接觸虛幻引擎的開發者之一,我深知虛幻引擎在國內的普及程度很低,因為虛幻引擎的龐大代碼量導緻很多開發者無從入手,所以一直苦惱市麵上沒有一本比較深入的書籍來講述引擎內部的機製。
在閱讀本書的過程中,我不隻一次地獲得共鳴。例如在Blueprint係統的介紹中,作者詳細介紹瞭Blueprint的前後端的處理過程及藍圖VM的實現,之前還沒有書籍專門將這些實現詳盡記錄;又如書中對插件開發的介紹,在實際的項目開發中這是很常見的一個需求。對於從事遊戲開發的程序員來說,瞭解各種引擎在處理每個具體問題時的方案相當重要。
——NetFly 資深遊戲開發者
本書係統而全麵地討論瞭UE4中的C++編程各個層麵的知識,而且其文字精煉直擊要點,是一本必不可少的優秀讀物。
——秦春林 《我所理解的Cocos2d-x》 《全局光照技術:從離綫到實時渲染》作者
本書針對虛幻引擎進行瞭較全麵的剖析,對於虛幻引擎的快速瞭解及應用有非常大的幫助。
——楊冰 《失落之魂》遊戲開發者
對於喜歡研究基礎理論的人來說,這是一篇對虛幻引擎研究的論文。讓讀者知道如果要研究虛幻引擎應該從什麼地方開始。
對於引擎的使用者來說,這是一本不錯的字典型的工具書。當遇到一些匪夷所思的問題時,有據可查。
——-吳劍坤 IfGame技術總監
該書深入研討瞭虛幻引擎的渲染、UBT、Module、Plugin等核心架構,同時涵蓋瞭虛幻引擎所有的核心技術點,結閤作者獨特的思路和代碼範例,讓我更加深刻地理解瞭虛幻引擎的奧秘。
——少狼 廣州玖的數碼研發主程
目錄
第一部分虛幻引擎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
前言/序言
建德若偷,質真若渝。大方無隅,大器晚成。
大音希聲,大象無形。夫唯道善貸且成。
——老子,《道德經》
虛幻引擎作為業界一流的次時代引擎,開發瞭無數成功的作品。在短暫的計算機圖形學發展曆史上,虛幻引擎曆經四代,成為遊戲引擎界舉足輕重的成員之一。
但是虛幻引擎龐大而復雜的設計,阻礙瞭許多人學習的步伐。盡管有藍圖係統作為圖形化編程,降低瞭虛幻引擎的上手難度,但是當開發者們走入虛幻引擎的C++範疇,依然會感覺到無從下手。
因此,我決定和我的同事一起來撰寫本書。希望能夠藉助我們微薄之力,幫你理解龐大的虛幻引擎是如何工作的。筆者對本書內容的期望是,這是一本筆者在學習虛幻引擎時希望能夠獲得的書。同時也請明白,虛幻引擎的代碼量為五百萬行。本書篇幅不足以分析整個虛幻引擎的所有模塊,也無法精確地嚮讀者展示每段代碼的意義。相反地,本書立足於:展示引擎基本結構,即盡可能告訴讀者“它是這麼跑起來的”,對於希望精確研究每一段代碼過程的讀者,本書會告知你如何尋找到對應的代碼。
本書主標題為“大象無形”,《道德經》中有言:大器晚成,大音希聲,大象無形。
本書取“偉大的設計對於使用者來說似乎感覺不到存在”和“優秀的係統設計讓開發者不需要過多瞭解原理即能使用”這樣的含義。對於虛幻引擎而言,本書中介紹的很多知識,對於普通開發者來說似乎是“沒有感覺到存在”的東西,例如引擎的渲染係統,普通開發者幾乎隻需要簡單地完成導入和擺放就能使用,並不需要實際瞭解渲染係統的工作原理。能夠達到這樣的效果,恰恰說明瞭虛幻引擎設計的優秀:能夠讓開發者不需要瞭解係統的機製,就能夠快速使用其來完成自己的需求,此即“無形”。然而這樣優秀的設計是如何完成的?如何擴展這樣的設計來讓開發者完成自己獨特的需求?這是本書希望探討的內容。
本書由兩位作者共同編撰而成,其中羅丁力先生完成瞭第一部分(除《引擎係統相關類》章節)和第二部分,以及第三部分中《引擎獨立應用程序》《自定義資源和編輯器》章節,張三先生完成瞭第二部分中《引擎係統相關類》章節與第三部分中《插件開發》章節。
筆者纔疏學淺,撰寫本書僅僅為個人一傢之言。歡迎每一位讀者對本書提齣建議和指正,也歡迎更多的人去撰寫虛幻引擎相關的書籍,共同為虛幻引擎的推廣、運用做齣努力。
感謝UnrealEngine,陪伴我度過瞭最美好的青春。
閱讀之前
你好,歡迎你閱讀本書。在這裏我希望能嚮你講述一些關於閱讀本書的約定。首先,這不是一本“虛幻引擎入門寶典”或是“虛幻引擎從入門到精通”。本書的作者們希望把視角集中到那些市麵上的教程沒有涉及的領域,所以我們不會教你:
(1)如何下載引擎
(2)如何安裝引擎和VisualStudio
(3)如何更新引擎
(4)如何申請虛幻引擎賬戶
我們假定你已經掌握這些知識。並且我們也不會教你:
(1)C++語法
(2)C語言語法
我們認為你在使用虛幻引擎的C++語言進行編程之前,已經掌握瞭C++的基礎語法,包括函數、變量、類、指針與模闆。當然,我們會嚮你解釋虛幻引擎中的獨有的C++成分,包括C++11標準的一些內容。
如果你已經做好瞭準備,歡迎開始你的閱讀之旅。本書分為以下三個部分:虛幻引擎C++編程這個部分簡單介紹虛幻引擎的C++編程方式,你可以通過這個部分迴顧、整理你從官方文檔學習到的有關使用虛幻引擎進行編程的知識,並給
齣瞭一部分官方文檔尚未介紹但可以被使用的庫、API與技巧。
虛幻引擎淺析這個部分將會引導讀者去研究虛幻引擎源碼,並給齣筆者認為在深
入使用虛幻引擎進行遊戲開發的過程中,可能會需要具備的引擎架構、模塊如何工作的知識。換句話說,這個部分介紹虛幻引擎是如何工作的。
擴展虛幻引擎這個部分則是通過介紹虛幻引擎的插件編寫,將第二部分的知識運
用起來,讓讀者不至於覺得這是“屠龍之技”,雖有思辨的樂趣,卻沒有用武之地。
進而賦予讀者定製虛幻引擎以符閤自己遊戲實際情況的能力。筆者認為這是專業遊戲開發者所需要具備的技能。
在每一小節開頭,筆者會提供一個常常被問及的問題,然後根據這個問題來闡述接下來的內容,就像這樣:
問題
我該如何學習虛幻引擎?
讀者可以在閱讀完每一個小節後,迴顧小節開頭的問題,以檢驗自己是否已經理解瞭本節的內容。
筆者在這裏衷心地祝願你找到你希望學習的知識,祝你一切順利!
鳴謝
本書在撰寫過程中受到瞭大量同行、朋友及親人的幫助,有許多同行無私地貢獻瞭自己的想法、意見及自己寶貴的經驗,在此對他們錶示真摯的感謝:
非常感謝Netfly和秦春林先生對本書的支持,不僅幫助筆者聯係瞭本書的齣版社,也非常認真地審閱本書的稿件,並給齣瞭中肯有效的意見,沒有他們的幫助,本書不可能齣版。
非常感謝傅建釗先生對本書的幫助,提齣瞭大量有效的意見,並組織瞭相當多的業內人士共同討論本書的主題,他的知乎專欄《InsideUE4》對虛幻引擎的剖析同樣非常精彩,建議讀者可以參考。
同時,也有不少同行針對書中許多主題給齣瞭自己獨到的見解,並被整理到書中。
LSFW先生給筆者多次反復講解渲染框架設計,貢獻齣瞭自己對渲染係統的研究成果;黃河水先生、Dest1ny先生撰寫瞭大量博客來分析虛幻引擎的底層架構,給筆者啓發頗多;王德立先生幫助本書繪製瞭插圖。還有許許多多同行,在此恕無法一一舉名。
感謝三巫社區和EpicGames對本書的齣版過程的支持與幫助。
最後,作者之一羅丁力希望感謝BlackRockShooter,感謝她在撰寫本書的過程中,對其鼓勵與陪伴。
大象無形:虛幻引擎程序設計淺析 下載 mobi epub pdf txt 電子書 格式