MMD联动Unity学习笔记 Vol.23 ShaderGraph漩涡实例

前言
本期继续ShaderGraph主题。这次的笔记内容来自狗子大神的视频《漩涡消失与出现效果》。如果有不明白的地方可以去看下面视频。


具体操作
这里我们不再对场景和其它效果进行赘述,我们只研究物件的Shader是如何实现的,下面我们直接进入正题。
首先我们创建一个新的Shader,还是选择PBR Shaer,命名为Twist,打开ShaderGraph编辑器。我们要做的事情是让它边缘发光,使用FresnelEffect节点,然后混合一个颜色节点,选择HDR,选择一个颜色,加一个Multiply,让它混合一下。连接到主节点的Emission端口。修改一下FresnelEffect的Power值为3。

接着我们加入一个SampleTexture2D节点,再传入一个贴图,在黑板创建一个贴图变量,命名为Albedo。将它们连接起来,输出到主节点Albedo端口。先保存一下。

我们回到场景中,将物件的材质设置为新建的Shader,来看一下效果。

下面我们来做漩涡的动画,首先我们要获取它在屏幕中的位置,添加一个Position节点,空间设置为世界即可。还需要把它变换一下,添加一个Twirl节点,将位置节点连接到Twirl的UV端口,让它变成黑洞的效果,我们要控制它的强度和中心点的位置。

我们在黑板再加两个变量,一个是Vector2,一个是Vector1,分别命名为CenterPos和Strength,将它们分别连接到Center和Strength端口,我们想让它在中心是话CenterPos就是0,0。它的强度设置为15,强度越大它旋转的越夸张。

下面我们再给它添加一张噪音贴图,添加SimpleNoise节点,我们将Twirl节点的Out端口连接到噪音贴图的UV端口,再调整噪音贴图的Scale值,让它变成我们想要的效果,我们也通过一个变量来控制它,在黑板中添加一个Vector1,命名为NoiseScale,我们先将默认值设置为10。

现在我们再增加一个动画的效果,我们添加一个Step节点,它的作用就是将噪音贴图的输出进行处理,当In的值高于Edge值时,它就进行输出。

我们来创建一个变量来控制它的输出,在黑板中创建一个Vector1,命名为Desolve,将它拖给Edge端口,我们可以看到我们改变Desolve值时,输出产生的明显的变化。

最后我们将Step的输出端口连接到主节点的AlphaClipThreshold端口上。我们再将Alpha设置为0.5。我们保存一下,看下效果。

我们回到物件的检查器可以调整暴露出来的变量,来达到我们想要的效果。我们调节CenterPos的x和y值可以调整旋涡的中心位置。
下面我们使用Time的方法来实现自动播放的动画,我们将Desovle的连接先取消掉。如果我们需要自己来改变它的消失效果时,我们可以再将它连接起来。这时我们想要实现自动播放的效果,我们就要用Time节点,将Time节点的Sine Time端口连接到Step节点的Edge端口,这样的话,它的值就会一直在0和1之间重复。

我们回到场景中播放,可以看到物件不断地消失和显现。



总结
这个案例我们的着色器按效果共分为三个部分:
通过一个基本纹理作为其基础效果。
边缘高光,通过一个菲涅尔节点和颜色相乘赋给自发光。
随时间的扭曲和剔除,通过Step阶梯点和Twirl扭曲节点实现,Noise节点辅助产生扭曲条纹状效果。
节点说明
Fresnel 菲涅尔反射,简单来说就是表面与视角越是平行,则高光效果越明显
Step 如果输入In大于等于输入Edge,返回1,否则返回0
Twirl 将类似于黑洞的旋转扭曲效果应用于输入的UV。扭曲效果的中心参考点由输入参数Center决定,效果的整体强度由输入参数Strength决定。输入Offset可用于偏移结果的各个通道。
Position 获取mesh的顶点或片段的位置。可选的空间有Object, View, World, Tangent。(我们使用该位置为世界坐标下的位置,作为Twirl的中心点位置)
Time 可以获取Unity中的时间值。
最后感谢狗子大神的分享,emmm