unityShader实现点击波
实现原理
float2 uv=IN.uv;
float dis=distance(uv,float2(0.5,0.5)); // 点击的位置, 外部传入
float scale=_A * sin(-dis*3.14*_F + _Time.y); // -dis 向外波动, dis 向内波动
uv+=uv*scale; // uv延圆形偏移
fixed4 col=tex2D(_MainTex,uv);
// fixed4(1,1,1,1)*saturate(Scale)*100; 输出颜色 查看效果, 实际是不需要的
return col+ fixed4(1,1,1,1)*saturate(Scale)*100;
优化1:点击波只在一定的半径内有
if(dis<_R){ //_R 为波动的半径
float scale=_A * sin(-dis*3.14*_F + _Time.y); // -dis 向外波动, dis 向内波动
uv+=uv*scale; // uv延圆形偏移
}
优化2:正常的点击波,越靠近中心,波越强,边缘的波越弱
// 修改Scale值
if(dis<_R){ //_R 为波动的半径
_A *= 1-dis/_R;
float scale=_A * sin(-dis*3.14*_F + _Time.y); // -dis 向外波动, dis 向内波动
uv+=uv*scale; // uv延圆形偏移
}
优化3: 不使用 if 判断
_A *= saturate(1-dis/_R);
float scale=_A * sin(-dis*3.14*_F + _Time.y); // -dis 向外波动, dis 向内波动
uv+=uv*scale; // uv延圆形偏移
---------------------------------------------第二部分-------------------------------------------------------------
unityShader实现波光粼粼的效果
IN.uv+= 0.01 * sin(IN.uv.x *3.14* 10 + _Time.y); //控制UV波动的周期, 模拟水波