- Home /
How can I get shadows in a transparent Surface Shader?
I'm doing a shader that haves four texture channels and alpha blending. So far so good.
Now I want the object with this shader cast and receive dynamic shadows.
Up to now, I can only cast shadows.
Here's the code...
Shader "Reflective/BaseCubeBumpLightMaps" {
Properties {
_Color ("Main Color", Color) = (1, 1, 1, 1)
_ReflectColor ("Reflection Color", Color) = (1, 1, 1, 1)
_MainTex ("Base (RGB) RefStrength (A)", 2D) = "white" {}
_BumpMap ("Normalmap", 2D) = "bump" {}
_LightMap ("Lightmap (RGB)", 2D) = "black" {}
_Cube ("Reflection Cubemap", Cube) = "_Skybox" { TexGen CubeReflect }
}
SubShader {
// Tags { "Queue" = "Transparent" "RenderType"="Transparent"}
Tags { "Queue" = "Transparent" "RenderType"="Opaque"}
LOD 300
// Cull Off
Lighting On
CGPROGRAM
#pragma surface surf Lambert alpha addshadow
sampler2D _MainTex;
sampler2D _BumpMap;
sampler2D _LightMap;
samplerCUBE _Cube;
float4 _Color;
float4 _ReflectColor;
struct Input {
float2 uv_MainTex;
float2 uv_LightMap;
float3 worldRefl;
INTERNAL_DATA
};
void surf (Input IN, inout SurfaceOutput o) {
half4 tex = tex2D(_MainTex, IN.uv_MainTex);
half4 l = tex2D(_LightMap, IN.uv_LightMap);
half4 c = tex * _Color * l;
o.Albedo = c.rgb;
half4 reflcol = texCUBE (_Cube, IN.worldRefl) * _ReflectColor;
o.Alpha = _Color.a + (reflcol.a * _ReflectColor.a); // * c.a);
o.Emission = (reflcol.rgb * _ReflectColor.a); // * c.rgb;
o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_MainTex));
}
ENDCG
}
Fallback "VertexLit"
}
If I change "Queue" from "Transparent" to "Geometry", I can get shadows but I have polygon sort problems.
If I remove alpha from #pragma directive, the polygons are well sorted but I don't have alpha blending.
Please help!
Thanks
Did you find a solution for this? I ran in the same problem recently.
Have you tried using the tag "Queue"="AlphaTest" ins$$anonymous$$d of "Transparent" ?
You will loose the 'soft' transparency, but that's the only way of having shadow recieved by the object. In real-time rendering it's an extremely tricky thing to handle, and I'm pretty sure Unity doesn't. ( Other so-called "high-end" engines don't either )
Your answer
Follow this Question
Related Questions
Shadows with Alpha, fade out shadow. 2 Answers
How to get rid of this Bleeding in my baked scene? 1 Answer
2D Shadow Help 0 Answers
Transparent Diffuse Specular Normal Shader problem 1 Answer
Shader on Alpha Sprite issue 1 Answer