【Unity3D Shader】学习笔记-消融效果
前言
消融效果一般用于怪物的死亡表现,主要原理通过随时间修改消融的阈值,丢弃小于阈值的颜色实现消融(也可以通过alpha设为0)。
[声明:本笔记系列文章的图片资源都源自百度图片搜索,如有问题联系我]
一、简单消融效果
图1 消融效果
图2 面版参数
简单的消融效果,Threshold的值是随时间从0-1进行变化。对扰动图采样取r值,通过比较Threshold与R值的大小来进行消融。Noise图可以控制消融的形状,代码如下。
fixed4 col = tex2D(_MainTex, i.uv); float value = tex2D(_DissolveTex, i.uv).r; // 扰动采样的值r小于外部动态修改的阈值就丢弃,实现消融 if(value <= _DissolveThreshold) { discard; } return col;
二、消融增加边界区颜色
图3 消融边界区域颜色
图4 面版增加边界颜色和阈值
消融增加边界区颜色,当采样的R值小于消融阈值*边界区域阈值,混合边界颜色形成消融过渡。
fixed4 col = tex2D(_MainTex, i.uv); float value = tex2D(_DissolveTex, i.uv).r; // 扰动采样的值r小于外部动态修改的阈值就丢弃,实现消融 if(value <= _DissolveThreshold) { discard; } // 消融的阈值乘以边界的范围实现边界染色 if(value <= _DissolveThreshold*_EdgeThreshold) { col.rgb *= _EdgeColor.rgb; //这里直接赋值效果也很好 } return col;
三、消融带定向飘散效果
图5 定向飘散
在顶点着色器中对模型顶点进行位移来实现飘的效果,通过消融阈值和方向来控制飘的方向等参数。
// 顶点着色器中对坐标进行偏移w控制从什么时候开始位移,_WaveParams.xyz控制方向 v.vertex.xyz += saturate(_DissolveThreshold - _WaveParams.w) * _WaveParams.xyz;
四、后记
本篇中的代码全部使用了if判断,需要优化掉,边界区域可以添加多个来提升过渡效果。当然整体效果还是比较一般,跟大神的差距还是很大的。
网络异常,图片无法展示
|
图7 twitter@Ed_dv做的消融效果