Quantcast
Channel: Latest Questions on Unity Answers
Viewing all articles
Browse latest Browse all 171066

Spritesheet animation from a projector

$
0
0
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 } } }

Viewing all articles
Browse latest Browse all 171066

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>