Welp. This is the last problem I’ve been having with lighting in my game…
The following shader is what I use to make geometry “invisible”, but still take light and shadows. It works, but only partially: colored light sources still appear as white on the surface, and they don’t vary according to intensity of the light (unless the intensity is 0).
I will love you forever if you can fix it. And maybe I can send you a free copy of the game when it’s done, I don’t know if that’s allowed. >.>
Here’s the Unity shader code:
Shader "Custom/Matte Shadow" {
Properties {
_Color ("Main Color", Color) = (1,1,1,1)
_MainTex ("Base (RGB) Trans (A)", 2D) = "white" {}
_Cutoff ("Alpha cutoff", Range(0,1)) = 0.5
}
SubShader {
Tags {"Queue"="AlphaTest" "RenderType"="TransparentCutout"}
LOD 200
Blend Zero SrcColor
Offset 0, -1
CGPROGRAM
#pragma surface surf ShadowOnly alphatest:_Cutoff fullforwardshadows
fixed4 _Color;
struct Input {
float2 uv_MainTex;
};
inline fixed4 LightingShadowOnly (SurfaceOutput s, fixed3 lightDir, fixed atten) {
fixed4 c;
c.rgb = s.Albedo*atten;
c.a = s.Alpha;
return c;
}
void surf (Input IN, inout SurfaceOutput o) {
fixed4 c = _Color;
o.Albedo = c.rgb;
o.Alpha = 1.0f;
}
ENDCG
}
Fallback "Transparent/Cutout/VertexLit"
}