当对象被轴反转时着色器不起作用
Shader doesn't work when object is inverted by axis
我有一个简单的着色器,可以模仿 "Filled" SpriteRenderer 的图像类型。它允许根据填充量截断部分精灵。
但是,如果对象被任何轴反转(无论是通过旋转、缩放还是 SpriteRenderer 上的 "Flip" 复选框反转),着色器都不起作用。
当 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
}
}
}
我该如何解决这个问题?
看起来脸在翻转后变成 "back-facing" 并被剔除。尝试通过在 Blend SrcAlpha OneMinusSrcAlpha
.
之后添加 Cull Off
来禁用剔除
我有一个简单的着色器,可以模仿 "Filled" SpriteRenderer 的图像类型。它允许根据填充量截断部分精灵。 但是,如果对象被任何轴反转(无论是通过旋转、缩放还是 SpriteRenderer 上的 "Flip" 复选框反转),着色器都不起作用。 当 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
}
}
}
我该如何解决这个问题?
看起来脸在翻转后变成 "back-facing" 并被剔除。尝试通过在 Blend SrcAlpha OneMinusSrcAlpha
.
Cull Off
来禁用剔除