- Home /
Other
Abnormal behavior issues in Unity uGUI Alpha Mask Shader
Used Unity version is 2018.1.0f2.
Shader code is a simple code that only applies alpha by adding mask texture to code generated by Unity.
Code (Shader):
Shader "UI/Masking"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_MaskTex ("Texture", 2D) = "white" {}
}
SubShader
{
// No culling or depth
Blend SrcAlpha OneMinusSrcAlpha
Cull Off ZWrite Off ZTest Always
tags { "Queue" = "Transparent" }
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
};
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
return o;
}
sampler2D _MainTex;
sampler2D _MaskTex;
fixed4 frag (v2f i) : SV_Target
{
fixed4 col = tex2D(_MainTex, i.uv);
fixed4 mask = tex2D(_MaskTex, i.uv);
// fixed4 result = col.rgb
col.a = mask.a;
// just invert the colors
// col.rgb = 1 - col.rgb;
return col;
}
ENDCG
}
}
}
The Editor View it works just as well as the picture (upload picture name - Image_1).
If you play a Unity, the Alpha area changes (upload picture name - Image_2).
I've tested it and found that the cause of the problem
Image contained in SpriteAtlas provided by Unity
It happens when used.
Am I doing something wrong with the Atlas setting? (upload picture name - Image_3)
Follow this Question
Related Questions
Change UI shader property at runtime 1 Answer
Fresnel shader on raw image 0 Answers
Access UI Image Color in Shader 2 Answers
RenderTexture on RawImage does not render anything 1 Answer
uGUI Image without transparency/ opaque render queue 0 Answers