关于噪声和溶解效果
溶解效果
- 溶解效果是最常见的效果之一,实现原理也很简单,通过 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# 脚本测试一下。
- 看一下对比结果,由于我的模型的面数比较少,所以效果有点奇怪,不过精模效果应该就正常了。
- 下图左边是消失一半的,右边是正常的。
按方向消失
- 上面哪个消失略显僵硬,如果是传送类的消失,比如很短的时间从脚到头消失
- 原理还是用 Clip() 剪掉不需要的像素,不过是从头到脚,或者从脚到头,也就是一个点,
- 在顶点中用 uv.z 存储 clip 的参数,用一个 [-2,2] 的区间来控制从头到脚,或者从脚到头,取决于你怎么操作 vertex.y 的值。
1 | o.uv.z = v.vertex.y - _DisappearOffset; |
噪声
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.