zwriteが別パスになってるのはsurfがコンパイル時にZWrite Offで上書きしてしまうため
Shader "Custom/SurfBase" { Properties { [Enum(UnityEngine.Rendering.CullMode)] _Cull("Cull", Float) = 2 // Off [Enum(UnityEngine.Rendering.CompareFunction)] _ZTest("ZTest", Float) = 4 // LEqual [Enum(Off, 0, On, 1)] _ZWrite("ZWrite", Float) = 1 _MainTex ("Texture", 2D) = "white" {} [HDR] _Color("Color",Color) = (1,1,1,1) _NormalTex ("Normal Tex", 2D) = "bump" {} _NormalPow ("Normal Pow", Range(0, 1)) = 1 [HDR] _Emission("Emission",Color) = (0,0,0,0) _Smoothness ("Smoothness", Range(0,1)) = 0.5 _Metallic ("Metallic", Range(0,1)) = 0.0 _Occlusion ("Occlusion",Range(0,1)) = 1 //ステンシル _StencilRef("StencilRef",Float) = 0 [Enum(UnityEngine.Rendering.StencilOp)] _StencilPass("StencilPass",Float) = 0 //https://docs.unity3d.com/ScriptReference/Rendering.CompareFunction.html [Enum(UnityEngine.Rendering.CompareFunction)] _StencilComp("StencilComp",Float) = 0 } SubShader { Pass{ ColorMask 0 ZWrite [_ZWrite] } Tags { "Queue" = "Transparent" } Cull [_Cull] ZTest [_ZTest] Stencil{ Ref [_StencilRef] Comp [_StencilComp] Pass [_StencilPass] } //surfにおいては機能しないっっぽいのでコメントアウト CGPROGRAM #pragma surface surf Standard fullforwardshadows alpha:fade vertex:vert #pragma target 3.0 struct Input { float2 uv_MainTex; float dammy_val; /* float3 viewDir; float4 screenPos; float3 worldPos; float3 worldNormal; */ }; sampler2D _MainTex; float4 _Color; sampler2D _NormalTex; float _NormalPow; float4 _Emission; float _Smoothness; float _Metallic; float _Occlusion; void vert (inout appdata_full v,out Input o) { //初期化 UNITY_INITIALIZE_OUTPUT(Input, o); o.dammy_val = 1; } void surf (Input IN, inout SurfaceOutputStandard o) { float4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color; o.Albedo = c.rgb; o.Emission = _Emission; o.Smoothness = _Smoothness; o.Metallic = _Metallic; o.Occlusion = _Occlusion; o.Alpha = c.a; o.Normal = UnpackScaleNormal(tex2D(_NormalTex, IN.uv_MainTex), _NormalPow); } ENDCG } Fallback "Diffuse" }