《Inside UE4》開篇

大釗發表於2019-02-28

前言

VR行業發展是越來越火熱了,硬體裝置上有HTC VIVE,Oculus rift,PS VR,各種魔鏡;平臺上有Steam VR,Gear VR,Google Daydream。而遊戲引擎上則有兩大陣營:Unreal Engine和Unity。Unity憑著先期的移動平臺優勢佔領了一大部分移動平臺的市場,所以目前上手機上的VR遊戲也大部分是由Unity開發的。而PC平臺上,Unreal Engine憑藉著優異的效能,絢麗的渲染效果,原始碼開源的戰略也搶佔了目前大部分PC平臺VR遊戲的份額。參加一場ChinaJoy的VR遊戲,會發現大部分也都是由UE4開發的。雖然UE4的授權分成費確實比Unity要昂貴一些,但也因為VR行業本身也還處以社會主義初級階段,大家也都是在做Demo性質的產品,還沒有形成非常客觀的市場利潤市場。所以盈利後的那些分成費在現階段已經不太有所謂了。

大名鼎鼎的的虛幻引擎,從1998開始,到我們知道的UE3,UDK,一直是高大上的3A遊戲和端遊的渲染器引擎。然後到2013年,UE4大刀闊斧的改革,幹掉了UnrealScript,引進了Blueprint藍圖系統,直接讓策劃美術也可以拖線實現遊戲邏輯。更大的改變的是竟然開源了,受益於社群的回饋,版本更新的速度更是喪心病狂。小版本更新幾乎是一兩個月就一版。在學習了Unity的Marketplace和外掛系統後,更是如虎添翼,煥發了新的生命力。

雖然官方一直非常努力的升級更新引擎,但UE4目前也存在了學習曲線陡峭,教程資源稀少的問題。筆者自己從事VR遊戲開發,在學習UE4的過程中,基本上也只能硬啃官方文件,youtube上官方視訊教程,還有一些寥寥的第三方的視訊教程。而且更大的問題在於基本上所有的教程都是非常初級的,只是在教你怎麼”用”這個引擎,所以一旦在使用過程中發現了問題,往往手足無措,不能高層建瓴的去解決問題。官方的文件雖然說已經挺詳盡了,但大部分重點也只是在介紹表層的各種功能,對於引擎內部的結構和運作機理諱莫如深。如果把UE4當作Unity那樣的一個黑盒子去用,在遇到Bug時也只能去各種試各種猜,那也無疑浪費了UE的一個大優勢。

UE4無疑是非常優秀的世界上最頂尖的引擎之一,效能和效果都非常出眾,編輯器工作流也非常的出色,更難得寶貴的是完全的開源讓我們有機會去從中吸取營養,學習世界上第一流遊戲引擎的架構思想。

原始碼面前,了無祕密 ——侯捷

所以筆者決定開始該系列教程《Inside UE4》,從最最底層的C++原始碼剖析,到最最上層的藍圖節點,力求解釋清楚各個選項的內部運作機理。希望做到知其然,而更要知其所以然。UE4也是一個非常博大精深的引擎,光原始碼下載下來也都有1~2G,分析透徹各個具體模組的運作機理無疑也是個艱鉅的任務,但我們努力一分也至少有一分的收穫,有一分的甜蜜。

面向的讀者:

  1. 不滿足於目前世面上教程深度的。已經大概知道了引擎功能並使用,但是仍然想要知道得更多的人。

  2. 有一定的C++基礎。UE4裡的C++已經被Epic給魔改後又和C#廝混在一起,一方面得益於此,UE4裡的C++實現了各種方便的功能,如反射,垃圾回收,編譯系統等重量級的功能。一方面也加大了我們的閱讀難度。所以需要你有良好的C++基礎,至少看得懂各種C++模板,熟悉各種資料結構。

  3. 有一點點的C#語言能力,在涉及UE4編譯系統的時候,會談到一些C#,還好不是很多,也還好C#作為一門非常優秀的語言非常易讀,不過你要是已經掌握C#,那就更好了。

  4. 瞭解3D遊戲引擎的一些基礎概念,如知道什麼是材質,什麼是骨骼動畫融合等。所幸這些都是很容易知道的知識。

  5. 有一些基本的圖形學知識,知道Mesh、Shader、RenderTarget……等等一些基本的概念。本教程在開始某個專題的時候,會簡單講解一下背景知識,但它不會變成基礎圖形學教程。

不適合的讀者:

  1. 希望通過該教程學習快速上手UE4引擎的人,不適合你。目前快速上手UE4的最佳途徑依然是官方文件和視訊教程。

  2. 希望學習然後自己搭建具體遊戲的,如FPS,VR遊戲,樣板間等。本系列教程不會教你從零開始搭建一個遊戲示例,雖然會講解VR的各種配置的內部機制原理。

  3. 希望學習某個模組具體案例的,如用材質編輯器實現各種效果。本教程會透徹分析材質編輯器內部的實現機制,也會講解各個材質節點的功能和原理,有時也會看需要通過一些非常直接簡單的示例來講解。但目標從來都是講解原理,而不是實現結果。

願景和計劃

  1. 從C++原始碼層次上分析整個遊戲引擎的架構。瞭解清楚各個模組之間是怎麼協作的,如果有閒情雅緻,也甚至會具體到談一談某個很小的點為何這麼設計。如UE4裡的Delegate,Pointers,TArray等。

  2. 雖然原始碼剖析本來就是曲線陡峭的上升,但還是希望能儘量深入淺出的講解,所以也會盡量結合實際的效果演示。

  3. 因為UE4比較龐大,所以會逐漸的展開各個專題展開,在講解一個專題的原始碼時,會暫時忽略其它跟它協作模組。

  4. 雖然UE4也可以做移動平臺的開發,但本教程還是主要專注於Windows的PC端遊戲內容。

  5. 計劃是連載周更,雖說已經有預定的專題講解列表計劃,但並不妨礙你留言告知你最想了解的下一個專題。我會酌情改變優先順序。

  6. 本人也是才疏學淺,經驗有限,如有錯誤紕漏之處,也請不吝賜教,共同學習進步,不勝感激。

一些準備工作

  1. UnrealEngine官方Github地址
    雖說官方已經提供了簡便的launcher,但還是推薦自己自己Clone原始碼編譯,也方便時不時的Debug和檢視原始碼知道Why。而且有些時候其實是直接更改引擎原始碼來得更為方便便利的。
    Clone下來之後先點 Setup.bat再點 GenerateProjectFiles.bat ,然後開啟UE4.sln,按照預設選項DevelopmentEditor,等待最初半個小時的編譯後,就可以開始原始碼之旅了。
    引擎版本緊跟Github最新release,目前最新4.14
    注意:因為UnrealEngine只是公開原始碼,但不是開源專案,依然是個私有專案。訪問該Github地址,需要先連結你的Github到EpicGames的會員許可權裡,這個文件Linking your Github account說明了步驟。

  2. UnrealEngine官方文件
    本教程也會同時大量引用官方文件的內容,在官方文件簡略的介紹的基礎上,通過原始碼加深理解,再更加透徹的解釋。

  3. UnrealEngine官方Youtube頻道
  4. UnrealEngine官方優酷頻道
    有條件的話,還是建議自搭梯子,youtube的視訊教程更新是最快的,而且也有高清。
  5. 一塊大容量的SSD,UE用source build的話,特別是想除錯引擎的話,一個配置編譯出來都得耗用個好幾個G,一個專案的編譯20~30G輕輕鬆鬆。

知乎專欄:InsideUE4

UE4深入學習QQ群: 456247757(非新手入門群,請先學習完官方文件和視訊教程)

個人原創,未經授權,謝絕轉載!

其他的無關的話:

之前開源過一款自研的Medusa遊戲引擎,一個人畢竟精力有限,也無法開工各種編輯器工作流。所以Medusa引擎目前只是作為自己的一個試驗場,未來也會專注於2D遊戲的一些探索。關於Medusa遊戲引擎的內部架構,其實想講的也挺多,希望以後在UE4的相關介紹後,得空順便講一些其他遊戲引擎的架構思想,和C++的一些奇技淫巧。

相關文章