UV精灵动画Shader

作者: 萧非子 | 来源:发表于2017-11-03 11:00 被阅读57次

    Shader "Custom/AnimatedSpriteSurfaceShader"
    {
    Properties {
    _Color ("Color", Color) = (1,1,1,1)
    _MainTex ("Albedo (RGB)", 2D) = "white" {}
    _Glossiness ("Smoothness", Range(0,1)) = 0.5
    _Metallic ("Metallic", Range(0,1)) = 0.0

        _CellRowAmount("Cell Row Amount", float) = 1
        _CellColumnAmount("Cell Column Amount", float) = 1
        _Speed("Speed", Range(0.01, 32)) = 12
    }
    SubShader {
        Tags { "RenderType"="Opaque" }
        LOD 200
    
        CGPROGRAM
        // Physically based Standard lighting model, and enable shadows on all light types
    

    pragma surface surf Standard fullforwardshadows

        // Use shader model 3.0 target, to get nicer looking lighting
    

    pragma target 3.0

        sampler2D _MainTex;
    
        struct Input {
            float2 uv_MainTex;
        };
    
        half _Glossiness;
        half _Metallic;
        fixed4 _Color;
    
        float4 _MainTex_TexelSize;
    
        float _CellRowAmount;
        float _CellColumnAmount;
        float _Speed;
    
        void surf (Input IN, inout SurfaceOutputStandard o)
        {
            float2 spriteUV = IN.uv_MainTex;
    
            float cellUVRowPercentage = 1 / _CellRowAmount;
            float cellUVColumnPercentage = 1 / _CellColumnAmount;
    
            int index = fmod(_Time.y * _Speed, _CellRowAmount * _CellColumnAmount);
    
            int rowIndex = index / _CellColumnAmount;
            int columnIndex = index - (rowIndex * _CellColumnAmount);//fmod(index, _CellColumnAmount);
    
            float xValue = spriteUV.x / _CellColumnAmount;
            xValue += columnIndex * cellUVColumnPercentage;
            float yValue = (_CellRowAmount - 1 + spriteUV.y) / _CellRowAmount;
            yValue -= rowIndex * cellUVRowPercentage;
    
            spriteUV = float2(xValue, yValue);
    
            // Albedo comes from a texture tinted by color
            fixed4 c = tex2D (_MainTex, spriteUV) * _Color;
            o.Albedo = c.rgb;
            // Metallic and smoothness come from slider variables
            o.Metallic = _Metallic;
            o.Smoothness = _Glossiness;
            o.Alpha = c.a;
        }
        ENDCG
    }
    FallBack "Diffuse"
    

    }

    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    相关文章

      网友评论

        本文标题:UV精灵动画Shader

        本文链接:https://www.haomeiwen.com/subject/ygttmxtx.html