Unity學(xué)習(xí)筆記 Vol.61 使用URP的自定義渲染過程

1.簡(jiǎn)介
通用渲染管道(URP)是Unity新的可腳本渲染管線的子集,該新腳本于Unity 2019.3。它取代了Unity 2018.3中的輕量級(jí)渲染管線(LWRP)。像LWRP一樣,URP使開發(fā)人員可以使用自定義渲染過程通過自定義效果擴(kuò)展Unity的圖形管線。與普通的著色器和效果不同,這些通道獨(dú)立于相機(jī),并且可以在整個(gè)項(xiàng)目中持續(xù)存在,而無需為每個(gè)場(chǎng)景進(jìn)行設(shè)置。
注意:與LWRP一樣,URP與Unity的標(biāo)準(zhǔn)渲染器或HDRP不兼容。
通用渲染管線(URP)是Unity新的可腳本渲染管線的子集,該新腳本于Unity 2019.3。它取代了Unity 2018.3中的輕量級(jí)渲染管道(LWRP)。像LWRP一樣,URP使開發(fā)人員可以使用自定義渲染過程通過自定義效果擴(kuò)展Unity的圖形管道。與普通的著色器和效果不同,這些通道獨(dú)立于相機(jī),并且可以在整個(gè)項(xiàng)目中持續(xù)存在,而無需為每個(gè)場(chǎng)景進(jìn)行設(shè)置。
注意:與LWRP一樣,URP與Unity的標(biāo)準(zhǔn)渲染器或HDRP不兼容。

2.管線設(shè)置
首先,我們必須首先設(shè)置我們的項(xiàng)目以使用URP。
通過導(dǎo)航到Window> Package Manager 并搜索Universal RP 來導(dǎo)入U(xiǎn)RP軟件包(下圖?)。

安裝我們的軟件包后,讓我們創(chuàng)建一個(gè)新的URP資產(chǎn)。
右鍵單擊Assets文件夾,然后導(dǎo)航到Create> Rendering> Universal Render Pipeline> Pipeline Asset 。將在URP旁邊自動(dòng)創(chuàng)建一個(gè)新的Forward Renderer。將其重命名為Outline Renderer 。它將負(fù)責(zé)實(shí)現(xiàn)卡通輪廓效果。
現(xiàn)在,我們必須告訴我們的項(xiàng)目使用我們創(chuàng)建的Asset和Renderer。
導(dǎo)航到“ Edit(設(shè)置)”>“Project Settings(項(xiàng)目設(shè)置)”>“Graphics(圖形)” 。在“ 可腳本編寫的渲染管道設(shè)置(Scriptable Render Pipeline Settings)”下,選擇“ URP資產(chǎn)(URP Asset)”(下圖)。

您可能會(huì)注意到,此步驟不會(huì)影響您的項(xiàng)目。這是因?yàn)榍跋蜾秩酒魃形磳?duì)場(chǎng)景進(jìn)行任何更改。我們將稍作更改。
3.介紹Toon輪廓著色器和材質(zhì)
您一開始導(dǎo)入的Toon輪廓著色器由兩部分組成:處理生成輪廓所需的渲染操作的實(shí)際著色器和將激活著色器的材質(zhì)。可以在“ 資產(chǎn)”> “著色器”(Assets > Shaders)中找到“著色器”(“ ToonBasicOutline”),而在“ 資產(chǎn)”> “材質(zhì)”(Assets > Material)中可以找到“ 材質(zhì)” (下圖?)。
著色器的工作方式是反轉(zhuǎn)“網(wǎng)格”的法線(此操作隨后使其不再受燈光影響),將其法線超出網(wǎng)格偏移一定的偏移量,然后使用用戶定義的RGB顏色對(duì)其進(jìn)行著色。
當(dāng)將這些拉伸的法線應(yīng)用于“圖層蒙版(Layer Mask)”上的對(duì)象時(shí),將在該蒙版內(nèi)的GameObjects周圍顯示為輪廓。

4.圖層蒙版和帶有渲染過程的后期處理
Unity通過多個(gè)過程或步驟渲染場(chǎng)景。每個(gè)步驟生成一個(gè)圖像,例如:一個(gè)用于反照率(Albedo)(顏色信息),環(huán)境光遮擋(Ambient Occlusion)和法線(Normals)的圖像。然后將這些圖像合成以在屏幕上制作最終圖像。將每個(gè)繪圖調(diào)用分成多個(gè)遍,可以更好地控制圖像的最終外觀。卡通輪廓效果是一種后期處理效果,這意味著一旦繪制了場(chǎng)景,它將在整個(gè)屏幕頂部呈現(xiàn)。
我們可以將GameObjects分配給不同的層,以明確定義哪些對(duì)象將受到此后處理效果的影響(有效地創(chuàng)建蒙版)。
選擇要渲染的帶有卡通輪廓“材質(zhì)”的GameObject,單擊“ 圖層(Layer)” 旁邊的下拉菜單,然后選擇“ 添加圖層(Add Layer)” 。
在檢查器中,創(chuàng)建一個(gè)名為Character 的新“ Layer Mask” (下圖 )。

要使用新的渲染過程擴(kuò)展自定義的Forward Renderer,請(qǐng)單擊它并導(dǎo)航到Inspector。
單擊+ ,然后選擇渲染對(duì)象(Render Objects)。這將創(chuàng)建一個(gè)新的渲染過程。讓我們將其重命名為 Toon Outline (下圖?)。

因?yàn)槲覀兿M虽秩具^程僅影響角色圖層中的對(duì)象,所以將“圖層蒙版”設(shè)置為“ 角色(Character)” 。
接下來,我們將創(chuàng)建材質(zhì)替代,以定義我們?nèi)绾卧诮巧珜由箱秩緦?duì)象。
單擊“替代”旁邊的下拉列表,并將我們導(dǎo)入的卡通輪廓“材質(zhì)”導(dǎo)入到“ 材質(zhì)(Material)” 插槽中(下圖)。

設(shè)置此渲染通道后,場(chǎng)景中的GameObject(在此示例中為角色和背景道具)應(yīng)使用卡通輪廓進(jìn)行渲染(下圖?)。

5.結(jié)論
通過使用圖層蒙版,我們可以定義如何使用URP中的自定義渲染過程來渲染一組特定的對(duì)象。我們還可以選擇使用Shader Graph為每個(gè)渲染過程中使用的材質(zhì)提供動(dòng)力,而不是依賴ShaderLab中的傳統(tǒng)HLSL腳本。
卡通輪廓的后期處理效果也可以通過稱為Blit的新渲染器功能來實(shí)現(xiàn),該功能是將多個(gè)渲染通道合成到單個(gè)圖像中的方式。該工作流程簡(jiǎn)介中鏈接的軟件包中提供了Blit Renderer。此方法依賴于Sobel邊緣檢測(cè)和色調(diào)分離著色器(與包裝一起提供)來創(chuàng)建卡通輪廓材質(zhì)。