1+ Shader "Unlit/Unlit (Mesh Animation)"
2+ {
3+ Properties
4+ {
5+ _MainTex ( "Texture" , 2D ) = "white" {}
6+
7+ [Header (Mesh Animation)]
8+ _AnimTex ( "Animation" , 2D ) = "white" {}
9+ _AnimMul ( "Animation Bounds Size" , Vector ) = (1 , 1 , 1 , 0 )
10+ _AnimAdd ( "Animation Bounds Offset" , Vector ) = (0 , 0 , 0 , 0 )
11+ [PerRendererData ] _AnimTime ( "Animation Time" , Vector ) = (0 , 1 , 1 , 0 ) /* (x: start, y: length, z: speed, w: startTime) */
12+ [PerRendererData ] _AnimLoop ( "Animation Loop" , Float ) = 1
13+ }
14+ SubShader
15+ {
16+ Tags { "RenderType" ="Opaque" }
17+ LOD 100
18+
19+ Pass
20+ {
21+ CGPROGRAM
22+ #pragma vertex vert
23+ #pragma fragment frag
24+ #pragma multi_compile_fog
25+ #pragma multi_compile_instancing
26+ #pragma target 3.0
27+ #pragma require samplelod
28+
29+ #include "UnityCG.cginc"
30+
31+ struct appdata
32+ {
33+ float4 vertex : POSITION ;
34+ float2 uv : TEXCOORD0 ;
35+ uint vertexId : SV_VertexID ;
36+ UNITY_VERTEX_INPUT_INSTANCE_ID
37+ };
38+
39+ struct v2f
40+ {
41+ float2 uv : TEXCOORD0 ;
42+ UNITY_FOG_COORDS (1 )
43+ float4 vertex : SV_POSITION ;
44+ };
45+
46+ sampler2D _MainTex;
47+ float4 _MainTex_ST;
48+ sampler2D _AnimTex;
49+ float4 _AnimTex_TexelSize;
50+
51+ float4 _AnimMul;
52+ float4 _AnimAdd;
53+
54+ UNITY_INSTANCING_BUFFER_START (Props)
55+ UNITY_DEFINE_INSTANCED_PROP (float4 , _AnimTime)
56+ UNITY_DEFINE_INSTANCED_PROP (float , _AnimLoop)
57+ UNITY_INSTANCING_BUFFER_END (Props)
58+
59+ v2f vert (appdata v)
60+ {
61+ UNITY_SETUP_INSTANCE_ID (v);
62+
63+ float4 t = UNITY_ACCESS_INSTANCED_PROP (Props, _AnimTime);
64+ float looping = UNITY_ACCESS_INSTANCED_PROP (Props, _AnimLoop);
65+
66+ float progress = (_Time .y - t.w) * t.z;
67+ float progress01 = lerp (saturate (progress), frac (progress), looping);
68+ float2 coords = float2 (0.5 + v.vertexId, 0.5 + t.x + progress01 * t.y) * _AnimTex_TexelSize.xy;
69+ float4 position = tex2Dlod (_AnimTex, float4 (coords, 0 , 0 )) * _AnimMul + _AnimAdd;
70+
71+ v.vertex = float4 (position.xyz, 1.0 );
72+
73+ v2f o;
74+ o.vertex = UnityObjectToClipPos (v.vertex);
75+ o.uv = TRANSFORM_TEX (v.uv, _MainTex);
76+ UNITY_TRANSFER_FOG (o,o.vertex);
77+ return o;
78+ }
79+
80+ fixed4 frag (v2f i) : SV_Target
81+ {
82+ fixed4 col = tex2D (_MainTex, i.uv);
83+ UNITY_APPLY_FOG (i.fogCoord, col);
84+ return col;
85+ }
86+ ENDCG
87+ }
88+ }
89+ }
0 commit comments