- Home /
Spritesheet animation from a projector
Hi,
I'm trying to simulate a cloud shadow on a terrain. I figured using a projector would be a good idea. So far, I've managed to project a texture and translate the projection's position over time.
Now I want to animate this texture as a spritesheet. I'm using a script to adjust the texture's offset dynamically: http://wiki.unity3d.com/index.php?title=Animating_Tiled_texture#CSharp_-_SpritSheet.cs
However, I have no clue how to force the shader to project only a chosen fragment of the texture, so that I could perform a spritesheet animation. I don't know how and when should I use _MyTexture_ST values.
Here is the shader's source code:
Shader "Projector/CloudProjector" {
Properties {
_ShadowTex ("Cookie", 2D) = "gray" { }
}
Subshader {
Tags { "RenderType"="Transparent-1" }
Pass {
ZWrite Off
Fog { Color (1, 1, 1) }
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma target 3.0
#include "UnityCG.cginc"
sampler2D _ShadowTex;
uniform float4 _ShadowTex_ST;
uniform float4x4 _Projector;
struct fragmentInput{
float4 position : SV_POSITION;
float4 uv : TEXCOORD0;
float4 normalInProjSpace : TEXCOORD1;
};
fragmentInput vert(appdata_full i){
fragmentInput o;
o.position = mul(UNITY_MATRIX_MVP, i.vertex);
i.vertex.x += _Time.x*8;
o.uv = mul(_Projector, i.vertex);
o.normalInProjSpace = mul (_Projector, float4(i.normal, 0.0));
return o;
}
float4 frag(fragmentInput i) : COLOR {
// sth with this?: * _ShadowTex_ST.xy + _ShadowTex_ST.zw;
i.uv.xy = i.uv.xy / i.uv.w;
float4 tex = tex2D(_ShadowTex, i.uv.xy);
if (dot(float4(0,0,-1,0), i.normalInProjSpace) < 0.0)
tex = float4(1,0,0,0);
return tex;
}
ENDCG
}
}
}
Your answer
Follow this Question
Related Questions
Accessing a projectors renderer 2 Answers
Blob shadow changes transparency 2 Answers
www.texture on Projector wont clamp 1 Answer