- Home /
Missing shadows on custom steppedAtten shader
Hey peeps, I've been using a Stepped Attenuation shader I found on a Polycount forum which tries to emulate the look of Kentucky Route Zero. The shader works perfectly except for the fact that it doesn't seem to cast or receive shadows from Point and Spot lights, Direct lights work fine however.
Unfortunately said forum has been dead for a while so they can't help me. I have searched these forums and the extended web for quite a while now and haven't come across a fix or alternative shader. I'm afraid i'm not so hot on shader languages yet so the problem may be blindingly obvious, apologies if it is. Thanks in advance to anyone who can help! :)
Just to save you guys abit of time these are some things ive already tried.
• Project is already set to forward rendering
• Bumping up Quality and priority doesn't help
• I am using Fallback "Diffuse"
• I've tried including both fullforwardshadows and addshadow in pragma
Here's the shader:
Shader "SteppedAttenuationShader" {
Properties {
_MainTex ("Texture", 2D) = "white" {}
_Color ("Color", Color) = (1,1,1,1)
_LightCutoff("Maximum distance", Float) = 2.0
_Steps ("Gradient steps", Float) = 5.0
}
SubShader {
Tags { "RenderType" = "Opaque" }
CGPROGRAM
#pragma surface surf WrapLambert fullforwardshadows addshadow
#pragma target 3.0
#include "AutoLight.cginc"
uniform float _LightCutoff;
uniform float _Steps;
half4 LightingWrapLambert (SurfaceOutput s, half3 lightDir, half atten) {
half NdotL = dot (s.Normal, lightDir);
half d = (dot (s.Normal, lightDir)*0.5 + 0.5) * atten;
atten = step(_LightCutoff, atten) * atten;
_Steps = int(_Steps);
atten = int(atten * _Steps) / float(_Steps);
atten = atten < 1 - _LightCutoff ? 0 : atten;
atten = atten * 2;
half vMax = (max(max(s.Albedo.r, s.Albedo.g), s.Albedo.b));
half3 colorAdjust = vMax > 0 ? s.Albedo / vMax : 1;
half4 c;
c.rgb = _LightColor0.rgb * atten * colorAdjust;
c.a = s.Alpha;
return c;
}
struct Input {
float2 uv_MainTex;
};
sampler2D _MainTex;
half4 _Color;
void surf (Input IN, inout SurfaceOutput o) {
o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb * _Color;
}
ENDCG
}
Fallback "Diffuse"
}