精灵消失了着色器

时间:2017-03-27 04:51:01

标签: unity3d 2d shader sprite material

我正在开发Unity 2D平台游戏。 我正在使用着色器找到here,但是当我翻转我的精灵(比例-1)时, 精灵消失了,我对着色器编码了解不多, 我没有在谷歌上找到任何帮助,任何人都可以帮助修复着色器吗? 这是着色器:

Properties {
    [PerRendererData] _MainTex ("Main texture", 2D) = "white" {}
    _DissolveTex ("Dissolution texture", 2D) = "gray" {}
    _Threshold ("Threshold", Range(0., 1.01)) = 0.
}

SubShader {

    Tags { "Queue"="Transparent" }
    Blend SrcAlpha OneMinusSrcAlpha

    Pass {

        CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag

        #include "UnityCG.cginc"

        struct v2f {
            float4 pos : SV_POSITION;
            float2 uv : TEXCOORD0;
        };

        sampler2D _MainTex;

        v2f vert(appdata_base v) {
            v2f o;
            o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
            o.uv = v.texcoord;
            return o;
        }

        sampler2D _DissolveTex;
        float _Threshold;

        fixed4 frag(v2f i) : SV_Target {
            float4 c = tex2D(_MainTex, i.uv);
            float val = tex2D(_DissolveTex, i.uv).r;

            c.a *= step(_Threshold, val);
            return c;
        }
        ENDCG
    }
}

1 个答案:

答案 0 :(得分:1)

精灵呈现为一个矩形,其中两个三角形为索引顺序:顺时针。

您可以将着色模式更改为着色线框以进行检查。wireframe

如果你翻转精灵(比例-1),精灵的两个三角形将变为逆时针。并且,GPU不会呈现逆时针三角形。这就是你的精灵消失的原因。另请参阅what is a clockwise face in openGL

如果您想要查看精灵,即使它被翻转,您也可以

  1. 创建两个具有相同纹理的精灵:正常纹理和翻转纹理:

    MySprite
     |--Normal
     |--Flipped (scaled -1)
    

    然后,将MySprite GameObject缩放为-1。

  2. 关闭着色器中的背面剔除。

    只需将Cull Off添加到子播放器即可。另请参阅this

    SubShader {
    
        Tags { "Queue"="Transparent" }
        Blend SrcAlpha OneMinusSrcAlpha
    
        Pass {
        Cull Off
        ...