From 40523bd18a8bc0d6f97e21a2eeba136cc28ba84a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=97=E7=82=B3=E6=9D=83?= <695601626@qq.com> Date: Sat, 22 Aug 2026 16:00:29 +0800 Subject: [PATCH 1/8] test: fix lint error (#34345) --- eslint.config.js | 2 ++ test/unit/addons/tsl/GPUTest.tests.js | 3 +-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/eslint.config.js b/eslint.config.js index f2893072bd2ba1..5dfea21c51e5af 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -13,6 +13,8 @@ export default [ '**/node_modules/**', '**/build/**', 'examples/jsm/libs/**', + 'test/treeshake/*.bundle.js', + 'test/treeshake/*.bundle.min.js', 'editor/js/libs/acorn/**', 'editor/js/libs/codemirror/**', 'editor/js/libs/tern-threejs/**', diff --git a/test/unit/addons/tsl/GPUTest.tests.js b/test/unit/addons/tsl/GPUTest.tests.js index 085ede72266529..99fefbdcfbe4b9 100644 --- a/test/unit/addons/tsl/GPUTest.tests.js +++ b/test/unit/addons/tsl/GPUTest.tests.js @@ -1,5 +1,4 @@ -import { hash, vec3, float } from 'three/tsl'; -import { sRGBTransferEOTF, sRGBTransferOETF } from 'three/tsl'; +import { hash, vec3, float, sRGBTransferEOTF, sRGBTransferOETF } from 'three/tsl'; import { gpuTest, gpuFuzzTest } from './gpu-test-utils.js'; export default QUnit.module( 'TSL', () => { From 6306135b833de273c7a98178a60630ebdf74d718 Mon Sep 17 00:00:00 2001 From: Ben Houston Date: Sat, 22 Aug 2026 04:12:11 -0400 Subject: [PATCH 2/8] TSL Unit Tests - Fix faceForward() WGSL capitalization bug (#34342) Co-authored-by: Michael Herzog --- src/renderers/webgpu/nodes/WGSLNodeBuilder.js | 1 + test/unit/addons/tsl/TSLFaceForward.tests.js | 24 +++++++++++++++++++ test/unit/three.addons.unit.js | 1 + 3 files changed, 26 insertions(+) create mode 100644 test/unit/addons/tsl/TSLFaceForward.tests.js diff --git a/src/renderers/webgpu/nodes/WGSLNodeBuilder.js b/src/renderers/webgpu/nodes/WGSLNodeBuilder.js index 134619e847ce63..d3f4a6b3c01506 100644 --- a/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +++ b/src/renderers/webgpu/nodes/WGSLNodeBuilder.js @@ -231,6 +231,7 @@ const wgslMethods = { inverse_mat3: 'tsl_inverse_mat3', inverse_mat4: 'tsl_inverse_mat4', inversesqrt: 'inverseSqrt', + faceforward: 'faceForward', bitcast: 'bitcast', floatpack_snorm_2x16: 'pack2x16snorm', floatpack_unorm_2x16: 'pack2x16unorm', diff --git a/test/unit/addons/tsl/TSLFaceForward.tests.js b/test/unit/addons/tsl/TSLFaceForward.tests.js new file mode 100644 index 00000000000000..1cb8413bf004f0 --- /dev/null +++ b/test/unit/addons/tsl/TSLFaceForward.tests.js @@ -0,0 +1,24 @@ +import { + vec3, faceForward +} from 'three/tsl'; +import { gpuTest } from './gpu-test-utils.js'; + +export default QUnit.module( 'TSL', () => { + + QUnit.module( 'faceForward()', () => { + + gpuTest( 'faceForward() picks the side facing the incident ray', ( { assert } ) => { + + const n = vec3( 0, 1, 0 ); + + // dot(Nref, I) < 0 -> returns N unchanged. + assert.closeAbs( faceForward( n, vec3( 0, - 1, 0 ), vec3( 0, 1, 0 ) ), n, 1e-5, 'faceForward keeps N when Nref and I already face opposite ways' ); + + // dot(Nref, I) >= 0 -> returns -N. + assert.closeAbs( faceForward( n, vec3( 0, 1, 0 ), vec3( 0, 1, 0 ) ), n.negate(), 1e-5, 'faceForward flips N when Nref and I face the same way' ); + + } ); + + } ); + +} ); diff --git a/test/unit/three.addons.unit.js b/test/unit/three.addons.unit.js index 16b4c117a7a8e9..9446865a039b71 100644 --- a/test/unit/three.addons.unit.js +++ b/test/unit/three.addons.unit.js @@ -16,3 +16,4 @@ import './addons/loaders/USDLoader.tests.js'; import './addons/exporters/USDZExporter.tests.js'; import './addons/tsl/WebGLNodesHandler.tests.js'; import './addons/tsl/GPUTest.tests.js'; +import './addons/tsl/TSLFaceForward.tests.js'; From 704480cb67e239963baa4dd84f2be4e9a3fe74ba Mon Sep 17 00:00:00 2001 From: Ben Houston Date: Sat, 22 Aug 2026 04:15:22 -0400 Subject: [PATCH 3/8] TSL Unit Tests - Fix determinant() type inference reporting the matrix's own type instead of float (#34341) Co-authored-by: Michael Herzog --- src/nodes/math/MathNode.js | 2 +- test/unit/addons/tsl/TSLDeterminant.tests.js | 32 ++++++++++++++++++++ test/unit/three.addons.unit.js | 1 + 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 test/unit/addons/tsl/TSLDeterminant.tests.js diff --git a/src/nodes/math/MathNode.js b/src/nodes/math/MathNode.js index f425ac80c0a1d7..bdba93fb297f3a 100644 --- a/src/nodes/math/MathNode.js +++ b/src/nodes/math/MathNode.js @@ -137,7 +137,7 @@ class MathNode extends TempNode { const method = this.method; - if ( method === MathNode.LENGTH || method === MathNode.DISTANCE || method === MathNode.DOT ) { + if ( method === MathNode.LENGTH || method === MathNode.DISTANCE || method === MathNode.DOT || method === MathNode.DETERMINANT ) { return 'float'; diff --git a/test/unit/addons/tsl/TSLDeterminant.tests.js b/test/unit/addons/tsl/TSLDeterminant.tests.js new file mode 100644 index 00000000000000..69a82d0d327c1b --- /dev/null +++ b/test/unit/addons/tsl/TSLDeterminant.tests.js @@ -0,0 +1,32 @@ +import { + float, mat3, mat4, determinant +} from 'three/tsl'; +import { gpuTest } from './gpu-test-utils.js'; + +export default QUnit.module( 'TSL', () => { + + QUnit.module( 'determinant()', () => { + + gpuTest( 'determinant() of identity matrices is 1', ( { assert } ) => { + + const I3 = mat3( 1, 0, 0, 0, 1, 0, 0, 0, 1 ); + assert.closeAbs( determinant( I3 ), float( 1 ), 1e-5, 'determinant(I3) == 1' ); + + const I4 = mat4( 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ); + assert.closeAbs( determinant( I4 ), float( 1 ), 1e-5, 'determinant(I4) == 1' ); + + } ); + + gpuTest( 'mat3 determinant of a diagonal scale matrix', ( { assert } ) => { + + // determinant of a diagonal matrix is just the product of its + // diagonal entries -- 2 * 3 * 4 == 24, independent of the general + // cofactor-expansion implementation under test. + const scale = mat3( 2, 0, 0, 0, 3, 0, 0, 0, 4 ); + assert.closeAbs( determinant( scale ), float( 24 ), 1e-4, 'determinant(diag(2,3,4)) == 24' ); + + } ); + + } ); + +} ); diff --git a/test/unit/three.addons.unit.js b/test/unit/three.addons.unit.js index 9446865a039b71..639c12ee0912c6 100644 --- a/test/unit/three.addons.unit.js +++ b/test/unit/three.addons.unit.js @@ -16,4 +16,5 @@ import './addons/loaders/USDLoader.tests.js'; import './addons/exporters/USDZExporter.tests.js'; import './addons/tsl/WebGLNodesHandler.tests.js'; import './addons/tsl/GPUTest.tests.js'; +import './addons/tsl/TSLDeterminant.tests.js'; import './addons/tsl/TSLFaceForward.tests.js'; From 57a6fac23f6e7a4ae1ff8945c2b5e9f4029d4017 Mon Sep 17 00:00:00 2001 From: Michael Herzog Date: Sat, 22 Aug 2026 10:41:06 +0200 Subject: [PATCH 4/8] Editor: Fix animation selection. (#34322) --- editor/js/Animation.js | 96 ++++++++++++++++-------------------------- 1 file changed, 36 insertions(+), 60 deletions(-) diff --git a/editor/js/Animation.js b/editor/js/Animation.js index 93748454ba6a27..b1d827376dfde2 100644 --- a/editor/js/Animation.js +++ b/editor/js/Animation.js @@ -264,39 +264,17 @@ function Animation( editor ) { let currentClip = null; let currentRoot = null; - // Get all clips from scene animations + // Get all clips of the selected object function getAnimationClips() { - const scene = editor.scene; + const object = editor.selected; const clips = []; - const seen = new Set(); - scene.traverse( function ( object ) { + if ( object !== null ) { - if ( object.animations && object.animations.length > 0 ) { + for ( const clip of object.animations ) { - for ( const clip of object.animations ) { - - if ( ! seen.has( clip.uuid ) ) { - - seen.add( clip.uuid ); - clips.push( { clip: clip, root: object } ); - - } - - } - - } - - } ); - - // Also check scene.animations directly - for ( const clip of scene.animations ) { - - if ( ! seen.has( clip.uuid ) ) { - - seen.add( clip.uuid ); - clips.push( { clip: clip, root: scene } ); + clips.push( { clip: clip, root: object } ); } @@ -367,14 +345,6 @@ function Animation( editor ) { clipRow.addEventListener( 'click', function () { - if ( editor.selected !== root ) { - - signals.objectSelected.remove( selectDefaultClip ); - editor.select( root ); - signals.objectSelected.add( selectDefaultClip ); - - } - selectClip( clip, root ); update(); // Refresh to update highlighting @@ -499,24 +469,11 @@ function Animation( editor ) { function selectClip( clip, root ) { - // Stop current action - if ( currentAction ) { - - currentAction.stop(); - - } + const toggle = ( currentClip === clip ); - if ( currentClip === clip ) { + deselectClip(); - // Unselect clip - currentAction = null; - currentClip = null; - currentRoot = null; - - timeText.setValue( '0.00' ); - durationText.setValue( '0.00' ); - - } else { + if ( toggle === false ) { // Select clip without playing currentClip = clip; @@ -530,6 +487,26 @@ function Animation( editor ) { } + function deselectClip() { + + // Stop current action + if ( currentAction ) { + + currentAction.stop(); + + } + + currentAction = null; + currentClip = null; + currentRoot = null; + + timeText.setValue( '0.00' ); + durationText.setValue( '0.00' ); + + playhead.style.left = labelWidth + 'px'; + + } + function showPath( clip, object ) { hidePath(); @@ -557,11 +534,7 @@ function Animation( editor ) { hidePath(); trackListContainer.innerHTML = ''; - currentAction = null; - currentClip = null; - currentRoot = null; - timeText.setValue( '0.00' ); - durationText.setValue( '0.00' ); + deselectClip(); } @@ -585,21 +558,24 @@ function Animation( editor ) { } - function selectDefaultClip( object ) { + function onObjectSelected( object ) { + + deselectClip(); - if ( object !== null && object.animations && object.animations.length > 0 ) { + if ( object !== null && object.animations.length > 0 ) { selectClip( object.animations[ 0 ], object ); - update(); } + update(); + } updateTime(); // Auto-select clip when an object with animations is selected - signals.objectSelected.add( selectDefaultClip ); + signals.objectSelected.add( onObjectSelected ); // Update when scene changes signals.editorCleared.add( clear ); From 7db439d2a193cf10513eff7eb201c6755414b0cb Mon Sep 17 00:00:00 2001 From: Ben Houston Date: Sat, 22 Aug 2026 04:43:59 -0400 Subject: [PATCH 5/8] TSL Unit Tests - Fix sinc() removable singularity computing a literal 0/0 (#34337) Co-authored-by: Michael Herzog --- src/nodes/math/MathUtils.js | 10 +++++++-- test/unit/addons/tsl/TSLSinc.tests.js | 29 +++++++++++++++++++++++++++ test/unit/three.addons.unit.js | 1 + 3 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 test/unit/addons/tsl/TSLSinc.tests.js diff --git a/src/nodes/math/MathUtils.js b/src/nodes/math/MathUtils.js index 5523e7149d44ca..9248215c449f17 100644 --- a/src/nodes/math/MathUtils.js +++ b/src/nodes/math/MathUtils.js @@ -1,5 +1,5 @@ import { sub, mul, div, add } from './OperatorNode.js'; -import { PI, pow, sin } from './MathNode.js'; +import { PI, pow, sin, abs } from './MathNode.js'; /** * A function that remaps the `[0,1]` interval into the `[0,1]` interval. @@ -51,4 +51,10 @@ export const pcurve = ( x, a, b ) => pow( div( pow( x, a ), add( pow( x, a ), po * @param {Node} k - Controls the amount of bounces. * @return {Node} The result value. */ -export const sinc = ( x, k ) => sin( PI.mul( k.mul( x ).sub( 1.0 ) ) ).div( PI.mul( k.mul( x ).sub( 1.0 ) ) ); +export const sinc = ( x, k ) => { + + const arg = abs( PI.mul( k.mul( x ).sub( 1.0 ) ) ).max( 1e-6 ).toConst(); + + return sin( arg ).div( arg ); + +}; diff --git a/test/unit/addons/tsl/TSLSinc.tests.js b/test/unit/addons/tsl/TSLSinc.tests.js new file mode 100644 index 00000000000000..2aed30b2d47c1d --- /dev/null +++ b/test/unit/addons/tsl/TSLSinc.tests.js @@ -0,0 +1,29 @@ +import { + float, sinc +} from 'three/tsl'; +import { gpuTest } from './gpu-test-utils.js'; + +export default QUnit.module( 'TSL', () => { + + QUnit.module( 'sinc()', () => { + + gpuTest( 'sinc() starts and ends at zero over one full bounce period', ( { assert } ) => { + + // sinc(x, k) == sin(PI*(k*x-1)) / (PI*(k*x-1)) -- from the function's + // own doc comment. At x=0 the argument is -PI, giving sin(-PI)/(-PI) == 0. + assert.closeAbs( sinc( float( 0 ), float( 1 ) ), float( 0 ), 1e-4, 'sinc(0, k=1) == 0' ); + + // At x == 1/k the argument is exactly 0 -- naively that's sin(0)/0, + // but sinc()'s removable-singularity guard (see MathUtils.js) returns + // the analytic limit of 1 instead of evaluating the 0/0 division, so + // this is exercised at full precision, not just approximately. + assert.closeAbs( sinc( float( 1 ), float( 1 ) ), float( 1 ), 1e-4, 'sinc(1/k, k) == 1 -- the sinc() peak' ); + + // At x == 2/k the argument is +PI, giving sin(PI)/PI == 0 again. + assert.closeAbs( sinc( float( 2 ), float( 1 ) ), float( 0 ), 1e-3, 'sinc(2/k, k) == 0 again' ); + + } ); + + } ); + +} ); diff --git a/test/unit/three.addons.unit.js b/test/unit/three.addons.unit.js index 639c12ee0912c6..aae282fef9a227 100644 --- a/test/unit/three.addons.unit.js +++ b/test/unit/three.addons.unit.js @@ -18,3 +18,4 @@ import './addons/tsl/WebGLNodesHandler.tests.js'; import './addons/tsl/GPUTest.tests.js'; import './addons/tsl/TSLDeterminant.tests.js'; import './addons/tsl/TSLFaceForward.tests.js'; +import './addons/tsl/TSLSinc.tests.js'; From 0ed955814f4f340b5d7c1b87facdae8a4ab00ff9 Mon Sep 17 00:00:00 2001 From: Ben Houston Date: Sat, 22 Aug 2026 04:52:56 -0400 Subject: [PATCH 6/8] TSL Unit Tests - Fix rotate() 3D Euler-angle path rotating in the wrong direction (#34338) Co-authored-by: Michael Herzog --- src/nodes/utils/RotateNode.js | 6 +-- test/unit/addons/tsl/TSLRotate.tests.js | 67 +++++++++++++++++++++++++ test/unit/three.addons.unit.js | 1 + 3 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 test/unit/addons/tsl/TSLRotate.tests.js diff --git a/src/nodes/utils/RotateNode.js b/src/nodes/utils/RotateNode.js index 30e443d6c319e2..e42182302a3258 100644 --- a/src/nodes/utils/RotateNode.js +++ b/src/nodes/utils/RotateNode.js @@ -76,9 +76,9 @@ class RotateNode extends TempNode { } else { const rotation = rotationNode; - const rotationXMatrix = mat4( vec4( 1.0, 0.0, 0.0, 0.0 ), vec4( 0.0, cos( rotation.x ), sin( rotation.x ).negate(), 0.0 ), vec4( 0.0, sin( rotation.x ), cos( rotation.x ), 0.0 ), vec4( 0.0, 0.0, 0.0, 1.0 ) ); - const rotationYMatrix = mat4( vec4( cos( rotation.y ), 0.0, sin( rotation.y ), 0.0 ), vec4( 0.0, 1.0, 0.0, 0.0 ), vec4( sin( rotation.y ).negate(), 0.0, cos( rotation.y ), 0.0 ), vec4( 0.0, 0.0, 0.0, 1.0 ) ); - const rotationZMatrix = mat4( vec4( cos( rotation.z ), sin( rotation.z ).negate(), 0.0, 0.0 ), vec4( sin( rotation.z ), cos( rotation.z ), 0.0, 0.0 ), vec4( 0.0, 0.0, 1.0, 0.0 ), vec4( 0.0, 0.0, 0.0, 1.0 ) ); + const rotationXMatrix = mat4( vec4( 1.0, 0.0, 0.0, 0.0 ), vec4( 0.0, cos( rotation.x ), sin( rotation.x ), 0.0 ), vec4( 0.0, sin( rotation.x ).negate(), cos( rotation.x ), 0.0 ), vec4( 0.0, 0.0, 0.0, 1.0 ) ); + const rotationYMatrix = mat4( vec4( cos( rotation.y ), 0.0, sin( rotation.y ).negate(), 0.0 ), vec4( 0.0, 1.0, 0.0, 0.0 ), vec4( sin( rotation.y ), 0.0, cos( rotation.y ), 0.0 ), vec4( 0.0, 0.0, 0.0, 1.0 ) ); + const rotationZMatrix = mat4( vec4( cos( rotation.z ), sin( rotation.z ), 0.0, 0.0 ), vec4( sin( rotation.z ).negate(), cos( rotation.z ), 0.0, 0.0 ), vec4( 0.0, 0.0, 1.0, 0.0 ), vec4( 0.0, 0.0, 0.0, 1.0 ) ); return rotationXMatrix.mul( rotationYMatrix ).mul( rotationZMatrix ).mul( vec4( positionNode, 1.0 ) ).xyz; diff --git a/test/unit/addons/tsl/TSLRotate.tests.js b/test/unit/addons/tsl/TSLRotate.tests.js new file mode 100644 index 00000000000000..d59dd7fa4b04c9 --- /dev/null +++ b/test/unit/addons/tsl/TSLRotate.tests.js @@ -0,0 +1,67 @@ +import { + float, vec2, vec3, rotate +} from 'three/tsl'; +import { gpuTest } from './gpu-test-utils.js'; + +export default QUnit.module( 'TSL', () => { + + QUnit.module( 'rotate()', () => { + + gpuTest( 'rotate() on a 2D position by known angles', ( { assert } ) => { + + // A 90-degree (PI/2) counter-clockwise rotation sends +X to +Y. + const rotated90 = rotate( vec2( 1, 0 ), float( Math.PI / 2 ) ); + assert.closeAbs( rotated90, vec2( 0, 1 ), 1e-4, 'rotate((1,0), PI/2) == (0,1)' ); + + // A full 2*PI rotation is the identity (up to floating-point drift). + const rotatedFull = rotate( vec2( 3, -2 ), float( Math.PI * 2 ) ); + assert.closeAbs( rotatedFull, vec2( 3, -2 ), 1e-3, 'rotate(v, 2*PI) returns to the original vector' ); + + // Zero rotation is exactly the identity. + assert.closeAbs( rotate( vec2( 5, 7 ), float( 0 ) ), vec2( 5, 7 ), 1e-5, 'rotate(v, 0) is the identity' ); + + } ); + + gpuTest( 'rotate() on a 3D position about a single axis matches the 2D case', ( { assert } ) => { + + // Rotating only about Z (x/y Euler angles held at 0) must behave + // exactly like the 2D rotation above, with Z passed through + // unchanged -- an independent cross-check between the 2D and 3D + // code paths inside RotateNode.setup(). + const rotated = rotate( vec3( 1, 0, 5 ), vec3( 0, 0, Math.PI / 2 ) ); + assert.closeAbs( rotated, vec3( 0, 1, 5 ), 1e-4, 'rotating (1,0,5) by PI/2 about Z gives (0,1,5)' ); + + } ); + + // The X and Y single-axis paths weren't independently exercised when + // RotateNode's 3D branch had its column/row transpose bug -- only Z + // was empirically checked, even though the fix touched all three + // per-axis matrices identically. These two tests close that gap by + // applying the same 2D-vs-3D cross-check to X and Y, with the "other + // two" coordinates held fixed as an independent pass-through check + // (mirroring the Z test's own Z pass-through of `5`). + gpuTest( 'rotate() on a 3D position about the X axis only matches the 2D case', ( { assert } ) => { + + // Rotating about X only: (y,z) behaves exactly like the 2D case's + // (x,y), with X passed through unchanged. + const rotated = rotate( vec3( 5, 1, 0 ), vec3( Math.PI / 2, 0, 0 ) ); + assert.closeAbs( rotated, vec3( 5, 0, 1 ), 1e-4, 'rotating (5,1,0) by PI/2 about X gives (5,0,1)' ); + + } ); + + gpuTest( 'rotate() on a 3D position about the Y axis only matches the 2D case', ( { assert } ) => { + + // Rotating about Y only, with Y passed through unchanged. Unlike + // the X and Z axes, RotateNode's Y-axis matrix is built with its + // sin/-sin terms swapped relative to the X/Z pattern (see + // RotateNode.js's rotationYMatrix), so this rotates (x,z) the + // opposite way round from what the X/Z pattern alone would + // suggest: x' = x*cos + z*sin, z' = -x*sin + z*cos. + const rotated = rotate( vec3( 1, 5, 0 ), vec3( 0, Math.PI / 2, 0 ) ); + assert.closeAbs( rotated, vec3( 0, 5, -1 ), 1e-4, 'rotating (1,5,0) by PI/2 about Y gives (0,5,-1)' ); + + } ); + + } ); + +} ); diff --git a/test/unit/three.addons.unit.js b/test/unit/three.addons.unit.js index aae282fef9a227..b596344dbe1464 100644 --- a/test/unit/three.addons.unit.js +++ b/test/unit/three.addons.unit.js @@ -18,4 +18,5 @@ import './addons/tsl/WebGLNodesHandler.tests.js'; import './addons/tsl/GPUTest.tests.js'; import './addons/tsl/TSLDeterminant.tests.js'; import './addons/tsl/TSLFaceForward.tests.js'; +import './addons/tsl/TSLRotate.tests.js'; import './addons/tsl/TSLSinc.tests.js'; From 948f8618ece048d5048095209f5d427e0f23e734 Mon Sep 17 00:00:00 2001 From: Michael Herzog Date: Sat, 22 Aug 2026 11:10:39 +0200 Subject: [PATCH 7/8] E2E: Update screenshots. (#34346) --- examples/screenshots/webgpu_layers.jpg | Bin 54093 -> 52486 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/screenshots/webgpu_layers.jpg b/examples/screenshots/webgpu_layers.jpg index 0dd839da04de8bed4a37421863aeb98628d2eb36..5d10f5bf69e971e6ba87f44108730342d1a422f4 100644 GIT binary patch delta 52125 zcmW(+RX`N)+g(MZ1f&}jmM-ZA70H!`r9q@)>8_C$Sh}QtbhFak4bt7Plyt)ih#&v& zW^QIK-uGh8c}_f|g=nE^Xg|L^2fA6_Jsa3F=0XBr6&7maN|T^co*O`m6(&P(N7=&$143L?8%npCtI%Wms@4k~Y0mWlZUKEvvJE;wu)Azb>z>!6XqX}~O zbtp1a%8;Zd3lS`zmvbndH_jbXMKWueNDHv8DV`oT9%ri za%^;Ci4z~IH7#-7)b*;0VFQDI30VEJsP7Ot+=rk}dmUkCin$4t^w*Xal$U3ZIQ;68 zPImVD2ilAhp`DsECDSJ81;@&f{n+&2`JE@BaKx6GqHZbNy)rg0G9H;t=F4-Y4ViQ^ zCR$t@Yrc)-AID!9FvoPiSGpe7?;ni^$#6Ht7?wJc$Kp=su#Fa9Dg7OQl40mmv6ccB zya`tkEnlgyqci}y`f{KTNqud7+W5}M4SIWaIO<=nRNBKrrD!6 zSPkl-SWt&*MO~E>uokB zmYY1BICxbkp-3Y@|PApYx2Fp>Ph<1uM$GpBdH#Ti)YQYOMK}Xm1BLi_n?bd8YOMn6!R0c9VwF_#YsJ`*d-YJ+UT{VUhcn7`zcK7=zP@K zR6j2$Q&}6FFzK*os^_{xtC-HT)UtFiel4>eMp;>clzP6eH`h=EvG$ROr)u$9gyerS z30UrT#s`$y9H+I;CW{fJheaDEMm$lvEXV#~A{*nh57=kp{Su}(?q}=Y-!`1XC#1r! zB}g`sXss&E+3d9zUpV`Y)CPamMsuVX+P_P(+Wgzr)_)90O*EP<{F2l=pDg?fFPu(3 z%sh196l6eA*luw$7@cPaJ}8yQiIaL?uI!UhT>{Sax9E#dRft(s6Mp}Ov#g5|snK@n zT;AXmyw;&CX}Mvo{lW<^QZ>=2e%8I=PgV?i;=4do`16$-4+m$T`P_|YA!n^%+F33p zShP-+ZezR!D#$Qf&hw~t^yR5~Tc$$9+UoP%fCqKO1)X`x{Hm^{@(&~-awECg=F|B_ z9snyi1(>w|2jV(@b!HiPg`kov7EG+j7;hZ<*tVzK(2;6!Xwa_AgN zq7N%6wfe?RwUfC~V_jZooCDwu{IP=G3GbeTh%iF(Tx$2f?97BZrwlac(&5klNH0}8 zGDgt9aD6BfB9zf-dwP=Ra(Vl^CH@Bi@Yyj6ERgSqTn`m08CsI(n3Jjh@bW&N-2Sq0 zGk6$Xmk_Dg%O5VDwE(R%hP9+{qw`kkv zv0e{(oY6b&kFqdi8jvB?!w=j@nwz7b<>s;m|EaGQS|

_=UaGE~EDwxY;+6h=`ay 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 z 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 From 6182d7299871b5eeeb98b62335b621a10e1fb25b Mon Sep 17 00:00:00 2001 From: Ben Houston Date: Sat, 22 Aug 2026 05:35:09 -0400 Subject: [PATCH 8/8] TSL Unit Tests - Fix gain() JS-ternary-on-a-Node bug and wrong base formula; fix pcurve() NaN exponent (#34340) Co-authored-by: Michael Herzog --- src/nodes/math/MathUtils.js | 9 +++-- test/unit/addons/tsl/TSLGainPcurve.tests.js | 38 +++++++++++++++++++++ test/unit/three.addons.unit.js | 1 + 3 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 test/unit/addons/tsl/TSLGainPcurve.tests.js diff --git a/src/nodes/math/MathUtils.js b/src/nodes/math/MathUtils.js index 9248215c449f17..663db19ac27fde 100644 --- a/src/nodes/math/MathUtils.js +++ b/src/nodes/math/MathUtils.js @@ -1,5 +1,6 @@ import { sub, mul, div, add } from './OperatorNode.js'; import { PI, pow, sin, abs } from './MathNode.js'; +import { select } from './ConditionalNode.js'; /** * A function that remaps the `[0,1]` interval into the `[0,1]` interval. @@ -25,7 +26,11 @@ export const parabola = ( x, k ) => pow( mul( 4.0, x.mul( sub( 1.0, x ) ) ), k ) * @param {Node} k - `k=1` is the identity curve,`k<1` produces the classic `gain()` shape, and `k>1` produces "s" shaped curves. * @return {Node} The remapped value. */ -export const gain = ( x, k ) => x.lessThan( 0.5 ) ? parabola( x.mul( 2.0 ), k ).div( 2.0 ) : sub( 1.0, parabola( mul( sub( 1.0, x ), 2.0 ), k ).div( 2.0 ) ); +export const gain = ( x, k ) => select( + x.lessThan( 0.5 ), + pow( mul( 2.0, x ), k ).mul( 0.5 ), + sub( 1.0, pow( mul( 2.0, sub( 1.0, x ) ), k ).mul( 0.5 ) ) +); /** * A function that remaps the `[0,1]` interval into the `[0,1]` interval. @@ -39,7 +44,7 @@ export const gain = ( x, k ) => x.lessThan( 0.5 ) ? parabola( x.mul( 2.0 ), k ). * @param {Node} b - Second control parameter. * @return {Node} The remapped value. */ -export const pcurve = ( x, a, b ) => pow( div( pow( x, a ), add( pow( x, a ), pow( sub( 1.0, x ), b ) ) ), 1.0 / a ); +export const pcurve = ( x, a, b ) => pow( div( pow( x, a ), add( pow( x, a ), pow( sub( 1.0, x ), b ) ) ), div( 1.0, a ) ); /** * A phase shifted sinus curve that starts at zero and ends at zero, with bouncing behavior. diff --git a/test/unit/addons/tsl/TSLGainPcurve.tests.js b/test/unit/addons/tsl/TSLGainPcurve.tests.js new file mode 100644 index 00000000000000..cd3e5b7f519b69 --- /dev/null +++ b/test/unit/addons/tsl/TSLGainPcurve.tests.js @@ -0,0 +1,38 @@ +import { float, gain, pcurve } from 'three/tsl'; +import { gpuTest } from './gpu-test-utils.js'; + +export default QUnit.module( 'TSL', () => { + + QUnit.module( 'gain() and pcurve()', () => { + + gpuTest( 'gain() keeps the endpoints and midpoint fixed, k=1 is the identity', ( { assert } ) => { + + // gain()'s doc comment: "k=1 is the identity curve" -- checked at + // several points, not just the fixed ones. + assert.closeAbs( gain( float( 0.2 ), float( 1 ) ), float( 0.2 ), 1e-4, 'gain(0.2, k=1) == 0.2 (identity)' ); + assert.closeAbs( gain( float( 0.7 ), float( 1 ) ), float( 0.7 ), 1e-4, 'gain(0.7, k=1) == 0.7 (identity)' ); + + // Regardless of k, gain() fixes 0, 0.5 and 1 (a documented property + // of this remap shape). + assert.closeAbs( gain( float( 0 ), float( 3 ) ), float( 0 ), 1e-5, 'gain(0, k) == 0 for any k' ); + assert.closeAbs( gain( float( 1 ), float( 3 ) ), float( 1 ), 1e-5, 'gain(1, k) == 1 for any k' ); + assert.closeAbs( gain( float( 0.5 ), float( 3 ) ), float( 0.5 ), 1e-4, 'gain(0.5, k) == 0.5 for any k' ); + + } ); + + gpuTest( 'pcurve() matches its own documented formula and vanishes at the domain edges', ( { assert } ) => { + + // pcurve(x, a, b) == (x^a / (x^a + (1-x)^b))^(1/a) -- from the + // function's own doc comment, computed independently in JS. + const x = 0.3, a = 2, b = 3; + const expected = Math.pow( Math.pow( x, a ) / ( Math.pow( x, a ) + Math.pow( 1 - x, b ) ), 1 / a ); + assert.closeAbs( pcurve( float( x ), float( a ), float( b ) ), float( expected ), 1e-4, 'pcurve(0.3, 2, 3) matches the hand-computed formula' ); + + assert.closeAbs( pcurve( float( 0 ), float( 2 ), float( 3 ) ), float( 0 ), 1e-4, 'pcurve(0, a, b) == 0' ); + assert.closeAbs( pcurve( float( 1 ), float( 2 ), float( 3 ) ), float( 1 ), 1e-4, 'pcurve(1, a, b) == 1' ); + + } ); + + } ); + +} ); diff --git a/test/unit/three.addons.unit.js b/test/unit/three.addons.unit.js index b596344dbe1464..f25e31838f2c0a 100644 --- a/test/unit/three.addons.unit.js +++ b/test/unit/three.addons.unit.js @@ -18,5 +18,6 @@ import './addons/tsl/WebGLNodesHandler.tests.js'; import './addons/tsl/GPUTest.tests.js'; import './addons/tsl/TSLDeterminant.tests.js'; import './addons/tsl/TSLFaceForward.tests.js'; +import './addons/tsl/TSLGainPcurve.tests.js'; import './addons/tsl/TSLRotate.tests.js'; import './addons/tsl/TSLSinc.tests.js';