Unity3d《Shader篇》Logo闪光特效

Unity3d《Shader篇》Logo闪光特效

Shader "Custom/Flash" {

    Properties {

        _MainTex ("Base (RGB)", 2D) = "white" {}

        _Color("Diffuse Material Color", Color) = (1,1,1,1)

        _Width("Width", Float) = 0.2

        _Speed("Speed", Float) = 10.0

        _Angle("Angle", Float) = 0.1

    }

    

    SubShader {

        Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}

        Blend SrcAlpha OneMinusSrcAlpha

        //AlphaTest Greater 0.1

        

        

        Pass

        {

            CGPROGRAM

// Upgrade NOTE: excluded shader from DX11 and Xbox360; has structs without semantics (struct v2f members uv)

#pragma exclude_renderers d3d11 xbox360

            #pragma vertex vert

            #pragma fragment frag

            

            #include "UnityCG.cginc"



            sampler2D _MainTex;

            float4 _Color;

            float _Width;

            float _Speed;

            float _Angle;

            

            struct v2f {

                float4 pos : SV_POSITION;

                float2 uv : TEXCOORD0;

            };



            v2f vert(appdata_base v)

            {

                v2f o;

                o.pos = mul(UNITY_MATRIX_MVP,v.vertex);

                o.uv = v.texcoord;

                return o;

            }

            

            float4 frag(v2f i):COLOR

            {

                float width = _Width*0.5;

                float4 col = tex2D(_MainTex,i.uv);

                

                float pivot = _Time.y*_Speed;

                //pivot = pivot+i.uv.y*tan(_Angle);

                pivot = pivot-floor(pivot);

                

                float diff = i.uv.x-pivot;

                

                float4 flashCol = _Color;

                if(0==col.w)

                {

                    flashCol.w = 0;

                }

                

                if(abs(diff)<width)

                {

                    if(diff<0)

                    {

                        col = lerp(col,flashCol,(width+diff)/width);

                    }

                    else if(diff>=0 )

                    {

                        col = lerp(flashCol,col,diff/width);

                    }

                }

                return col;

            }

            

            ENDCG

        }



    } 

    FallBack "Diffuse"

}

 

你可能感兴趣的:(unity3d)