From 08ee34e0c9ad9e959ca1b776603bf766a16a8e72 Mon Sep 17 00:00:00 2001 From: sunag Date: Wed, 4 Feb 2026 14:44:17 -0300 Subject: [PATCH 1/4] TSL: Improve `retroPass` and example (#32954) --- examples/jsm/tsl/display/RetroPassNode.js | 129 +++++++++++++++--- .../webgpu_postprocessing_retro.jpg | Bin 61171 -> 67309 bytes examples/webgpu_postprocessing_retro.html | 113 +++++++++++++-- 3 files changed, 212 insertions(+), 30 deletions(-) diff --git a/examples/jsm/tsl/display/RetroPassNode.js b/examples/jsm/tsl/display/RetroPassNode.js index 2f6a9cb10e463f..bcf42e8b9de77d 100644 --- a/examples/jsm/tsl/display/RetroPassNode.js +++ b/examples/jsm/tsl/display/RetroPassNode.js @@ -1,5 +1,5 @@ -import { MeshBasicNodeMaterial, PassNode, UnsignedByteType, NearestFilter } from 'three/webgpu'; -import { float, vec2, vec4, Fn, uv, varying, cameraProjectionMatrix, cameraViewMatrix, positionWorld, screenSize, materialColor, replaceDefaultUV } from 'three/tsl'; +import { MeshBasicNodeMaterial, PassNode, UnsignedByteType, NearestFilter, CubeMapNode, MeshPhongNodeMaterial } from 'three/webgpu'; +import { float, vec2, vec4, Fn, uv, varying, cameraProjectionMatrix, cameraViewMatrix, positionWorld, screenSize, materialColor, uint, texture, uniform, context, reflectVector } from 'three/tsl'; const _affineUv = varying( vec2() ); const _w = varying( float() ); @@ -50,7 +50,8 @@ class RetroPassNode extends PassNode { super( PassNode.COLOR, scene, camera ); const { - affineDistortion = null + affineDistortion = null, + filterTextures = false } = options; this.setResolutionScale( .25 ); @@ -61,6 +62,8 @@ class RetroPassNode extends PassNode { this.affineDistortionNode = affineDistortion; + this.filterTextures = filterTextures; + this._materialCache = new Map(); } @@ -80,36 +83,125 @@ class RetroPassNode extends PassNode { renderer.setRenderObjectFunction( ( object, scene, camera, geometry, material, ...params ) => { - let retroMaterial = this._materialCache.get( material ); + const retroMaterialData = this._materialCache.get( material ); + + let retroMaterial; + + if ( retroMaterialData === undefined || retroMaterialData.version !== material.version ) { + + if ( retroMaterialData !== undefined ) { + + retroMaterialData.material.dispose(); + + } + + if ( material.isMeshBasicMaterial || material.isMeshBasicNodeMaterial ) { + + retroMaterial = new MeshBasicNodeMaterial(); - if ( retroMaterial === undefined ) { + } else { - retroMaterial = new MeshBasicNodeMaterial(); + retroMaterial = new MeshPhongNodeMaterial(); + + } retroMaterial.colorNode = material.colorNode || null; retroMaterial.opacityNode = material.opacityNode || null; retroMaterial.positionNode = material.positionNode || null; retroMaterial.vertexNode = material.vertexNode || _clipSpaceRetro; + let colorNode = material.colorNode || materialColor; + + if ( material.isMeshStandardNodeMaterial || material.isMeshStandardMaterial ) { + + const envMap = material.envMap || scene.environment; + + if ( envMap ) { + + const reflection = new CubeMapNode( texture( envMap ) ); + + let metalness; + + if ( material.metalnessNode ) { + + metalness = material.metalnessNode; + + } else { + + metalness = uniform( material.metalness ).onRenderUpdate( ( { material } ) => material.metalness ); + + if ( material.metalnessMap ) { + + const textureUniform = texture( material.metalnessMap ).onRenderUpdate( ( { material } ) => material.metalnessMap ); + + metalness = metalness.mul( textureUniform.b ); + + } + + } + + colorNode = metalness.mix( colorNode, reflection ); + + } + + } + + retroMaterial.colorNode = colorNode; + + // + + const contextData = {}; + if ( this.affineDistortionNode ) { - retroMaterial.colorNode = replaceDefaultUV( () => { + contextData.getUV = ( texture ) => { + + let finalUV; + + if ( texture.isCubeTextureNode ) { - return this.affineDistortionNode.mix( uv(), _affineUv.div( _w ) ); + finalUV = reflectVector; - }, retroMaterial.colorNode || materialColor ); + } else { + + finalUV = this.affineDistortionNode.mix( uv(), _affineUv.div( _w ) ); + + } + + return finalUV; + + }; } - this._materialCache.set( material, retroMaterial ); + if ( this.filterTextures !== true ) { + + contextData.getTextureLevel = () => uint( 0 ); + + } + + retroMaterial.contextNode = context( contextData ); + + // + + this._materialCache.set( material, { + material: retroMaterial, + version: material.version + } ); + + } else { + + retroMaterial = retroMaterialData.material; } - retroMaterial.map = material.map; - retroMaterial.color = material.color; - retroMaterial.opacity = material.opacity; - retroMaterial.transparent = material.transparent; - retroMaterial.side = material.side; + for ( const property in material ) { + + if ( retroMaterial[ property ] === undefined ) continue; + + retroMaterial[ property ] = material[ property ]; + + } renderer.renderObject( object, scene, camera, geometry, retroMaterial, ...params ); @@ -131,7 +223,12 @@ class RetroPassNode extends PassNode { super.dispose(); - this._materialCache.forEach( material => material.dispose() ); + this._materialCache.forEach( ( data ) => { + + data.material.dispose(); + + } ); + this._materialCache.clear(); } diff --git a/examples/screenshots/webgpu_postprocessing_retro.jpg b/examples/screenshots/webgpu_postprocessing_retro.jpg index 1585d761881f5098858eed06b50463d6ac72caf5..39626e76a866803303eaf9f474f0a6b977b6c376 100644 GIT binary patch literal 67309 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 M|G$5S|LXq#0Dh^DGynhq literal 61171 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 diff --git a/examples/webgpu_postprocessing_retro.html b/examples/webgpu_postprocessing_retro.html index 0b64507a806465..75377766b97b5d 100644 --- a/examples/webgpu_postprocessing_retro.html +++ b/examples/webgpu_postprocessing_retro.html @@ -35,7 +35,7 @@ + + + + + diff --git a/test/e2e/puppeteer.js b/test/e2e/puppeteer.js index d17e72cd02c84f..96452f43847399 100644 --- a/test/e2e/puppeteer.js +++ b/test/e2e/puppeteer.js @@ -39,6 +39,7 @@ const exceptionList = [ 'webgpu_test_memory', 'webgpu_texturegrad', 'webgpu_tsl_vfx_flames', + 'webgpu_volume_lighting_traa', // Need more time to render 'css3d_mixed', From 59335f4ab39fe76525012215fe8f4559719447c0 Mon Sep 17 00:00:00 2001 From: sunag Date: Wed, 4 Feb 2026 19:28:50 -0300 Subject: [PATCH 4/4] TSL: Cache `camera*` uniform nodes (#32938) --- src/nodes/accessors/Camera.js | 177 ++++++++++++++++++++---- src/nodes/accessors/UniformArrayNode.js | 2 + 2 files changed, 151 insertions(+), 28 deletions(-) diff --git a/src/nodes/accessors/Camera.js b/src/nodes/accessors/Camera.js index c42d3b6f15ab79..331d331c297a79 100644 --- a/src/nodes/accessors/Camera.js +++ b/src/nodes/accessors/Camera.js @@ -6,6 +6,29 @@ import { uniformArray } from './UniformArrayNode.js'; import { builtin } from './BuiltinNode.js'; import { screenSize } from '../display/ScreenNode.js'; +// Cache node uniforms + +let _cameraProjectionMatrixBase = null; +let _cameraProjectionMatrixArray = null; + +let _cameraProjectionMatrixInverseBase = null; +let _cameraProjectionMatrixInverseArray = null; + +let _cameraViewMatrixBase = null; +let _cameraViewMatrixArray = null; + +let _cameraWorldMatrixBase = null; +let _cameraWorldMatrixArray = null; + +let _cameraNormalMatrixBase = null; +let _cameraNormalMatrixArray = null; + +let _cameraPositionBase = null; +let _cameraPositionArray = null; + +let _cameraViewportBase = null; +let _cameraViewportArray = null; + /** * TSL object that represents the current `index` value of the camera if used ArrayCamera. * @@ -50,13 +73,27 @@ export const cameraProjectionMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => { } - const cameraProjectionMatrices = uniformArray( matrices ).setGroup( renderGroup ).setName( 'cameraProjectionMatrices' ); + if ( _cameraProjectionMatrixArray === null ) { + + _cameraProjectionMatrixArray = uniformArray( matrices ).setGroup( renderGroup ).setName( 'cameraProjectionMatrices' ); - cameraProjectionMatrix = cameraProjectionMatrices.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraProjectionMatrix' ); + } else { + + _cameraProjectionMatrixArray.array = matrices; + + } + + cameraProjectionMatrix = _cameraProjectionMatrixArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraProjectionMatrix' ); } else { - cameraProjectionMatrix = uniform( 'mat4' ).setName( 'cameraProjectionMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.projectionMatrix ); + if ( _cameraProjectionMatrixBase === null ) { + + _cameraProjectionMatrixBase = uniform( camera.projectionMatrix ).setName( 'cameraProjectionMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.projectionMatrix ); + + } + + cameraProjectionMatrix = _cameraProjectionMatrixBase; } @@ -84,13 +121,27 @@ export const cameraProjectionMatrixInverse = /*@__PURE__*/ ( Fn( ( { camera } ) } - const cameraProjectionMatricesInverse = uniformArray( matrices ).setGroup( renderGroup ).setName( 'cameraProjectionMatricesInverse' ); + if ( _cameraProjectionMatrixInverseArray === null ) { + + _cameraProjectionMatrixInverseArray = uniformArray( matrices ).setGroup( renderGroup ).setName( 'cameraProjectionMatricesInverse' ); - cameraProjectionMatrixInverse = cameraProjectionMatricesInverse.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraProjectionMatrixInverse' ); + } else { + + _cameraProjectionMatrixInverseArray.array = matrices; + + } + + cameraProjectionMatrixInverse = _cameraProjectionMatrixInverseArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraProjectionMatrixInverse' ); } else { - cameraProjectionMatrixInverse = uniform( 'mat4' ).setName( 'cameraProjectionMatrixInverse' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.projectionMatrixInverse ); + if ( _cameraProjectionMatrixInverseBase === null ) { + + _cameraProjectionMatrixInverseBase = uniform( camera.projectionMatrixInverse ).setName( 'cameraProjectionMatrixInverse' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.projectionMatrixInverse ); + + } + + cameraProjectionMatrixInverse = _cameraProjectionMatrixInverseBase; } @@ -118,13 +169,27 @@ export const cameraViewMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => { } - const cameraViewMatrices = uniformArray( matrices ).setGroup( renderGroup ).setName( 'cameraViewMatrices' ); + if ( _cameraViewMatrixArray === null ) { + + _cameraViewMatrixArray = uniformArray( matrices ).setGroup( renderGroup ).setName( 'cameraViewMatrices' ); - cameraViewMatrix = cameraViewMatrices.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraViewMatrix' ); + } else { + + _cameraViewMatrixArray.array = matrices; + + } + + cameraViewMatrix = _cameraViewMatrixArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraViewMatrix' ); } else { - cameraViewMatrix = uniform( 'mat4' ).setName( 'cameraViewMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.matrixWorldInverse ); + if ( _cameraViewMatrixBase === null ) { + + _cameraViewMatrixBase = uniform( camera.matrixWorldInverse ).setName( 'cameraViewMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.matrixWorldInverse ); + + } + + cameraViewMatrix = _cameraViewMatrixBase; } @@ -152,13 +217,27 @@ export const cameraWorldMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => { } - const cameraWorldMatrices = uniformArray( matrices ).setGroup( renderGroup ).setName( 'cameraWorldMatrices' ); + if ( _cameraWorldMatrixArray === null ) { + + _cameraWorldMatrixArray = uniformArray( matrices ).setGroup( renderGroup ).setName( 'cameraWorldMatrices' ); - cameraWorldMatrix = cameraWorldMatrices.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraWorldMatrix' ); + } else { + + _cameraWorldMatrixArray.array = matrices; + + } + + cameraWorldMatrix = _cameraWorldMatrixArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraWorldMatrix' ); } else { - cameraWorldMatrix = uniform( 'mat4' ).setName( 'cameraWorldMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.matrixWorld ); + if ( _cameraWorldMatrixBase === null ) { + + _cameraWorldMatrixBase = uniform( camera.matrixWorld ).setName( 'cameraWorldMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.matrixWorld ); + + } + + cameraWorldMatrix = _cameraWorldMatrixBase; } @@ -186,13 +265,27 @@ export const cameraNormalMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => { } - const cameraNormalMatrices = uniformArray( matrices ).setGroup( renderGroup ).setName( 'cameraNormalMatrices' ); + if ( _cameraNormalMatrixArray === null ) { + + _cameraNormalMatrixArray = uniformArray( matrices ).setGroup( renderGroup ).setName( 'cameraNormalMatrices' ); - cameraNormalMatrix = cameraNormalMatrices.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraNormalMatrix' ); + } else { + + _cameraNormalMatrixArray.array = matrices; + + } + + cameraNormalMatrix = _cameraNormalMatrixArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraNormalMatrix' ); } else { - cameraNormalMatrix = uniform( 'mat3' ).setName( 'cameraNormalMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.normalMatrix ); + if ( _cameraNormalMatrixBase === null ) { + + _cameraNormalMatrixBase = uniform( camera.normalMatrix ).setName( 'cameraNormalMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.normalMatrix ); + + } + + cameraNormalMatrix = _cameraNormalMatrixBase; } @@ -220,24 +313,38 @@ export const cameraPosition = /*@__PURE__*/ ( Fn( ( { camera } ) => { } - const cameraPositions = uniformArray( positions ).setGroup( renderGroup ).setName( 'cameraPositions' ).onRenderUpdate( ( { camera }, self ) => { + if ( _cameraPositionArray === null ) { + + _cameraPositionArray = uniformArray( positions ).setGroup( renderGroup ).setName( 'cameraPositions' ).onRenderUpdate( ( { camera }, self ) => { - const subCameras = camera.cameras; - const array = self.array; + const subCameras = camera.cameras; + const array = self.array; - for ( let i = 0, l = subCameras.length; i < l; i ++ ) { + for ( let i = 0, l = subCameras.length; i < l; i ++ ) { - array[ i ].setFromMatrixPosition( subCameras[ i ].matrixWorld ); + array[ i ].setFromMatrixPosition( subCameras[ i ].matrixWorld ); - } + } - } ); + } ); - cameraPosition = cameraPositions.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraPosition' ); + } else { + + _cameraPositionArray.array = positions; + + } + + cameraPosition = _cameraPositionArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraPosition' ); } else { - cameraPosition = uniform( new Vector3() ).setName( 'cameraPosition' ).setGroup( renderGroup ).onRenderUpdate( ( { camera }, self ) => self.value.setFromMatrixPosition( camera.matrixWorld ) ); + if ( _cameraPositionBase === null ) { + + _cameraPositionBase = uniform( new Vector3() ).setName( 'cameraPosition' ).setGroup( renderGroup ).onRenderUpdate( ( { camera }, self ) => self.value.setFromMatrixPosition( camera.matrixWorld ) ); + + } + + cameraPosition = _cameraPositionBase; } @@ -266,14 +373,28 @@ export const cameraViewport = /*@__PURE__*/ ( Fn( ( { camera } ) => { } - const cameraViewports = uniformArray( viewports, 'vec4' ).setGroup( renderGroup ).setName( 'cameraViewports' ); + if ( _cameraViewportArray === null ) { + + _cameraViewportArray = uniformArray( viewports, 'vec4' ).setGroup( renderGroup ).setName( 'cameraViewports' ); - cameraViewport = cameraViewports.element( cameraIndex ).toConst( 'cameraViewport' ); + } else { + + _cameraViewportArray.array = viewports; + + } + + cameraViewport = _cameraViewportArray.element( cameraIndex ).toConst( 'cameraViewport' ); } else { - // Fallback for single camera - cameraViewport = vec4( 0, 0, screenSize.x, screenSize.y ).toConst( 'cameraViewport' ); + if ( _cameraViewportBase === null ) { + + // Fallback for single camera + _cameraViewportBase = vec4( 0, 0, screenSize.x, screenSize.y ).toConst( 'cameraViewport' ); + + } + + cameraViewport = _cameraViewportBase; } diff --git a/src/nodes/accessors/UniformArrayNode.js b/src/nodes/accessors/UniformArrayNode.js index c21fa795fb812d..e05d8ace7a1fcc 100644 --- a/src/nodes/accessors/UniformArrayNode.js +++ b/src/nodes/accessors/UniformArrayNode.js @@ -315,6 +315,8 @@ class UniformArrayNode extends BufferNode { this.bufferCount = length; this.bufferType = paddedType; + this.update(); // initialize the buffer values + return super.setup( builder ); }