I actually got it working with this shader, this works on everything with the scene, no need for setting any render queues.
I made this in Strumpy Shader Editor, seeing as I don't have too much shader writing experience. All I had to do was turn off the RGBA on the color mask, set render queue to Geometry -10, and check the advanced shadows pass box (which adds in the bit below that renders after the final pass.)
Shader "DepthMask/Mask" { Properties { } SubShader { Tags { "Queue"="Geometry-10" "IgnoreProjector"="False" "RenderType"="Opaque" } Cull Back ZWrite On ZTest LEqual ColorMask 0 Fog{ } CGPROGRAM #pragma surface surf BlinnPhongEditor addshadow vertex:vert #pragma target 2.0 struct EditorSurfaceOutput { half3 Albedo; half3 Normal; half3 Emission; half3 Gloss; half Specular; half Alpha; half4 Custom; }; inline half4 LightingBlinnPhongEditor_PrePass (EditorSurfaceOutput s, half4 light) { half3 spec = light.a * s.Gloss; half4 c; c.rgb = (s.Albedo * light.rgb + light.rgb * spec); c.a = s.Alpha; return c; } inline half4 LightingBlinnPhongEditor (EditorSurfaceOutput s, half3 lightDir, half3 viewDir, half atten) { half3 h = normalize (lightDir + viewDir); half diff = max (0, dot ( lightDir, s.Normal )); float nh = max (0, dot (s.Normal, h)); float spec = pow (nh, s.Specular*128.0); half4 res; res.rgb = _LightColor0.rgb * diff; res.w = spec * Luminance (_LightColor0.rgb); res *= atten * 2.0; return LightingBlinnPhongEditor_PrePass( s, res ); } struct Input { float4 color : COLOR; }; void vert (inout appdata_full v, out Input o) { float4 VertexOutputMaster0_0_NoInput = float4(0,0,0,0); float4 VertexOutputMaster0_1_NoInput = float4(0,0,0,0); float4 VertexOutputMaster0_2_NoInput = float4(0,0,0,0); float4 VertexOutputMaster0_3_NoInput = float4(0,0,0,0); } void surf (Input IN, inout EditorSurfaceOutput o) { o.Normal = float3(0.0,0.0,1.0); o.Alpha = 1.0; o.Albedo = 0.0; o.Emission = 0.0; o.Gloss = 0.0; o.Specular = 0.0; o.Custom = 0.0; float4 Master0_0_NoInput = float4(0,0,0,0); float4 Master0_1_NoInput = float4(0,0,1,1); float4 Master0_2_NoInput = float4(0,0,0,0); float4 Master0_3_NoInput = float4(0,0,0,0); float4 Master0_4_NoInput = float4(0,0,0,0); float4 Master0_5_NoInput = float4(1,1,1,1); float4 Master0_7_NoInput = float4(0,0,0,0); float4 Master0_6_NoInput = float4(1,1,1,1); o.Normal = normalize(o.Normal); } ENDCG } Fallback "Diffuse" }