unityshader如何实现熔解效果
之前玩过一些很有意思的单机游戏,比如生化危机系列,求生之路等。因为比较喜欢恐怖剧情类的游戏,所以像这类的游戏,我都会找着玩。其中有一个游戏,效果做的非常不错,但是我忘记它的名字了。那么我为什么还会记得这个游戏呢,主要是里面有一个细节,主角把一些变异人打死后,那些人身体就像着火了一样,然后慢慢的熔解,最后化为光点消失不见。当然就感觉那个效果真的很牛。当然直到现在,我也是觉得它的效果是不错的,毕竟那个时候的技术和现在还是有所差距的。所以那个时候就能做出这种效果,足以让人感到崇拜。现在从事了游戏开发行业,其实这样的效果,基本可以模拟出来,而且现在的很火的游戏,“吃鸡”里面降落伞的熔解,就和它很像:[if !vml]
![](https://img.haomeiwen.com/i17992279/e2853caf3689728c.png)
今天就做一个这样的熔解效果,下面是我做的Demo。当然和它肯定是有差距的。但是关系不大。
![](https://img.haomeiwen.com/i17992279/551c8dbbc0401ea0.png)
主要都是表现一个熔解效果,哈哈。好吧,那么这个效果是怎么做的呢?
原理很简单,就是对噪声纹理的某个颜色通道取值,然后和用户定义的熔解值进行对比,如果颜色通道的值小于熔解值,难么就实现熔解当前小于溶解值的像素点。那么模拟熔解的化,这里用的是像素剔除(clip)这个函数,Shader内置的函数。然后通过用户改变熔解值的大小,那么最终会有绝大部分都会小于熔解值,所以就会全部被剔除。那么我们不就看不见那些被剔除的像素了吗?然后为了更加逼真,我们模拟一个被烧点的效果,那就是熔解的地方,我们会加上一些被烧的痕迹,这个痕迹就可以用颜色叠加来做。而且还要规定痕迹的大小。嗯,这就是原理。听起来好像不是很懂是把。没关系代码里面写的都很清楚。OK,上代码:
![](https://img.haomeiwen.com/i17992279/d420c2478a2f5c7f.png)
![](https://img.haomeiwen.com/i17992279/529923b3169bc773.png)
这就是完整的Shader代码了。我们只要改变_Value的值,就可以看到熔解效果。随着_Value的值不断变大,熔解的速度就会加快。最终就会被全部熔解掉。
这就是本次的熔解效果了。unity学习交流群