Hello everyone!
I have a custom shader with shadows. The main problem which I have a shadow distance rendering. Please take a look at the image below:
As we can see, in the default mobile/diffuse shader shadows ends smoothly. Is it possible to achieve the same effect in the custom shader? Maybe someone is able to give me some help in this.
Here is the shader which I’m using:
Shader "Test/Mobile Diffuse Colored"
{
SubShader
{
Pass
{
Tags {"LightMode"="ForwardBase"}
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
#include "Lighting.cginc"
// compile shader into multiple variants, with and without shadows
// (we don't care about any lightmaps yet, so skip these variants)
#pragma multi_compile_fwdbase nolightmap nodirlightmap nodynlightmap novertexlight
#pragma multi_compile_fog
// shadow helper functions and macros
#include "AutoLight.cginc"
struct v2f
{
SHADOW_COORDS(1) // put shadows data into TEXCOORD1
UNITY_FOG_COORDS(2)
fixed3 diff : COLOR0;
fixed3 color : TEXCOORD2;
fixed3 ambient : COLOR1;
fixed4 pos : SV_POSITION;
};
v2f vert (appdata_full v)
{
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
o.color = v.color;
fixed3 worldNormal = UnityObjectToWorldNormal(v.normal);
fixed nl = max(0, dot(worldNormal, _WorldSpaceLightPos0.xyz));
o.diff = nl * _LightColor0.rgb;
o.ambient = ShadeSH9(fixed4(worldNormal,1));
// compute shadows data
TRANSFER_SHADOW(o)
TRANSFER_VERTEX_TO_FRAGMENT(o);
UNITY_TRANSFER_FOG(o, o.pos);
return o;
}
fixed4 frag (v2f v) : COLOR
{
fixed4 col;
// compute shadow attenuation (1.0 = fully lit, 0.0 = fully shadowed)
fixed shadow = SHADOW_ATTENUATION(v);
// darken light's illumination with shadow, keep ambient intact
fixed3 lighting = v.diff * shadow + v.ambient;
col.rgb = lighting;
col.rgb *= v.color;
UNITY_APPLY_FOG(v.fogCoord, col);
return col;
}
ENDCG
}
// shadow casting support
UsePass "VertexLit/SHADOWCASTER"
}
}
Thank you for any response.