用ShaderGraph實現(xiàn)塞爾達的導(dǎo)師消失特效

作者:Yumir
哈嘍大家好我是yumir。
為了實現(xiàn)一個小小的效果接觸了ShaderGraph之后,我又想起了塞爾達神廟里面導(dǎo)師消失的特效:

通關(guān)神廟的時候這段特效我都是不跳過的,太好看了。我試著在Unity里面模仿了一下,其實就是”溶解"+“自發(fā)光“+"粒子系統(tǒng)”的結(jié)合體,效果如下:

一、準(zhǔn)備工作
準(zhǔn)備好一個2019.1以上版本的Unity,新建一個URP項目:

新建一個PBR Shader Graph用于制作溶解特效,新建一個Unlit Shader Graph用于制作發(fā)光的粒子效果。
二、在Shader Graph中實現(xiàn)溶解效果
這是一個非常簡單且實用的效果,Unity提供了三種不同的噪聲節(jié)點(Procedural>Noise)可以用來實現(xiàn)很多看似復(fù)雜的特效比如現(xiàn)在使用的溶解效果和水流效果,建議進一步了解。
在PBR Master點擊右上角的小齒輪,將屬性Surface選為Opaque模式,就可以利用AlphaClipThreshold進行透明度過濾,該模式下所有大于AlphaClipThreshold值的透明度都為1,否則為0。
利用這個節(jié)點以及PBRMaster上的這一特性,只需要額外兩個節(jié)點(另外兩個是貼圖節(jié)點不算)就可以實現(xiàn)一個溶解的效果。

三、在Shader Graph中實現(xiàn)邊緣發(fā)光
在上一步的基礎(chǔ)上,對滑動條輸入的數(shù)值加(Add)一個偏移量,并利用Step(In>=Edge In=1,In<Edge In=0)進行過濾,得到我們需要發(fā)光的范圍。
為了讓這個區(qū)域發(fā)光需要加上一個Color節(jié)點,將節(jié)點的Mode設(shè)置為HDR,并調(diào)整圖中框選位置的數(shù)值;

新建一個Multiply節(jié)點,將Color節(jié)點的輸出值和Step節(jié)點的輸出值分別連接到Multiply節(jié)點,再將Multiply節(jié)點的輸出值連接到PBRMaster的Emission(自發(fā)光),效果如下:

四、制作發(fā)光的粒子
顯然我們只需要引入一個HDR類型的Color屬性就可以制作出一個讓粒子發(fā)光的材質(zhì)球了,作為一個材質(zhì)球他還需要有一個貼圖屬性,將我們的HDR類型的Color與Vertex Color(粒子Inspector上設(shè)置的Color)相乘使粒子可以進行透明度的變化,內(nèi)容如下:

將材質(zhì)球拖拽到粒子上就可以得到一個發(fā)光的粒子特效,用dotween寫一個插值動畫,并在Update更新對應(yīng)的數(shù)值:
??? void Start()
??? {
??????? material = go.GetComponent<MeshRenderer>().material;
??????? dissolve = 0;
???????
??????? DOTween.To(() => dissolve, X => dissolve = X, 1.0f, 10);
??? }
??? private void Update()
??? {
??????? material.SetFloat("_Dissolve", dissolve);
??? }
?
在適當(dāng)?shù)奈恢梅胖昧W犹匦?,調(diào)整數(shù)值(底部粒子先播放、越往上延時越長),為了效果更好一點我做了一個螺旋的粒子:

就是文章前面效果圖里的效果啦,詳細數(shù)值可以下載項目查看,下次見~

鏈接:https://pan.baidu.com/share/init?surl=PaYEqw_DjloM45TuZfvRYA
提取碼:48y5

歡迎加入游戲開發(fā)群歡樂攪基:1082025059
對游戲開發(fā)感興趣的童鞋可戳這里進一步了解:http://www.levelpp.com/