Pass { Name "ShadowCaster" Tags{"LightMode" = "ShadowCaster"} ZWrite On ZTest LEqual // Material options generated by graph ${Culling} HLSLPROGRAM // Required to compile gles 2.0 with standard srp library #pragma prefer_hlslcc gles #pragma exclude_renderers d3d11_9x #pragma target 2.0 //-------------------------------------- // GPU Instancing #pragma multi_compile_instancing #pragma vertex ShadowPassVertex #pragma fragment ShadowPassFragment // Defines generated by graph ${Defines} #include "LWRP/ShaderLibrary/Core.hlsl" #include "LWRP/ShaderLibrary/Lighting.hlsl" #include "ShaderGraphLibrary/Functions.hlsl" #include "CoreRP/ShaderLibrary/Color.hlsl" ${Graph} struct VertexOutput { float2 uv : TEXCOORD0; float4 clipPos : SV_POSITION; }; // x: global clip space bias, y: normal world space bias float4 _ShadowBias; float3 _LightDirection; VertexOutput ShadowPassVertex(GraphVertexInput v) { VertexOutput o; UNITY_SETUP_INSTANCE_ID(v); // Vertex transformations performed by graph ${VertexShader} VertexDescriptionInputs vdi = (VertexDescriptionInputs)0; // Vertex description inputs defined by graph ${VertexShaderDescriptionInputs} VertexDescription vd = PopulateVertexData(vdi); v.vertex.xyz = vd.Position; o.uv = uv1; float3 positionWS = TransformObjectToWorld(v.vertex.xyz); float3 normalWS = TransformObjectToWorldDir(v.normal); float invNdotL = 1.0 - saturate(dot(_LightDirection, normalWS)); float scale = invNdotL * _ShadowBias.y; // normal bias is negative since we want to apply an inset normal offset positionWS = normalWS * scale.xxx + positionWS; float4 clipPos = TransformWorldToHClip(positionWS); // _ShadowBias.x sign depens on if platform has reversed z buffer clipPos.z += _ShadowBias.x; #if UNITY_REVERSED_Z clipPos.z = min(clipPos.z, clipPos.w * UNITY_NEAR_CLIP_VALUE); #else clipPos.z = max(clipPos.z, clipPos.w * UNITY_NEAR_CLIP_VALUE); #endif o.clipPos = clipPos; return o; } half4 ShadowPassFragment() : SV_TARGET { return 0; } ENDHLSL } Pass { Name "DepthOnly" Tags{"LightMode" = "DepthOnly"} ZWrite On ColorMask 0 // Material options generated by graph ${Culling} HLSLPROGRAM // Required to compile gles 2.0 with standard srp library #pragma prefer_hlslcc gles #pragma exclude_renderers d3d11_9x #pragma target 2.0 //-------------------------------------- // GPU Instancing #pragma multi_compile_instancing #pragma vertex vert #pragma fragment frag // Defines generated by graph ${Defines} #include "LWRP/ShaderLibrary/Core.hlsl" #include "LWRP/ShaderLibrary/Lighting.hlsl" #include "ShaderGraphLibrary/Functions.hlsl" #include "CoreRP/ShaderLibrary/Color.hlsl" ${Graph} struct VertexOutput { float2 uv : TEXCOORD0; float4 clipPos : SV_POSITION; }; VertexOutput vert(GraphVertexInput v) { VertexOutput o = (VertexOutput)0; UNITY_SETUP_INSTANCE_ID(v); // Vertex transformations performed by graph ${VertexShader} VertexDescriptionInputs vdi = (VertexDescriptionInputs)0; // Vertex description inputs defined by graph ${VertexShaderDescriptionInputs} VertexDescription vd = PopulateVertexData(vdi); v.vertex.xyz = vd.Position; o.uv = uv1; o.clipPos = TransformObjectToHClip(v.vertex.xyz); return o; } half4 frag() : SV_TARGET { return 0; } ENDHLSL }