当前位置: 移动技术网 > IT编程>开发语言>c# > Unity shader实现顶点动画波动效果

Unity shader实现顶点动画波动效果

2020年06月23日  | 移动技术网IT编程  | 我要评论
本文实例为大家分享了unity shader实现顶点动画的具体代码,供大家参考,具体内容如下需要了解的背景知识:波动实例:y=asin(ωx+φ)φ:决定波形与x轴位置关系或横向移动距离(左加右减)ω

本文实例为大家分享了unity shader实现顶点动画的具体代码,供大家参考,具体内容如下

需要了解的背景知识:

波动实例:y=  asin(ωx+φ)

φ:决定波形与x轴位置关系或横向移动距离(左加右减)

ω:决定周期(最小正周期t=2π/|ω|)

a:决定峰值(纵向拉伸压缩的倍数)

顶点着色器的主要计算:

1.顶点位置

2.矩阵转换

片段着色器

1.纹理寻址

2.灯光作用

_time表示时间周期 float4(t/20,  t,  t*2,  t*3)

shader "custom/wave" {
 properties {
 
 _maintex("texture", 2d) = "white"{} //纹理
 _arange("amplitute", float) = 1
 _frequency("frequency", float) = 2//波动频率
 _speed("speed",float) = 0.5//控制纹理移动的速度
 
 }
 
 subshader
 {
 pass
 { 
 cgprogram
 #pragma vertex vert
 #pragma fragment frag
 #include "unitycg.cginc"
 
 struct appdata
 {
 float4 vertex:position;
 float2 uv:texcoord0;
 };
 
 struct v2f
 {
 float2 uv:texcoord0;
 float4 vertex:sv_position;
 };
 
 float _frequency;
 float _arange;
 float _speed;
 
 v2f vert(appdata v)
 {
 v2f o;
 
 float timer = _time.y *_speed;
 //变化之前做一个波动 y= asin(ωx+φ)
 float waver = _arange*sin(timer + v.vertex.x *_frequency);
 v.vertex.y = v.vertex.y + waver;
 o.vertex = mul(unity_matrix_mvp, v.vertex);
 o.uv = v.uv;;
 return o;
 }
 
 sampler2d _maintex;
 
 fixed4 frag(v2f i) :sv_target
 {
 fixed4 col = tex2d(_maintex, i.uv);
 return col;
 } 
 
 endcg
 }
 }
 
 fallback "diffuse"
}

运行效果图如下:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网