Shader "Custom/7.3" {
Properties {
_MainTex ("Base (RGB)", 2D) = "white" {}
_tintAmount("Tint Amount",Range(0,1))=0.5
_ColorA("Color A",Color) = (1,1,1,1)
_ColorB("Color B",Color) = (1,1,1,1)
_Speed("Wave Speed",Range(0.1,80))=5
_Frequency("Wave Frequency",Range(0,5))=2//频率
_Amplitude("Wave Amplitude",Range(-1,1)) = 1//幅度
}
SubShader {
Tags { "RenderType"="Opaque" }
LOD 200
CGPROGRAM
#pragma surface surf Lambert vertex:vert
sampler2D _MainTex;
float4 _ColorA;
float4 _ColorB;
float _tintAmount;
float _Speed;
float _Frequency;
float _Amplitude;
float _OffsetVal;
struct Input {
float2 uv_MainTex;
float3 vertColor;
};
void vert(inout appdata_full v,out Input o)
{
UNITY_INITIALIZE_OUTPUT(Input,o);
float time = _Time * _Speed;
float waveValueA =sin(time + v.vertex.x * _Frequency) * _Amplitude; //sin 函数取一角度为参数值,并返回角的对边长度除以斜边长度的比值。结果的取值范围在 -1 到 1 之间。
v.vertex.xyz = float3(v.vertex.x,v.vertex.y + waveValueA,v.vertex.z);//设置顶点的位置(y随意时间偏移。sin函数则固定回-1,1)
v.normal = normalize(float3(v.normal.x + waveValueA,v.normal.y,v.normal.z));//设置法线
o.vertColor = float3(waveValueA,waveValueA,waveValueA);//设置动态颜色
}
void surf (Input IN, inout SurfaceOutput o) {
half4 c = tex2D (_MainTex, IN.uv_MainTex);
float3 tintColor = lerp(_ColorA,_ColorB,IN.vertColor).rgb;
o.Albedo = c.rgb * (tintColor * _tintAmount);
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}
表面着色器的顶点动画
最新推荐文章于 2022-11-10 12:32:50 发布