溶解效果

  • 溶解效果是最常见的效果之一,实现原理也很简单,通过 Clip() 函数剪裁掉不想要的区域。
1
clip(currentColor.r - _TargetDissolveThreshold);
  • 不过一般都不会专门为了这两句话写一个单独的 Shader,毕竟多加一个材质就多一份消耗,所以都是在需要用到的地方加一个开关和阈值,然后用 step() 方法直接将结果加入总的结果中。

自定义 Standard Shader

  • 这里就有一个题外话,如果用了 Unity 默认的 Standard Shader 或者类似的默认 Shader,需要在效果结束的时候添加一些东西怎么办,这就需要一个套娃操作。
  • 先去 Unity 的官方 Github 上面下载默认的 Shader,然后复制一份改个名字变成自己的放入到工程里。
  • 然后把 StandardShader 引用的 Shader (除了粒子系统相关的)都复制一份到工程里,然后修改刚才操作的所有 Shader 的引用。这里放一个参考链接 https://blog.csdn.net/SnoopyNa2Co3/article/details/87947553
  • 然后找到片元输出的地方,加入溶解的方法。
  • Standard Shader 的参数都写在了 UnityStandardInput.cginc 里面了,在这里增加噪声图和阈值开关。
  • 写一个控制溶解的 C# 脚本测试一下。

参数截图
C#截图
Shader修改截图

  • 看一下对比结果,由于我的模型的面数比较少,所以效果有点奇怪,不过精模效果应该就正常了。
  • 下图左边是消失一半的,右边是正常的。
    对比效果截图

按方向消失

  • 上面哪个消失略显僵硬,如果是传送类的消失,比如很短的时间从脚到头消失
  • 原理还是用 Clip() 剪掉不需要的像素,不过是从头到脚,或者从脚到头,也就是一个点,
  • 在顶点中用 uv.z 存储 clip 的参数,用一个 [-2,2] 的区间来控制从头到脚,或者从脚到头,取决于你怎么操作 vertex.y 的值。
1
o.uv.z = v.vertex.y - _DisappearOffset;

噪声