@@ -88,6 +88,8 @@ public virtual AlphaMode AlphaMode
8888 {
8989 _material . SetOverrideTag ( "RenderType" , "TransparentCutout" ) ;
9090 _material . SetFloat ( "_Mode" , 1 ) ;
91+ _material . SetFloat ( "_SurfaceType" , 0 ) ;
92+
9193 _material . SetInt ( "_SrcBlend" , ( int ) BlendMode . One ) ;
9294 _material . SetInt ( "_DstBlend" , ( int ) BlendMode . Zero ) ;
9395 _material . SetInt ( "_BUILTIN_SrcBlend" , ( int ) BlendMode . One ) ;
@@ -114,6 +116,8 @@ public virtual AlphaMode AlphaMode
114116 {
115117 _material . SetOverrideTag ( "RenderType" , "Transparent" ) ;
116118 _material . SetFloat ( "_Mode" , 2 ) ;
119+ _material . SetFloat ( "_SurfaceType" , 1 ) ;
120+
117121 _material . SetInt ( "_SrcBlend" , ( int ) BlendMode . SrcAlpha ) ;
118122 _material . SetInt ( "_DstBlend" , ( int ) BlendMode . OneMinusSrcAlpha ) ;
119123 _material . SetInt ( "_BUILTIN_SrcBlend" , ( int ) BlendMode . SrcAlpha ) ;
@@ -139,6 +143,7 @@ public virtual AlphaMode AlphaMode
139143 {
140144 _material . SetOverrideTag ( "RenderType" , "Opaque" ) ;
141145 _material . SetFloat ( "_Mode" , 0 ) ;
146+ _material . SetFloat ( "_SurfaceType" , 0 ) ;
142147 _material . SetInt ( "_SrcBlend" , ( int ) BlendMode . One ) ;
143148 _material . SetInt ( "_DstBlend" , ( int ) BlendMode . Zero ) ;
144149 _material . SetInt ( "_BUILTIN_SrcBlend" , ( int ) BlendMode . One ) ;
@@ -154,6 +159,8 @@ public virtual AlphaMode AlphaMode
154159 _material . DisableKeyword ( "_BUILTIN_ALPHABLEND_ON" ) ;
155160 _material . DisableKeyword ( "_BUILTIN_ALPHAPREMULTIPLY_ON" ) ;
156161 _material . renderQueue = ( int ) RenderQueue . Geometry ;
162+
163+ SetShaderModeOpaque ( _material ) ;
157164 }
158165
159166 _alphaMode = value ;
@@ -218,6 +225,29 @@ protected void SetAlphaModeMask(Material material, bool isMask) {
218225 const string k_ShaderPassRayTracingPrepass = "RayTracingPrepass" ;
219226 const string k_ShaderPassDepthOnlyPass = "DepthOnly" ;
220227
228+ protected void SetShaderModeOpaque ( Material material )
229+ {
230+ material . SetOverrideTag ( TAG_RENDER_TYPE , TAG_RENDER_TYPE_OPAQUE ) ;
231+ material . DisableKeyword ( KW_SURFACE_TYPE_TRANSPARENT ) ;
232+ material . DisableKeyword ( KW_SURFACE_TYPE_TRANSPARENT_BUILTIN ) ;
233+ material . DisableKeyword ( KW_DISABLE_SSR_TRANSPARENT ) ;
234+ material . DisableKeyword ( KW_ENABLE_FOG_ON_TRANSPARENT ) ;
235+ material . DisableKeyword ( KW_ALPHACLIP_ON_BUILTIN ) ;
236+ material . SetShaderPassEnabled ( k_ShaderPassTransparentDepthPrepass , true ) ;
237+ material . SetShaderPassEnabled ( k_ShaderPassTransparentDepthPostpass , true ) ;
238+ material . SetShaderPassEnabled ( k_ShaderPassTransparentBackface , true ) ;
239+ material . SetShaderPassEnabled ( k_ShaderPassRayTracingPrepass , true ) ;
240+ material . SetShaderPassEnabled ( k_ShaderPassDepthOnlyPass , true ) ;
241+ material . SetFloat ( srcBlendPropId , ( int ) BlendMode . One ) ;
242+ material . SetFloat ( dstBlendPropId , ( int ) BlendMode . Zero ) ;
243+ material . SetFloat ( k_ZTestGBufferPropId , ( int ) CompareFunction . LessEqual ) ; //4
244+ material . SetFloat ( k_AlphaDstBlendPropId , ( int ) BlendMode . Zero ) ;
245+ material . SetFloat ( k_Surface , 0 ) ;
246+ material . SetFloat ( k_SurfaceBuiltin , 0 ) ;
247+ material . SetFloat ( zWritePropId , 1 ) ;
248+ material . SetFloat ( alphaToMask , 0 ) ;
249+ }
250+
221251 protected void SetShaderModeBlend ( Material material )
222252 {
223253 material . SetOverrideTag ( TAG_RENDER_TYPE , TAG_RENDER_TYPE_TRANSPARENT ) ;
0 commit comments