Unity Stencil Shader показал белый цвет вместо прозрачного, когда не рендеринг - PullRequest
0 голосов
/ 07 марта 2020

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

Код ниже:

Shader "Custom/FractionShader"
{
    SubShader
    {
        Tags { "RenderType"="Opaque" "Queue" = "Geometry"}
        LOD 200
        Pass{
            ZTest Always
            Stencil{
                Ref 2
                Comp Equal
                Pass DecrWrap
                Fail IncrWrap
            }
        }
        Pass {
            ZTest Always
            Stencil {
                Ref 1
                Comp Equal
            }
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            struct appdata {
                float4 vertex : POSITION;
            };
            struct v2f {
                float4 pos : SV_POSITION;
            };
            v2f vert(appdata v) {
                v2f o;
                o.pos = UnityObjectToClipPos(v.vertex);
                return o;
            }
            half4 frag(v2f i) : SV_Target {
                return half4(0,0,0,1);
            }
            ENDCG
        }
    }
}
...