MMD聯(lián)動(dòng)Unity學(xué)習(xí)筆記 Vol.44 LWRP中實(shí)現(xiàn)卡通輪廓效果

前言
????前面幾期我們共同研究使用UTS2在Unity中實(shí)現(xiàn)卡通風(fēng)格渲染,但是目前UTS只能使用在Unity的傳統(tǒng)渲染管線(xiàn)中。這次我們研究一下,如何在Unity 2019 LWRP輕量級(jí)渲染管線(xiàn)中使用Scriptable Render Passes來(lái)實(shí)現(xiàn)卡通風(fēng)格的后期特效。這期內(nèi)容來(lái)自官方視頻,下載示例工程:https://ole.unity.com/toonoutline


操作步驟
????我們這次準(zhǔn)備制作ToonShader,使用的功能是Unity的新可編程渲染管線(xiàn),簡(jiǎn)稱(chēng)SRP。

????這里用到的演示場(chǎng)景,是使用Unity的輕量級(jí)渲染管線(xiàn)(LWRP)的自定義版本渲染的。

????如果點(diǎn)擊播放按鈕播放場(chǎng)景,我們會(huì)看到角色配有動(dòng)畫(huà),幾個(gè)卡通渲染風(fēng)格的場(chǎng)景視圖,該工程包含自定義渲染管線(xiàn)資源,兩個(gè)不同的輪廓效果著色器,預(yù)配置的前向渲染數(shù)據(jù)資源,以及一個(gè)可供上手使用的示例場(chǎng)景。

????這個(gè)卡通渲染風(fēng)格的場(chǎng)景,是通過(guò)自定義可編程渲染管線(xiàn)(SRP)創(chuàng)建的,基于預(yù)先構(gòu)建的輕量級(jí)渲染管線(xiàn)(LWRP),Unity的可編程渲染管線(xiàn)(SRP),可讓你根據(jù)目標(biāo)平臺(tái)定制渲染過(guò)程,以便針對(duì)特定硬件進(jìn)行性能優(yōu)化,同時(shí)實(shí)現(xiàn)所需的渲染風(fēng)格。這樣你就可以使用C#腳本在Unity中進(jìn)行渲染配置,你可以自定義渲染流程,以匹配自己的藝術(shù)風(fēng)格和游戲并控制可用性能資源的使用方式。

????讓我們使用自定義的卡通后期特效著色器擴(kuò)展默認(rèn)的輕量級(jí)管線(xiàn)來(lái)創(chuàng)建這個(gè)Toon Shader。首先,創(chuàng)建一個(gè)新的Pipeline,選擇Assets > Create > Rendering > Lightweight Render Pipeline > Pipeline Asset(命名為T(mén)oonLWRP),這將基于輕量級(jí)渲染管線(xiàn),創(chuàng)建一個(gè)新的渲染管線(xiàn)資源。

????接下來(lái),我們將創(chuàng)建一個(gè)新的自定義前向渲染器資源,Asset > Create > Rendering > Lightweight Render Pipeline > Forward Renderer(命名為T(mén)oonForwardRenderer)。

????這個(gè)卡通著色效果由兩個(gè)主要元素構(gòu)成,輪廓效果,它會(huì)在渲染網(wǎng)格的邊緣添加輪廓線(xiàn),色調(diào)分離(Posterize)效果,它會(huì)減少圖像中的顏色,我們會(huì)將這兩個(gè)效果作為Renderer Features(渲染器功能),通過(guò)使用包含在項(xiàng)目中的“Blit 自定義渲染器功能”,添加到我們的新管線(xiàn)中,Blit自定義功能提供了一種簡(jiǎn)單方法,將基本Blit操作和Material(材質(zhì))一起添加到自定義渲染管線(xiàn)中。我們將使用這個(gè)Blit和卡通效果著色器來(lái)表現(xiàn)后期特效。

????在提供的項(xiàng)目中,有兩個(gè)不同的卡通效果著色器,“Toon Basic Outline”和“Sobel Filter”,在本教程中,我們將使用“Sobel Filter”,“Sobel Filter”是一種后處理效果,它使用索伯算子(Sobel operator)來(lái)檢測(cè)圖像中的邊緣,這同時(shí)還具有一個(gè)Posterize(色調(diào)分離)的可選功能,勾選它可減少顏色數(shù)量,從而打造更具風(fēng)格的外觀。

????將“SobelFilter”著色器指定給新材質(zhì),命名此新材質(zhì)為“OutlineToon_SobelBlit”。

????要將Sobel效果連接到我們的自定義渲染管線(xiàn),選中“ToonForwardRenderer”資源,在Renderer Features的空列表中,單擊加號(hào)(+)按鈕,以添加新的渲染器功能,然后選擇“Blit”菜單選項(xiàng),將此新功能命名為“Sobel Outlines”。

????將Event設(shè)置為“After Rendering Transparents”,這表示我們的效果將在繪制所有不透明和透明網(wǎng)格后運(yùn)行,將Blit Material設(shè)置為“OutlineToon_SobelBlit”材質(zhì),將Blit Material Pass Index設(shè)置為“0”,接下來(lái),確保將Destination設(shè)置為“Color”,Texture Id處須填寫(xiě)“_BlitPassTexture”。

????我們的自定義前身渲染器已準(zhǔn)備就緒,在我們的自定義輕量級(jí)渲染管線(xiàn)資源中,將Renderer Type設(shè)置為“Custom”,然后將帶有“Sobel Filter”的自定義“Forward Renderer Data”指定給Data欄。

????要使用新管線(xiàn)對(duì)場(chǎng)景進(jìn)行渲染,打開(kāi)Edit > Project Settings > Graphics。

????然后將新管線(xiàn)資源指定給“Scriptable Render Pipeline Settings”欄,我們的自定義管線(xiàn),現(xiàn)在有了Sobel Outline效果。

????請(qǐng)注意,我們可以調(diào)整指定的材質(zhì),并實(shí)時(shí)查看結(jié)果,也可以為“ToonBasicOutline”著色器或任何其他兼容的后期處理著色器重復(fù)這些步驟,以將其添加到我們的自定義渲染管線(xiàn)中。