這次安排了解的是Dissolve Shader,一個遊戲中常看到的視覺特效。它和一般的消失呈現不一樣,表現上多是不規則的部份漸而成為全面性的消失。可以從以下的影片中得知實際的效果呈現。
由於Unity的Shader Graph(SG)是內建且取得容易,就先從SG開始著手看如何來製作此效果。
一樣是用Universal Render Pipeline做為專案一開始的設定,模型也用之前提及的騎士。Shader類型也和Glow一樣選用PBR Graph。將騎士模型擺放到範例場景上並開啓SG編輯器就正式展開探索。
首先會引用的節點是Simple Noise(雜訊),它的參數可進行調整。不調整的預設Scale為500,會讓雜訊粒度看起來很細。為了讓它看起來像大面積的呈現而不沙塵化,會調低其值。調整後連到PBR Master的Alpha。
接下來要用一個值連到AlphaClipThreshold,這個屬性是決定當值少於某個區間定義值後,就會不顯示。用Vector 1,也就是一個浮點數。但在Surface預設為Opaque時看不到改變。可於PBR Master的設定中將Surface從Opaque調至Transparent。預覽中的㘣模即可看到改變。這個浮點數一開始時0,也就是少於0的不會顯示(Alpha層)要將其值調高才看的到效果。
為了要讓它可隨著時間改變,加入Glow裡用的Time節點。利用Time的Sin Time功能當做AlphaClipTransparent變動值的改變基礎。但Sin值是從負1值到正1值,不過Alpha那的值只接受0到1之間的浮點數,因此再導入一個Remap節點,讓-1 to 1的值變成0 to 1。
此時可看到在場景中的騎士若隱若現的姿態。
接下來,要在消失的邊緣上加上顏色的變化。先引用了Step節點,它的功能和PBR Master上的AlphaClipTransparent類似,也是判定值在一個階段下不呈現。所以要引入同樣的Noise值,而現在會隨著時間做變化,故也要引用相同的時間值。從Step出來的值會放到PBR Master上的Emission。不過這時是同時針對Alpha層做發光的動作。因此要把Step的時間往後調一點,才看的到時間差呈現的效果。加入Add節點並給一個很小的值(0.1)。
進行顏色調整則需要放入Color和Multiply節點,也就是讓Step出來的值和Color相乘,讓顏色疊上去。這裡的Color利用HDR設定會更加的鮮明。
將Color值轉換成Property,可以隨時進行顏色上的調整(比如說由Script端控制)。也可另增一個Property來控制Step的邊緣粗細。最後記得將PBR Master的Surface調回Opaque,且將它自身的貼圖以Property方式放入,則簡易 Dissolve Shader就完成了。
最後的呈現為
今日測試用的專案放罝在Git Repo中的shader-unity-dissolve目錄裡,相關檔案均已置入,開啓範例景後即可。