From 40725b15d5e280fa149bd6295e3d545866465f1a Mon Sep 17 00:00:00 2001 From: Renaud Rohlinger Date: Tue, 16 Apr 2024 22:19:51 +0900 Subject: [PATCH 1/5] fix receive shadow and introduce shadowPositionNode --- examples/jsm/nodes/lighting/AnalyticLightNode.js | 11 ++++++++--- examples/jsm/nodes/materials/NodeMaterial.js | 2 ++ examples/jsm/renderers/common/ClippingContext.js | 2 +- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/examples/jsm/nodes/lighting/AnalyticLightNode.js b/examples/jsm/nodes/lighting/AnalyticLightNode.js index 3114cdcacb36a9..6c22c25c79483b 100644 --- a/examples/jsm/nodes/lighting/AnalyticLightNode.js +++ b/examples/jsm/nodes/lighting/AnalyticLightNode.js @@ -54,6 +54,9 @@ class AnalyticLightNode extends LightingNode { if ( shadowNode === null ) { + const { object } = builder; + + if ( overrideMaterial === null ) { overrideMaterial = builder.createNodeMaterial(); @@ -81,7 +84,9 @@ class AnalyticLightNode extends LightingNode { const bias = reference( 'bias', 'float', shadow ); const normalBias = reference( 'normalBias', 'float', shadow ); - let shadowCoord = uniform( shadow.matrix ).mul( positionWorld.add( normalWorld.mul( normalBias ) ) ); + const position = object.material.shadowPositionNode || positionWorld; + + let shadowCoord = uniform( shadow.matrix ).mul( position.add( normalWorld.mul( normalBias ) ) ); shadowCoord = shadowCoord.xyz.div( shadowCoord.w ); const frustumTest = shadowCoord.x.greaterThanEqual( 0 ) @@ -145,7 +150,7 @@ class AnalyticLightNode extends LightingNode { textureCompare( depthTexture, shadowCoord.xy.add( vec2( 0, dy1 ) ), shadowCoord.z ), textureCompare( depthTexture, shadowCoord.xy.add( vec2( dx1, dy1 ) ), shadowCoord.z ) ).mul( 1 / 17 ); - */ + */ // const shadowColor = texture( rtt.texture, shadowCoord ); @@ -165,7 +170,7 @@ class AnalyticLightNode extends LightingNode { setup( builder ) { - if ( this.light.castShadow ) this.setupShadow( builder ); + if ( this.light.castShadow && builder.object.receiveShadow ) this.setupShadow( builder ); else if ( this.shadowNode !== null ) this.disposeShadow(); } diff --git a/examples/jsm/nodes/materials/NodeMaterial.js b/examples/jsm/nodes/materials/NodeMaterial.js index 0d4b58c56a97de..9d6343745c1c60 100644 --- a/examples/jsm/nodes/materials/NodeMaterial.js +++ b/examples/jsm/nodes/materials/NodeMaterial.js @@ -58,6 +58,7 @@ class NodeMaterial extends ShaderMaterial { this.depthNode = null; this.shadowNode = null; + this.shadowPositionNode = null; this.outputNode = null; @@ -551,6 +552,7 @@ class NodeMaterial extends ShaderMaterial { this.depthNode = source.depthNode; this.shadowNode = source.shadowNode; + this.shadowPositionNode = source.shadowPositionNode; this.outputNode = source.outputNode; diff --git a/examples/jsm/renderers/common/ClippingContext.js b/examples/jsm/renderers/common/ClippingContext.js index 085e5d591abc26..cc5d7f0966fe54 100644 --- a/examples/jsm/renderers/common/ClippingContext.js +++ b/examples/jsm/renderers/common/ClippingContext.js @@ -101,7 +101,7 @@ class ClippingContext { if ( this !== parent && parent.version !== this.parentVersion ) { - this.globalClippingCount = material.isShadowNodeMaterial ? 0 : parent.globalClippingCount; + this.globalClippingCount = material.isShadowNodeMaterial ? 0 : parent.globalClippingCount; this.localClippingEnabled = parent.localClippingEnabled; this.planes = Array.from( parent.planes ); this.parentVersion = parent.version; From 414988975d141b0d116e9e17f7cfa00429969054 Mon Sep 17 00:00:00 2001 From: Renaud Rohlinger Date: Tue, 16 Apr 2024 22:49:37 +0900 Subject: [PATCH 2/5] fix receive only and example --- examples/jsm/nodes/lighting/AnalyticLightNode.js | 2 +- examples/webgpu_reflection.html | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/examples/jsm/nodes/lighting/AnalyticLightNode.js b/examples/jsm/nodes/lighting/AnalyticLightNode.js index 6c22c25c79483b..8ddc241ef3549f 100644 --- a/examples/jsm/nodes/lighting/AnalyticLightNode.js +++ b/examples/jsm/nodes/lighting/AnalyticLightNode.js @@ -170,7 +170,7 @@ class AnalyticLightNode extends LightingNode { setup( builder ) { - if ( this.light.castShadow && builder.object.receiveShadow ) this.setupShadow( builder ); + if ( this.light.castShadow || builder.object.receiveShadow ) this.setupShadow( builder ); else if ( this.shadowNode !== null ) this.disposeShadow(); } diff --git a/examples/webgpu_reflection.html b/examples/webgpu_reflection.html index a9c5a6c8da1ca9..7d7675321e05d8 100644 --- a/examples/webgpu_reflection.html +++ b/examples/webgpu_reflection.html @@ -131,6 +131,8 @@ floorMaterial.colorNode = texture( floorColor, floorUV ).add( reflection ); const floor = new THREE.Mesh( new THREE.BoxGeometry( 50, .001, 50 ), floorMaterial ); + floor.receiveShadow = true; + floor.position.set( 0, 0, 0 ); scene.add( floor ); From b47d99031335d18ea2706423846e49cd7174d38a Mon Sep 17 00:00:00 2001 From: Renaud Rohlinger Date: Tue, 16 Apr 2024 23:09:39 +0900 Subject: [PATCH 3/5] better fix --- examples/jsm/nodes/lighting/AnalyticLightNode.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/examples/jsm/nodes/lighting/AnalyticLightNode.js b/examples/jsm/nodes/lighting/AnalyticLightNode.js index 8ddc241ef3549f..41a9d8ca0b726c 100644 --- a/examples/jsm/nodes/lighting/AnalyticLightNode.js +++ b/examples/jsm/nodes/lighting/AnalyticLightNode.js @@ -50,11 +50,14 @@ class AnalyticLightNode extends LightingNode { setupShadow( builder ) { + const { object } = builder; + + if ( object.receiveShadow === false ) return; + let shadowNode = this.shadowNode; if ( shadowNode === null ) { - const { object } = builder; if ( overrideMaterial === null ) { @@ -170,7 +173,7 @@ class AnalyticLightNode extends LightingNode { setup( builder ) { - if ( this.light.castShadow || builder.object.receiveShadow ) this.setupShadow( builder ); + if ( this.light.castShadow ) this.setupShadow( builder ); else if ( this.shadowNode !== null ) this.disposeShadow(); } From 8f56198ed7b860716e6c6a5a3d6ee3a8f3b6b5af Mon Sep 17 00:00:00 2001 From: Renaud Rohlinger Date: Wed, 17 Apr 2024 10:33:38 +0900 Subject: [PATCH 4/5] update example --- examples/jsm/nodes/lighting/AnalyticLightNode.js | 2 -- examples/webgpu_shadowmap.html | 12 ++++++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/examples/jsm/nodes/lighting/AnalyticLightNode.js b/examples/jsm/nodes/lighting/AnalyticLightNode.js index 41a9d8ca0b726c..8bed95f7f6bf8d 100644 --- a/examples/jsm/nodes/lighting/AnalyticLightNode.js +++ b/examples/jsm/nodes/lighting/AnalyticLightNode.js @@ -58,8 +58,6 @@ class AnalyticLightNode extends LightingNode { if ( shadowNode === null ) { - - if ( overrideMaterial === null ) { overrideMaterial = builder.createNodeMaterial(); diff --git a/examples/webgpu_shadowmap.html b/examples/webgpu_shadowmap.html index e064c372def8ac..2a9df4e93c7bc8 100644 --- a/examples/webgpu_shadowmap.html +++ b/examples/webgpu_shadowmap.html @@ -31,7 +31,7 @@ import WebGPURenderer from 'three/addons/renderers/webgpu/WebGPURenderer.js'; import { OrbitControls } from 'three/addons/controls/OrbitControls.js'; - import { vec4, tslFn, color, vertexIndex, MeshPhongNodeMaterial } from 'three/nodes'; + import { mx_fractal_noise_vec3, positionWorld, vec4, tslFn, color, vertexIndex, MeshPhongNodeMaterial } from 'three/nodes'; let camera, scene, renderer, clock; let dirLight, spotLight; let torusKnot, dirGroup; @@ -115,6 +115,7 @@ } )(); + materialCustomShadow.shadowNode = tslFn( () => { discardNode.discard(); @@ -135,7 +136,6 @@ const pillar1 = new THREE.Mesh( cylinderGeometry, material ); pillar1.position.set( 8, 3.5, 8 ); pillar1.castShadow = true; - pillar1.receiveShadow = true; const pillar2 = pillar1.clone(); pillar2.position.set( 8, 3.5, - 8 ); @@ -156,6 +156,14 @@ specular: 0x111111 } ); + planeMaterial.shadowPositionNode = tslFn( () => { + + const pos = positionWorld.toVar(); + pos.xz.addAssign( mx_fractal_noise_vec3( positionWorld.mul( 2 ) ).saturate().xz ); + return pos; + + } )(); + const ground = new THREE.Mesh( planeGeometry, planeMaterial ); ground.rotation.x = - Math.PI / 2; ground.scale.multiplyScalar( 3 ); From 612d782ea6f556dd82a9c8762f9fbbe15105e736 Mon Sep 17 00:00:00 2001 From: Renaud Rohlinger Date: Wed, 17 Apr 2024 11:03:18 +0900 Subject: [PATCH 5/5] add color noise to example --- examples/screenshots/webgpu_shadowmap.jpg | Bin 20149 -> 32045 bytes examples/webgpu_shadowmap.html | 9 +++++++++ 2 files changed, 9 insertions(+) diff --git a/examples/screenshots/webgpu_shadowmap.jpg b/examples/screenshots/webgpu_shadowmap.jpg index 59d56669f0c91f5d0ec5e3ea762383d45df2e1b3..f714932bee11648155466b7b22bd3c24780539d0 100644 GIT binary patch literal 32045 zcmeFYbyOVP+bvkQ1_A+syGwAFMuLUl?(XjHmSBxT2!Y`4?(V_e-GaL{aCzTv?r(kT z&RTcP%$oUcPOm!ERdvp(z4!Cfk*BL)7hX4j_g^HWB>*TW0DyY?0I$nH2mlTBPx>c^ z{wKl0{FB4M!otA9!@a`at`wb)9ztG-*{#Sy6hJl5HM|gvP^8O7r z49pu?xHqJ4C4Jwn0k9Zwm}IOX@E;Tn5y%~}*aG9S5Gh2fy0Dcd&nelBoPv;$aX#YW z;Zsr5(9+R!aB^|;@bZa$7MGBelK!HsqN=8@p{ZqTVrph?VQJ;;;_Bw^;pr6|5*il% z?R!LgLSj;KO6rfa?3~=Z{DQ)w;_8~(y84F3rsnRR-oE~U!J*-)>6zKN`Gv)$&8_X7 z-M#&T!@n1oSJyYUclQsEPyoz-(Rs`NPki2pLqY$eIl@1DprGB~HW&<8I5JjvOc6x{ zL&p!~Y=MYaqH$SOT}Tw{O6S-{PLs$ulpLE>7ynTDm(l+f4R6%dFf{%=)D|JSNHi-R!7>Y%H^ z$>SZUTZYVs9gF|g7L*YQn)N)4YdhF!dzRD~5~|fR=Pe#_py|WDh5LR;=(|e{LtSQ_w-#zin89%*nzR$|W_xyZ-_CzrPdkKT!w#Z&Ano7vcX`+WJ4l`|oYR zrM9wf;Z4ZEe|PySAx72m-v7&_VM(3q$2;T$=~nKF<){^lJ6b_Kc#=O#9$q6JmCX## z|EdlCm+zY?{(EcxQ%~pr*ycYh|M#}}Us=AWc=P_J>VFf+8^woRPkvDXIMUa=LA+(z zgTFT_np=h?&Y1BPA>D&HAHqtuw*Q^;7vq?)+rPV3Y`q*S z>cMr1#Er&-kU0e|_Gb2VL9@|h&XVYS_KC~1~&vJ{3G2W*BiRoc> z%D|(>G*S7yFkp36W95IGpg1j|B1Gw#?ZX+NG50ydFo0sMH7_t&I^_@l3wC^rY$YDn zzi{42QLm&T*f`F;0k;iK6*(Vb2a}rDktlp~Mu0GI_6v<34Pv!t5qJHehp?;hTKlbr zk|;zT5OxaTQ}foJO-w(Acq6bxo)1aU96t#4kIVb?#0T(7`DySxvwze039ngPkXk9K~e zGmet~m?8KDJJI9QL`=GY`YGN zG^1DGc=NVp98H^GXeX9!hcZS3^>(kxLv_ppk+)@~RXlO=q$uZ5+Ct}WVux87x1#pe z<-v`29PU3qVQ#Zq!U z%$8e97!#EF=BJ%Pc(e~+i5dk#Z$!_kb;G>|8YmKtq?{OrXH0txFsIV`oK4y z4WpGlLqVDe5CoIHz~m8+Y8a1)lFFfKp#2!spUSKeU9dP$w^>u}M7aixNvCe51Ijj4 zyCMgND9znr@deWWV)OvGm8z?L_Qp)PFtAC0{Qc*KZPzM9dAW>LFSCD7h{J;85Y1us zm|{AVJaZO*V?&rQV84kVdm0En)81Mb2r#_|n=dw)M7PNKHIcj&3&y|SJ@=uAgHHeC zP9Kjj{|c0)3C0uWsCP?zrPoSf^gD$bCvudmZv5t|kFYPFwyF?+&K9~qUGOmA6_IE! zTR~Pf1c7qA{e}4vfj7#Zei`YLm2~h*-i7GQc=lMXYt$Uib)JNjqgK>;csRvOD_y?c z1H;n@qE7yrlcM}hX=SW(w{nU{#URxMyW|T-FfRs&us076$uE~DRx5<=p)lW&WJ-3g zCo`~F2*$k{j;L`R2{U1E;C#j98@o3_x$L=`fD_nllJ94dHNqSoS~Q~BgtTOhkZ5L; z01XIBxyWVEHh~;#++pWi1;Q8HZzk37+i}5N5X&cyj~`wzXumy=)^D~1utQ#I+v1^2 z&J*Q?G$LC*v{>zv%z;f(QT5@o$a?XB=Lt69N5$i$PLK0+^V_^}^0J+mSKu%sh4`fox+HoEU zkHDHmAU`}%aIbhg5miBS5N9a_Ggs#p{?0N_=Zm{5l(E?uYv)#D4THi+iOP$H^z%^l zMg>O<&8=7E6DYjwBN4g&uAct8sap?3W=dW2vzqy{%%Q2(W+QfeRT>N2A7b6YT^Pyl z{q$3J{Pcd5>zkCa2;r!sJOydHVHpc}O&(8#CUh(IuXDEV!bVlQ-=3rqQ9_Y~l>K}* z(bl=hkhK_~S=>s&`XkffvIJZ6$ccfz1 z#&*TNWVJ9eguMPV*V88eYW(5Nx251-fe=MBKouwgD!11UC9B0S^%29|k!*xfI_>4{ z68WSgt?J1%b1lOEfT9R93k2rH!yWKNOHP)M5MnjL<#Um(=a8gy zqv@E61a_xjiW&hl#{f3T4cf|gV7VQMIJ#|qV9X=C`{NTY1~j>muqS*Z+9vg{ouSJp z8Z!Sx$tW~5uV;%&9fxU!SY1C=!T^6pMFSpixWjV>oy)QD@zoFxx^1cY zqdGOl<#dDXJIodiANzdIN1cFjr?4pHHZFT)b((uap!MEA&rIi=k%chRv~l7quxKq% zceP=->w3o(#qdchnh0vjXUKuPU*y3nv&?O;Z0kp{K6qADMUou0pNv)BrdxLCg0x7Es|fjA6?}7I=jn}L>4e7 zjQjQ1KcBV|IZcQBGg?5APP_*CObl(M&Q^y->4MMu3#ysWD(W;t*@ECb3}W6_z^he{ zB86H~e~jzt`dOCt6~HFc?_yv@1KTyeKtT$JvPQxpF0m!gh`~h#KP~EeUbLDE_Jm*R zPG;^=$HIKM#Cbd-FoSvj_RK#{RdzArX;e2ENB2?~UyS0Qgx_i!RHt5aoW-tsKGRl) zzKk2v(#qj(v4xZ9f#ha1jAZh|x|2SshZ^xc`O;P*a$K_}(MuNgThs?S%B64O^$N#i z7{H*s*#W&$Vjl`OFox$ve^We!enD!-;N~!He8L<&9EmDc&^=n&*)mQQ=^$8GiS(RA zlJ@&Eo($^F#ltP+pb~jbs;izFTMp>o_;(Bt4|sdPb|i!q8XvydkGu^E;z4`Cw3;|{ zLaH0ACY{79%I}L1W0<)aqMrX`{+#B4!2+W3OGATv+J54}K0+hF2jF*M2-K_Tjs_us zGAy8_DdNVH7rMPN_E#ogWF%--KW!(hq(d!d6kPs>UH+KP9q?ci&zdf&+z-2qnEc11c$)YXs1hV`hL^ zU^#hcxL#<_Ukh-E-b*qv=T&{E?0n{*KtS3|Omis0iLY zq4RTpmggox`zrH5#9Jp#zG7$y-dbz~8%G(nDMwkTny&mor`Yq^#sUr#;Wa7W#k07j zZ}?G=lmXIfzlM*8-A$DRd{C}9q8o%H-5D3IHL z5q^iX7v+gs46O8C3ixIQGFp+j0l%ZSr`efbipGp4*5dNIlt-0?NBkqZ9qE%8?*eurjROIU>&{tLGu_ zt&>imc_dJHp?dxb4oPlT`+-P-E20;pO{_&b=KX7Kon56W#Q0~fo&O?#N1m4|AEv9g zv9y%r2)jY$!2JXizTG;h!f4ALW6#6m+sf1eN{x2eQ*8%i_{3iW6G4jdj=4%1?mE9vgz6~K;vMR5q(XEpu&7tp$_(H9$ zgeZ|sj)6ib7=~gUmqutWvoghbG8}b}QwS$>{Xy#$;Ld_O{ZX_yT;z

;_qm5xtt` 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 R6g|LTB-C26qka4DRmk&ajj3?c29< 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 { + + const pos = positionWorld.toVar(); + pos.xz.addAssign( mx_fractal_noise_vec3( positionWorld.mul( 2 ) ).saturate().xz ); + return mx_fractal_noise_vec3( positionWorld.mul( 2 ) ).saturate().zzz.mul( 0.2 ).add( .5 ); + + } )(); + const ground = new THREE.Mesh( planeGeometry, planeMaterial ); ground.rotation.x = - Math.PI / 2; ground.scale.multiplyScalar( 3 );