天天看點

1.5:Unity Render PipelineUnity Render Pipeline

這一節主要是為上一節中沒有提到的一些概念作補充。

上一節提到了Unity中渲染路徑的概念,為了更好地了解并使用Unity,我們有必要了解有關渲染路徑的詳細資訊。

Unity Render Pipeline

Unity作為引擎,為我們處理了許多渲染有關的行為細節,最終留下了Built-in Renderer(内置渲染),以及配置度更高的SRP(Scriptable Render Pipeline,可程式設計渲染管線)。

Built-in Renderer

Built-in Renderer是Unity的預設渲染設定,也是一直以來使用的渲染方式。Built-in Renderer為我們處理了絕大多數的細節。Built-in Renderer可以分為Forward(前向) Shading、Deferred(延遲) Shading和Built-in。

Built-in

這是Unity的預設渲染路徑。

Forward Shading

在前向渲染中,每個作用于物體的Per-Pixel Light都會單獨計算一次,Draw Call數量跟物體數量和光照數量的乘積成正比。它不受硬體限制,可以使用Multi-Sampling Anti-Aliasing(多重采樣抗鋸齒)等。但在這個模式下,除了Main Directional Light之外,一個物體最多接受4個Per-Pixel Light,超過的部分都會轉換為Per-Vertex Light。

Deferred Shading

延遲渲染是通過G-Buffer(幾何緩沖)實作的。G-Buffer儲存了物體的顔色,法線,材質資訊。這個渲染路徑沒有光照數量的限制,每一個光源都會被視為Per-Pixel Light,都會擁有cookie和shadow。在這個模式下,光照處理的性能消耗和被光照影響的像素數成正比。也就是說,我們可以通過減弱光源強度,縮小光源影響範圍,進而提升性能。由于真正的渲染操作被延遲,這個模式不支援多采樣抗鋸齒和半透明物體的渲染,也不支援Mesh Renderer元件的Receive Shadows設定,剔除選項的受支援度也很有限。

Scriptable Render Pipeline

Unity引擎的核心是C++編寫的,外殼是C#腳本建構的,腳本實作各子產品之間的互動,編輯器界面等,許多行為都在核心進行了處理,作為遊戲開發者隻能接觸到界面以及API,無法定制化渲染。随着硬體的更新,遊戲體量的增加以及遊戲玩家對遊戲畫面的要求逐漸升高,這種配置式的設定就顯現出了不足之處。為了适應遊戲開發者的需要,Unity決定實作一種新的架構,隻在C++端保留渲染的核心功能,把更多的選擇交給C#腳本,把控制權移交給開發者,并在2018中加入了SRP。

SRP是一系列C#的API,用于配置各個渲染設定。SRP有三種形式:LWRP(Lightweight Render Pipeline,輕量級渲染管線,這在目前已經得到了官方較好的支援)、HDRP(Hight Definition Render Pipeline,高清渲染管線,目前仍在試驗階段)、自定義渲染管線。LWRP和HDRP都是SRP的一套Asset,LWRP性能較好,HDRP需要更好的硬體支援,當然渲染效果也會更加真實,自定義渲染管線則是基于SRP的接口自定義的一套适用于自己工程的渲染管線配置。