本文实例为大家分享了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" }
运行效果图如下:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。
您可能感兴趣的文章:
如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!
网友评论