MMD联动Unity学习笔记 Vol.8 使用Shader Graph实现人体溶解效果

前言
上回我们共同学习了ShaderGraph的基础知识,这回我们再继续研究它的应用。下面我们共同完成ShaderGraph的实际案例。

教程的详细步骤请观看下面的视频(生肉),啃不动就看我这篇吧。

项目的下载地址 https://github.com/Brackeys/Shader-Graph-Tutorials
下载后解压项目文件,找到项目文件位置,打开项目。

在资源文件里鼠标右键单击,新建一个PBR Graph着色器,并命名为Dissolve。

双击着色器文件或者右键单击选择打开Shader Graph编辑窗口。

打开Shader Graph编辑窗口,点击右上角方块按钮最大化。

打开Albedo左侧的色块打开颜色编辑窗口,选取一个稍深的颜色。

右键单击空白区域,选择Create Node(新建节点),这时出现搜索框,输入simple,选择Simple Noise(简单噪声)。将Scale的x值设为30。

然后将简单噪声的out节点连接到主节点的Alpha节点,点击主节点齿轮,将Surface的参数改为Transparent(透明的),可以看到噪声在材质产生的变化。在右下角材质球中可以点击拖动球体角度观察变化。

先将Surface的参数改回Opaque(不透明)。再创建一个新的节点Vector 1,将其out与主节点的AlphaClipThreshold(alpha剪辑阈值)连接起来。这时我们改变Vector 1的x的值,可以发现材质的变化。这里注释一下,AlphaClipThreshold的值大于0.7时,Alpha所对应的像素点就会不可见。所以Vector 1的x值的实际取值范围只有0~0.7。

我们可以把这个参数暴露出来,在材质球里面调节。右击此节点,选择Convert To Property(转换为属性)。这里我们用Time参数取代手动调节,让它自动变化。点选此节点,按Delete键删除节点。
右击创建节点,打开搜索框,输入time,新建Time节点。再右击创建节点,输入remap(重新映射),新建Remap。将Time节点的out连接到Remap节点的In,再将Remap节点的out连接到AlphaClipThreshold。这样可以看到材质球在自动变化。

将简单噪声的Out节点向外拖动,延伸出一个新的节点,出现搜索框,输入step,将Out节点连接到主节点的Emission上。再从Remap的Out向外延伸一个新的节点,输入add,将左侧A值设为0.01,Out节点连接到Step的In节点。

这时可以看到材质变化的部分多出一圈发光的边缘。我们可以调节Add节点的x值,让发光边缘变得更薄或者更厚。
接着我们将Step节点的Out向外拖出一个新的节点,输入Multiply(相乘),选择Multiply:B(4),再将Multiply节点的A点向外拖出一个新节点,输入Color,将Mode改为HDR,将颜色改为天蓝色,同时将Intensity(强度)提高为4。

然后将Multiply节点的Out连接到主节点的Emission上,这样可以看到发光边缘的颜色变成了刚才赋予的颜色。看到效果还不赖。
下面我们将几个参数暴露出去,选择Color节点右击选择转换为属性,并改名为Edge Color。点击属性右上角的加号,增加一个Vector 1,命名为Edge Width,将默认值设为0.01。将其与Add节点的A相连接。再增加一个Vector 1,命名为Noise Scale,将默认值设为30,将其与Simple Noise节点的Scale相连接。

完成后点击左上角的Save Asset按钮保存着色器,然后退出。
选择项目的猴头,将着色器类型改为Dissolve,立即可以看到效果。


播放场景后可以看到动态消融的效果。我们还可以调节暴露出来的属性,比如颜色。

用上面的方法,把模型换成人形就可以实际炫酷的人体溶解效果。我们不用一行代码,就可以实现这么赞的效果,Shader Graph非常值得研究。