@@ -32,7 +32,7 @@ import { Vector4 } from '../../math/Vector4.js';
3232import { RenderTarget } from '../../core/RenderTarget.js' ;
3333import { DoubleSide , BackSide , FrontSide , SRGBColorSpace , NoToneMapping , LinearFilter , HalfFloatType , RGBAFormat , PCFShadowMap } from '../../constants.js' ;
3434
35- import { float , vec3 , vec4 } from '../../nodes/tsl/TSLCore.js' ;
35+ import { float , vec3 , vec4 , Fn } from '../../nodes/tsl/TSLCore.js' ;
3636import { reference } from '../../nodes/accessors/ReferenceNode.js' ;
3737import { highpModelNormalViewMatrix , highpModelViewMatrix } from '../../nodes/accessors/ModelNode.js' ;
3838import { context } from '../../nodes/core/ContextNode.js' ;
@@ -3035,12 +3035,13 @@ class Renderer {
30353035 const hasMap = material . map !== null ;
30363036 const hasColorNode = material . colorNode && material . colorNode . isNode ;
30373037 const hasCastShadowNode = material . castShadowNode && material . castShadowNode . isNode ;
3038+ const hasMaskNode = ( material . maskShadowNode && material . maskShadowNode . isNode ) || ( material . maskNode && material . maskNode . isNode ) ;
30383039
30393040 let positionNode = null ;
30403041 let colorNode = null ;
30413042 let depthNode = null ;
30423043
3043- if ( hasMap || hasColorNode || hasCastShadowNode ) {
3044+ if ( hasMap || hasColorNode || hasCastShadowNode || hasMaskNode ) {
30443045
30453046 let shadowRGB ;
30463047 let shadowAlpha ;
@@ -3071,6 +3072,20 @@ class Renderer {
30713072
30723073 colorNode = vec4 ( shadowRGB , shadowAlpha ) ;
30733074
3075+ if ( hasMaskNode ) {
3076+
3077+ const maskNode = material . maskShadowNode || material . maskNode ;
3078+
3079+ colorNode = Fn ( ( [ color ] ) => {
3080+
3081+ maskNode . not ( ) . discard ( ) ;
3082+
3083+ return color ;
3084+
3085+ } ) ( colorNode ) ;
3086+
3087+ }
3088+
30743089 }
30753090
30763091 if ( material . depthNode && material . depthNode . isNode ) {
0 commit comments