// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld' // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' Shader "Lit/Diffuse With Shadows" { Properties { } SubShader { Pass { name "DEPTH" // Render out *only depth information* // This allows us to just shade the items we want in the next pass Tags {"LightMode" = "Always"} ZWrite On ZTest LEqual ColorMask 0 CGPROGRAM #include "UnityCG.cginc" #pragma vertex vert #pragma fragment frag #pragma multi_compile_fwdadd_fullshadows nolightmap nodirlightmap nodynlightmap novertexlight struct v2f { float4 pos : SV_POSITION; }; v2f vert(appdata_base v) { v2f o; o.pos = UnityObjectToClipPos(v.vertex); return o; } fixed4 frag(v2f i) : SV_Target { return fixed4(0,0,0,0); } ENDCG } Pass { Name "FORWARD" // Point shadows happen in the Add pass of forward rendering Tags {"LightMode" = "ForwardAdd"} ZWrite Off ZTest Equal Blend SrcAlpha OneMinusSrcAlpha CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" #include "Lighting.cginc" #pragma multi_compile_fwdadd_fullshadows nolightmap nodirlightmap nodynlightmap novertexlight #include "AutoLight.cginc" struct v2f { float4 pos : SV_POSITION; float3 worldNormal:NORMAL; float3 worldPos:TEXTURE0; SHADOW_COORDS(1) // put shadows data into TEXCOORD1 }; v2f vert(appdata_base v) { v2f o; o.pos = UnityObjectToClipPos(v.vertex); o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; o.worldNormal = UnityObjectToWorldNormal(v.normal); TRANSFER_SHADOW(o) return o; } fixed4 frag(v2f i) : SV_Target { fixed shadow = SHADOW_ATTENUATION(i); float3 lightDir = normalize(i.worldPos - _WorldSpaceLightPos0.xyz); float nl = max(0, dot(i.worldNormal, -lightDir)); // only want nl if the dot produce is > 0 (anything facing the light) nl = 1 - step(nl, 0); float light = min(nl, shadow); return fixed4(light, light, light, 1 - light); } ENDCG } // shadow casting support UsePass "Legacy Shaders/VertexLit/SHADOWCASTER" } }