- Home /
Cant get Alpha Channel to Work with Custom Shader
Hey Guys
Im pretty new to Unity and still learning, so be gentle. Im currenty working through the brilliant hex map tutorial by Catlike Coding.
In part 1 we create our custom shader. Since Im planning to do something slightly different with my game I want to introduce transparency to my shader.
After trying to learn more about shaders with this tutorial, I have reduced my shader to this which still does the job:
Shader "Custom/VertexColors" {
SubShader{
Tags{ "RenderType" = "Opaque" }
CGPROGRAM
#pragma surface surf Standard fullforwardshadows
#pragma target 3.0
struct Input {
float4 color : COLOR;
};
void surf(Input IN, inout SurfaceOutputStandard o)
{
o.Albedo = IN.color;
}
ENDCG
}
FallBack "Diffuse"
}
I now want to add transparency to my shader. As I understand it if I want to change all cells to just be 50% transparent this should work:
Shader "Custom/VertexColors" {
SubShader{
Tags{ "RenderType" = "Transparent" }
CGPROGRAM
#pragma surface surf Standard fullforwardshadows
#pragma target 3.0
struct Input {
float4 color : COLOR;
};
void surf(Input IN, inout SurfaceOutputStandard o)
{
o.Albedo = IN.color;
o.Alpha = 0.5;
}
ENDCG
}
FallBack "Diffuse"
}
But of course, this doesnt change anything. I have been working on this for hours now. Really looking forward to your help.
Lucas
Answer by Namey5 · Nov 16, 2016 at 04:42 AM
Shader "Custom/VertexColors" {
SubShader{
Tags{ "RenderType" = "Transparent" }
CGPROGRAM
#pragma surface surf Standard fullforwardshadows alpha
#pragma target 3.0
struct Input {
float4 color : COLOR;
};
void surf(Input IN, inout SurfaceOutputStandard o)
{
o.Albedo = IN.color;
o.Alpha = 0.5;
}
ENDCG
}
FallBack "Diffuse"
}
You have to actually enable blending for transparency to happen in a shader. In your case, because you are using a surface shader, you can simply add the 'alpha' keyword to the surface declaration.
Thank you for you help. I already tried this and my mesh just disappears. But since I assumed your solution has to be correct, I just realized when I place an object behind the tiles, it seems to work. .
What do I have to change so that the tiles always render? I mean I also want them to render against the background.
best regards Lucas
//Change
Tags{ "RenderType" = "Transparent" }
//To
Tags{ "RenderType" = "Transparent" "Queue"="Transparent" }
Thank you again for your answer. Already tried that. Doesn't work. Doesn't change anything in fact. Are you sure it has to do with the order of compilation, and not something with the skybox? I mean I have absolutely no object in the back ground. I want the hex fields to render against the void basically.
best regards Lucas