实践篇:简单水波

前言:这篇博客主要是使用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
		}
	}
}

运行效果:如下图所示:
在这里插入图片描述

发布了81 篇原创文章 · 获赞 39 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/zjz520yy/article/details/88693063