前言:这篇博客主要是使用plane来简单模仿高低起伏,错落变化的水波效果。
设计思路:如下所示:
1.由于plane的顶点坐标中y轴分量为0,所以我们可以考虑使用正弦波产生简谐运动来改变顶点y轴值。
2.将时间作为正弦波的影响因子,从而实现高低起伏效果。
3.将x和z轴分量值作为正弦波的影响因子,从而得到水平和垂直方向上都有不同的高低起伏效果。
3.可以多加几个不同正弦波来改变y轴值,从而实现错落变化的效果。最好不超过4个,此处我使用2个正弦波。
核心代码:如下所示:
Shader "Custom/demo9" {
SubShader {
pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "unitycg.cginc"
struct v2f {
float4 pos:POSITION;
fixed4 col:COLOR;
};
v2f vert(appdata_base i)
{
v2f o;
// 使用正弦波产生简谐运动: value = A.sin(w*t + u),其中A表示振幅 w表示角频率 u表示初始相位
i.vertex.y += 0.2 * sin(i.vertex.x + i.vertex.z + _Time.y); // 将x轴,z轴,时间作为周期函数影响因子,从而得到x和z方向上顶点有不同的周期上下波动效果
i.vertex.y += 0.3 * sin(i.vertex.x - i.vertex.z + _Time.w); // 再加一个正弦波的目的是和上面正弦波一起产生错落效果
// 使用模型视图投影矩阵对顶点进行变化
o.pos = mul(UNITY_MATRIX_MVP, i.vertex);
// 将顶点y轴坐标作为颜色rgb的值,从而由灰度变化效果
float gray = i.vertex.y / 2 + 0.5;
o.col = fixed4(gray, gray, gray, 1);
return o;
}
fixed4 frag(v2f i):COLOR
{
return i.col;
}
ENDCG
}
}
}
运行效果:如下图所示: