кнопка единства, отбрасывающая пиксели в шейдере - PullRequest
0 голосов
/ 11 февраля 2019

Я работаю с кнопками, для которых я использую свой собственный шейдер.это работает нормально, за исключением того, что Unity, похоже, отбрасывает / обрезает пиксели до того, как они попадут в мой шейдер.

мое изображение имеет прозрачную верхнюю и нижнюю трети.если я сделаю что-то вроде color = fixed4 (1,0,0,1);только средняя часть будет красной.и кнопка, и текстура имеют квадратную форму, и я вижу в окне сцены, что они расположены правильно.Любые идеи о том, как я могу запретить кнопке обрезать эти прозрачные пиксели?

шейдер ниже:

Shader "Custom/BlackTimerImage"
{
    Properties
    {
        [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
        _Color ("Tint", Color) = (1,1,1,1)


        [PerRendererData] _PercentComplete("Percent Complete", Float) = .2

        _ColorMask ("Color Mask", Float) = 15

        [Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip ("Use Alpha Clip", Float) = 0
    }

    SubShader
    {
        Tags
        {
            "Queue"="Transparent"
            "IgnoreProjector"="True"
            "RenderType"="Transparent"
            "PreviewType"="Plane"
            "CanUseSpriteAtlas"="True"
        }

        Cull Off
        Lighting Off
        ZWrite Off
        ZTest [unity_GUIZTestMode]
        Blend SrcAlpha OneMinusSrcAlpha

        Pass
        {
            Name "Default"
        CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"
            #include "UnityUI.cginc"

            //#pragma multi_compile __ UNITY_UI_ALPHACLIP

            struct appdata_t
            {
                float4 vertex   : POSITION;
                float4 color    : COLOR;
                float2 texcoord : TEXCOORD0;
                UNITY_VERTEX_INPUT_INSTANCE_ID
            };

            struct v2f
            {
                float4 vertex   : SV_POSITION;
                fixed4 color    : COLOR;
                float2 texcoord  : TEXCOORD0;
                float4 worldPosition : TEXCOORD1;
            };

            fixed4 _Color;
            fixed4 _TextureSampleAdd;
            float _PercentComplete;
            v2f vert(appdata_t v)
            {
                v2f OUT;
                OUT.worldPosition = v.vertex;
                OUT.vertex = UnityObjectToClipPos(OUT.worldPosition);

                OUT.texcoord = v.texcoord;

                OUT.color = v.color * _Color;
                return OUT;
            }

            sampler2D _MainTex;

            fixed4 frag(v2f IN) : SV_Target
            {
                half4 color = (tex2D(_MainTex, IN.texcoord) + _TextureSampleAdd) * IN.color;

                half2 up = float2(0, 1);
                half2 pixelRay = normalize(float2(.5-IN.texcoord.x, IN.texcoord.y-.5));
                float angle = (1-saturate((dot(up, pixelRay)+1) *.5))*.5;
                if (IN.texcoord.x < .5)
                {
                    angle = .5 + (.5 - angle);
                }

                if (angle > _PercentComplete) 
                {
                    color.rgb *= .5f;
                    if (color.a <= .10)
                    {
                        color.a = .5f;
                    }
                }

                return color;
            }
        ENDCG
        }
    }
}

1 Ответ

0 голосов
/ 17 февраля 2019

Для тех, у кого похожая проблема, я удалил компонент Image и добавил вместо него RawImage.Нет отсечения!

...