用Shader实现动画主要包括两种方式:
1.UV动画
主要用于 序列帧、模拟无限重复的背景
让模型顶点对应的uv随时间变化,使其对应纹理像素不断随时间变化
但是无法达到让物体“变形”的效果
例如:
v2f vert(a2v v){
v2f o;
o.pos = mul(UNITY_MATRIX_MVP,v.vertex);
o.uv.xy = TRANSFORM_TEX(v.texcoord,_FirstLayer) + frac(float2(_MoveSpeed1,0.0) * _Time.y);
o.uv.zw = TRANSFORM_TEX(v.texcoord,_SecendLayer) + frac(float2(_MoveSpeed2,0.0) * _Time.y);
return o;
}
float4 frag(v2f i):SV_Target{
float4 color1 = tex2D(_FirstLayer,i.uv.xy);
float4 color2 = tex2D(_SecendLayer,i.uv.zw);
float4 color = lerp(color1,color2,1 - color1.a);
return color;
}
其中
TRANSFORM_TEX()方法使用时必须注意,需要提前声明 纹理名_ST 变量,这是因为该方法的作用是计算模型空间下的顶点UV,对应的 纹理UV,
可以理解成,为模型的每个顶点指定其所对应的是纹理贴图上的哪一个像素。