当物体被轴反转时,着色器不起作用

时间:2017-12-27 14:43:48

标签: unity3d shader fragment-shader

我有一个简单的着色器,模仿"填充" SpriteRenderer的图像类型。它允许根据它的填充量切断部分精灵。 但是如果Object被任何轴反转,则着色器不起作用(无论是通过旋转,缩放还是"翻转" SpriteRenderer上的复选框)。 当Object被反转时,Sprite根本就不被绘制。

着色器:

Shader "Custom/ProgressShaderUpToDown" {
Properties{
    _MainTex("Base (RGB)", 2D) = "white" {}
    _Progress("Progress (Float)", Float) = 0
    _Color("Tint", Color) = (1.0, 0.6, 0.6, 1.0)
}

SubShader{
    Tags{ "Queue" = "Transparent" }
    Pass{
    Blend SrcAlpha OneMinusSrcAlpha
    CGPROGRAM
    #pragma vertex vert_img
    #pragma fragment frag

    #include "UnityCG.cginc"

uniform sampler2D _MainTex;
uniform float _Progress;
uniform fixed4 _Color;

    float4 frag(v2f_img i) : COLOR
    {
        float4 result = tex2D(_MainTex, i.uv);

        if (i.uv.y > _Progress)
        {
            result.a = 0;
        }

        return result*_Color;
    }
        ENDCG
    }
}
}

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

看起来像脸变成"背面"被翻转后被剔除。尝试在Blend SrcAlpha OneMinusSrcAlpha之后添加import struct data = [39, 39, 126, 126, 256, 258, 260, 259, 257, 126] encoded = struct.pack(">{}H".format(len(data)), *data) tmp = struct.pack(">H", len(data)) encoded = tmp + encoded #appending at the start begin = 2 try: size = struct.unpack(">H", encoded[0:begin])[0] print(size) print(struct.unpack(">{}H".format(size), encoded[begin:])) except Exception as e: print(e) 来禁用剔除。