Hey, I am doing some shaders using alphaTest and I must say I ran into some weird stuff. 1- Shader with no prepass in deferred rendering path The object will have it's cutout parts rendered in black if the shader has a property _Color (even if it's not used). Note: Same effect if the _Cutoff property is named something else. The Shader: Code (CSharp): Shader "Custom/AlphaTest" { Properties { _Color ("MainColor",Color) = (0,0,0,0) _MainTex ("Base (RGB)", 2D) = "white" {} _DisolveTex("Disolve Texture", 2D) = "white" {} _Cutoff("Disolve Power",Range(0,1)) = 0 } SubShader { Tags { "Queue"="AlphaTest" "IgnoreProjector"="True" "RenderType"="TransparentCutout" } LOD 200 CGPROGRAM #pragma surface surf Lambert exclude_path:prepass alphatest:Zero sampler2D _MainTex; sampler2D _DisolveTex; float _Cutoff; struct Input { float2 uv_MainTex; }; void surf (Input IN, inout SurfaceOutput o) { fixed3 tex = tex2D (_MainTex, IN.uv_MainTex); fixed alpha = tex2D (_DisolveTex, IN.uv_MainTex).r; o.Albedo = tex; o.Alpha = alpha - _Cutoff; } ENDCG } FallBack "Diffuse" } The look (a bit hard to see but the black part is not the space background, it's just black): 2- Same Shader, no _Color no prepass the shader doesn't write to the zbuffer as soon as the _Cutoff property is not equal to 0. so post effects like DOF will break. Adding a _Color property will break alpha test but it will write in Z again. Why isn't there any documentation on this and why do these variable have ( or not ) to be there with that exact name?!