剖析虛幻渲染體系-開篇說明
阿新 • • 發佈:2020-08-16
[TOC]
# **前言**
筆者的部落格園博文斷更很久了,上一篇文章是去年10月,有關UE的PBR材質製作。斷更的原因有二:一是潛心研讀UE底層原始碼,做二次開發;二是工作壓力和KPI考核較緊,人在江湖身不由己,生計為先。
眾所皆知,虛幻引擎(Unreal Engine)是當今世界上最流行最知名的商業引擎之一,並且在幾年前開放了原始碼,前兩年隨著PUBGM而起,在移動端發力,漸漸成為遊戲研發廠商的首選(反觀某U以賣原始碼為榮,以高昂的學費開班授課為賺錢之道,結果移動端也被UE反超,實在是目光短淺所致)。毫不誇張地說,UE是濃縮了實時渲染界幾十年來的精華和瑰寶。研究UE的人也數不勝數,並有逐年增加之勢。
在此背景下,筆者認為更有撰寫文章剖析UE渲染體系的必要性。
筆者從2019年年中接觸UE以來,也有一年多了。在這段時間裡,潛心研究UE而無法自拔,從最初熟悉編輯器的使用,再到光照系統、材質系統、延遲渲染管線、後處理、光線追蹤等功能模組,再到近期的底層原始碼研讀和二次開發。這期間歷經了很多思考、摸索、探索,踩過不少坑,當然更多的是收穫、感悟和總結,於是萌生了撰寫這個系列文章的念頭,以饗同行,以師新人。
本想將此係列文章發表到知乎,因為知乎的使用者基數大,利於傳播,也利於圈粉,筆者也夢想有朝一日成為知乎大V,成為技術網紅。
![](https://img2020.cnblogs.com/blog/1617944/202008/1617944-20200816154137358-796349824.png)
*截止2020年8月中旬,筆者之前的數篇技術文章瀏覽量達數萬,但粉絲只有區區數十。難道這是傳說中的叫好不叫座?*
然而,靜下來思索,寫文章的最終目的還是在於分享和教學,而不是圈粉,加上部落格園的頁面乾淨純粹,不夾雜任何廣告,在商業化和物慾橫流的當今,確實是一股清流。此外,良好地支援Markdown和$\LaTeX$等語法(如支援數學公式,支援目錄,支援跳轉等等),這些特點正與筆者的初衷和設想不謀而合,既有偏好,也有情懷,不為商業低頭,舍它其誰?
能看到自己的文章幫助到很多人,看到他們為發揚圖形學技術而前仆後繼,後浪推前浪,這是圈粉所不能帶來的滿足和快樂感。這些想法讓筆者更加堅定了繼續將文章發表在部落格園的決心。
當然,按慣例事先宣告,**這不是UE的入門教程,要求讀者具備以下計算機專業技能:**
* 良好的計算機語言(如C++、C#等)基礎。
* 良好的計算機圖形學基礎。
* 掌握UE的使用。
* 掌握UE的材質、光照、後處理等模組。
* 掌握Shader程式設計基礎。
如果讀者不具備以上技能,或者對UE不熟悉,建議先從閱讀[UE的官方文件](https://docs.unrealengine.com/zh-CN/index.html),熟悉UE後再閱讀此係列文章。
# **內容綱目**
本系列文章以**UnrealEngine 4.25.3**版本的原始碼為基礎,分析它在**PC平臺**的**延遲渲染管線**的渲染體系和特性。
本系列文章將分很多篇章,每篇都將是長篇大論。由於筆者本就工作繁忙,只能抽取業餘時間一邊研讀UE原始碼,一邊參考眾多文獻,一邊撰寫,更新頻率不會很快,短則數週,長則數月,但求有足夠動力和精力維繼下去,盡力不太監。
由於UE太過龐大,單單渲染模組涉及的體系和知識點眾多,**預計每篇數萬字,整個系列的總字數將達到數十萬字,即便抽出大部分業餘時間,也需要耗費長達1~2年才能完成**。
言歸正傳,本系列文章初定了以下章目:
* 剖析虛幻渲染體系(01)- 總覽和基礎
* 剖析虛幻渲染體系(02)- 多執行緒渲染
* 剖析虛幻渲染體系(03)- 渲染機制
* 剖析虛幻渲染體系(04)- 延遲渲染管線
* 剖析虛幻渲染體系(05)- BasePass和LightingPass
* 剖析虛幻渲染體系(06)- Shader體系
* 剖析虛幻渲染體系(07)- 材質體系
* 剖析虛幻渲染體系(08)- 後處理
* 剖析虛幻渲染體系(09)- RHI
* 剖析虛幻渲染體系(10)- RDG
* 剖析虛幻渲染體系(11)- 實時光線追蹤
* 剖析虛幻渲染體系(12)- 特殊渲染技術
* 剖析虛幻渲染體系(13)- 優化技術
* 剖析虛幻渲染體系(14)- 實用工具合集
以上章目可能有變動,有增有刪有改,但總的宗旨在於先總後分、先上而下、由外入裡,層層遞進,逐步揭開UE龐大且複雜的渲染體系的神祕面紗。
感興趣的讀者可以**收藏**這篇說明頁面連結,以便能夠及時查閱到更新。
# **特別說明**
**本系列文章為筆者原創,只發表在部落格園上,歡迎分享本文連結,但未經同意,不允許轉載!**
# **參考文獻**
* [Unreal Engine Source](https://github.com/EpicGames/UnrealEngine)
* [Rendering and Graphics](https://docs.unrealengine.com/en-US/Engine/Rendering/index.html)
* [Materials](https://docs.unrealengine.com/en-US/Engine/Rendering/Materials/index.html)
* [Graphics Programming](https://docs.unrealengine.com/en-US/Programming/Rendering/inde