在游戏里我们经常会看到:怪物死亡之后通常不是瞬间消失,而是从模型的某一位置开始消失,最后蔓延至全身,有点类似于燃烧,这种现象叫做消融(Dissolve)。
本篇主要讲解消融特效的实现逻辑。使用Unity的Amplify Shader Editor进行节点连接。而下一篇会将逻辑写成真正的shader代码。
下面先展示一下大概的预览效果:效果预览
简单逻辑
消融的效果主要利用了shader里的裁切(Clip)功能,在Amplify里叫做Opacity Mask。比如裁切值为0,那么只有当数值大于0,像素才会被渲染出来,否则会被剔除。
一张灰度图的像素值在0~255之间,转换到程序里也就是0~1之间。0是黑色,1是白色。
假如有一张Noise灰度贴图,最开始我加上一个数值v=1,那么所有像素值都是白色。如果我逐渐把v减少,像素的数值也会逐渐减少。当v=0的时候,贴图恢复到原始样貌。我继续减少数值v,当v=-1的时候,贴图所有像素都变为黑色。把这个变化的过程传递给shader做裁切计算,就可以实现模型逐渐消融的效果。
美术资源准备
除了模型本身需要的贴图之外,还需要两张控制消融效果的贴图。
在PS里生成一张云彩的Noise纹理,然后点击图像菜单下的“自动颜色”命令,使图像的像素值完全占用满0~255的范围,这样才不至于有空白的区间产生。Noise贴图
使用PS的渐变工具制作一张左侧黑,中间红,