Unity-TA 成长之路(一)初识渲染管线
1、渲染管線簡介
????????渲染管線(Rendering Pipeline)其實就是GPU渲染流程。就是在一個三維坐標系下,基于一個視點,給定三維物體、光源以及照明模式、紋理等信息,如何繪制一幅呈現在視點畫面中的二維圖像的過程。
??????? Unity官方的簡介是這樣的:
????????渲染管線執行一系列操作來獲取場景的內容,并將這些內容顯示在屏幕上。概括來說,這些操作如下:
- 剔除
- 渲染
- 后期處理
2、渲染管線分類
??????? 經過Unity的不斷迭代,現在留下的是兩套:Built-In Render(內置渲染管線)和SRP(Scriptable Render Pipeline,可編程渲染管線)。
????????Built-In Render,兼容性較好,支持全平臺,帶來的弊端是效果并不是太好。
????????SRP是可編程渲染管線技術,可用C#腳本定制Unity的渲染過程,但自己定制渲染管線對編程要求很高,難度大,所以Unity提供里2個預制的管線:通用渲染管線URP(Universal?Render Pipeline)和高清渲染管線HDRP(High Definition Render Pipeline),基本上涵蓋了我們所有的需求,使用時不需要太底層的技術要求。
?3、渲染管線對比
????????只找到了如下的對比如,基于Unity2018.3的:
????????接下來也主要針對這兩種渲染管線做一些對比說明(關于圖中的具體細節對比,后面再展開研究):
????????URP(前身為Lightweight Render Pipeline --- LWRP輕量級渲染管線)專注于性能,偏向移動端和低端機器,它擁有很多HDRP相同的功能,但為了在所有平臺達到更好的性能,其做了一定的縮減,但這并不意味著URP做不出漂亮的東西。
??????? HDRP專注于高端圖形渲染,以畫面為主 , 偏向高端機器和影視,但要想得到完成利用HDRP的完美表現能力,需要大量的貼圖,漫反射貼圖、高光貼圖、金屬貼圖、平滑貼圖、AO貼圖、法線貼圖、凹凸貼圖、高度貼圖,所以不是對效果有特別大需求的話慎入。
????????兩者最大的區別是對光照的支持,HDRP提供高級和豐富的光照功能,比如實時全局光照(RealTime GI),能夠模擬光線反射、體積光、能模擬光穿過空氣中的粒子,還有重頭戲的光線跟蹤,一種新的光線反射和陰影渲染技術,其原理是跟蹤光線在場景中放射的路徑,模擬光線在真實世界里與物體交互的效果,這技術對硬件性能非常高,但能產生非常逼真的效果,可以直接用來做電影級別的預渲染作品。
????????另外一個區別是Shader,HDRP提供一系列高端的shader特效,例如高度、細節和parallax Maps,分別用于紋理的位移、細節和深度模擬,它還支持子面散射,用于模擬光線穿過很薄的物體,比如皮膚和衣物,它提供了高級的shader,像是stacklit,能夠讓你同時使用多個材質的屬性,比如子面散射、彩虹色、各向異性和模糊參數化。
????????對于后處理效果,兩者不相伯仲,HDRP獨占的最重要效果,包括AO(環境光遮蔽)、自動曝光(模擬人眼適應不同光線條件的能力)、屏幕空間反射(模擬基于屏幕上可見物體的反射)。URP的AO支持已經在做了,但好東西不是都在HDRP,2D光照和陰影就是URP獨占的,所以如果你在做2D游戲,就選URP。
?????????另外兩個管線都支持一個很Cool的特效---相機堆疊,讓你能夠同時用多個相機渲染。
4、渲染管線的資源創建(以URP為例)
??????? (1)導航到? Windows > Package Manager。
??????? (2)Packages選擇Unity Registry。
??????? (3)找到Universal RP,Install。
??????? (4)Project面板,右鍵,Crate > Rendering > Universal?Render Pipeline > Pipeline Asset (Forward Renderer)。
5、切換渲染管線
5.1 激活內置渲染管線
??????? 要將活動渲染管線設置為內置渲染管線,必須告知 Unity 我們未使用任何基于可編程渲染管線的渲染管線。當我們從項目設置中刪除所有這些引用后,Unity 默認使用內置渲染管線。
????????為此需要執行以下操作:
??????? (1)導航到 Edit > Project Settings > Quality,從而打開 Quality Settings 窗口。
??????? (2)對于每個質量級別,將 Render Pipeline 字段設置為 None。
??????? (3)導航到 Edit > Project Settings > Graphics,從而打開 Graphics Settings 窗口。
??????? (4)將 Scriptable Render Pipeline Setting 字段設置為 None。
5.2 激活基于 SRP 的 URP、HDRP 或自定義渲染管線
??????? 要將活動渲染管線設置為基于 SRP 的渲染管線,我們必須告訴 Unity 要使用哪個渲染管線資源。渲染管線資源是一種資源,其中包含有關要使用的渲染管線以及如何配置該渲染管線的數據。
??????? 我們可以擁有多個渲染管線資源,讓 Unity 以不同配置使用同一渲染管線;例如,可能有一個適合高端硬件的設置,一個適合低端硬件的設置。
????????在 Unity 編輯器中:
??????? (1)導航到 Edit > Project Settings > Graphics,從而打開 Graphics Settings 窗口。
??????? (2)在 Project 文件夾中,找到要使用的渲染管線的渲染管線資源。
??????? (3)將渲染管線資源拖放到 Scriptable Render Pipeline Setting 字段。這樣定義了默認渲染管線,在給定質量級別沒有覆蓋值時,Unity 使用該管線。
??????? (4)可選,要為不同的質量級別使用不同的渲染管線資源:導航到 Edit > Project Settings > Quality 打開 Quality Settings 設置窗口。
??????? (5)可選,要為不同的質量級別使用不同的渲染管線資源:對于每個質量級別,將渲染管線資源拖放到 Render Pipeline 字段。
????????在 C# 代碼中:
???????? 我們以使用 C#代碼設置渲染管線資源。可以在 Unity 編輯器中以編輯模式或運行模式運行此代碼,或者在構建的播放器中在運行時運行此代碼。
????????由于 SRP 是高度可配置的,因此更改活動的渲染管線資源可能會導致更改差異很大(例如從 URP 切換到 HDRP)。在運行時更改渲染管線資源的性能成本相應地有所不同。
????????請注意,切換到新的渲染管線資源會使 Unity 銷毀當前的渲染管線實例,并調用新渲染管線資源的 CreatePipeline() 方法。根據 SRP 中的代碼,此操作可能在計算上是資源密集型操作。
????????以下示例代碼顯示了如何設置存儲在GraphicsSettings.renderPipelineAsset中的默認渲染管線資源。
????????請注意,如果已在項目的 Quality Settings 為渲染管線資源指定了質量級別,則當前質量級別的渲染管線資源將覆蓋默認渲染管線資源。可以如以下代碼所示的方式在 C# 代碼中使用 QualitySettings-renderPipeline API 進行更新。
using UnityEngine; using UnityEngine.Rendering;public class SwitchRenderPipelineAsset : MonoBehaviour {public RenderPipelineAsset exampleAssetA;public RenderPipelineAsset exampleAssetB;void Update(){if (Input.GetKeyDown(KeyCode.A)){GraphicsSettings.renderPipelineAsset = exampleAssetA;Debug.Log("Default render pipeline asset is: " + GraphicsSettings.renderPipelineAsset.name);}else if (Input.GetKeyDown(KeyCode.B)){GraphicsSettings.renderPipelineAsset = exampleAssetB;Debug.Log("Default render pipeline asset is: " + GraphicsSettings.renderPipelineAsset.name);}} }總結
以上是生活随笔為你收集整理的Unity-TA 成长之路(一)初识渲染管线的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 柔性数组和环形队列之间的故事
- 下一篇: 2022年8月深圳CPDA数据分析师认证