- Home /
How to use AlphaTest with a CGPROGRAM
I've used AlphaTest Greater 0
as an 'Alpha Cutoff' type of effect for a shader I'm using (Because I need ZWrite On
), however when I try to implement a CGPROGRAM to add a Tint over my texture, it seems to be overriding the AlphaTest.
The result looks like so:
But I want it to look like this:
I've just used the Sprite-Default.shader from unity to add the Color tint. I'm obviously a rookie with this, and I'd like to understand whats going on. Any help would be great!
And here is my Shader as it currently stands:
Shader "Unlit/planetDefault" {
Properties
{
_MainTex ("Base", 2D) = "white" {}
_Color ("Tint", Color) = (1,1,1,1)
}
SubShader
{
Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Opaque"}
LOD 200
Cull Off
ZWrite On
Blend SrcAlpha OneMinusSrcAlpha
AlphaTest Greater 0
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile _ PIXELSNAP_ON
#include "UnityCG.cginc"
struct appdata_t
{
float4 vertex : POSITION;
float4 color : COLOR;
float2 texcoord : TEXCOORD0;
};
struct v2f
{
float4 vertex : SV_POSITION;
fixed4 color : COLOR;
float2 texcoord : TEXCOORD0;
};
fixed4 _Color;
v2f vert(appdata_t IN)
{
v2f OUT;
OUT.vertex = UnityObjectToClipPos(IN.vertex);
OUT.texcoord = IN.texcoord;
OUT.color = IN.color * _Color;
#ifdef PIXELSNAP_ON
OUT.vertex = UnityPixelSnap (OUT.vertex);
#endif
return OUT;
}
sampler2D _MainTex;
sampler2D _AlphaTex;
float _AlphaSplitEnabled;
fixed4 SampleSpriteTexture (float2 uv)
{
fixed4 color = tex2D (_MainTex, uv);
#if UNITY_TEXTURE_ALPHASPLIT_ALLOWED
if (_AlphaSplitEnabled)
color.a = tex2D (_AlphaTex, uv).r;
#endif //UNITY_TEXTURE_ALPHASPLIT_ALLOWED
return color;
}
fixed4 frag(v2f IN) : SV_Target
{
fixed4 c = SampleSpriteTexture (IN.texcoord) * IN.color;
c.rgb *= c.a;
return c;
}
ENDCG
Lighting Off
SetTexture [_MainTex]
{
Combine texture
}
}
}
}
Answer by losingisfun · May 30, 2019 at 05:19 AM
I've just tracked this down. Because i'm using a Unity Particle System, there is apparently a known issue with particles rendering incorrectly (something to do with the Depth Buffer I guess?) where any particle in front of the particle system's transform.position isn't rendering correctly because the Z wont go below 0.
Your answer
Follow this Question
Related Questions
Flat Shading / No Vertex Interpolation 2 Answers
Unity 3d Sprite Shader (How do I limit Max Brightness to 1 with Multiple Lights Hitting) 0 Answers
How i get unity linear fog start and end values in shaderlab. 1 Answer
Shader: 1 Base Texture Overlaid by 1 Transparent Texture. 0 Answers
Addition to Standard Shader stopping it from batching? 0 Answers