我有以下着色器,基于我多年前创建的着色器处理进度条类型对象,类似于Alpha Cutoff,但有一些更改。
其中一项更改是允许着色器在UI [HideInInspector]
上正常运行的一系列Images
属性。但是,ColorMask
属性(部分负责ScrollRect查看屏蔽区域之外的剪切对象)会导致材料在其值更改时无法正确更新。
如果删除_ColorMask
属性(和ColorMask[_ColorMask]
),则会发生这种情况:
Shader "Unlit/AlphaCutoffAA_UI" {
Properties {
_MainTex ("Base (RGB)", 2D) = "white" {}
_Color("Color Multiplier", Color) = (1, 1, 1, 1) // color
_Cutoff ("Cutoff", Range(0,1)) = 0.5
_Blend ("Blend Range", Range(0,.2)) = 0.1
[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8
[HideInInspector]_Stencil("Stencil ID", Float) = 1
[HideInInspector]_StencilOp("Stencil Operation", Float) = 0
[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255
[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255
[HideInInspector]_ColorMask("Color Mask", Float) = 15 //adding this breaks everything
}
SubShader {
Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="TransparentCutout"}
Blend SrcAlpha OneMinusSrcAlpha
LOD 100
Lighting Off
Stencil
{
Ref[_Stencil]
Comp[_StencilComp]
Pass[_StencilOp]
ReadMask[_StencilReadMask]
WriteMask[_StencilWriteMask]
}
ColorMask[_ColorMask]
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata_t {
float4 vertex : POSITION;
float2 texcoord : TEXCOORD0;
};
struct v2f {
float4 vertex : SV_POSITION;
half2 texcoord : TEXCOORD0;
};
sampler2D _MainTex;
float4 _MainTex_ST;
fixed _Cutoff;
fixed _Blend;
float4 _Color;
v2f vert (appdata_t v)
{
v2f o;
o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);
return o;
}
fixed4 frag (v2f i) : COLOR
{
fixed4 col = tex2D(_MainTex, i.texcoord);
if(col.a < _Cutoff) {
col.a = 0;
}
else if (col.a == 1) {
col.a = 1.0;
}
else if(col.a < _Cutoff + _Blend) {
col.a = (col.a - _Cutoff + (_Blend/100)) / _Blend;
}
else {
col.a = 1.0;
}
col.r *= _Color.r;
col.g *= _Color.g;
col.b *= _Color.b;
col.a *= _Color.a;
return col;
}
ENDCG
}
}
}
我该如何解决这个问题?