From 6828eba5f92c4d1382491722444345ced3bd6471 Mon Sep 17 00:00:00 2001 From: sunag Date: Fri, 8 Nov 2024 20:08:47 -0300 Subject: [PATCH 01/15] Add `PointShadowNode` (WIP) --- examples/files.json | 1 + .../screenshots/webgpu_lights_physical.jpg | Bin 0 -> 25245 bytes examples/webgpu_lights_physical.html | 329 ++++++++++++++++++ src/nodes/lighting/AnalyticLightNode.js | 8 +- src/nodes/lighting/PointLightNode.js | 11 +- src/nodes/lighting/PointShadowNode.js | 178 ++++++++++ src/nodes/lighting/ShadowNode.js | 130 ++++--- 7 files changed, 607 insertions(+), 50 deletions(-) create mode 100644 examples/screenshots/webgpu_lights_physical.jpg create mode 100644 examples/webgpu_lights_physical.html create mode 100644 src/nodes/lighting/PointShadowNode.js diff --git a/examples/files.json b/examples/files.json index e70614edb858ee..bd549c1a22bf01 100644 --- a/examples/files.json +++ b/examples/files.json @@ -335,6 +335,7 @@ "webgpu_lights_custom", "webgpu_lights_ies_spotlight", "webgpu_lights_phong", + "webgpu_lights_physical", "webgpu_lights_rectarealight", "webgpu_lights_selective", "webgpu_lights_tiled", diff --git a/examples/screenshots/webgpu_lights_physical.jpg b/examples/screenshots/webgpu_lights_physical.jpg new file mode 100644 index 0000000000000000000000000000000000000000..09f1cf51f9e4373670d9002bce5faad5c6584075 GIT binary patch literal 25245 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 + + + three.js webgpu - lights - physical lights + + + + + + +
+
+ three.js - Physically accurate incandescent bulb by Ben Houston
+ Real world scale: Brick cube is 50 cm in size. Globe is 50 cm in diameter.
+ Reinhard inline tonemapping with real-world light falloff (decay = 2). +
+ + + + + + diff --git a/src/nodes/lighting/AnalyticLightNode.js b/src/nodes/lighting/AnalyticLightNode.js index 26ed9bf7179c7c..771d415350dcdd 100644 --- a/src/nodes/lighting/AnalyticLightNode.js +++ b/src/nodes/lighting/AnalyticLightNode.js @@ -47,6 +47,12 @@ class AnalyticLightNode extends LightingNode { } + setupShadowNode() { + + return shadow( this.light ); + + } + setupShadow( builder ) { const { renderer } = builder; @@ -67,7 +73,7 @@ class AnalyticLightNode extends LightingNode { } else { - shadowNode = shadow( this.light ); + shadowNode = this.setupShadowNode( builder ); } diff --git a/src/nodes/lighting/PointLightNode.js b/src/nodes/lighting/PointLightNode.js index 1ed4c7bae6657c..edc4fc8eff8c1f 100644 --- a/src/nodes/lighting/PointLightNode.js +++ b/src/nodes/lighting/PointLightNode.js @@ -5,6 +5,7 @@ import { lightViewPosition } from '../accessors/Lights.js'; import { positionView } from '../accessors/Position.js'; import { Fn } from '../tsl/TSLBase.js'; import { renderGroup } from '../core/UniformGroupNode.js'; +import { pointShadow } from './PointShadowNode.js'; export const directPointLight = Fn( ( { color, lightViewPosition, cutoffDistance, decayExponent }, builder ) => { @@ -61,7 +62,15 @@ class PointLightNode extends AnalyticLightNode { } - setup() { + setupShadowNode() { + + return pointShadow( this.light ); + + } + + setup( builder ) { + + super.setup( builder ); directPointLight( { color: this.colorNode, diff --git a/src/nodes/lighting/PointShadowNode.js b/src/nodes/lighting/PointShadowNode.js new file mode 100644 index 00000000000000..7da1d82754b190 --- /dev/null +++ b/src/nodes/lighting/PointShadowNode.js @@ -0,0 +1,178 @@ +import ShadowNode from './ShadowNode.js'; +import { uniform } from '../core/UniformNode.js'; +import { float, vec2, vec3, If, Fn, nodeObject } from '../tsl/TSLBase.js'; +import { reference } from '../accessors/ReferenceNode.js'; +import { texture } from '../accessors/TextureNode.js'; +import { mix, max, abs, sign } from '../math/MathNode.js'; +import { sub, div, mul } from '../math/OperatorNode.js'; +import { renderGroup } from '../core/UniformGroupNode.js'; +import { Vector2 } from '../../math/Vector2.js'; +import { Vector4 } from '../../math/Vector4.js'; + +export const cubeToUV = /*@__PURE__*/ Fn( ( [ v_immutable, texelSizeY_immutable ] ) => { + + const texelSizeY = float( texelSizeY_immutable ).toVar(); + const v = vec3( v_immutable ).toVar(); + const absV = vec3( abs( v ) ).toVar(); + const scaleToCube = float( div( 1.0, max( absV.x, max( absV.y, absV.z ) ) ) ).toVar(); + absV.mulAssign( scaleToCube ); + v.mulAssign( scaleToCube.mul( sub( 1.0, mul( 2.0, texelSizeY ) ) ) ); + const planar = vec2( v.xy ).toVar(); + const almostATexel = float( mul( 1.5, texelSizeY ) ).toVar(); + const almostOne = float( sub( 1.0, almostATexel ) ).toVar(); + + If( absV.z.greaterThanEqual( almostOne ), () => { + + If( v.z.greaterThan( 0.0 ), () => { + + planar.x.assign( sub( 4.0, v.x ) ); + + } ); + + } ).ElseIf( absV.x.greaterThanEqual( almostOne ), () => { + + const signX = float( sign( v.x ) ).toVar(); + planar.x.assign( v.z.mul( signX ).add( mul( 2.0, signX ) ) ); + + } ).ElseIf( absV.y.greaterThanEqual( almostOne ), () => { + + const signY = float( sign( v.y ) ).toVar(); + planar.x.assign( v.x.add( mul( 2.0, signY ) ).add( 2.0 ) ); + planar.y.assign( v.z.mul( signY ).sub( 2.0 ) ); + + } ); + + return vec2( 0.125, 0.25 ).mul( planar ).add( vec2( 0.375, 0.75 ) ); + +} ).setLayout( { + name: 'cubeToUV', + type: 'vec2', + inputs: [ + { name: 'v', type: 'vec3' }, + { name: 'texelSizeY', type: 'float' } + ] +} ); + +const BasicShadowMap = Fn( ( { depthTexture, shadowCoord, shadow } ) => { + + const lightToPosition = shadowCoord.xyz.toVar(); + const lightToPositionLength = lightToPosition.length(); + + const cameraNearLocal = uniform( 'float' ).onRenderUpdate( () => shadow.camera.near ); + const cameraFarLocal = uniform( 'float' ).onRenderUpdate( () => shadow.camera.far ); + const bias = reference( 'bias', 'float', shadow ).setGroup( renderGroup ); + const mapSize = uniform( shadow.mapSize ).setGroup( renderGroup ); + + const result = float( 1.0 ).toVar(); + + If( lightToPositionLength.sub( cameraFarLocal ).lessThanEqual( 0.0 ).and( lightToPositionLength.sub( cameraNearLocal ) ), () => { + + const dp = lightToPositionLength.sub( cameraNearLocal ).div( cameraFarLocal.sub( cameraNearLocal ) ).toVar(); + dp.addAssign( bias ); + + const bd3D = lightToPosition.normalize(); + const texelSize = vec2( 1.0 ).div( mapSize.mul( vec2( 4.0, 2.0 ) ) ); + + const uv = cubeToUV( bd3D, texelSize.y ).flipY(); + + const dpRemap = dp.add( 1 ).div( 2 ); // unchecked + + result.assign( texture( depthTexture, uv ).compare( dpRemap ).select( 1, 0 ) ); + + } ); + + return mix( 1.0, result, 1 ); + +} ); + +const _viewport = /*@__PURE__*/ new Vector4(); +const _viewportSize = /*@__PURE__*/ new Vector2(); +const _shadowMapSize = /*@__PURE__*/ new Vector2(); + +// + +class PointShadowNode extends ShadowNode { + + static get type() { + + return 'PointShadowNode'; + + } + + constructor( light, shadow = null ) { + + super( light, shadow ); + + } + + setupShadowCoord( builder, shadowPosition ) { + + return shadowPosition; + + } + + setupShadowFilter( builder, { filterFn, depthTexture, shadowCoord, shadow } ) { + + return BasicShadowMap( { depthTexture, shadowCoord, shadow } ); + + } + + renderShadow( frame ) { + + const { shadow, shadowMap, light } = this; + const { renderer, scene } = frame; + + const shadowFrameExtents = shadow.getFrameExtents(); + + _shadowMapSize.copy( shadow.mapSize ); + _shadowMapSize.multiply( shadowFrameExtents ); + + shadowMap.setSize( _shadowMapSize.width, _shadowMapSize.height ); + + _viewportSize.copy( shadow.mapSize ); + + // + + const previousAutoClear = renderer.autoClear; + + renderer.autoClear = false; + renderer.setClearColor( 0xffffff, 1 ); + renderer.clear(); + + const viewportCount = shadow.getViewportCount(); + + for ( let vp = 0; vp < viewportCount; vp ++ ) { + + const viewport = shadow.getViewport( vp ); + + const x = _viewportSize.x * viewport.x; + const y = _shadowMapSize.y - _viewportSize.y - ( _viewportSize.y * viewport.y ); + + _viewport.set( + x, + y, + _viewportSize.x * viewport.z, + _viewportSize.y * viewport.w + ); + + shadowMap.viewport.copy( _viewport ); + //shadowMap.scissor.copy( _viewport ); + //shadowMap.scissorTest = true; + + shadow.updateMatrices( light, vp ); + + renderer.render( scene, shadow.camera ); + + } + + // + + renderer.autoClear = previousAutoClear; + + } + +} + +export default PointShadowNode; + +export const pointShadow = ( light, shadow ) => nodeObject( new PointShadowNode( light, shadow ) ); diff --git a/src/nodes/lighting/ShadowNode.js b/src/nodes/lighting/ShadowNode.js index f8840052418e27..f7609e9fd9daec 100644 --- a/src/nodes/lighting/ShadowNode.js +++ b/src/nodes/lighting/ShadowNode.js @@ -231,6 +231,67 @@ class ShadowNode extends Node { } + setupShadowFilter( builder, { filterFn, depthTexture, shadowCoord, shadow } ) { + + const frustumTest = shadowCoord.x.greaterThanEqual( 0 ) + .and( shadowCoord.x.lessThanEqual( 1 ) ) + .and( shadowCoord.y.greaterThanEqual( 0 ) ) + .and( shadowCoord.y.lessThanEqual( 1 ) ) + .and( shadowCoord.z.lessThanEqual( 1 ) ); + + const shadowNode = filterFn( { depthTexture, shadowCoord, shadow } ); + + return frustumTest.select( shadowNode, float( 1 ) ); + + } + + setupShadowCoord( builder, shadowPosition ) { + + const { shadow } = this; + const { renderer } = builder; + + const bias = reference( 'bias', 'float', shadow ).setGroup( renderGroup ); + + let shadowCoord = shadowPosition; + let coordZ; + + if ( shadow.camera.isOrthographicCamera || renderer.logarithmicDepthBuffer !== true ) { + + shadowCoord = shadowCoord.xyz.div( shadowCoord.w ); + + coordZ = shadowCoord.z; + + if ( renderer.coordinateSystem === WebGPUCoordinateSystem ) { + + coordZ = coordZ.mul( 2 ).sub( 1 ); // WebGPU: Conversion [ 0, 1 ] to [ - 1, 1 ] + + } + + } else { + + const w = shadowCoord.w; + shadowCoord = shadowCoord.xy.div( w ); // <-- Only divide X/Y coords since we don't need Z + + // The normally available "cameraNear" and "cameraFar" nodes cannot be used here because they do not get + // updated to use the shadow camera. So, we have to declare our own "local" ones here. + // TODO: How do we get the cameraNear/cameraFar nodes to use the shadow camera so we don't have to declare local ones here? + const cameraNearLocal = uniform( 'float' ).onRenderUpdate( () => shadow.camera.near ); + const cameraFarLocal = uniform( 'float' ).onRenderUpdate( () => shadow.camera.far ); + + coordZ = perspectiveDepthToLogarithmicDepth( w, cameraNearLocal, cameraFarLocal ); + + } + + shadowCoord = vec3( + shadowCoord.x, + shadowCoord.y.oneMinus(), // follow webgpu standards + coordZ.add( bias ) + ); + + return shadowCoord; + + } + setupShadow( builder ) { const { object, renderer } = builder; @@ -284,53 +345,12 @@ class ShadowNode extends Node { // const shadowIntensity = reference( 'intensity', 'float', shadow ).setGroup( renderGroup ); - const bias = reference( 'bias', 'float', shadow ).setGroup( renderGroup ); const normalBias = reference( 'normalBias', 'float', shadow ).setGroup( renderGroup ); const position = object.material.shadowPositionNode || positionWorld; - let shadowCoord = uniform( shadow.matrix ).setGroup( renderGroup ).mul( position.add( transformedNormalWorld.mul( normalBias ) ) ); - - let coordZ; - - if ( shadow.camera.isOrthographicCamera || renderer.logarithmicDepthBuffer !== true ) { - - shadowCoord = shadowCoord.xyz.div( shadowCoord.w ); - - coordZ = shadowCoord.z; - - if ( renderer.coordinateSystem === WebGPUCoordinateSystem ) { - - coordZ = coordZ.mul( 2 ).sub( 1 ); // WebGPU: Conversion [ 0, 1 ] to [ - 1, 1 ] - - } - - } else { - - const w = shadowCoord.w; - shadowCoord = shadowCoord.xy.div( w ); // <-- Only divide X/Y coords since we don't need Z - - // The normally available "cameraNear" and "cameraFar" nodes cannot be used here because they do not get - // updated to use the shadow camera. So, we have to declare our own "local" ones here. - // TODO: How do we get the cameraNear/cameraFar nodes to use the shadow camera so we don't have to declare local ones here? - const cameraNearLocal = uniform( 'float' ).onRenderUpdate( () => shadow.camera.near ); - const cameraFarLocal = uniform( 'float' ).onRenderUpdate( () => shadow.camera.far ); - - coordZ = perspectiveDepthToLogarithmicDepth( w, cameraNearLocal, cameraFarLocal ); - - } - - shadowCoord = vec3( - shadowCoord.x, - shadowCoord.y.oneMinus(), // follow webgpu standards - coordZ.add( bias ) - ); - - const frustumTest = shadowCoord.x.greaterThanEqual( 0 ) - .and( shadowCoord.x.lessThanEqual( 1 ) ) - .and( shadowCoord.y.greaterThanEqual( 0 ) ) - .and( shadowCoord.y.lessThanEqual( 1 ) ) - .and( shadowCoord.z.lessThanEqual( 1 ) ); + const shadowPosition = uniform( shadow.matrix ).setGroup( renderGroup ).mul( position.add( transformedNormalWorld.mul( normalBias ) ) ); + const shadowCoord = this.setupShadowCoord( builder, shadowPosition ); // @@ -342,8 +362,11 @@ class ShadowNode extends Node { } + const shadowDepthTexture = ( shadowMapType === VSMShadowMap ) ? this.vsmShadowMapHorizontal.texture : depthTexture; + + const shadowNode = this.setupShadowFilter( builder, { filterFn, depthTexture: shadowDepthTexture, shadowCoord, shadow } ); + const shadowColor = texture( shadowMap.texture, shadowCoord ); - const shadowNode = frustumTest.select( filterFn( { depthTexture: ( shadowMapType === VSMShadowMap ) ? this.vsmShadowMapHorizontal.texture : depthTexture, shadowCoord, shadow } ), float( 1 ) ); const shadowOutput = mix( 1, shadowNode.rgb.mix( shadowColor, 1 ), shadowIntensity.mul( shadowColor.a ) ).toVar(); this.shadowMap = shadowMap; @@ -381,6 +404,19 @@ class ShadowNode extends Node { } + renderShadow( frame ) { + + const { shadow, shadowMap, light } = this; + const { renderer, scene } = frame; + + shadow.updateMatrices( light ); + + shadowMap.setSize( shadow.mapSize.width, shadow.mapSize.height ); + + renderer.render( scene, shadow.camera ); + + } + updateShadow( frame ) { const { shadowMap, light, shadow } = this; @@ -395,9 +431,6 @@ class ShadowNode extends Node { scene.overrideMaterial = _overrideMaterial; - shadowMap.setSize( shadow.mapSize.width, shadow.mapSize.height ); - - shadow.updateMatrices( light ); shadow.camera.layers.mask = camera.layers.mask; const currentRenderTarget = renderer.getRenderTarget(); @@ -414,7 +447,8 @@ class ShadowNode extends Node { } ); renderer.setRenderTarget( shadowMap ); - renderer.render( scene, shadow.camera ); + + this.renderShadow( frame ); renderer.setRenderObjectFunction( currentRenderObjectFunction ); From 3381ed98482ed7691c9ce9be28329a55ae5a2414 Mon Sep 17 00:00:00 2001 From: sunag Date: Sat, 9 Nov 2024 00:45:55 -0300 Subject: [PATCH 02/15] use webgpu --- examples/webgpu_lights_physical.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/webgpu_lights_physical.html b/examples/webgpu_lights_physical.html index 6aceafa66b89d6..4825ddc8d71001 100644 --- a/examples/webgpu_lights_physical.html +++ b/examples/webgpu_lights_physical.html @@ -238,7 +238,7 @@ // - renderer = new THREE.WebGPURenderer( { forceWebGL: true } ); + renderer = new THREE.WebGPURenderer( { forceWebGL: false } ); console.log( renderer.backend ); renderer.setPixelRatio( window.devicePixelRatio ); renderer.setSize( window.innerWidth, window.innerHeight ); @@ -309,14 +309,14 @@ renderer.render( scene, camera ); - if ( ! postProcessing.test ) { + /*if ( ! postProcessing.test ) { const scenePass = THREE.pass( scene, camera ); postProcessing.outputNode = scenePass.add( THREE.texture( bulbLight.shadow.map.texture ) ); postProcessing.test = true; - } + }*/ //postProcessing.render(); From 3310c5c72b3405b502ec6a8594590913c3c33acb Mon Sep 17 00:00:00 2001 From: sunag Date: Sat, 9 Nov 2024 00:46:01 -0300 Subject: [PATCH 03/15] fix hash --- src/renderers/common/RenderObject.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/renderers/common/RenderObject.js b/src/renderers/common/RenderObject.js index fb9fbe0e1050fe..00925fa778ded7 100644 --- a/src/renderers/common/RenderObject.js +++ b/src/renderers/common/RenderObject.js @@ -1,4 +1,4 @@ -import { hashString } from '../../nodes/core/NodeUtils.js'; +import { hash, hashString } from '../../nodes/core/NodeUtils.js'; let _id = 0; @@ -403,7 +403,7 @@ export default class RenderObject { if ( this.object.receiveShadow ) { - cacheKey += 1; + cacheKey += hash( cacheKey, 1 ); } From d8541f0e08803c12ecfc9608eb66fc4736f546e0 Mon Sep 17 00:00:00 2001 From: sunag Date: Sat, 9 Nov 2024 01:08:15 -0300 Subject: [PATCH 04/15] cleanup --- src/renderers/common/RenderObject.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/renderers/common/RenderObject.js b/src/renderers/common/RenderObject.js index 00925fa778ded7..93d47a916e12b3 100644 --- a/src/renderers/common/RenderObject.js +++ b/src/renderers/common/RenderObject.js @@ -403,7 +403,7 @@ export default class RenderObject { if ( this.object.receiveShadow ) { - cacheKey += hash( cacheKey, 1 ); + cacheKey = hash( cacheKey, 1 ); } From 2277aa0bd3e9f680e84b781073cb4d967cca1a79 Mon Sep 17 00:00:00 2001 From: sunag Date: Tue, 19 Nov 2024 17:11:19 -0300 Subject: [PATCH 05/15] Update ShadowNode.js --- src/nodes/lighting/ShadowNode.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/nodes/lighting/ShadowNode.js b/src/nodes/lighting/ShadowNode.js index 57d9abb0c8e887..2c92a2a40b5305 100644 --- a/src/nodes/lighting/ShadowNode.js +++ b/src/nodes/lighting/ShadowNode.js @@ -277,8 +277,8 @@ class ShadowNode extends Node { // The normally available "cameraNear" and "cameraFar" nodes cannot be used here because they do not get // updated to use the shadow camera. So, we have to declare our own "local" ones here. // TODO: How do we get the cameraNear/cameraFar nodes to use the shadow camera so we don't have to declare local ones here? - const cameraNearLocal = uniform( 'float' ).setGroup( renderGroup ).onRenderUpdate( () => shadow.camera.near ); - const cameraFarLocal = uniform( 'float' ).setGroup( renderGroup ).onRenderUpdate( () => shadow.camera.far ); + const cameraNearLocal = reference( 'near', 'float', shadow.camera ).setGroup( renderGroup ); + const cameraFarLocal = reference( 'far', 'float', shadow.camera ).setGroup( renderGroup ); coordZ = viewZToLogarithmicDepth( w.negate(), cameraNearLocal, cameraFarLocal ); From 80271a92ad7cb1cb517cfa5a0c3f932c74e715b1 Mon Sep 17 00:00:00 2001 From: sunag Date: Wed, 20 Nov 2024 14:14:27 -0300 Subject: [PATCH 06/15] revisions --- src/nodes/lighting/PointShadowNode.js | 86 ++++++++++++++++++++------- src/nodes/lighting/ShadowNode.js | 23 +++++-- 2 files changed, 82 insertions(+), 27 deletions(-) diff --git a/src/nodes/lighting/PointShadowNode.js b/src/nodes/lighting/PointShadowNode.js index 7da1d82754b190..38f253d44cb8a1 100644 --- a/src/nodes/lighting/PointShadowNode.js +++ b/src/nodes/lighting/PointShadowNode.js @@ -8,18 +8,55 @@ import { sub, div, mul } from '../math/OperatorNode.js'; import { renderGroup } from '../core/UniformGroupNode.js'; import { Vector2 } from '../../math/Vector2.js'; import { Vector4 } from '../../math/Vector4.js'; +import { glslFn } from '../code/FunctionNode.js'; +import { perspectiveDepthToViewZ } from '../TSL.js'; -export const cubeToUV = /*@__PURE__*/ Fn( ( [ v_immutable, texelSizeY_immutable ] ) => { +// cubeToUV() maps a 3D direction vector suitable for cube texture mapping to a 2D +// vector suitable for 2D texture mapping. This code uses the following layout for the +// 2D texture: +// +// xzXZ +// y Y +// +// Y - Positive y direction +// y - Negative y direction +// X - Positive x direction +// x - Negative x direction +// Z - Positive z direction +// z - Negative z direction +// +// Source and test bed: +// https://gist.github.com/tschw/da10c43c467ce8afd0c4 + +export const cubeToUV = /*@__PURE__*/ Fn( ( [ pos, texelSizeY ] ) => { + + const v = pos.toVar(); + + // Number of texels to avoid at the edge of each square + + const absV = abs( v ); + + // Intersect unit cube - const texelSizeY = float( texelSizeY_immutable ).toVar(); - const v = vec3( v_immutable ).toVar(); - const absV = vec3( abs( v ) ).toVar(); - const scaleToCube = float( div( 1.0, max( absV.x, max( absV.y, absV.z ) ) ) ).toVar(); + const scaleToCube = div( 1.0, max( absV.x, max( absV.y, absV.z ) ) ); absV.mulAssign( scaleToCube ); - v.mulAssign( scaleToCube.mul( sub( 1.0, mul( 2.0, texelSizeY ) ) ) ); + + // Apply scale to avoid seams + + // two texels less per square (one texel will do for NEAREST) + v.mulAssign( scaleToCube.mul( texelSizeY.mul( 2 ).oneMinus() ) ); + + // Unwrap + + // space: -1 ... 1 range for each square + // + // #X## dim := ( 4 , 2 ) + // # # center := ( 1 , 1 ) + const planar = vec2( v.xy ).toVar(); - const almostATexel = float( mul( 1.5, texelSizeY ) ).toVar(); - const almostOne = float( sub( 1.0, almostATexel ) ).toVar(); + + const almostATexel = texelSizeY.mul( 1.5 ); + const almostOne = almostATexel.oneMinus(); If( absV.z.greaterThanEqual( almostOne ), () => { @@ -31,17 +68,21 @@ export const cubeToUV = /*@__PURE__*/ Fn( ( [ v_immutable, texelSizeY_immutable } ).ElseIf( absV.x.greaterThanEqual( almostOne ), () => { - const signX = float( sign( v.x ) ).toVar(); - planar.x.assign( v.z.mul( signX ).add( mul( 2.0, signX ) ) ); + const signX = sign( v.x ); + planar.x.assign( v.z.mul( signX ).add( signX.mul( 2.0 ) ) ); } ).ElseIf( absV.y.greaterThanEqual( almostOne ), () => { - const signY = float( sign( v.y ) ).toVar(); - planar.x.assign( v.x.add( mul( 2.0, signY ) ).add( 2.0 ) ); + const signY = sign( v.y ); + planar.x.assign( v.x.add( signY.mul( 2.0 ) ).add( 2.0 ) ); planar.y.assign( v.z.mul( signY ).sub( 2.0 ) ); } ); + // Transform to UV space + + // scale := 0.5 / dim + // translate := ( center + 0.5 ) / dim return vec2( 0.125, 0.25 ).mul( planar ).add( vec2( 0.375, 0.75 ) ); } ).setLayout( { @@ -55,6 +96,8 @@ export const cubeToUV = /*@__PURE__*/ Fn( ( [ v_immutable, texelSizeY_immutable const BasicShadowMap = Fn( ( { depthTexture, shadowCoord, shadow } ) => { + // for point lights, the uniform @vShadowCoord is re-purposed to hold + // the vector from the light to the world-space position of the fragment. const lightToPosition = shadowCoord.xyz.toVar(); const lightToPositionLength = lightToPosition.length(); @@ -65,23 +108,24 @@ const BasicShadowMap = Fn( ( { depthTexture, shadowCoord, shadow } ) => { const result = float( 1.0 ).toVar(); - If( lightToPositionLength.sub( cameraFarLocal ).lessThanEqual( 0.0 ).and( lightToPositionLength.sub( cameraNearLocal ) ), () => { + If( lightToPositionLength.sub( cameraFarLocal ).lessThanEqual( 0.0 ).and( lightToPositionLength.sub( cameraNearLocal ).greaterThanEqual( 0.0 ) ), () => { - const dp = lightToPositionLength.sub( cameraNearLocal ).div( cameraFarLocal.sub( cameraNearLocal ) ).toVar(); + // dp = normalized distance from light to fragment position + const dp = lightToPositionLength.sub( cameraNearLocal ).div( cameraFarLocal.sub( cameraNearLocal ) ).toVar(); // need to clamp? dp.addAssign( bias ); + // bd3D = base direction 3D const bd3D = lightToPosition.normalize(); const texelSize = vec2( 1.0 ).div( mapSize.mul( vec2( 4.0, 2.0 ) ) ); - const uv = cubeToUV( bd3D, texelSize.y ).flipY(); - - const dpRemap = dp.add( 1 ).div( 2 ); // unchecked + const uv = cubeToUV( bd3D, texelSize.y ); - result.assign( texture( depthTexture, uv ).compare( dpRemap ).select( 1, 0 ) ); + // no percentage-closer filtering + result.assign( texture( depthTexture, uv.flipY() ).compare( dp ).select( 1, 0 ) ); } ); - return mix( 1.0, result, 1 ); + return result; } ); @@ -111,9 +155,9 @@ class PointShadowNode extends ShadowNode { } - setupShadowFilter( builder, { filterFn, depthTexture, shadowCoord, shadow } ) { + setupShadowFilter( builder, { filterFn, shadowTexture, depthTexture, shadowCoord, shadow } ) { - return BasicShadowMap( { depthTexture, shadowCoord, shadow } ); + return BasicShadowMap( { shadowTexture, depthTexture, shadowCoord, shadow } ); } diff --git a/src/nodes/lighting/ShadowNode.js b/src/nodes/lighting/ShadowNode.js index 2c92a2a40b5305..010351f95422eb 100644 --- a/src/nodes/lighting/ShadowNode.js +++ b/src/nodes/lighting/ShadowNode.js @@ -4,7 +4,7 @@ import { uniform } from '../core/UniformNode.js'; import { float, vec2, vec3, vec4, If, int, Fn, nodeObject } from '../tsl/TSLBase.js'; import { reference } from '../accessors/ReferenceNode.js'; import { texture } from '../accessors/TextureNode.js'; -import { positionWorld } from '../accessors/Position.js'; +import { positionView, positionWorld } from '../accessors/Position.js'; import { transformedNormalWorld } from '../accessors/Normal.js'; import { mix, fract, step, max, clamp, sqrt } from '../math/MathNode.js'; import { add, sub } from '../math/OperatorNode.js'; @@ -15,7 +15,8 @@ import { Loop } from '../utils/LoopNode.js'; import { screenCoordinate } from '../display/ScreenNode.js'; import { HalfFloatType, LessCompare, RGFormat, VSMShadowMap, WebGPUCoordinateSystem } from '../../constants.js'; import { renderGroup } from '../core/UniformGroupNode.js'; -import { viewZToLogarithmicDepth } from '../display/ViewportDepthNode.js'; +import { depth, linearDepth, viewZToLogarithmicDepth, viewZToPerspectiveDepth } from '../display/ViewportDepthNode.js'; +import { modelViewProjection, objectPosition } from '../TSL.js'; const shadowWorldPosition = vec3().toVar( 'shadowWorldPosition' ); @@ -298,18 +299,28 @@ class ShadowNode extends Node { const { renderer } = builder; + const shadow = this.shadow; + const shadowMapType = renderer.shadowMap.type; + if ( _overrideMaterial === null ) { + const nearDistance = reference( 'near', 'float', shadow.camera ).setGroup( renderGroup ); + const farDistance = reference( 'far', 'float', shadow.camera ).setGroup( renderGroup ); + + const referencePosition = objectPosition( shadow.camera ); + + let dist = positionWorld.sub( referencePosition ).length(); + dist = dist.sub( nearDistance ).div( farDistance.sub( nearDistance ) ); + dist = dist.saturate(); // clamp to [ 0, 1 ] + _overrideMaterial = new NodeMaterial(); _overrideMaterial.fragmentNode = vec4( 0, 0, 0, 1 ); + _overrideMaterial.depthNode = dist; _overrideMaterial.isShadowNodeMaterial = true; // Use to avoid other overrideMaterial override material.fragmentNode unintentionally when using material.shadowNode _overrideMaterial.name = 'ShadowMaterial'; } - const shadow = this.shadow; - const shadowMapType = renderer.shadowMap.type; - const depthTexture = new DepthTexture( shadow.mapSize.width, shadow.mapSize.height ); depthTexture.compareFunction = LessCompare; @@ -364,7 +375,7 @@ class ShadowNode extends Node { const shadowDepthTexture = ( shadowMapType === VSMShadowMap ) ? this.vsmShadowMapHorizontal.texture : depthTexture; - const shadowNode = this.setupShadowFilter( builder, { filterFn, depthTexture: shadowDepthTexture, shadowCoord, shadow } ); + const shadowNode = this.setupShadowFilter( builder, { filterFn, shadowTexture: shadowMap.texture, depthTexture: shadowDepthTexture, shadowCoord, shadow } ); const shadowColor = texture( shadowMap.texture, shadowCoord ); const shadowOutput = mix( 1, shadowNode.rgb.mix( shadowColor, 1 ), shadowIntensity.mul( shadowColor.a ) ).toVar(); From 6a84076d6e5c26cc31e67a0a073e950e47e8929c Mon Sep 17 00:00:00 2001 From: sunag Date: Wed, 20 Nov 2024 23:42:30 -0300 Subject: [PATCH 07/15] revision --- examples/webgpu_lights_physical.html | 39 ++--------------- .../nodes/manager/NodeMaterialObserver.js | 23 +++++----- src/nodes/lighting/PointShadowNode.js | 21 +++++---- src/nodes/lighting/ShadowNode.js | 43 +++++++++++++------ src/renderers/common/RenderObject.js | 6 ++- 5 files changed, 63 insertions(+), 69 deletions(-) diff --git a/examples/webgpu_lights_physical.html b/examples/webgpu_lights_physical.html index 4825ddc8d71001..1d0f1eb7dc8ec0 100644 --- a/examples/webgpu_lights_physical.html +++ b/examples/webgpu_lights_physical.html @@ -1,7 +1,7 @@ - three.js webgpu - lights - physical lights + three.js webgpu - physical lights @@ -35,7 +35,6 @@ let camera, scene, renderer, bulbLight, bulbMat, hemiLight, stats; let ballMat, cubeMat, floorMat; - let postProcessing; let previousShadowMap = false; @@ -82,6 +81,7 @@ stats = new Stats(); container.appendChild( stats.dom ); + // camera = new THREE.PerspectiveCamera( 50, window.innerWidth / window.innerHeight, 0.1, 100 ); camera.position.x = - 4; @@ -219,27 +219,14 @@ boxMesh2.castShadow = true; scene.add( boxMesh2 ); - const boxMesh4 = new THREE.Mesh( boxGeometry, cubeMat ); - boxMesh4.position.set( 0, 0.25, 0 ); - boxMesh4.castShadow = true; - //scene.add( boxMesh4 ); - const boxMesh3 = new THREE.Mesh( boxGeometry, cubeMat ); boxMesh3.position.set( 7, 0.25, 0 ); boxMesh3.castShadow = true; scene.add( boxMesh3 ); - const walls = new THREE.Mesh( new THREE.BoxGeometry( 20, 20, 20 ), floorMat ); - walls.position.set( 0, 9, 0 ); - walls.castShadow = true; - //walls.material.side = THREE.DoubleSide; - walls.geometry.scale( - 1, 1, 1 ); - scene.add( walls ); - // - renderer = new THREE.WebGPURenderer( { forceWebGL: false } ); - console.log( renderer.backend ); + renderer = new THREE.WebGPURenderer(); renderer.setPixelRatio( window.devicePixelRatio ); renderer.setSize( window.innerWidth, window.innerHeight ); renderer.setAnimationLoop( animate ); @@ -248,17 +235,13 @@ renderer.toneMapping = THREE.ReinhardToneMapping; container.appendChild( renderer.domElement ); - - postProcessing = new THREE.PostProcessing( renderer ); - - - const controls = new OrbitControls( camera, renderer.domElement ); controls.minDistance = 1; controls.maxDistance = 20; window.addEventListener( 'resize', onWindowResize ); + // const gui = new GUI(); @@ -303,23 +286,9 @@ const time = Date.now() * 0.0005; bulbLight.position.y = Math.cos( time ) * 0.75 + 1.25; - //bulbLight.position.y = .5; - //bulbLight.position.y = 1.5; - //bulbLight.position.y = 1.5; renderer.render( scene, camera ); - /*if ( ! postProcessing.test ) { - - const scenePass = THREE.pass( scene, camera ); - - postProcessing.outputNode = scenePass.add( THREE.texture( bulbLight.shadow.map.texture ) ); - postProcessing.test = true; - - }*/ - - //postProcessing.render(); - stats.update(); } diff --git a/src/materials/nodes/manager/NodeMaterialObserver.js b/src/materials/nodes/manager/NodeMaterialObserver.js index 7a227cee0cb031..d7865a70fb6bf7 100644 --- a/src/materials/nodes/manager/NodeMaterialObserver.js +++ b/src/materials/nodes/manager/NodeMaterialObserver.js @@ -85,7 +85,7 @@ class NodeMaterialObserver { if ( data === undefined ) { - const { geometry, material } = renderObject; + const { geometry, material, object } = renderObject; data = { material: this.getMaterialData( material ), @@ -94,18 +94,18 @@ class NodeMaterialObserver { indexVersion: geometry.index ? geometry.index.version : null, drawRange: { start: geometry.drawRange.start, count: geometry.drawRange.count } }, - worldMatrix: renderObject.object.matrixWorld.clone() + worldMatrix: object.matrixWorld.clone() }; - if ( renderObject.object.center ) { + if ( object.center ) { - data.center = renderObject.object.center.clone(); + data.center = object.center.clone(); } - if ( renderObject.object.morphTargetInfluences ) { + if ( object.morphTargetInfluences ) { - data.morphTargetInfluences = renderObject.object.morphTargetInfluences.slice(); + data.morphTargetInfluences = object.morphTargetInfluences.slice(); } @@ -289,7 +289,8 @@ class NodeMaterialObserver { } - // Compare each attribute + // compare each attribute + for ( const name of storedAttributeNames ) { const storedAttributeData = storedAttributes[ name ]; @@ -297,7 +298,7 @@ class NodeMaterialObserver { if ( attribute === undefined ) { - // Attribute was removed + // attribute was removed delete storedAttributes[ name ]; return false; @@ -312,7 +313,8 @@ class NodeMaterialObserver { } - // Check index + // check index + const index = geometry.index; const storedIndexVersion = storedGeometryData.indexVersion; const currentIndexVersion = index ? index.version : null; @@ -324,7 +326,8 @@ class NodeMaterialObserver { } - // Check drawRange + // check drawRange + if ( storedGeometryData.drawRange.start !== geometry.drawRange.start || storedGeometryData.drawRange.count !== geometry.drawRange.count ) { storedGeometryData.drawRange.start = geometry.drawRange.start; diff --git a/src/nodes/lighting/PointShadowNode.js b/src/nodes/lighting/PointShadowNode.js index 38f253d44cb8a1..c70af38a2fc7bf 100644 --- a/src/nodes/lighting/PointShadowNode.js +++ b/src/nodes/lighting/PointShadowNode.js @@ -1,15 +1,16 @@ import ShadowNode from './ShadowNode.js'; import { uniform } from '../core/UniformNode.js'; -import { float, vec2, vec3, If, Fn, nodeObject } from '../tsl/TSLBase.js'; +import { float, vec2, If, Fn, nodeObject } from '../tsl/TSLBase.js'; import { reference } from '../accessors/ReferenceNode.js'; import { texture } from '../accessors/TextureNode.js'; -import { mix, max, abs, sign } from '../math/MathNode.js'; -import { sub, div, mul } from '../math/OperatorNode.js'; +import { max, abs, sign } from '../math/MathNode.js'; +import { sub, div } from '../math/OperatorNode.js'; import { renderGroup } from '../core/UniformGroupNode.js'; import { Vector2 } from '../../math/Vector2.js'; import { Vector4 } from '../../math/Vector4.js'; -import { glslFn } from '../code/FunctionNode.js'; -import { perspectiveDepthToViewZ } from '../TSL.js'; +import { Color } from '../../math/Color.js'; + +const _clearColor = /*@__PURE__*/ new Color(); // cubeToUV() maps a 3D direction vector suitable for cube texture mapping to a 2D // vector suitable for 2D texture mapping. This code uses the following layout for the @@ -89,7 +90,7 @@ export const cubeToUV = /*@__PURE__*/ Fn( ( [ pos, texelSizeY ] ) => { name: 'cubeToUV', type: 'vec2', inputs: [ - { name: 'v', type: 'vec3' }, + { name: 'pos', type: 'vec3' }, { name: 'texelSizeY', type: 'float' } ] } ); @@ -179,8 +180,11 @@ class PointShadowNode extends ShadowNode { const previousAutoClear = renderer.autoClear; + const previousClearColor = renderer.getClearColor( _clearColor ); + const previousClearAlpha = renderer.getClearAlpha(); + renderer.autoClear = false; - renderer.setClearColor( 0xffffff, 1 ); + renderer.setClearColor( shadow.clearColor, shadow.clearAlpha ); renderer.clear(); const viewportCount = shadow.getViewportCount(); @@ -200,8 +204,6 @@ class PointShadowNode extends ShadowNode { ); shadowMap.viewport.copy( _viewport ); - //shadowMap.scissor.copy( _viewport ); - //shadowMap.scissorTest = true; shadow.updateMatrices( light, vp ); @@ -212,6 +214,7 @@ class PointShadowNode extends ShadowNode { // renderer.autoClear = previousAutoClear; + renderer.setClearColor( previousClearColor, previousClearAlpha ); } diff --git a/src/nodes/lighting/ShadowNode.js b/src/nodes/lighting/ShadowNode.js index 010351f95422eb..9a54ff24371b84 100644 --- a/src/nodes/lighting/ShadowNode.js +++ b/src/nodes/lighting/ShadowNode.js @@ -4,7 +4,7 @@ import { uniform } from '../core/UniformNode.js'; import { float, vec2, vec3, vec4, If, int, Fn, nodeObject } from '../tsl/TSLBase.js'; import { reference } from '../accessors/ReferenceNode.js'; import { texture } from '../accessors/TextureNode.js'; -import { positionView, positionWorld } from '../accessors/Position.js'; +import { positionWorld } from '../accessors/Position.js'; import { transformedNormalWorld } from '../accessors/Normal.js'; import { mix, fract, step, max, clamp, sqrt } from '../math/MathNode.js'; import { add, sub } from '../math/OperatorNode.js'; @@ -15,11 +15,34 @@ import { Loop } from '../utils/LoopNode.js'; import { screenCoordinate } from '../display/ScreenNode.js'; import { HalfFloatType, LessCompare, RGFormat, VSMShadowMap, WebGPUCoordinateSystem } from '../../constants.js'; import { renderGroup } from '../core/UniformGroupNode.js'; -import { depth, linearDepth, viewZToLogarithmicDepth, viewZToPerspectiveDepth } from '../display/ViewportDepthNode.js'; -import { modelViewProjection, objectPosition } from '../TSL.js'; +import { viewZToLogarithmicDepth } from '../display/ViewportDepthNode.js'; +import { objectPosition } from '../accessors/Object3DNode.js'; const shadowWorldPosition = vec3().toVar( 'shadowWorldPosition' ); +const linearDistance = Fn( ( [ position, cameraNear, cameraFar ] ) => { + + let dist = positionWorld.sub( position ).length(); + dist = dist.sub( cameraNear ).div( cameraFar.sub( cameraNear ) ); + dist = dist.saturate(); // clamp to [ 0, 1 ] + + return dist; + +} ); + +const linearShadowDistance = ( light ) => { + + const camera = light.shadow.camera; + + const nearDistance = reference( 'near', 'float', camera ).setGroup( renderGroup ); + const farDistance = reference( 'far', 'float', camera ).setGroup( renderGroup ); + + const referencePosition = objectPosition( light ); + + return linearDistance( referencePosition, nearDistance, farDistance ); + +}; + const BasicShadowMap = Fn( ( { depthTexture, shadowCoord } ) => { return texture( depthTexture, shadowCoord.xy ).compare( shadowCoord.z ); @@ -299,23 +322,17 @@ class ShadowNode extends Node { const { renderer } = builder; - const shadow = this.shadow; + const { light, shadow } = this; + const shadowMapType = renderer.shadowMap.type; if ( _overrideMaterial === null ) { - const nearDistance = reference( 'near', 'float', shadow.camera ).setGroup( renderGroup ); - const farDistance = reference( 'far', 'float', shadow.camera ).setGroup( renderGroup ); - - const referencePosition = objectPosition( shadow.camera ); - - let dist = positionWorld.sub( referencePosition ).length(); - dist = dist.sub( nearDistance ).div( farDistance.sub( nearDistance ) ); - dist = dist.saturate(); // clamp to [ 0, 1 ] + const depthNode = light.isPointLight ? linearShadowDistance( light ) : null; _overrideMaterial = new NodeMaterial(); _overrideMaterial.fragmentNode = vec4( 0, 0, 0, 1 ); - _overrideMaterial.depthNode = dist; + _overrideMaterial.depthNode = depthNode; _overrideMaterial.isShadowNodeMaterial = true; // Use to avoid other overrideMaterial override material.fragmentNode unintentionally when using material.shadowNode _overrideMaterial.name = 'ShadowMaterial'; diff --git a/src/renderers/common/RenderObject.js b/src/renderers/common/RenderObject.js index 93d47a916e12b3..50daed6be71425 100644 --- a/src/renderers/common/RenderObject.js +++ b/src/renderers/common/RenderObject.js @@ -1,4 +1,4 @@ -import { hash, hashString } from '../../nodes/core/NodeUtils.js'; +import { hashString } from '../../nodes/core/NodeUtils.js'; let _id = 0; @@ -379,6 +379,8 @@ export default class RenderObject { } + cacheKey += object.receiveShadow + ','; + return hashString( cacheKey ); } @@ -403,7 +405,7 @@ export default class RenderObject { if ( this.object.receiveShadow ) { - cacheKey = hash( cacheKey, 1 ); + cacheKey += 1; } From 0a2af21f0b2e52c8fce6b6c9959c8aaaf0cbc2a5 Mon Sep 17 00:00:00 2001 From: sunag Date: Wed, 20 Nov 2024 23:44:12 -0300 Subject: [PATCH 08/15] Update webgpu_lights_physical.jpg --- .../screenshots/webgpu_lights_physical.jpg | Bin 25245 -> 78048 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/screenshots/webgpu_lights_physical.jpg b/examples/screenshots/webgpu_lights_physical.jpg index 09f1cf51f9e4373670d9002bce5faad5c6584075..8188986d198ff52a4248b8b8160aa0346d5e93af 100644 GIT binary patch literal 78048 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 From b2ea115d3255d4e3169dd46091bcacc50e5a4bf9 Mon Sep 17 00:00:00 2001 From: sunag Date: Thu, 21 Nov 2024 00:41:11 -0300 Subject: [PATCH 09/15] ShadowNode: Add `getShadowFilterFn` --- src/nodes/lighting/ShadowNode.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/nodes/lighting/ShadowNode.js b/src/nodes/lighting/ShadowNode.js index 9a54ff24371b84..8ecaf163beb333 100644 --- a/src/nodes/lighting/ShadowNode.js +++ b/src/nodes/lighting/ShadowNode.js @@ -318,6 +318,12 @@ class ShadowNode extends Node { } + getShadowFilterFn( type ) { + + return _shadowFilterLib[ type ]; + + } + setupShadow( builder ) { const { renderer } = builder; @@ -382,7 +388,7 @@ class ShadowNode extends Node { // - const filterFn = shadow.filterNode || _shadowFilterLib[ renderer.shadowMap.type ] || null; + const filterFn = shadow.filterNode || this.getShadowFilterFn( renderer.shadowMap.type ) || null; if ( filterFn === null ) { From 555622873e54387d98212e6bbb3a4004fe39b3ce Mon Sep 17 00:00:00 2001 From: sunag Date: Thu, 21 Nov 2024 00:41:54 -0300 Subject: [PATCH 10/15] Add `Fn` sufix for shadow filters TSL function --- src/nodes/lighting/ShadowNode.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/nodes/lighting/ShadowNode.js b/src/nodes/lighting/ShadowNode.js index 8ecaf163beb333..f88fe452c4c955 100644 --- a/src/nodes/lighting/ShadowNode.js +++ b/src/nodes/lighting/ShadowNode.js @@ -43,13 +43,13 @@ const linearShadowDistance = ( light ) => { }; -const BasicShadowMap = Fn( ( { depthTexture, shadowCoord } ) => { +const BasicShadowFn = Fn( ( { depthTexture, shadowCoord } ) => { return texture( depthTexture, shadowCoord.xy ).compare( shadowCoord.z ); } ); -const PCFShadowMap = Fn( ( { depthTexture, shadowCoord, shadow } ) => { +const PCFShadowFn = Fn( ( { depthTexture, shadowCoord, shadow } ) => { const depthCompare = ( uv, compare ) => texture( depthTexture, uv ).compare( compare ); @@ -88,7 +88,7 @@ const PCFShadowMap = Fn( ( { depthTexture, shadowCoord, shadow } ) => { } ); -const PCFSoftShadowMap = Fn( ( { depthTexture, shadowCoord, shadow } ) => { +const PCFSoftShadowFn = Fn( ( { depthTexture, shadowCoord, shadow } ) => { const depthCompare = ( uv, compare ) => texture( depthTexture, uv ).compare( compare ); @@ -146,7 +146,7 @@ const PCFSoftShadowMap = Fn( ( { depthTexture, shadowCoord, shadow } ) => { // VSM -const VSMShadowMapNode = Fn( ( { depthTexture, shadowCoord } ) => { +const VSMShadowFn = Fn( ( { depthTexture, shadowCoord } ) => { const occlusion = float( 1 ).toVar(); @@ -220,7 +220,7 @@ const VSMPassHorizontal = Fn( ( { samples, radius, size, shadowPass } ) => { } ); -const _shadowFilterLib = [ BasicShadowMap, PCFShadowMap, PCFSoftShadowMap, VSMShadowMapNode ]; +const _shadowFilterLib = [ BasicShadowFn, PCFShadowFn, PCFSoftShadowFn, VSMShadowFn ]; // From b12a9e63f7dd73cbcd79679b77cbca5cf25e38d7 Mon Sep 17 00:00:00 2001 From: sunag Date: Thu, 21 Nov 2024 00:42:22 -0300 Subject: [PATCH 11/15] PointShadowNode: add percentage-closer filtering --- src/nodes/lighting/PointShadowNode.js | 43 ++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 7 deletions(-) diff --git a/src/nodes/lighting/PointShadowNode.js b/src/nodes/lighting/PointShadowNode.js index c70af38a2fc7bf..4e0c44c7c0dcc5 100644 --- a/src/nodes/lighting/PointShadowNode.js +++ b/src/nodes/lighting/PointShadowNode.js @@ -9,6 +9,7 @@ import { renderGroup } from '../core/UniformGroupNode.js'; import { Vector2 } from '../../math/Vector2.js'; import { Vector4 } from '../../math/Vector4.js'; import { Color } from '../../math/Color.js'; +import { BasicShadowMap } from '../../constants.js'; const _clearColor = /*@__PURE__*/ new Color(); @@ -84,7 +85,7 @@ export const cubeToUV = /*@__PURE__*/ Fn( ( [ pos, texelSizeY ] ) => { // scale := 0.5 / dim // translate := ( center + 0.5 ) / dim - return vec2( 0.125, 0.25 ).mul( planar ).add( vec2( 0.375, 0.75 ) ); + return vec2( 0.125, 0.25 ).mul( planar ).add( vec2( 0.375, 0.75 ) ).flipY(); } ).setLayout( { name: 'cubeToUV', @@ -95,7 +96,31 @@ export const cubeToUV = /*@__PURE__*/ Fn( ( [ pos, texelSizeY ] ) => { ] } ); -const BasicShadowMap = Fn( ( { depthTexture, shadowCoord, shadow } ) => { +const BasicShadowFn = Fn( ( { depthTexture, bd3D, dp, texelSize } ) => { + + return texture( depthTexture, cubeToUV( bd3D, texelSize.y ) ).compare( dp ); + +} ); + +const FilteredShadowFn = Fn( ( { depthTexture, bd3D, dp, texelSize, shadow } ) => { + + const radius = reference( 'radius', 'float', shadow ).setGroup( renderGroup ); + const offset = vec2( - 1.0, 1.0 ).mul( radius ).mul( texelSize.y ); + + return texture( depthTexture, cubeToUV( bd3D.add( offset.xyy ), texelSize.y ) ).compare( dp ) + .add( texture( depthTexture, cubeToUV( bd3D.add( offset.yyy ), texelSize.y ) ).compare( dp ) ) + .add( texture( depthTexture, cubeToUV( bd3D.add( offset.xyx ), texelSize.y ) ).compare( dp ) ) + .add( texture( depthTexture, cubeToUV( bd3D.add( offset.yyx ), texelSize.y ) ).compare( dp ) ) + .add( texture( depthTexture, cubeToUV( bd3D, texelSize.y ) ).compare( dp ) ) + .add( texture( depthTexture, cubeToUV( bd3D.add( offset.xxy ), texelSize.y ) ).compare( dp ) ) + .add( texture( depthTexture, cubeToUV( bd3D.add( offset.yxy ), texelSize.y ) ).compare( dp ) ) + .add( texture( depthTexture, cubeToUV( bd3D.add( offset.xxx ), texelSize.y ) ).compare( dp ) ) + .add( texture( depthTexture, cubeToUV( bd3D.add( offset.yxx ), texelSize.y ) ).compare( dp ) ) + .mul( 1.0 / 9.0 ); + +} ); + +const pointShadowFilter = Fn( ( { filterFn, depthTexture, shadowCoord, shadow } ) => { // for point lights, the uniform @vShadowCoord is re-purposed to hold // the vector from the light to the world-space position of the fragment. @@ -119,10 +144,8 @@ const BasicShadowMap = Fn( ( { depthTexture, shadowCoord, shadow } ) => { const bd3D = lightToPosition.normalize(); const texelSize = vec2( 1.0 ).div( mapSize.mul( vec2( 4.0, 2.0 ) ) ); - const uv = cubeToUV( bd3D, texelSize.y ); - - // no percentage-closer filtering - result.assign( texture( depthTexture, uv.flipY() ).compare( dp ).select( 1, 0 ) ); + // percentage-closer filtering + result.assign( filterFn( { depthTexture, bd3D, dp, texelSize, shadow } ) ); } ); @@ -150,6 +173,12 @@ class PointShadowNode extends ShadowNode { } + getShadowFilterFn( type ) { + + return type === BasicShadowMap ? BasicShadowFn : FilteredShadowFn; + + } + setupShadowCoord( builder, shadowPosition ) { return shadowPosition; @@ -158,7 +187,7 @@ class PointShadowNode extends ShadowNode { setupShadowFilter( builder, { filterFn, shadowTexture, depthTexture, shadowCoord, shadow } ) { - return BasicShadowMap( { shadowTexture, depthTexture, shadowCoord, shadow } ); + return pointShadowFilter( { filterFn, shadowTexture, depthTexture, shadowCoord, shadow } ); } From 42c04f5d93d535ec404da39ed7cb36a506014c56 Mon Sep 17 00:00:00 2001 From: sunag Date: Thu, 21 Nov 2024 00:43:03 -0300 Subject: [PATCH 12/15] update example --- .../screenshots/webgpu_lights_physical.jpg | Bin 78048 -> 77986 bytes examples/webgpu_lights_physical.html | 1 - 2 files changed, 1 deletion(-) diff --git a/examples/screenshots/webgpu_lights_physical.jpg b/examples/screenshots/webgpu_lights_physical.jpg index 8188986d198ff52a4248b8b8160aa0346d5e93af..b57683e1e8f67c9ad39bd99726b64a97140a3b96 100644 GIT binary patch delta 74208 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

9M*O0l4{oR*jp2q?QNn$>wuYic~FHrb(0V; zVB8L|nb5vwvGrO)Z?JJ6_4A)TIVmYz}gJ zH9TQTK1xVC@yTsWFZUuBzC2W`L`d<2l2jw~b;^UzU`Hs;oW7W~W$(Gtpz&;rGq;~W z>xLs9HKF8!5#I*X3N>hk@~wHolUk>*+#j+J=MO0TsSQQj1(i7oNWcx2NyMC8IVy=o z5HK9pp-&Kj{@*FH;Sc52=a>#I+XF z1VF`-;tCwLv;fGV#t>oHk+$>~6Kx|^fhiTJV-W^-(H4&}uFtzvdV19oU2-xz^!+Ex zrAu7$#d;5r$;6#bAkx@!eM(;!ISuys&8>Jok3jmDXw47Qgufr}jXvF#QS+f%byxkb zLb^mDT=r8&kBanr-%*o3VU;w#eSNE}9 zffb_LQ0#^`q0XyQ7t(J#$dACvi6KX|)|HsgIxU=>4aai|W zI?!Ev)T~*f%L)ypB#6+e9f_UPOa~o`RuHvY#12IUiO@xBmylE@DEyewW#JNc^TNc=fr~1pkI%}kIHM1mfI&-3%zCd^KhgtA9GG!7 z?g{HFjIJ|xyuEMh!tQDMT%3Y^*z;TSW4htwL6ans$=Jir$W(=Yj=3w(#{WAGg22&> zXdinB4ZO80ppM$j56ulWjVaIUrM9)UeBW&v6@IAI_-yje-8{3*MZd^omT|3;YlP@? zfoq#GJuAN*IRu)oEuOA^+K!-%YJwO|nT|NlGD|!oc)WiqT*ee+YRmmSiP75@QTH`- zbLMa4n?LwS6QcwZikM;FV>v_>Avox?_j2A=DivQ@Nl~-C%VZdz|Gp~tiPEAnDSZ&K z$rArJew44F zf*WCKk)Wp=x!vMLQ!WQH(w3*SnM54+jQ|qgJl=gH53C*b%kavRitckCvmO&7AAd^8 zB0B`NRY7qTSj^xOdMYH3SWq@@S=x1BF=&Ynndy62j&;U~eri71lQ(*9uMg5@@xt1J zDQ&S_E%X}i)tX=&eySLawqE$wTiS{zWel!s6Q>r2n0Fma-#&CV%!One-=W5T<6+Q^ zsgMm-SC-no8)jr3L1k&!3w&wO;AP_asuxRl#Cj{#k-<5+In837zQoJG#@xOmU-;Sn z*=5u&1&#BLD#fi6FS-lA{u)q}rw#K|Dk$}(Wa!;lB7@xS66cNvxLdf2Ai~l0nYQ1= zt$Ne4jKKaJW>69)XoRJKx_mgk9K(=GNyF5NjQ{8e*3xdC_@hc$#qG{_a^&XO1Dy-V z5F9LI!6m5MZq|_36bAwNlEsCstd?TGGANf*u|jI7_Iw%Ew^MpA{K1Wp2TszEcViBg zhMg*&nJV2@XyEPJ&ZG-R91I6t@(>VVOxH#`|RuG`|od0Cj9~ztGhO6jVMpn$3d<42}l_ruE4t` zENh$=y%W1?$05cU@e+>P+^Bf?Y-LhE%&kpi`|_LuTCr_BtM-nr+lc+W+98{W=8K;e zch_=HpO_z;5VgG`>tm>mbnHK797nFNgH$ldXx}w2(Q|um?FhgZ)l6f6y({0JDTglmolbvvXPdqf9~_Wb7(Q&3(!AJ4kg`)iBxiBb8a+2KgWf}T!h&^RVC2Ni`` zX(b66RO*tj+hR2t~ zE9Dx7@@(-U-ORW+jqkPmm&g9-0TOn8to?9O-3G4S=(W+}JHF9c1=rp{XQV&^mps#g z%WA(l;r>}TF5vwnv;NJZY7vUn#SgZ*`P}Z7{Ai4`wcPi#gE=;7?N{wSM^N1r!!M=F zxL&z+8gqhOe>E+5E{gmGXn?}eI7>9#wZ_r(x>*Btuq8kU#wxc(c^|)Ot*A786DLo

;5UzMst9m9Pd2@~)eH!IN<+X#B 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 delta 74271 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­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 Date: Thu, 21 Nov 2024 00:58:14 -0300 Subject: [PATCH 13/15] add __PURE__ --- src/nodes/lighting/PointShadowNode.js | 6 +++--- src/nodes/lighting/ShadowNode.js | 16 ++++++++-------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/nodes/lighting/PointShadowNode.js b/src/nodes/lighting/PointShadowNode.js index 4e0c44c7c0dcc5..198eade608f069 100644 --- a/src/nodes/lighting/PointShadowNode.js +++ b/src/nodes/lighting/PointShadowNode.js @@ -96,13 +96,13 @@ export const cubeToUV = /*@__PURE__*/ Fn( ( [ pos, texelSizeY ] ) => { ] } ); -const BasicShadowFn = Fn( ( { depthTexture, bd3D, dp, texelSize } ) => { +const BasicShadowFn = /*@__PURE__*/ Fn( ( { depthTexture, bd3D, dp, texelSize } ) => { return texture( depthTexture, cubeToUV( bd3D, texelSize.y ) ).compare( dp ); } ); -const FilteredShadowFn = Fn( ( { depthTexture, bd3D, dp, texelSize, shadow } ) => { +const FilteredShadowFn = /*@__PURE__*/ Fn( ( { depthTexture, bd3D, dp, texelSize, shadow } ) => { const radius = reference( 'radius', 'float', shadow ).setGroup( renderGroup ); const offset = vec2( - 1.0, 1.0 ).mul( radius ).mul( texelSize.y ); @@ -120,7 +120,7 @@ const FilteredShadowFn = Fn( ( { depthTexture, bd3D, dp, texelSize, shadow } ) = } ); -const pointShadowFilter = Fn( ( { filterFn, depthTexture, shadowCoord, shadow } ) => { +const pointShadowFilter = /*@__PURE__*/ Fn( ( { filterFn, depthTexture, shadowCoord, shadow } ) => { // for point lights, the uniform @vShadowCoord is re-purposed to hold // the vector from the light to the world-space position of the fragment. diff --git a/src/nodes/lighting/ShadowNode.js b/src/nodes/lighting/ShadowNode.js index f88fe452c4c955..1ce5038a4feb78 100644 --- a/src/nodes/lighting/ShadowNode.js +++ b/src/nodes/lighting/ShadowNode.js @@ -18,9 +18,9 @@ import { renderGroup } from '../core/UniformGroupNode.js'; import { viewZToLogarithmicDepth } from '../display/ViewportDepthNode.js'; import { objectPosition } from '../accessors/Object3DNode.js'; -const shadowWorldPosition = vec3().toVar( 'shadowWorldPosition' ); +const shadowWorldPosition = /*@__PURE__*/ vec3().toVar( 'shadowWorldPosition' ); -const linearDistance = Fn( ( [ position, cameraNear, cameraFar ] ) => { +const linearDistance = /*@__PURE__*/ Fn( ( [ position, cameraNear, cameraFar ] ) => { let dist = positionWorld.sub( position ).length(); dist = dist.sub( cameraNear ).div( cameraFar.sub( cameraNear ) ); @@ -43,13 +43,13 @@ const linearShadowDistance = ( light ) => { }; -const BasicShadowFn = Fn( ( { depthTexture, shadowCoord } ) => { +const BasicShadowFn = /*@__PURE__*/ Fn( ( { depthTexture, shadowCoord } ) => { return texture( depthTexture, shadowCoord.xy ).compare( shadowCoord.z ); } ); -const PCFShadowFn = Fn( ( { depthTexture, shadowCoord, shadow } ) => { +const PCFShadowFn = /*@__PURE__*/ Fn( ( { depthTexture, shadowCoord, shadow } ) => { const depthCompare = ( uv, compare ) => texture( depthTexture, uv ).compare( compare ); @@ -88,7 +88,7 @@ const PCFShadowFn = Fn( ( { depthTexture, shadowCoord, shadow } ) => { } ); -const PCFSoftShadowFn = Fn( ( { depthTexture, shadowCoord, shadow } ) => { +const PCFSoftShadowFn = /*@__PURE__*/ Fn( ( { depthTexture, shadowCoord, shadow } ) => { const depthCompare = ( uv, compare ) => texture( depthTexture, uv ).compare( compare ); @@ -146,7 +146,7 @@ const PCFSoftShadowFn = Fn( ( { depthTexture, shadowCoord, shadow } ) => { // VSM -const VSMShadowFn = Fn( ( { depthTexture, shadowCoord } ) => { +const VSMShadowFn = /*@__PURE__*/ Fn( ( { depthTexture, shadowCoord } ) => { const occlusion = float( 1 ).toVar(); @@ -168,7 +168,7 @@ const VSMShadowFn = Fn( ( { depthTexture, shadowCoord } ) => { } ); -const VSMPassVertical = Fn( ( { samples, radius, size, shadowPass } ) => { +const VSMPassVertical = /*@__PURE__*/ Fn( ( { samples, radius, size, shadowPass } ) => { const mean = float( 0 ).toVar(); const squaredMean = float( 0 ).toVar(); @@ -194,7 +194,7 @@ const VSMPassVertical = Fn( ( { samples, radius, size, shadowPass } ) => { } ); -const VSMPassHorizontal = Fn( ( { samples, radius, size, shadowPass } ) => { +const VSMPassHorizontal = /*@__PURE__*/ Fn( ( { samples, radius, size, shadowPass } ) => { const mean = float( 0 ).toVar(); const squaredMean = float( 0 ).toVar(); From a4937f3a8ff541aa30c93e098ad17ac9f508faf7 Mon Sep 17 00:00:00 2001 From: sunag Date: Thu, 21 Nov 2024 01:14:34 -0300 Subject: [PATCH 14/15] rename shadow filters and `export` --- src/nodes/lighting/PointShadowNode.js | 6 +++--- src/nodes/lighting/ShadowNode.js | 10 +++++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/nodes/lighting/PointShadowNode.js b/src/nodes/lighting/PointShadowNode.js index 198eade608f069..c33e688287df13 100644 --- a/src/nodes/lighting/PointShadowNode.js +++ b/src/nodes/lighting/PointShadowNode.js @@ -96,13 +96,13 @@ export const cubeToUV = /*@__PURE__*/ Fn( ( [ pos, texelSizeY ] ) => { ] } ); -const BasicShadowFn = /*@__PURE__*/ Fn( ( { depthTexture, bd3D, dp, texelSize } ) => { +export const BasicPointShadowFilter = /*@__PURE__*/ Fn( ( { depthTexture, bd3D, dp, texelSize } ) => { return texture( depthTexture, cubeToUV( bd3D, texelSize.y ) ).compare( dp ); } ); -const FilteredShadowFn = /*@__PURE__*/ Fn( ( { depthTexture, bd3D, dp, texelSize, shadow } ) => { +export const PointShadowFilter = /*@__PURE__*/ Fn( ( { depthTexture, bd3D, dp, texelSize, shadow } ) => { const radius = reference( 'radius', 'float', shadow ).setGroup( renderGroup ); const offset = vec2( - 1.0, 1.0 ).mul( radius ).mul( texelSize.y ); @@ -175,7 +175,7 @@ class PointShadowNode extends ShadowNode { getShadowFilterFn( type ) { - return type === BasicShadowMap ? BasicShadowFn : FilteredShadowFn; + return type === BasicShadowMap ? BasicPointShadowFilter : PointShadowFilter; } diff --git a/src/nodes/lighting/ShadowNode.js b/src/nodes/lighting/ShadowNode.js index 1ce5038a4feb78..e088b24cc4766e 100644 --- a/src/nodes/lighting/ShadowNode.js +++ b/src/nodes/lighting/ShadowNode.js @@ -43,13 +43,13 @@ const linearShadowDistance = ( light ) => { }; -const BasicShadowFn = /*@__PURE__*/ Fn( ( { depthTexture, shadowCoord } ) => { +export const BasicShadowFilter = /*@__PURE__*/ Fn( ( { depthTexture, shadowCoord } ) => { return texture( depthTexture, shadowCoord.xy ).compare( shadowCoord.z ); } ); -const PCFShadowFn = /*@__PURE__*/ Fn( ( { depthTexture, shadowCoord, shadow } ) => { +export const PCFShadowFilter = /*@__PURE__*/ Fn( ( { depthTexture, shadowCoord, shadow } ) => { const depthCompare = ( uv, compare ) => texture( depthTexture, uv ).compare( compare ); @@ -88,7 +88,7 @@ const PCFShadowFn = /*@__PURE__*/ Fn( ( { depthTexture, shadowCoord, shadow } ) } ); -const PCFSoftShadowFn = /*@__PURE__*/ Fn( ( { depthTexture, shadowCoord, shadow } ) => { +export const PCFSoftShadowFilter = /*@__PURE__*/ Fn( ( { depthTexture, shadowCoord, shadow } ) => { const depthCompare = ( uv, compare ) => texture( depthTexture, uv ).compare( compare ); @@ -146,7 +146,7 @@ const PCFSoftShadowFn = /*@__PURE__*/ Fn( ( { depthTexture, shadowCoord, shadow // VSM -const VSMShadowFn = /*@__PURE__*/ Fn( ( { depthTexture, shadowCoord } ) => { +export const VSMShadowFilter = /*@__PURE__*/ Fn( ( { depthTexture, shadowCoord } ) => { const occlusion = float( 1 ).toVar(); @@ -220,7 +220,7 @@ const VSMPassHorizontal = /*@__PURE__*/ Fn( ( { samples, radius, size, shadowPas } ); -const _shadowFilterLib = [ BasicShadowFn, PCFShadowFn, PCFSoftShadowFn, VSMShadowFn ]; +const _shadowFilterLib = [ BasicShadowFilter, PCFShadowFilter, PCFSoftShadowFilter, VSMShadowFilter ]; // From c1c2e0cfe504ca4ee770d72f4b4da84d099d5059 Mon Sep 17 00:00:00 2001 From: sunag Date: Thu, 21 Nov 2024 01:14:39 -0300 Subject: [PATCH 15/15] Update webgpu_lights_physical.html --- examples/webgpu_lights_physical.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/webgpu_lights_physical.html b/examples/webgpu_lights_physical.html index 82515e817ef0aa..8fc7f91c762672 100644 --- a/examples/webgpu_lights_physical.html +++ b/examples/webgpu_lights_physical.html @@ -18,7 +18,7 @@