- Home /
Unity 5 transparency in custom shader
Hi,
i cannot seem to wrap my head around it since converting the project to unity 5 every transparency shader hasn't worked or got some weird background transparency on the trees.
Here's a pic from my grass billboard :
And here's the shader code for that grass billboard :
Shader "Partner/Billboard_alpha_to_coverage" {
Properties {
_Color ("Color", Color) = (1,1,1,1)
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_Brightness ("Brightness override", range (0,25.0)) = 0.0
}
SubShader
{
Tags {"Queue"="Transparent"}
LOD 200
Blend SrcAlpha OneMinusSrcAlpha
AlphaToMask On
Cull Off
CGPROGRAM
// Physically based Standard lighting model, and enable shadows on all light types
#pragma surface surf BlinnPhong alpha
//#pragma target 3.0
sampler2D _MainTex;
float _Brightness;
struct Input {
float2 uv_MainTex;
};
fixed4 _Color;
void surf (Input IN, inout SurfaceOutput o) {
// Albedo comes from a texture tinted by color
fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
o.Albedo = c.rgb * _Brightness;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}
I've just tried your shader and it seems to work fine. Have you checked the texture import settings? maybe you need to play around with that.
Answer by sjpt · Jan 10, 2016 at 07:22 AM
You probably need to add a tag "RenderType" = "Transparent" That said, I can't get transparency to work even with that ....
$$anonymous$$ine (see my earlier comment) wasn't working because I'd forgotten the alpha on the #pragma (Original poster had that right) There is a lot that has to be just so to get transparency working in Unity.
Working now (except that alpha=1 doesn't behave like opaque. I'll experiment with Zwrite and blending modes when I get the chance.
using the "alpha" options merely adds: Blend SrcAlpha One$$anonymous$$inusSrcAlpha to the compiled shader code, it doesn't matter which alpha:blend, alpha:fade or just alpha, it all ends up with the above... that means that we cannot use Blend SrcAlpha One or other options stated in the documents, it is a bug, they should fix it... Of course you can write your own vertex/fragment shaders but as far as I know, surface shaders completely ignore your Blend options in Unity 5( in Unity 4 you could actually just use Blend options, it would work, but the Unity 5 surface shader compiler seems to ignore you)