Unity shader实现顶点动画波动效果
程序员文章站
2022-11-19 18:49:36
本文实例为大家分享了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" }
运行效果图如下:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
下一篇: 哮喘病人不能吃什么 哮喘病人远离八类食物