欢迎光临散文网 会员登陆 & 注册

用ShaderGraph实现塞尔达的导师消失特效

2020-08-13 23:27 作者:皮皮关做游戏  | 我要投稿

作者:Yumir

哈喽大家好我是yumir。

为了实现一个小小的效果接触了ShaderGraph之后,我又想起了塞尔达神庙里面导师消失的特效:

通关神庙的时候这段特效我都是不跳过的,太好看了。我试着在Unity里面模仿了一下,其实就是”溶解"+“自发光“+"粒子系统”的结合体,效果如下:

最终效果

一、准备工作

准备好一个2019.1以上版本的Unity,新建一个URP项目:

新建一个PBR Shader Graph用于制作溶解特效,新建一个Unlit Shader Graph用于制作发光的粒子效果。


二、在Shader Graph中实现溶解效果

这是一个非常简单且实用的效果,Unity提供了三种不同的噪声节点(Procedural>Noise)可以用来实现很多看似复杂的特效比如现在使用的溶解效果和水流效果,建议进一步了解。

在PBR Master点击右上角的小齿轮,将属性Surface选为Opaque模式,就可以利用AlphaClipThreshold进行透明度过滤,该模式下所有大于AlphaClipThreshold值的透明度都为1,否则为0。

利用这个节点以及PBRMaster上的这一特性,只需要额外两个节点(另外两个是贴图节点不算)就可以实现一个溶解的效果。


三、在Shader Graph中实现边缘发光

在上一步的基础上,对滑动条输入的数值加(Add)一个偏移量,并利用Step(In>=Edge In=1,In<Edge In=0)进行过滤,得到我们需要发光的范围。

为了让这个区域发光需要加上一个Color节点,将节点的Mode设置为HDR,并调整图中框选位置的数值;

新建一个Multiply节点,将Color节点的输出值和Step节点的输出值分别连接到Multiply节点,再将Multiply节点的输出值连接到PBRMaster的Emission(自发光),效果如下:


四、制作发光的粒子

显然我们只需要引入一个HDR类型的Color属性就可以制作出一个让粒子发光的材质球了,作为一个材质球他还需要有一个贴图属性,将我们的HDR类型的Color与Vertex Color(粒子Inspector上设置的Color)相乘使粒子可以进行透明度的变化,内容如下:

将材质球拖拽到粒子上就可以得到一个发光的粒子特效,用dotween写一个插值动画,并在Update更新对应的数值:

    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);

    }

 

在适当的位置放置粒子特效,调整数值(底部粒子先播放、越往上延时越长),为了效果更好一点我做了一个螺旋的粒子:

就是文章前面效果图里的效果啦,详细数值可以下载项目查看,下次见~

链接:https://pan.baidu.com/share/init?surl=PaYEqw_DjloM45TuZfvRYA

提取码:48y5



欢迎加入游戏开发群欢乐搅基:1082025059

对游戏开发感兴趣的童鞋可戳这里进一步了解:levelpp.com/

用ShaderGraph实现塞尔达的导师消失特效的评论 (共 条)

分享到微博请遵守国家法律