Shader that wraps around as it offsets a texture

2.1k Views Asked by At

I'd like to create a tiled shader that wraps back onto itself as it offsets a transparent texture over time. The result will make a "moving walkway/travellator" across a mesh using a texture representing a single step.

This is what I have so far. But it doesn't wrap around (without using external dependencies as setting the texture's wrap mode to repeat)

Shader "Custom/ScrollingTextureUnlitShader" 
{

Properties
{
    _FadeValue ("Fade Value", Range(0, 1)) = 1
    _ColorTint ("Color Tint", Color) = (1,1,1,1)
    _MainTex ("Base (RGB)", 2D) = "white" {}
    _ScrollXSpeed ("X Scroll Speed", Range(-10, 10)) = -5
    _ScrollYSpeed ("Y Scroll Speed", Range(-10, 10)) = 0
}

SubShader
{
    Tags { "RenderType"="Transparent" "Queue"="Transparent" }
    LOD 200

    CGPROGRAM
    #pragma surface surf Unlit alpha

    float _FadeValue;
    float4 _ColorTint;
    sampler2D _MainTex;
    fixed _ScrollXSpeed;
    fixed _ScrollYSpeed;

    struct Input
    {
        float2 uv_MainTex;
    };

    void surf (Input IN, inout SurfaceOutput o)
    {
        fixed2 scrolledUV = IN.uv_MainTex;

        fixed xScrollValue = _ScrollXSpeed * _Time;
        fixed yScrollValue = _ScrollYSpeed * _Time;

        scrolledUV += fixed2 (xScrollValue, yScrollValue);

        half4 c = tex2D (_MainTex, scrolledUV);
        o.Albedo = c.rgb * _ColorTint;
        o.Alpha = c.a * _FadeValue;
    }

    inline fixed4 LightingUnlit (SurfaceOutput s, fixed3 lightDir, fixed3 viewDir, fixed atten)
    {
        fixed4 c;
        c.rgb = s.Albedo;
        c.a = s.Alpha;

        return c;
    }

    ENDCG
}

FallBack "Transparent/Diffuse"
}
0

There are 0 best solutions below