From 97adf2edf911f1b2a5e941c8b91428b09c832498 Mon Sep 17 00:00:00 2001 From: Garrett Johnson Date: Sun, 16 Aug 2026 15:50:54 +0900 Subject: [PATCH 1/7] GaussianSplatMesh: Inline splat data reads to improve bounding box generation performance (#34262) --- examples/jsm/objects/GaussianSplatMesh.js | 105 +++++++--------------- 1 file changed, 32 insertions(+), 73 deletions(-) diff --git a/examples/jsm/objects/GaussianSplatMesh.js b/examples/jsm/objects/GaussianSplatMesh.js index 0bb59dafd8052c..7a9ebb8d5910fe 100644 --- a/examples/jsm/objects/GaussianSplatMesh.js +++ b/examples/jsm/objects/GaussianSplatMesh.js @@ -1,9 +1,7 @@ import { Box3, BufferAttribute, - Color, InstancedBufferGeometry, - Matrix3, Matrix4, Mesh, NodeMaterial, @@ -63,8 +61,7 @@ const _sortDirection = /*@__PURE__*/ new Vector3(); const _sortDepthRange = /*@__PURE__*/ new Vector2(); const _worldMatrixInverse = /*@__PURE__*/ new Matrix4(); const _modelViewMatrix = /*@__PURE__*/ new Matrix4(); -const _splatBox = /*@__PURE__*/ new Box3(); -const _splat = {}; +const _vector = /*@__PURE__*/ new Vector3(); /** * A minimal renderer for 3D Gaussian splat geometry. @@ -260,67 +257,6 @@ class GaussianSplatMesh extends Mesh { } - /** - * Returns the splat at the given index. - * - * Members that the target does not already have are created, so an empty object can be passed - * and then reused across calls to avoid allocating. - * - * @param {number} index - The splat index. - * @param {Object} [target] - The object the splat is written to. - * @return {Object} The target, with `position`, `covariance`, `color`, `opacity` and `radius` set. - */ - getSplat( index, target = {} ) { - - const geometry = this.splatGeometry; - const positionAttribute = geometry.getAttribute( 'position' ); - const covarianceAttribute = geometry.getAttribute( 'covariance' ); - const colorAttribute = geometry.getAttribute( 'color' ); - - if ( target.position === undefined ) { - - target.position = new Vector3(); - - } - - if ( target.covariance === undefined ) { - - target.covariance = new Matrix3(); - - } - - if ( target.color === undefined ) { - - target.color = new Color(); - - } - - target.position.fromBufferAttribute( positionAttribute, index ); - - const c00 = covarianceAttribute.getComponent( index, 0 ); - const c01 = covarianceAttribute.getComponent( index, 1 ); - const c02 = covarianceAttribute.getComponent( index, 2 ); - const c11 = covarianceAttribute.getComponent( index, 3 ); - const c12 = covarianceAttribute.getComponent( index, 4 ); - const c22 = covarianceAttribute.getComponent( index, 5 ); - - // the attribute holds the upper triangle of the symmetric covariance - target.covariance.set( - c00, c01, c02, - c01, c11, c12, - c02, c12, c22 - ); - - target.color.fromBufferAttribute( colorAttribute, index ); - target.opacity = colorAttribute.getW( index ); - - // the radius of the drawn largest extent - target.radius = SPLAT_KERNEL_CUTOFF * Math.sqrt( Math.max( c00, c11, c22, 0 ) ); - - return target; - - } - /** * Computes the bounding box of the splats, updating {@link GaussianSplatMesh#boundingBox}. * @@ -333,14 +269,25 @@ class GaussianSplatMesh extends Mesh { this.boundingBox.makeEmpty(); - const count = this.splatGeometry.getAttribute( 'position' ).count; + const positionAttribute = this.splatGeometry.getAttribute( 'position' ); + const covarianceAttribute = this.splatGeometry.getAttribute( 'covariance' ); + const count = positionAttribute.count; for ( let i = 0; i < count; i ++ ) { - this.getSplat( i, _splat ); + const x = positionAttribute.getX( i ); + const y = positionAttribute.getY( i ); + const z = positionAttribute.getZ( i ); - _splatBox.set( _splat.position, _splat.position ).expandByScalar( _splat.radius ); - this.boundingBox.union( _splatBox ); + const c00 = covarianceAttribute.getComponent( i, 0 ); + const c11 = covarianceAttribute.getComponent( i, 3 ); + const c22 = covarianceAttribute.getComponent( i, 5 ); + + // the radius of the drawn largest extent + const radius = SPLAT_KERNEL_CUTOFF * Math.sqrt( Math.max( c00, c11, c22 ) ); + + this.boundingBox.expandByPoint( _vector.set( x - radius, y - radius, z - radius ) ); + this.boundingBox.expandByPoint( _vector.set( x + radius, y + radius, z + radius ) ); } @@ -359,15 +306,27 @@ class GaussianSplatMesh extends Mesh { this.computeBoundingBox(); this.boundingBox.getBoundingSphere( this.boundingSphere ); - let maxRadius = 0; + const positionAttribute = this.splatGeometry.getAttribute( 'position' ); + const covarianceAttribute = this.splatGeometry.getAttribute( 'covariance' ); + const count = positionAttribute.count; const center = this.boundingSphere.center; - const count = this.splatGeometry.getAttribute( 'position' ).count; + + let maxRadius = 0; for ( let i = 0; i < count; i ++ ) { - this.getSplat( i, _splat ); + const x = positionAttribute.getX( i ); + const y = positionAttribute.getY( i ); + const z = positionAttribute.getZ( i ); + + const c00 = covarianceAttribute.getComponent( i, 0 ); + const c11 = covarianceAttribute.getComponent( i, 3 ); + const c22 = covarianceAttribute.getComponent( i, 5 ); + + // the radius of the drawn largest extent + const radius = SPLAT_KERNEL_CUTOFF * Math.sqrt( Math.max( c00, c11, c22 ) ); - maxRadius = Math.max( maxRadius, center.distanceTo( _splat.position ) + _splat.radius ); + maxRadius = Math.max( maxRadius, center.distanceTo( _vector.set( x, y, z ) ) + radius ); } From 3afdbd3e940236410515aad0c0dc0766b1a1dfa5 Mon Sep 17 00:00:00 2001 From: gqfx <115675424+gqfx@users.noreply.github.com> Date: Sun, 16 Aug 2026 14:54:11 +0800 Subject: [PATCH 2/7] GaussianSplatMesh: Pack RGBA8 colors in storage buffers (#34255) --- examples/jsm/objects/GaussianSplatMesh.js | 29 ++++++++++++++++------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/examples/jsm/objects/GaussianSplatMesh.js b/examples/jsm/objects/GaussianSplatMesh.js index 7a9ebb8d5910fe..d1e50fa4c3b11c 100644 --- a/examples/jsm/objects/GaussianSplatMesh.js +++ b/examples/jsm/objects/GaussianSplatMesh.js @@ -450,7 +450,7 @@ function createStorageBuffers( count, centers, covariances, colors, sphericalHar const centerData = new Float32Array( count * 4 ); const covarianceAData = new Float32Array( count * 4 ); const covarianceBData = new Float32Array( count * 4 ); - const colorData = new Float32Array( count * 4 ); + const colorData = new Uint32Array( count ); const sphericalHarmonicsDegree = sphericalHarmonics.degree; for ( let i = 0; i < count; i ++ ) { @@ -471,17 +471,17 @@ function createStorageBuffers( count, centers, covariances, colors, sphericalHar covarianceBData[ i4 ] = covariances[ i6 + 4 ]; covarianceBData[ i4 + 1 ] = covariances[ i6 + 5 ]; - colorData[ i4 ] = colors[ i4 ] / 255; - colorData[ i4 + 1 ] = colors[ i4 + 1 ] / 255; - colorData[ i4 + 2 ] = colors[ i4 + 2 ] / 255; - colorData[ i4 + 3 ] = colors[ i4 + 3 ] / 255; + colorData[ i ] = ( colors[ i4 ] | + colors[ i4 + 1 ] << 8 | + colors[ i4 + 2 ] << 16 | + colors[ i4 + 3 ] << 24 ) >>> 0; } const centerAttribute = new StorageBufferAttribute( centerData, 4 ); const covarianceAAttribute = new StorageBufferAttribute( covarianceAData, 4 ); const covarianceBAttribute = new StorageBufferAttribute( covarianceBData, 4 ); - const colorAttribute = new StorageBufferAttribute( colorData, 4 ); + const colorAttribute = new StorageBufferAttribute( colorData, 1 ); const buffers = { count, @@ -490,7 +490,7 @@ function createStorageBuffers( count, centers, covariances, colors, sphericalHar centerRead: storage( centerAttribute, 'vec4', count ).toReadOnly(), covarianceARead: storage( covarianceAAttribute, 'vec4', count ).toReadOnly(), covarianceBRead: storage( covarianceBAttribute, 'vec4', count ).toReadOnly(), - colorRead: storage( colorAttribute, 'vec4', count ).toReadOnly() + colorRead: storage( colorAttribute, 'uint', count ).toReadOnly() }; for ( let degree = 1; degree <= sphericalHarmonicsDegree; degree ++ ) { @@ -695,6 +695,19 @@ function createSphericalHarmonicsComputeNode( buffers, localCameraPosition ) { } +function readColor( buffers, splatIndex ) { + + const packed = buffers.colorRead.element( splatIndex ).toVar( 'packedColor' ); + + return vec4( + float( packed.bitAnd( 0xff ) ), + float( packed.shiftRight( 8 ).bitAnd( 0xff ) ), + float( packed.shiftRight( 16 ).bitAnd( 0xff ) ), + float( packed.shiftRight( 24 ).bitAnd( 0xff ) ) + ).mul( 1 / 255 ).toVar( 'splatColor' ); + +} + function createMaterialNodes( buffers, sort, localCameraPosition ) { const splatUv = varyingProperty( 'vec2', 'vSplatUv' ); @@ -706,7 +719,7 @@ function createMaterialNodes( buffers, sort, localCameraPosition ) { const center = buffers.centerRead.element( splatIndex ).xyz.toVar( 'center' ); const covA = buffers.covarianceARead.element( splatIndex ).toVar( 'covA' ); const covB = buffers.covarianceBRead.element( splatIndex ).toVar( 'covB' ); - const color = buffers.colorRead.element( splatIndex ).toVar( 'splatColor' ); + const color = readColor( buffers, splatIndex ); const rgb = color.rgb.toVar( 'splatRgb' ); if ( buffers.sphericalHarmonicsDegree > 0 ) { From 047f26834b9c345773c67a10023b60ab9c9fce44 Mon Sep 17 00:00:00 2001 From: Michael Herzog Date: Sun, 16 Aug 2026 09:27:06 +0200 Subject: [PATCH 3/7] TSL: Add `4x8` pack/unpack functions. (#34263) --- examples/jsm/objects/GaussianSplatMesh.js | 16 ++-------- src/Three.TSL.js | 4 +++ src/nodes/math/PackFloatNode.js | 30 ++++++++++++++++- src/nodes/math/UnpackFloatNode.js | 32 +++++++++++++++++-- .../webgl-fallback/nodes/GLSLNodeBuilder.js | 22 +++++++++---- src/renderers/webgpu/nodes/WGSLNodeBuilder.js | 16 +++++++--- 6 files changed, 92 insertions(+), 28 deletions(-) diff --git a/examples/jsm/objects/GaussianSplatMesh.js b/examples/jsm/objects/GaussianSplatMesh.js index d1e50fa4c3b11c..317afc6dce22d3 100644 --- a/examples/jsm/objects/GaussianSplatMesh.js +++ b/examples/jsm/objects/GaussianSplatMesh.js @@ -33,6 +33,7 @@ import { storage, uint, uniform, + unpackUnorm4x8, varyingProperty, vec2, vec3, @@ -695,19 +696,6 @@ function createSphericalHarmonicsComputeNode( buffers, localCameraPosition ) { } -function readColor( buffers, splatIndex ) { - - const packed = buffers.colorRead.element( splatIndex ).toVar( 'packedColor' ); - - return vec4( - float( packed.bitAnd( 0xff ) ), - float( packed.shiftRight( 8 ).bitAnd( 0xff ) ), - float( packed.shiftRight( 16 ).bitAnd( 0xff ) ), - float( packed.shiftRight( 24 ).bitAnd( 0xff ) ) - ).mul( 1 / 255 ).toVar( 'splatColor' ); - -} - function createMaterialNodes( buffers, sort, localCameraPosition ) { const splatUv = varyingProperty( 'vec2', 'vSplatUv' ); @@ -719,7 +707,7 @@ function createMaterialNodes( buffers, sort, localCameraPosition ) { const center = buffers.centerRead.element( splatIndex ).xyz.toVar( 'center' ); const covA = buffers.covarianceARead.element( splatIndex ).toVar( 'covA' ); const covB = buffers.covarianceBRead.element( splatIndex ).toVar( 'covB' ); - const color = readColor( buffers, splatIndex ); + const color = unpackUnorm4x8( buffers.colorRead.element( splatIndex ) ).toVar( 'splatColor' ); const rgb = color.rgb.toVar( 'splatRgb' ); if ( buffers.sphericalHarmonicsDegree > 0 ) { diff --git a/src/Three.TSL.js b/src/Three.TSL.js index 296e3e0fa43b1e..abe079e6a91daa 100644 --- a/src/Three.TSL.js +++ b/src/Three.TSL.js @@ -433,6 +433,8 @@ export const overrideNodes = TSL.overrideNodes; export const packHalf2x16 = TSL.packHalf2x16; export const packSnorm2x16 = TSL.packSnorm2x16; export const packUnorm2x16 = TSL.packUnorm2x16; +export const packSnorm4x8 = TSL.packSnorm4x8; +export const packUnorm4x8 = TSL.packUnorm4x8; export const packNormalToRGB = TSL.packNormalToRGB; export const parabola = TSL.parabola; export const parallaxDirection = TSL.parallaxDirection; @@ -604,6 +606,8 @@ export const uniformTexture = TSL.uniformTexture; export const unpackHalf2x16 = TSL.unpackHalf2x16; export const unpackSnorm2x16 = TSL.unpackSnorm2x16; export const unpackUnorm2x16 = TSL.unpackUnorm2x16; +export const unpackSnorm4x8 = TSL.unpackSnorm4x8; +export const unpackUnorm4x8 = TSL.unpackUnorm4x8; export const unpackRGBToNormal = TSL.unpackRGBToNormal; export const unpremultiplyAlpha = TSL.unpremultiplyAlpha; export const userData = TSL.userData; diff --git a/src/nodes/math/PackFloatNode.js b/src/nodes/math/PackFloatNode.js index da24ed3c389e07..35a631280db1e4 100644 --- a/src/nodes/math/PackFloatNode.js +++ b/src/nodes/math/PackFloatNode.js @@ -37,6 +37,14 @@ class PackFloatNode extends TempNode { */ this.encoding = encoding; + /** + * The component layout of the packed integer. + * + * @type {'2x16' | '4x8'} + * @default '2x16' + */ + this.layout = '2x16'; + /** * This flag can be used for type testing. * @@ -57,7 +65,7 @@ class PackFloatNode extends TempNode { generate( builder ) { const inputType = this.vectorNode.getNodeType( builder ); - return `${ builder.getFloatPackingMethod( this.encoding ) }(${ this.vectorNode.build( builder, inputType )})`; + return `${ builder.getFloatPackingMethod( this.encoding, this.layout ) }(${ this.vectorNode.build( builder, inputType )})`; } @@ -96,3 +104,23 @@ export const packUnorm2x16 = /*@__PURE__*/ nodeProxyIntent( PackFloatNode, 'unor * @returns {Node} */ export const packHalf2x16 = /*@__PURE__*/ nodeProxyIntent( PackFloatNode, 'float16' ).setParameterLength( 1 ); + +/** + * Converts each component of the normalized float to 8-bit integer values. The results are packed into a single unsigned integer. + * + * @tsl + * @function + * @param {Node} value - The 4-component vector to be packed + * @returns {Node} + */ +export const packSnorm4x8 = /*@__PURE__*/ nodeProxyIntent( PackFloatNode, 'snorm', null, { layout: '4x8' } ).setParameterLength( 1 ); + +/** + * Converts each component of the normalized float to 8-bit integer values. The results are packed into a single unsigned integer. + * + * @tsl + * @function + * @param {Node} value - The 4-component vector to be packed + * @returns {Node} + */ +export const packUnorm4x8 = /*@__PURE__*/ nodeProxyIntent( PackFloatNode, 'unorm', null, { layout: '4x8' } ).setParameterLength( 1 ); diff --git a/src/nodes/math/UnpackFloatNode.js b/src/nodes/math/UnpackFloatNode.js index 4a56fdcfd1a2ae..02190b743fecb9 100644 --- a/src/nodes/math/UnpackFloatNode.js +++ b/src/nodes/math/UnpackFloatNode.js @@ -37,6 +37,14 @@ class UnpackFloatNode extends TempNode { */ this.encoding = encoding; + /** + * The component layout of the packed integer. + * + * @type {'2x16' | '4x8'} + * @default '2x16' + */ + this.layout = '2x16'; + /** * This flag can be used for type testing. * @@ -50,14 +58,14 @@ class UnpackFloatNode extends TempNode { generateNodeType() { - return 'vec2'; + return this.layout === '4x8' ? 'vec4' : 'vec2'; } generate( builder ) { const inputType = this.uintNode.getNodeType( builder ); - return `${ builder.getFloatUnpackingMethod( this.encoding ) }(${ this.uintNode.build( builder, inputType )})`; + return `${ builder.getFloatUnpackingMethod( this.encoding, this.layout ) }(${ this.uintNode.build( builder, inputType )})`; } @@ -94,3 +102,23 @@ export const unpackUnorm2x16 = /*@__PURE__*/ nodeProxyIntent( UnpackFloatNode, ' * @returns {Node} */ export const unpackHalf2x16 = /*@__PURE__*/ nodeProxyIntent( UnpackFloatNode, 'float16' ).setParameterLength( 1 ); + +/** + * Unpacks a 32-bit unsigned integer into four 8-bit values, interpreted as normalized signed integers. Returns a vec4 with all values. + * + * @tsl + * @function + * @param {Node} value - The unsigned integer to be unpacked + * @returns {Node} + */ +export const unpackSnorm4x8 = /*@__PURE__*/ nodeProxyIntent( UnpackFloatNode, 'snorm', null, { layout: '4x8' } ).setParameterLength( 1 ); + +/** + * Unpacks a 32-bit unsigned integer into four 8-bit values, interpreted as normalized unsigned integers. Returns a vec4 with all values. + * + * @tsl + * @function + * @param {Node} value - The unsigned integer to be unpacked + * @returns {Node} + */ +export const unpackUnorm4x8 = /*@__PURE__*/ nodeProxyIntent( UnpackFloatNode, 'unorm', null, { layout: '4x8' } ).setParameterLength( 1 ); diff --git a/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js b/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js index a8f9f75ba3b498..ce4329bc8c57cc 100644 --- a/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +++ b/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js @@ -71,7 +71,11 @@ vec4 tsl_textureGatherCompare_array( sampler2DArrayShadow map, vec3 coord, ivec2 ); return flipY ? ret.wzyx : ret; } -` ) +` ), + floatpack_snorm_4x8: new CodeNode( /* glsl */'uint tsl_packSnorm4x8( vec4 v ) { uvec4 u = uvec4( ivec4( round( clamp( v, -1.0, 1.0 ) * 127.0 ) ) & 0xff ); return u.x | u.y << 8 | u.z << 16 | u.w << 24; }' ), + floatpack_unorm_4x8: new CodeNode( /* glsl */'uint tsl_packUnorm4x8( vec4 v ) { uvec4 u = uvec4( round( clamp( v, 0.0, 1.0 ) * 255.0 ) ); return u.x | u.y << 8 | u.z << 16 | u.w << 24; }' ), + floatunpack_snorm_4x8: new CodeNode( /* glsl */'vec4 tsl_unpackSnorm4x8( uint x ) { return max( vec4( ivec4( x << 24, x << 16, x << 8, x ) >> 24 ) / 127.0, -1.0 ); }' ), + floatunpack_unorm_4x8: new CodeNode( /* glsl */'vec4 tsl_unpackUnorm4x8( uint x ) { return vec4( uvec4( x, x >> 8, x >> 16, x >> 24 ) & 0xffu ) / 255.0; }' ) }; const glslMethods = { @@ -85,9 +89,13 @@ const glslMethods = { floatpack_snorm_2x16: 'packSnorm2x16', floatpack_unorm_2x16: 'packUnorm2x16', floatpack_float16_2x16: 'packHalf2x16', + floatpack_snorm_4x8: 'tsl_packSnorm4x8', + floatpack_unorm_4x8: 'tsl_packUnorm4x8', floatunpack_snorm_2x16: 'unpackSnorm2x16', floatunpack_unorm_2x16: 'unpackUnorm2x16', - floatunpack_float16_2x16: 'unpackHalf2x16' + floatunpack_float16_2x16: 'unpackHalf2x16', + floatunpack_snorm_4x8: 'tsl_unpackSnorm4x8', + floatunpack_unorm_4x8: 'tsl_unpackUnorm4x8' }; const precisionLib = { @@ -277,11 +285,12 @@ class GLSLNodeBuilder extends NodeBuilder { * Returns the float packing method name for a given numeric encoding. * * @param {string} encoding - The numeric encoding that describes how the float values are mapped to the integer range. + * @param {string} [layout='2x16'] - The component layout of the packed integer. * @returns {string} The resolved GLSL float packing method name. */ - getFloatPackingMethod( encoding ) { + getFloatPackingMethod( encoding, layout = '2x16' ) { - return this.getMethod( `floatpack_${ encoding }_2x16` ); + return this.getMethod( `floatpack_${ encoding }_${ layout }` ); } @@ -289,11 +298,12 @@ class GLSLNodeBuilder extends NodeBuilder { * Returns the float unpacking method name for a given numeric encoding. * * @param {string} encoding - The numeric encoding that describes how the integer values are mapped to the float range. + * @param {string} [layout='2x16'] - The component layout of the packed integer. * @returns {string} The resolved GLSL float unpacking method name. */ - getFloatUnpackingMethod( encoding ) { + getFloatUnpackingMethod( encoding, layout = '2x16' ) { - return this.getMethod( `floatunpack_${ encoding }_2x16` ); + return this.getMethod( `floatunpack_${ encoding }_${ layout }` ); } diff --git a/src/renderers/webgpu/nodes/WGSLNodeBuilder.js b/src/renderers/webgpu/nodes/WGSLNodeBuilder.js index e07f8dc998d7a2..134619e847ce63 100644 --- a/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +++ b/src/renderers/webgpu/nodes/WGSLNodeBuilder.js @@ -235,9 +235,13 @@ const wgslMethods = { floatpack_snorm_2x16: 'pack2x16snorm', floatpack_unorm_2x16: 'pack2x16unorm', floatpack_float16_2x16: 'pack2x16float', + floatpack_snorm_4x8: 'pack4x8snorm', + floatpack_unorm_4x8: 'pack4x8unorm', floatunpack_snorm_2x16: 'unpack2x16snorm', floatunpack_unorm_2x16: 'unpack2x16unorm', - floatunpack_float16_2x16: 'unpack2x16float' + floatunpack_float16_2x16: 'unpack2x16float', + floatunpack_snorm_4x8: 'unpack4x8snorm', + floatunpack_unorm_4x8: 'unpack4x8unorm' }; // See: https://www.w3.org/TR/WGSL/#keyword-summary and #reserved-words-section @@ -2458,11 +2462,12 @@ ${ flowData.code } * Returns the float packing method name for a given numeric encoding. * * @param {string} encoding - The numeric encoding that describes how the float values are mapped to the integer range. + * @param {string} [layout='2x16'] - The component layout of the packed integer. * @returns {string} The resolve WGSL float packing method name. */ - getFloatPackingMethod( encoding ) { + getFloatPackingMethod( encoding, layout = '2x16' ) { - return this.getMethod( `floatpack_${ encoding }_2x16` ); + return this.getMethod( `floatpack_${ encoding }_${ layout }` ); } @@ -2470,11 +2475,12 @@ ${ flowData.code } * Returns the float unpacking method name for a given numeric encoding. * * @param {string} encoding - The numeric encoding that describes how the integer values are mapped to the float range. + * @param {string} [layout='2x16'] - The component layout of the packed integer. * @returns {string} The resolve WGSL float unpacking method name. */ - getFloatUnpackingMethod( encoding ) { + getFloatUnpackingMethod( encoding, layout = '2x16' ) { - return this.getMethod( `floatunpack_${ encoding }_2x16` ); + return this.getMethod( `floatunpack_${ encoding }_${ layout }` ); } From e98a462c198521acbc217a4882da43d0401cd567 Mon Sep 17 00:00:00 2001 From: Mugen87 Date: Sun, 16 Aug 2026 09:27:40 +0200 Subject: [PATCH 4/7] Updated builds. --- build/three.core.js | 52 +++++++++++++----- build/three.module.js | 15 +++-- build/three.tsl.js | 6 +- build/three.webgpu.js | 106 +++++++++++++++++++++++++++++++----- build/three.webgpu.nodes.js | 106 +++++++++++++++++++++++++++++++----- 5 files changed, 231 insertions(+), 54 deletions(-) diff --git a/build/three.core.js b/build/three.core.js index 616ad851ff51b0..f6a5c55729ffd2 100644 --- a/build/three.core.js +++ b/build/three.core.js @@ -2702,6 +2702,7 @@ function denormalize( value, array ) { return value / 65535.0; case Uint8Array: + case Uint8ClampedArray: return value / 255.0; @@ -2749,6 +2750,7 @@ function normalize( value, array ) { return Math.round( value * 65535.0 ); case Uint8Array: + case Uint8ClampedArray: return Math.round( value * 255.0 ); @@ -46856,10 +46858,31 @@ const _viewToLightMatrix = /*@__PURE__*/ new Matrix4(); const _lightDirection = /*@__PURE__*/ new Vector3(); const _up$1 = /*@__PURE__*/ new Vector3(); const _center = /*@__PURE__*/ new Vector3(); -const _corner = /*@__PURE__*/ new Vector3(); -const _nearCorners = [ new Vector3(), new Vector3(), new Vector3(), new Vector3() ]; -const _farCorners = [ new Vector3(), new Vector3(), new Vector3(), new Vector3() ]; -const _cascadeCorners = [ new Vector3(), new Vector3(), new Vector3(), new Vector3(), new Vector3(), new Vector3(), new Vector3(), new Vector3() ]; + +const _nearCorners = [ + /*@__PURE__*/ new Vector3(), + /*@__PURE__*/ new Vector3(), + /*@__PURE__*/ new Vector3(), + /*@__PURE__*/ new Vector3() +]; + +const _farCorners = [ + /*@__PURE__*/ new Vector3(), + /*@__PURE__*/ new Vector3(), + /*@__PURE__*/ new Vector3(), + /*@__PURE__*/ new Vector3() +]; + +const _cascadeCorners = [ + /*@__PURE__*/ new Vector3(), + /*@__PURE__*/ new Vector3(), + /*@__PURE__*/ new Vector3(), + /*@__PURE__*/ new Vector3(), + /*@__PURE__*/ new Vector3(), + /*@__PURE__*/ new Vector3(), + /*@__PURE__*/ new Vector3(), + /*@__PURE__*/ new Vector3() +]; // must match the cascade count in the sun shadow shader chunks @@ -46986,6 +47009,10 @@ class SunLightShadow extends LightShadow { } + const resolutionX = this.mapSize.x * ( 1 - 2 * insetX ); + const resolutionY = this.mapSize.y * ( 1 - 2 * insetY ); + const resolution = Math.min( resolutionX, resolutionY ); + const camera = this.camera; const cameraNear = viewCamera.near; const cameraFar = Math.max( cameraNear + 1e-6, Math.min( camera.far, viewCamera.far ) ); @@ -47095,10 +47122,6 @@ class SunLightShadow extends LightShadow { // snap to the texel grid to avoid shimmering when the view camera moves - const resolutionX = this.mapSize.width * this._viewports[ i ].z; - const resolutionY = this.mapSize.height * this._viewports[ i ].w; - const resolution = Math.min( resolutionX, resolutionY ); - if ( resolution > 1 ) { // pad by half a texel so snapping cannot clip a frustum corner @@ -47117,8 +47140,7 @@ class SunLightShadow extends LightShadow { const cascadeCamera = this._cameras[ i ]; cascadeCamera.position.copy( _center ); - cascadeCamera.up.copy( _up$1 ); - cascadeCamera.lookAt( _corner.copy( _center ).add( _lightDirection ) ); + cascadeCamera.quaternion.setFromRotationMatrix( _lightOrientationMatrix ); cascadeCamera.left = - radius; cascadeCamera.right = radius; cascadeCamera.top = radius; @@ -47183,16 +47205,16 @@ class SunLight extends Light { this.type = 'SunLight'; + this.position.copy( Object3D.DEFAULT_UP ); + this.updateMatrix(); + /** - * The light's shadow configuration. + * This property holds the light's shadow configuration. * * @type {SunLightShadow} */ this.shadow = new SunLightShadow(); - this.position.set( 0, 1, 0 ); - this.updateMatrix(); - } dispose() { @@ -60895,4 +60917,4 @@ if ( typeof window !== 'undefined' ) { } -export { ACESFilmicToneMapping, AddEquation, AddOperation, AdditiveAnimationBlendMode, AdditiveBlending, AgXToneMapping, AlphaFormat, AlwaysCompare, AlwaysDepth, AlwaysStencilFunc, AmbientLight, AnimationAction, AnimationClip, AnimationLoader, AnimationMixer, AnimationObjectGroup, AnimationUtils, ArcCurve, ArrayCamera, ArrowHelper, AttachedBindMode, Audio, AudioAnalyser, AudioContext, AudioListener, AudioLoader, AxesHelper, BackSide, BasicDepthPacking, BasicShadowMap, BatchedMesh, BezierInterpolant, Bone, BooleanKeyframeTrack, Box2, Box3, Box3Helper, BoxGeometry, BoxHelper, BufferAttribute, BufferGeometry, BufferGeometryLoader, ByteType, Cache, Camera, CameraHelper, CanvasTexture, CapsuleGeometry, CatmullRomCurve3, CineonToneMapping, CircleGeometry, ClampToEdgeWrapping, Clock, Color, ColorKeyframeTrack, ColorManagement, Compatibility, CompressedArrayTexture, CompressedCubeTexture, CompressedTexture, CompressedTextureLoader, ConeGeometry, ConstantAlphaFactor, ConstantColorFactor, Controls, CubeCamera, CubeDepthTexture, CubeReflectionMapping, CubeRefractionMapping, CubeTexture, CubeTextureLoader, CubeUVReflectionMapping, CubicBezierCurve, CubicBezierCurve3, CubicInterpolant, CullFaceBack, CullFaceFront, CullFaceFrontBack, CullFaceNone, Curve, CurvePath, CustomBlending, CustomToneMapping, CylinderGeometry, Cylindrical, Data3DTexture, DataArrayTexture, DataTexture, DataTextureLoader, DataUtils, DecrementStencilOp, DecrementWrapStencilOp, DefaultLoadingManager, DepthFormat, DepthStencilFormat, DepthTexture, DetachedBindMode, DirectionalLight, DirectionalLightHelper, DiscreteInterpolant, DodecahedronGeometry, DoubleSide, DstAlphaFactor, DstColorFactor, DynamicCopyUsage, DynamicDrawUsage, DynamicReadUsage, EdgesGeometry, EllipseCurve, EqualCompare, EqualDepth, EqualStencilFunc, EquirectangularReflectionMapping, EquirectangularRefractionMapping, Euler, EventDispatcher, ExternalTexture, ExtrudeGeometry, FileLoader, Float16BufferAttribute, Float32BufferAttribute, FloatType, Fog, FogExp2, FramebufferTexture, FrontSide, Frustum, FrustumArray, GLBufferAttribute, GLSL1, GLSL3, GreaterCompare, GreaterDepth, GreaterEqualCompare, GreaterEqualDepth, GreaterEqualStencilFunc, GreaterStencilFunc, GridHelper, Group, HTMLTexture, HalfFloatType, HemisphereLight, HemisphereLightHelper, IcosahedronGeometry, ImageBitmapLoader, ImageLoader, ImageUtils, IncrementStencilOp, IncrementWrapStencilOp, InstancedBufferAttribute, InstancedBufferGeometry, InstancedInterleavedBuffer, InstancedMesh, Int16BufferAttribute, Int32BufferAttribute, Int8BufferAttribute, IntType, InterleavedBuffer, InterleavedBufferAttribute, Interpolant, InterpolateBezier, InterpolateDiscrete, InterpolateLinear, InterpolateSmooth, InterpolationSamplingMode, InterpolationSamplingType, InvertStencilOp, KeepStencilOp, KeyframeTrack, LOD, LatheGeometry, Layers, LessCompare, LessDepth, LessEqualCompare, LessEqualDepth, LessEqualStencilFunc, LessStencilFunc, Light, LightProbe, Line, Line3, LineBasicMaterial, LineCurve, LineCurve3, LineDashedMaterial, LineLoop, LineSegments, LinearFilter, LinearInterpolant, LinearMipMapLinearFilter, LinearMipMapNearestFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, LinearSRGBColorSpace, LinearToneMapping, LinearTransfer, Loader, LoaderUtils, LoadingManager, LoopOnce, LoopPingPong, LoopRepeat, MOUSE, Material, MaterialBlending, MaterialLoader, MathUtils, Matrix2, Matrix3, Matrix4, MaxEquation, Mesh, MeshBasicMaterial, MeshDepthMaterial, MeshDistanceMaterial, MeshLambertMaterial, MeshMatcapMaterial, MeshNormalMaterial, MeshPhongMaterial, MeshPhysicalMaterial, MeshStandardMaterial, MeshToonMaterial, MinEquation, MirroredRepeatWrapping, MixOperation, MultiplyBlending, MultiplyOperation, NearestFilter, NearestMipMapLinearFilter, NearestMipMapNearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, NeutralToneMapping, NeverCompare, NeverDepth, NeverStencilFunc, NoBlending, NoColorSpace, NoNormalPacking, NoToneMapping, NormalAnimationBlendMode, NormalBlending, NormalGAPacking, NormalRGPacking, NotEqualCompare, NotEqualDepth, NotEqualStencilFunc, NumberKeyframeTrack, Object3D, ObjectLoader, ObjectSpaceNormalMap, OctahedronGeometry, OneFactor, OneMinusConstantAlphaFactor, OneMinusConstantColorFactor, OneMinusDstAlphaFactor, OneMinusDstColorFactor, OneMinusSrcAlphaFactor, OneMinusSrcColorFactor, OrthographicCamera, PCFShadowMap, PCFSoftShadowMap, Path, PerspectiveCamera, Plane, PlaneGeometry, PlaneHelper, PointLight, PointLightHelper, Points, PointsMaterial, PolarGridHelper, PolyhedronGeometry, PositionalAudio, PropertyBinding, PropertyMixer, QuadraticBezierCurve, QuadraticBezierCurve3, Quaternion, QuaternionKeyframeTrack, QuaternionLinearInterpolant, R11_EAC_Format, RAD2DEG, RED_GREEN_RGTC2_Format, RED_RGTC1_Format, REVISION, RG11_EAC_Format, RGBADepthPacking, RGBAFormat, RGBAIntegerFormat, RGBA_ASTC_10x10_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_BPTC_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGBDepthPacking, RGBFormat, RGBIntegerFormat, RGB_BPTC_SIGNED_Format, RGB_BPTC_UNSIGNED_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGB_S3TC_DXT1_Format, RGDepthPacking, RGFormat, RGIntegerFormat, RawShaderMaterial, Ray, Raycaster, RectAreaLight, RedFormat, RedIntegerFormat, ReinhardToneMapping, RenderObjectRefreshType, RenderTarget, RenderTarget3D, RepeatWrapping, ReplaceStencilOp, ReverseSubtractEquation, ReversedDepthFuncs, RingGeometry, SIGNED_R11_EAC_Format, SIGNED_RED_GREEN_RGTC2_Format, SIGNED_RED_RGTC1_Format, SIGNED_RG11_EAC_Format, SRGBColorSpace, SRGBTransfer, Scene, ShaderMaterial, ShadowMaterial, Shape, ShapeGeometry, ShapePath, ShapeUtils, ShortType, Skeleton, SkeletonHelper, SkinnedMesh, Source, Sphere, SphereGeometry, Spherical, SphericalHarmonics3, SplineCurve, SpotLight, SpotLightHelper, Sprite, SpriteMaterial, SrcAlphaFactor, SrcAlphaSaturateFactor, SrcColorFactor, StaticCopyUsage, StaticDrawUsage, StaticReadUsage, StereoCamera, StreamCopyUsage, StreamDrawUsage, StreamReadUsage, StringKeyframeTrack, SubtractEquation, SubtractiveBlending, SunLight, SunLightShadow, TOUCH, TangentSpaceNormalMap, TetrahedronGeometry, Texture, TextureLoader, TextureSource, TextureUtils, Timer, TimestampQuery, TorusGeometry, TorusKnotGeometry, Triangle, TriangleFanDrawMode, TriangleStripDrawMode, TrianglesDrawMode, TubeGeometry, UVMapping, Uint16BufferAttribute, Uint32BufferAttribute, Uint8BufferAttribute, Uint8ClampedBufferAttribute, Uniform, UniformsGroup, UniformsUtils, UnsignedByteType, UnsignedInt101111Type, UnsignedInt248Type, UnsignedInt5999Type, UnsignedIntType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedShortType, VSMShadowMap, Vector2, Vector3, Vector4, VectorKeyframeTrack, VideoFrameTexture, VideoTexture, WebGL3DRenderTarget, WebGLArrayRenderTarget, WebGLCoordinateSystem, WebGLRenderTarget, WebGPUCoordinateSystem, WebXRController, WireframeGeometry, WrapAroundEnding, ZeroCurvatureEnding, ZeroFactor, ZeroSlopeEnding, ZeroStencilOp, cloneUniforms, createCanvasElement, createElementNS, error, getByteLength, getConsoleFunction, getUnlitUniformColorSpace, isTypedArray, log, mergeUniforms, probeAsync, setConsoleFunction, warn, warnOnce, yieldToMain }; +export { ACESFilmicToneMapping, AddEquation, AddOperation, AdditiveAnimationBlendMode, AdditiveBlending, AgXToneMapping, AlphaFormat, AlwaysCompare, AlwaysDepth, AlwaysStencilFunc, AmbientLight, AnimationAction, AnimationClip, AnimationLoader, AnimationMixer, AnimationObjectGroup, AnimationUtils, ArcCurve, ArrayCamera, ArrowHelper, AttachedBindMode, Audio, AudioAnalyser, AudioContext, AudioListener, AudioLoader, AxesHelper, BackSide, BasicDepthPacking, BasicShadowMap, BatchedMesh, BezierInterpolant, Bone, BooleanKeyframeTrack, Box2, Box3, Box3Helper, BoxGeometry, BoxHelper, BufferAttribute, BufferGeometry, BufferGeometryLoader, ByteType, Cache, Camera, CameraHelper, CanvasTexture, CapsuleGeometry, CatmullRomCurve3, CineonToneMapping, CircleGeometry, ClampToEdgeWrapping, Clock, Color, ColorKeyframeTrack, ColorManagement, Compatibility, CompressedArrayTexture, CompressedCubeTexture, CompressedTexture, CompressedTextureLoader, ConeGeometry, ConstantAlphaFactor, ConstantColorFactor, Controls, CubeCamera, CubeDepthTexture, CubeReflectionMapping, CubeRefractionMapping, CubeTexture, CubeTextureLoader, CubeUVReflectionMapping, CubicBezierCurve, CubicBezierCurve3, CubicInterpolant, CullFaceBack, CullFaceFront, CullFaceFrontBack, CullFaceNone, Curve, CurvePath, CustomBlending, CustomToneMapping, CylinderGeometry, Cylindrical, Data3DTexture, DataArrayTexture, DataTexture, DataTextureLoader, DataUtils, DecrementStencilOp, DecrementWrapStencilOp, DefaultLoadingManager, DepthFormat, DepthStencilFormat, DepthTexture, DetachedBindMode, DirectionalLight, DirectionalLightHelper, DiscreteInterpolant, DodecahedronGeometry, DoubleSide, DstAlphaFactor, DstColorFactor, DynamicCopyUsage, DynamicDrawUsage, DynamicReadUsage, EdgesGeometry, EllipseCurve, EqualCompare, EqualDepth, EqualStencilFunc, EquirectangularReflectionMapping, EquirectangularRefractionMapping, Euler, EventDispatcher, ExternalTexture, ExtrudeGeometry, FileLoader, Float16BufferAttribute, Float32BufferAttribute, FloatType, Fog, FogExp2, FramebufferTexture, FrontSide, Frustum, FrustumArray, GLBufferAttribute, GLSL1, GLSL3, GreaterCompare, GreaterDepth, GreaterEqualCompare, GreaterEqualDepth, GreaterEqualStencilFunc, GreaterStencilFunc, GridHelper, Group, HTMLTexture, HalfFloatType, HemisphereLight, HemisphereLightHelper, IcosahedronGeometry, ImageBitmapLoader, ImageLoader, ImageUtils, IncrementStencilOp, IncrementWrapStencilOp, InstancedBufferAttribute, InstancedBufferGeometry, InstancedInterleavedBuffer, InstancedMesh, Int16BufferAttribute, Int32BufferAttribute, Int8BufferAttribute, IntType, InterleavedBuffer, InterleavedBufferAttribute, Interpolant, InterpolateBezier, InterpolateDiscrete, InterpolateLinear, InterpolateSmooth, InterpolationSamplingMode, InterpolationSamplingType, InvertStencilOp, KeepStencilOp, KeyframeTrack, LOD, LatheGeometry, Layers, LessCompare, LessDepth, LessEqualCompare, LessEqualDepth, LessEqualStencilFunc, LessStencilFunc, Light, LightProbe, Line, Line3, LineBasicMaterial, LineCurve, LineCurve3, LineDashedMaterial, LineLoop, LineSegments, LinearFilter, LinearInterpolant, LinearMipMapLinearFilter, LinearMipMapNearestFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, LinearSRGBColorSpace, LinearToneMapping, LinearTransfer, Loader, LoaderUtils, LoadingManager, LoopOnce, LoopPingPong, LoopRepeat, MOUSE, Material, MaterialBlending, MaterialLoader, MathUtils, Matrix2, Matrix3, Matrix4, MaxEquation, Mesh, MeshBasicMaterial, MeshDepthMaterial, MeshDistanceMaterial, MeshLambertMaterial, MeshMatcapMaterial, MeshNormalMaterial, MeshPhongMaterial, MeshPhysicalMaterial, MeshStandardMaterial, MeshToonMaterial, MinEquation, MirroredRepeatWrapping, MixOperation, MultiplyBlending, MultiplyOperation, NearestFilter, NearestMipMapLinearFilter, NearestMipMapNearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, NeutralToneMapping, NeverCompare, NeverDepth, NeverStencilFunc, NoBlending, NoColorSpace, NoNormalPacking, NoToneMapping, NormalAnimationBlendMode, NormalBlending, NormalGAPacking, NormalRGPacking, NotEqualCompare, NotEqualDepth, NotEqualStencilFunc, NumberKeyframeTrack, Object3D, ObjectLoader, ObjectSpaceNormalMap, OctahedronGeometry, OneFactor, OneMinusConstantAlphaFactor, OneMinusConstantColorFactor, OneMinusDstAlphaFactor, OneMinusDstColorFactor, OneMinusSrcAlphaFactor, OneMinusSrcColorFactor, OrthographicCamera, PCFShadowMap, PCFSoftShadowMap, Path, PerspectiveCamera, Plane, PlaneGeometry, PlaneHelper, PointLight, PointLightHelper, Points, PointsMaterial, PolarGridHelper, PolyhedronGeometry, PositionalAudio, PropertyBinding, PropertyMixer, QuadraticBezierCurve, QuadraticBezierCurve3, Quaternion, QuaternionKeyframeTrack, QuaternionLinearInterpolant, R11_EAC_Format, RAD2DEG, RED_GREEN_RGTC2_Format, RED_RGTC1_Format, REVISION, RG11_EAC_Format, RGBADepthPacking, RGBAFormat, RGBAIntegerFormat, RGBA_ASTC_10x10_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_BPTC_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGBDepthPacking, RGBFormat, RGBIntegerFormat, RGB_BPTC_SIGNED_Format, RGB_BPTC_UNSIGNED_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGB_S3TC_DXT1_Format, RGDepthPacking, RGFormat, RGIntegerFormat, RawShaderMaterial, Ray, Raycaster, RectAreaLight, RedFormat, RedIntegerFormat, ReinhardToneMapping, RenderObjectRefreshType, RenderTarget, RenderTarget3D, RepeatWrapping, ReplaceStencilOp, ReverseSubtractEquation, ReversedDepthFuncs, RingGeometry, SIGNED_R11_EAC_Format, SIGNED_RED_GREEN_RGTC2_Format, SIGNED_RED_RGTC1_Format, SIGNED_RG11_EAC_Format, SRGBColorSpace, SRGBTransfer, Scene, ShaderMaterial, ShadowMaterial, Shape, ShapeGeometry, ShapePath, ShapeUtils, ShortType, Skeleton, SkeletonHelper, SkinnedMesh, Source, Sphere, SphereGeometry, Spherical, SphericalHarmonics3, SplineCurve, SpotLight, SpotLightHelper, Sprite, SpriteMaterial, SrcAlphaFactor, SrcAlphaSaturateFactor, SrcColorFactor, StaticCopyUsage, StaticDrawUsage, StaticReadUsage, StereoCamera, StreamCopyUsage, StreamDrawUsage, StreamReadUsage, StringKeyframeTrack, SubtractEquation, SubtractiveBlending, SunLight, TOUCH, TangentSpaceNormalMap, TetrahedronGeometry, Texture, TextureLoader, TextureSource, TextureUtils, Timer, TimestampQuery, TorusGeometry, TorusKnotGeometry, Triangle, TriangleFanDrawMode, TriangleStripDrawMode, TrianglesDrawMode, TubeGeometry, UVMapping, Uint16BufferAttribute, Uint32BufferAttribute, Uint8BufferAttribute, Uint8ClampedBufferAttribute, Uniform, UniformsGroup, UniformsUtils, UnsignedByteType, UnsignedInt101111Type, UnsignedInt248Type, UnsignedInt5999Type, UnsignedIntType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedShortType, VSMShadowMap, Vector2, Vector3, Vector4, VectorKeyframeTrack, VideoFrameTexture, VideoTexture, WebGL3DRenderTarget, WebGLArrayRenderTarget, WebGLCoordinateSystem, WebGLRenderTarget, WebGPUCoordinateSystem, WebXRController, WireframeGeometry, WrapAroundEnding, ZeroCurvatureEnding, ZeroFactor, ZeroSlopeEnding, ZeroStencilOp, cloneUniforms, createCanvasElement, createElementNS, error, getByteLength, getConsoleFunction, getUnlitUniformColorSpace, isTypedArray, log, mergeUniforms, probeAsync, setConsoleFunction, warn, warnOnce, yieldToMain }; diff --git a/build/three.module.js b/build/three.module.js index cfce529a9c9d90..a3c4ac6009c9d8 100644 --- a/build/three.module.js +++ b/build/three.module.js @@ -4,7 +4,7 @@ * SPDX-License-Identifier: MIT */ import { Matrix3, Vector2, Color, Vector3, mergeUniforms, CubeUVReflectionMapping, Mesh, BoxGeometry, ShaderMaterial, BackSide, cloneUniforms, Matrix4, ColorManagement, SRGBTransfer, PlaneGeometry, FrontSide, getUnlitUniformColorSpace, IntType, warn, HalfFloatType, UnsignedByteType, FloatType, RGBAFormat, Plane, CubeReflectionMapping, CubeRefractionMapping, BufferGeometry, OrthographicCamera, PerspectiveCamera, NoToneMapping, MeshBasicMaterial, NoBlending, WebGLRenderTarget, BufferAttribute, LinearSRGBColorSpace, LinearFilter, CubeTexture, LinearMipmapLinearFilter, CubeCamera, EquirectangularReflectionMapping, EquirectangularRefractionMapping, warnOnce, Uint32BufferAttribute, Uint16BufferAttribute, error, DataArrayTexture, Vector4, Float32BufferAttribute, RawShaderMaterial, CustomToneMapping, NeutralToneMapping, AgXToneMapping, ACESFilmicToneMapping, CineonToneMapping, ReinhardToneMapping, LinearToneMapping, Data3DTexture, GreaterEqualCompare, LessEqualCompare, DepthTexture, Texture, GLSL3, VSMShadowMap, PCFShadowMap, AddOperation, MixOperation, MultiplyOperation, LinearTransfer, UniformsUtils, DoubleSide, NormalBlending, TangentSpaceNormalMap, ObjectSpaceNormalMap, Layers, RGFormat, RG11_EAC_Format, RED_GREEN_RGTC2_Format, MeshDepthMaterial, MeshDistanceMaterial, PCFSoftShadowMap, DepthFormat, NearestFilter, CubeDepthTexture, UnsignedIntType, Frustum, LessEqualDepth, ReverseSubtractEquation, SubtractEquation, AddEquation, OneMinusConstantAlphaFactor, ConstantAlphaFactor, OneMinusConstantColorFactor, ConstantColorFactor, OneMinusDstAlphaFactor, OneMinusDstColorFactor, OneMinusSrcAlphaFactor, OneMinusSrcColorFactor, DstAlphaFactor, DstColorFactor, SrcAlphaSaturateFactor, SrcAlphaFactor, SrcColorFactor, OneFactor, ZeroFactor, NotEqualDepth, GreaterDepth, GreaterEqualDepth, EqualDepth, LessDepth, AlwaysDepth, NeverDepth, CullFaceNone, CullFaceBack, CullFaceFront, CustomBlending, MultiplyBlending, SubtractiveBlending, AdditiveBlending, ReversedDepthFuncs, MinEquation, MaxEquation, MirroredRepeatWrapping, ClampToEdgeWrapping, RepeatWrapping, LinearMipmapNearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, NotEqualCompare, GreaterCompare, EqualCompare, LessCompare, AlwaysCompare, NeverCompare, NoColorSpace, DepthStencilFormat, getByteLength, UnsignedInt248Type, UnsignedShortType, createElementNS, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedInt5999Type, UnsignedInt101111Type, ByteType, ShortType, AlphaFormat, RGBFormat, RedFormat, RedIntegerFormat, RGIntegerFormat, RGBAIntegerFormat, RGB_S3TC_DXT1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGB_PVRTC_4BPPV1_Format, RGB_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_PVRTC_2BPPV1_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGBA_ETC2_EAC_Format, R11_EAC_Format, SIGNED_R11_EAC_Format, SIGNED_RG11_EAC_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_BPTC_Format, RGB_BPTC_SIGNED_Format, RGB_BPTC_UNSIGNED_Format, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, SIGNED_RED_GREEN_RGTC2_Format, ExternalTexture, EventDispatcher, ArrayCamera, WebXRController, RAD2DEG, DataTexture, createCanvasElement, SRGBColorSpace, REVISION, log, WebGLCoordinateSystem, probeAsync } from './three.core.js'; -export { AdditiveAnimationBlendMode, AlwaysStencilFunc, AmbientLight, AnimationAction, AnimationClip, AnimationLoader, AnimationMixer, AnimationObjectGroup, AnimationUtils, ArcCurve, ArrowHelper, AttachedBindMode, Audio, AudioAnalyser, AudioContext, AudioListener, AudioLoader, AxesHelper, BasicDepthPacking, BasicShadowMap, BatchedMesh, BezierInterpolant, Bone, BooleanKeyframeTrack, Box2, Box3, Box3Helper, BoxHelper, BufferGeometryLoader, Cache, Camera, CameraHelper, CanvasTexture, CapsuleGeometry, CatmullRomCurve3, CircleGeometry, Clock, ColorKeyframeTrack, Compatibility, CompressedArrayTexture, CompressedCubeTexture, CompressedTexture, CompressedTextureLoader, ConeGeometry, Controls, CubeTextureLoader, CubicBezierCurve, CubicBezierCurve3, CubicInterpolant, CullFaceFrontBack, Curve, CurvePath, CylinderGeometry, Cylindrical, DataTextureLoader, DataUtils, DecrementStencilOp, DecrementWrapStencilOp, DefaultLoadingManager, DetachedBindMode, DirectionalLight, DirectionalLightHelper, DiscreteInterpolant, DodecahedronGeometry, DynamicCopyUsage, DynamicDrawUsage, DynamicReadUsage, EdgesGeometry, EllipseCurve, EqualStencilFunc, Euler, ExtrudeGeometry, FileLoader, Float16BufferAttribute, Fog, FogExp2, FramebufferTexture, FrustumArray, GLBufferAttribute, GLSL1, GreaterEqualStencilFunc, GreaterStencilFunc, GridHelper, Group, HTMLTexture, HemisphereLight, HemisphereLightHelper, IcosahedronGeometry, ImageBitmapLoader, ImageLoader, ImageUtils, IncrementStencilOp, IncrementWrapStencilOp, InstancedBufferAttribute, InstancedBufferGeometry, InstancedInterleavedBuffer, InstancedMesh, Int16BufferAttribute, Int32BufferAttribute, Int8BufferAttribute, InterleavedBuffer, InterleavedBufferAttribute, Interpolant, InterpolateBezier, InterpolateDiscrete, InterpolateLinear, InterpolateSmooth, InterpolationSamplingMode, InterpolationSamplingType, InvertStencilOp, KeepStencilOp, KeyframeTrack, LOD, LatheGeometry, LessEqualStencilFunc, LessStencilFunc, Light, LightProbe, Line, Line3, LineBasicMaterial, LineCurve, LineCurve3, LineDashedMaterial, LineLoop, LineSegments, LinearInterpolant, LinearMipMapLinearFilter, LinearMipMapNearestFilter, Loader, LoaderUtils, LoadingManager, LoopOnce, LoopPingPong, LoopRepeat, MOUSE, Material, MaterialBlending, MaterialLoader, MathUtils, Matrix2, MeshLambertMaterial, MeshMatcapMaterial, MeshNormalMaterial, MeshPhongMaterial, MeshPhysicalMaterial, MeshStandardMaterial, MeshToonMaterial, NearestMipMapLinearFilter, NearestMipMapNearestFilter, NeverStencilFunc, NoNormalPacking, NormalAnimationBlendMode, NormalGAPacking, NormalRGPacking, NotEqualStencilFunc, NumberKeyframeTrack, Object3D, ObjectLoader, OctahedronGeometry, Path, PlaneHelper, PointLight, PointLightHelper, Points, PointsMaterial, PolarGridHelper, PolyhedronGeometry, PositionalAudio, PropertyBinding, PropertyMixer, QuadraticBezierCurve, QuadraticBezierCurve3, Quaternion, QuaternionKeyframeTrack, QuaternionLinearInterpolant, RGBADepthPacking, RGBDepthPacking, RGBIntegerFormat, RGDepthPacking, Ray, Raycaster, RectAreaLight, RenderObjectRefreshType, RenderTarget, RenderTarget3D, ReplaceStencilOp, RingGeometry, Scene, ShadowMaterial, Shape, ShapeGeometry, ShapePath, ShapeUtils, Skeleton, SkeletonHelper, SkinnedMesh, Source, Sphere, SphereGeometry, Spherical, SphericalHarmonics3, SplineCurve, SpotLight, SpotLightHelper, Sprite, SpriteMaterial, StaticCopyUsage, StaticDrawUsage, StaticReadUsage, StereoCamera, StreamCopyUsage, StreamDrawUsage, StreamReadUsage, StringKeyframeTrack, SunLight, SunLightShadow, TOUCH, TetrahedronGeometry, TextureLoader, TextureSource, TextureUtils, Timer, TimestampQuery, TorusGeometry, TorusKnotGeometry, Triangle, TriangleFanDrawMode, TriangleStripDrawMode, TrianglesDrawMode, TubeGeometry, UVMapping, Uint8BufferAttribute, Uint8ClampedBufferAttribute, Uniform, UniformsGroup, VectorKeyframeTrack, VideoFrameTexture, VideoTexture, WebGL3DRenderTarget, WebGLArrayRenderTarget, WebGPUCoordinateSystem, WireframeGeometry, WrapAroundEnding, ZeroCurvatureEnding, ZeroSlopeEnding, ZeroStencilOp, getConsoleFunction, setConsoleFunction } from './three.core.js'; +export { AdditiveAnimationBlendMode, AlwaysStencilFunc, AmbientLight, AnimationAction, AnimationClip, AnimationLoader, AnimationMixer, AnimationObjectGroup, AnimationUtils, ArcCurve, ArrowHelper, AttachedBindMode, Audio, AudioAnalyser, AudioContext, AudioListener, AudioLoader, AxesHelper, BasicDepthPacking, BasicShadowMap, BatchedMesh, BezierInterpolant, Bone, BooleanKeyframeTrack, Box2, Box3, Box3Helper, BoxHelper, BufferGeometryLoader, Cache, Camera, CameraHelper, CanvasTexture, CapsuleGeometry, CatmullRomCurve3, CircleGeometry, Clock, ColorKeyframeTrack, Compatibility, CompressedArrayTexture, CompressedCubeTexture, CompressedTexture, CompressedTextureLoader, ConeGeometry, Controls, CubeTextureLoader, CubicBezierCurve, CubicBezierCurve3, CubicInterpolant, CullFaceFrontBack, Curve, CurvePath, CylinderGeometry, Cylindrical, DataTextureLoader, DataUtils, DecrementStencilOp, DecrementWrapStencilOp, DefaultLoadingManager, DetachedBindMode, DirectionalLight, DirectionalLightHelper, DiscreteInterpolant, DodecahedronGeometry, DynamicCopyUsage, DynamicDrawUsage, DynamicReadUsage, EdgesGeometry, EllipseCurve, EqualStencilFunc, Euler, ExtrudeGeometry, FileLoader, Float16BufferAttribute, Fog, FogExp2, FramebufferTexture, FrustumArray, GLBufferAttribute, GLSL1, GreaterEqualStencilFunc, GreaterStencilFunc, GridHelper, Group, HTMLTexture, HemisphereLight, HemisphereLightHelper, IcosahedronGeometry, ImageBitmapLoader, ImageLoader, ImageUtils, IncrementStencilOp, IncrementWrapStencilOp, InstancedBufferAttribute, InstancedBufferGeometry, InstancedInterleavedBuffer, InstancedMesh, Int16BufferAttribute, Int32BufferAttribute, Int8BufferAttribute, InterleavedBuffer, InterleavedBufferAttribute, Interpolant, InterpolateBezier, InterpolateDiscrete, InterpolateLinear, InterpolateSmooth, InterpolationSamplingMode, InterpolationSamplingType, InvertStencilOp, KeepStencilOp, KeyframeTrack, LOD, LatheGeometry, LessEqualStencilFunc, LessStencilFunc, Light, LightProbe, Line, Line3, LineBasicMaterial, LineCurve, LineCurve3, LineDashedMaterial, LineLoop, LineSegments, LinearInterpolant, LinearMipMapLinearFilter, LinearMipMapNearestFilter, Loader, LoaderUtils, LoadingManager, LoopOnce, LoopPingPong, LoopRepeat, MOUSE, Material, MaterialBlending, MaterialLoader, MathUtils, Matrix2, MeshLambertMaterial, MeshMatcapMaterial, MeshNormalMaterial, MeshPhongMaterial, MeshPhysicalMaterial, MeshStandardMaterial, MeshToonMaterial, NearestMipMapLinearFilter, NearestMipMapNearestFilter, NeverStencilFunc, NoNormalPacking, NormalAnimationBlendMode, NormalGAPacking, NormalRGPacking, NotEqualStencilFunc, NumberKeyframeTrack, Object3D, ObjectLoader, OctahedronGeometry, Path, PlaneHelper, PointLight, PointLightHelper, Points, PointsMaterial, PolarGridHelper, PolyhedronGeometry, PositionalAudio, PropertyBinding, PropertyMixer, QuadraticBezierCurve, QuadraticBezierCurve3, Quaternion, QuaternionKeyframeTrack, QuaternionLinearInterpolant, RGBADepthPacking, RGBDepthPacking, RGBIntegerFormat, RGDepthPacking, Ray, Raycaster, RectAreaLight, RenderObjectRefreshType, RenderTarget, RenderTarget3D, ReplaceStencilOp, RingGeometry, Scene, ShadowMaterial, Shape, ShapeGeometry, ShapePath, ShapeUtils, Skeleton, SkeletonHelper, SkinnedMesh, Source, Sphere, SphereGeometry, Spherical, SphericalHarmonics3, SplineCurve, SpotLight, SpotLightHelper, Sprite, SpriteMaterial, StaticCopyUsage, StaticDrawUsage, StaticReadUsage, StereoCamera, StreamCopyUsage, StreamDrawUsage, StreamReadUsage, StringKeyframeTrack, SunLight, TOUCH, TetrahedronGeometry, TextureLoader, TextureSource, TextureUtils, Timer, TimestampQuery, TorusGeometry, TorusKnotGeometry, Triangle, TriangleFanDrawMode, TriangleStripDrawMode, TrianglesDrawMode, TubeGeometry, UVMapping, Uint8BufferAttribute, Uint8ClampedBufferAttribute, Uniform, UniformsGroup, VectorKeyframeTrack, VideoFrameTexture, VideoTexture, WebGL3DRenderTarget, WebGLArrayRenderTarget, WebGPUCoordinateSystem, WireframeGeometry, WrapAroundEnding, ZeroCurvatureEnding, ZeroSlopeEnding, ZeroStencilOp, getConsoleFunction, setConsoleFunction } from './three.core.js'; function WebGLAnimation() { @@ -474,7 +474,7 @@ var roughnessmap_fragment = "float roughnessFactor = roughness;\n#ifdef USE_ROUG var roughnessmap_pars_fragment = "#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif"; -var shadowmap_pars_fragment = "#if NUM_SPOT_LIGHT_COORDS > 0\n\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#if NUM_SPOT_LIGHT_MAPS > 0\n\tuniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ];\n#endif\n#ifdef USE_SHADOWMAP\n\t#if NUM_SUN_LIGHT_SHADOWS > 0\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tuniform sampler2DShadow sunShadowMap[ NUM_SUN_LIGHT_SHADOWS ];\n\t\t#else\n\t\t\tuniform sampler2D sunShadowMap[ NUM_SUN_LIGHT_SHADOWS ];\n\t\t#endif\n\t\tuniform mat4 sunShadowMatrix[ NUM_SUN_LIGHT_SHADOWS * 4 ];\n\t\tuniform vec4 sunShadowCascade[ NUM_SUN_LIGHT_SHADOWS * 4 ];\n\t\tvarying vec4 vSunShadowWorldPosition;\n\t\tvarying vec3 vSunShadowWorldNormal;\n\t\tstruct SunLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SunLightShadow sunLightShadows[ NUM_SUN_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tuniform sampler2DShadow directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\t#else\n\t\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\t#endif\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tuniform sampler2DShadow spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\t#else\n\t\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\t#endif\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tuniform samplerCubeShadow pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\t#elif defined( SHADOWMAP_TYPE_BASIC )\n\t\t\tuniform samplerCube pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\t#endif\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\tfloat interleavedGradientNoise( vec2 position ) {\n\t\t\treturn fract( 52.9829189 * fract( dot( position, vec2( 0.06711056, 0.00583715 ) ) ) );\n\t\t}\n\t\tvec2 vogelDiskSample( int sampleIndex, int samplesCount, float phi ) {\n\t\t\tconst float goldenAngle = 2.399963229728653;\n\t\t\tfloat r = sqrt( ( float( sampleIndex ) + 0.5 ) / float( samplesCount ) );\n\t\t\tfloat theta = float( sampleIndex ) * goldenAngle + phi;\n\t\t\treturn vec2( cos( theta ), sin( theta ) ) * r;\n\t\t}\n\t#endif\n\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\tfloat getShadow( sampler2DShadow shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\t\tfloat shadow = 1.0;\n\t\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\t\tshadowCoord.z += shadowBias;\n\t\t\tbool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\n\t\t\tbool frustumTest = inFrustum && shadowCoord.z <= 1.0;\n\t\t\tif ( frustumTest ) {\n\t\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\t\tfloat radius = shadowRadius * texelSize.x;\n\t\t\t\tfloat phi = interleavedGradientNoise( gl_FragCoord.xy ) * PI2;\n\t\t\t\tshadow = (\n\t\t\t\t\ttexture( shadowMap, vec3( shadowCoord.xy + vogelDiskSample( 0, 5, phi ) * radius, shadowCoord.z ) ) +\n\t\t\t\t\ttexture( shadowMap, vec3( shadowCoord.xy + vogelDiskSample( 1, 5, phi ) * radius, shadowCoord.z ) ) +\n\t\t\t\t\ttexture( shadowMap, vec3( shadowCoord.xy + vogelDiskSample( 2, 5, phi ) * radius, shadowCoord.z ) ) +\n\t\t\t\t\ttexture( shadowMap, vec3( shadowCoord.xy + vogelDiskSample( 3, 5, phi ) * radius, shadowCoord.z ) ) +\n\t\t\t\t\ttexture( shadowMap, vec3( shadowCoord.xy + vogelDiskSample( 4, 5, phi ) * radius, shadowCoord.z ) )\n\t\t\t\t) * 0.2;\n\t\t\t}\n\t\t\treturn mix( 1.0, shadow, shadowIntensity );\n\t\t}\n\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\t\tfloat shadow = 1.0;\n\t\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\t\t#ifdef USE_REVERSED_DEPTH_BUFFER\n\t\t\t\tshadowCoord.z -= shadowBias;\n\t\t\t#else\n\t\t\t\tshadowCoord.z += shadowBias;\n\t\t\t#endif\n\t\t\tbool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\n\t\t\tbool frustumTest = inFrustum && shadowCoord.z <= 1.0;\n\t\t\tif ( frustumTest ) {\n\t\t\t\tvec2 distribution = texture2D( shadowMap, shadowCoord.xy ).rg;\n\t\t\t\tfloat mean = distribution.x;\n\t\t\t\tfloat variance = distribution.y * distribution.y;\n\t\t\t\t#ifdef USE_REVERSED_DEPTH_BUFFER\n\t\t\t\t\tfloat hard_shadow = step( mean, shadowCoord.z );\n\t\t\t\t#else\n\t\t\t\t\tfloat hard_shadow = step( shadowCoord.z, mean );\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\tif ( hard_shadow == 1.0 ) {\n\t\t\t\t\tshadow = 1.0;\n\t\t\t\t} else {\n\t\t\t\t\tvariance = max( variance, 0.0000001 );\n\t\t\t\t\tfloat d = shadowCoord.z - mean;\n\t\t\t\t\tfloat p_max = variance / ( variance + d * d );\n\t\t\t\t\tp_max = clamp( ( p_max - 0.3 ) / 0.65, 0.0, 1.0 );\n\t\t\t\t\tshadow = max( hard_shadow, p_max );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn mix( 1.0, shadow, shadowIntensity );\n\t\t}\n\t#else\n\t\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\t\tfloat shadow = 1.0;\n\t\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\t\t#ifdef USE_REVERSED_DEPTH_BUFFER\n\t\t\t\tshadowCoord.z -= shadowBias;\n\t\t\t#else\n\t\t\t\tshadowCoord.z += shadowBias;\n\t\t\t#endif\n\t\t\tbool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\n\t\t\tbool frustumTest = inFrustum && shadowCoord.z <= 1.0;\n\t\t\tif ( frustumTest ) {\n\t\t\t\tfloat depth = texture2D( shadowMap, shadowCoord.xy ).r;\n\t\t\t\t#ifdef USE_REVERSED_DEPTH_BUFFER\n\t\t\t\t\tshadow = step( depth, shadowCoord.z );\n\t\t\t\t#else\n\t\t\t\t\tshadow = step( shadowCoord.z, depth );\n\t\t\t\t#endif\n\t\t\t}\n\t\t\treturn mix( 1.0, shadow, shadowIntensity );\n\t\t}\n\t#endif\n\t#if NUM_SUN_LIGHT_SHADOWS > 0\n\t\tfloat getSunShadow(\n\t\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\t\tsampler2DShadow shadowMap,\n\t\t\t#else\n\t\t\t\tsampler2D shadowMap,\n\t\t\t#endif\n\t\t\tSunLightShadow sunLightShadow,\n\t\t\tconst in int shadowIndex\n\t\t) {\n\t\t\tvec4 shadowWorldPosition = vec4( vSunShadowWorldPosition.xyz + vSunShadowWorldNormal * sunLightShadow.shadowNormalBias, 1.0 );\n\t\t\tfloat viewDepth = vSunShadowWorldPosition.w;\n\t\t\tint cascadeOffset = shadowIndex * 4;\n\t\t\tfloat shadow = 1.0;\n\t\t\tfor ( int i = 3; i >= 0; i -- ) {\n\t\t\t\tvec4 cascade = sunShadowCascade[ cascadeOffset + i ];\n\t\t\t\tif ( viewDepth >= cascade.x && viewDepth < cascade.y ) {\n\t\t\t\t\tfloat cascadeShadow = getShadow( shadowMap, sunLightShadow.shadowMapSize, sunLightShadow.shadowIntensity, sunLightShadow.shadowBias, sunLightShadow.shadowRadius, sunShadowMatrix[ cascadeOffset + i ] * shadowWorldPosition );\n\t\t\t\t\tshadow = viewDepth < cascade.z ? cascadeShadow : mix( cascadeShadow, shadow, smoothstep( cascade.z, cascade.y, viewDepth ) );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn shadow;\n\t\t}\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#if defined( SHADOWMAP_TYPE_PCF )\n\tfloat getPointShadow( samplerCubeShadow shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tfloat shadow = 1.0;\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\tvec3 absVec = abs( lightToPosition );\n\t\tfloat viewSpaceZ = max( max( absVec.x, absVec.y ), absVec.z );\n\t\tif ( viewSpaceZ - shadowCameraFar <= 0.0 && viewSpaceZ - shadowCameraNear >= 0.0 ) {\n\t\t\t#ifdef USE_REVERSED_DEPTH_BUFFER\n\t\t\t\tfloat dp = ( shadowCameraNear * ( shadowCameraFar - viewSpaceZ ) ) / ( viewSpaceZ * ( shadowCameraFar - shadowCameraNear ) );\n\t\t\t\tdp -= shadowBias;\n\t\t\t#else\n\t\t\t\tfloat dp = ( shadowCameraFar * ( viewSpaceZ - shadowCameraNear ) ) / ( viewSpaceZ * ( shadowCameraFar - shadowCameraNear ) );\n\t\t\t\tdp += shadowBias;\n\t\t\t#endif\n\t\t\tfloat texelSize = shadowRadius / shadowMapSize.x;\n\t\t\tvec3 absDir = abs( bd3D );\n\t\t\tvec3 tangent = absDir.x > absDir.z ? vec3( 0.0, 1.0, 0.0 ) : vec3( 1.0, 0.0, 0.0 );\n\t\t\ttangent = normalize( cross( bd3D, tangent ) );\n\t\t\tvec3 bitangent = cross( bd3D, tangent );\n\t\t\tfloat phi = interleavedGradientNoise( gl_FragCoord.xy ) * PI2;\n\t\t\tvec2 sample0 = vogelDiskSample( 0, 5, phi );\n\t\t\tvec2 sample1 = vogelDiskSample( 1, 5, phi );\n\t\t\tvec2 sample2 = vogelDiskSample( 2, 5, phi );\n\t\t\tvec2 sample3 = vogelDiskSample( 3, 5, phi );\n\t\t\tvec2 sample4 = vogelDiskSample( 4, 5, phi );\n\t\t\tshadow = (\n\t\t\t\ttexture( shadowMap, vec4( bd3D + ( tangent * sample0.x + bitangent * sample0.y ) * texelSize, dp ) ) +\n\t\t\t\ttexture( shadowMap, vec4( bd3D + ( tangent * sample1.x + bitangent * sample1.y ) * texelSize, dp ) ) +\n\t\t\t\ttexture( shadowMap, vec4( bd3D + ( tangent * sample2.x + bitangent * sample2.y ) * texelSize, dp ) ) +\n\t\t\t\ttexture( shadowMap, vec4( bd3D + ( tangent * sample3.x + bitangent * sample3.y ) * texelSize, dp ) ) +\n\t\t\t\ttexture( shadowMap, vec4( bd3D + ( tangent * sample4.x + bitangent * sample4.y ) * texelSize, dp ) )\n\t\t\t) * 0.2;\n\t\t}\n\t\treturn mix( 1.0, shadow, shadowIntensity );\n\t}\n\t#elif defined( SHADOWMAP_TYPE_BASIC )\n\tfloat getPointShadow( samplerCube shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tfloat shadow = 1.0;\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tvec3 absVec = abs( lightToPosition );\n\t\tfloat viewSpaceZ = max( max( absVec.x, absVec.y ), absVec.z );\n\t\tif ( viewSpaceZ - shadowCameraFar <= 0.0 && viewSpaceZ - shadowCameraNear >= 0.0 ) {\n\t\t\tfloat dp = ( shadowCameraFar * ( viewSpaceZ - shadowCameraNear ) ) / ( viewSpaceZ * ( shadowCameraFar - shadowCameraNear ) );\n\t\t\tdp += shadowBias;\n\t\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t\tfloat depth = textureCube( shadowMap, bd3D ).r;\n\t\t\t#ifdef USE_REVERSED_DEPTH_BUFFER\n\t\t\t\tdepth = 1.0 - depth;\n\t\t\t#endif\n\t\t\tshadow = step( dp, depth );\n\t\t}\n\t\treturn mix( 1.0, shadow, shadowIntensity );\n\t}\n\t#endif\n\t#endif\n#endif"; +var shadowmap_pars_fragment = "#if NUM_SPOT_LIGHT_COORDS > 0\n\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#if NUM_SPOT_LIGHT_MAPS > 0\n\tuniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ];\n#endif\n#ifdef USE_SHADOWMAP\n\t#if NUM_SUN_LIGHT_SHADOWS > 0\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tuniform sampler2DShadow sunShadowMap[ NUM_SUN_LIGHT_SHADOWS ];\n\t\t#else\n\t\t\tuniform sampler2D sunShadowMap[ NUM_SUN_LIGHT_SHADOWS ];\n\t\t#endif\n\t\tuniform mat4 sunShadowMatrix[ NUM_SUN_LIGHT_SHADOWS * 4 ];\n\t\tuniform vec4 sunShadowCascade[ NUM_SUN_LIGHT_SHADOWS * 4 ];\n\t\tvarying vec4 vSunShadowWorldPosition;\n\t\tvarying vec3 vSunShadowWorldNormal;\n\t\tstruct SunLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SunLightShadow sunLightShadows[ NUM_SUN_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tuniform sampler2DShadow directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\t#else\n\t\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\t#endif\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tuniform sampler2DShadow spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\t#else\n\t\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\t#endif\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tuniform samplerCubeShadow pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\t#elif defined( SHADOWMAP_TYPE_BASIC )\n\t\t\tuniform samplerCube pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\t#endif\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\tfloat interleavedGradientNoise( vec2 position ) {\n\t\t\treturn fract( 52.9829189 * fract( dot( position, vec2( 0.06711056, 0.00583715 ) ) ) );\n\t\t}\n\t\tvec2 vogelDiskSample( int sampleIndex, int samplesCount, float phi ) {\n\t\t\tconst float goldenAngle = 2.399963229728653;\n\t\t\tfloat r = sqrt( ( float( sampleIndex ) + 0.5 ) / float( samplesCount ) );\n\t\t\tfloat theta = float( sampleIndex ) * goldenAngle + phi;\n\t\t\treturn vec2( cos( theta ), sin( theta ) ) * r;\n\t\t}\n\t#endif\n\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\tfloat getShadow( sampler2DShadow shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\t\tfloat shadow = 1.0;\n\t\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\t\tshadowCoord.z += shadowBias;\n\t\t\tbool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\n\t\t\tbool frustumTest = inFrustum && shadowCoord.z <= 1.0;\n\t\t\tif ( frustumTest ) {\n\t\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\t\tfloat radius = shadowRadius * texelSize.x;\n\t\t\t\tfloat phi = interleavedGradientNoise( gl_FragCoord.xy ) * PI2;\n\t\t\t\tshadow = (\n\t\t\t\t\ttexture( shadowMap, vec3( shadowCoord.xy + vogelDiskSample( 0, 5, phi ) * radius, shadowCoord.z ) ) +\n\t\t\t\t\ttexture( shadowMap, vec3( shadowCoord.xy + vogelDiskSample( 1, 5, phi ) * radius, shadowCoord.z ) ) +\n\t\t\t\t\ttexture( shadowMap, vec3( shadowCoord.xy + vogelDiskSample( 2, 5, phi ) * radius, shadowCoord.z ) ) +\n\t\t\t\t\ttexture( shadowMap, vec3( shadowCoord.xy + vogelDiskSample( 3, 5, phi ) * radius, shadowCoord.z ) ) +\n\t\t\t\t\ttexture( shadowMap, vec3( shadowCoord.xy + vogelDiskSample( 4, 5, phi ) * radius, shadowCoord.z ) )\n\t\t\t\t) * 0.2;\n\t\t\t}\n\t\t\treturn mix( 1.0, shadow, shadowIntensity );\n\t\t}\n\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\t\tfloat shadow = 1.0;\n\t\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\t\t#ifdef USE_REVERSED_DEPTH_BUFFER\n\t\t\t\tshadowCoord.z -= shadowBias;\n\t\t\t#else\n\t\t\t\tshadowCoord.z += shadowBias;\n\t\t\t#endif\n\t\t\tbool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\n\t\t\tbool frustumTest = inFrustum && shadowCoord.z <= 1.0;\n\t\t\tif ( frustumTest ) {\n\t\t\t\tvec2 distribution = texture2D( shadowMap, shadowCoord.xy ).rg;\n\t\t\t\tfloat mean = distribution.x;\n\t\t\t\tfloat variance = distribution.y * distribution.y;\n\t\t\t\t#ifdef USE_REVERSED_DEPTH_BUFFER\n\t\t\t\t\tfloat hard_shadow = step( mean, shadowCoord.z );\n\t\t\t\t#else\n\t\t\t\t\tfloat hard_shadow = step( shadowCoord.z, mean );\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\tif ( hard_shadow == 1.0 ) {\n\t\t\t\t\tshadow = 1.0;\n\t\t\t\t} else {\n\t\t\t\t\tvariance = max( variance, 0.0000001 );\n\t\t\t\t\tfloat d = shadowCoord.z - mean;\n\t\t\t\t\tfloat p_max = variance / ( variance + d * d );\n\t\t\t\t\tp_max = clamp( ( p_max - 0.3 ) / 0.65, 0.0, 1.0 );\n\t\t\t\t\tshadow = max( hard_shadow, p_max );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn mix( 1.0, shadow, shadowIntensity );\n\t\t}\n\t#else\n\t\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\t\tfloat shadow = 1.0;\n\t\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\t\t#ifdef USE_REVERSED_DEPTH_BUFFER\n\t\t\t\tshadowCoord.z -= shadowBias;\n\t\t\t#else\n\t\t\t\tshadowCoord.z += shadowBias;\n\t\t\t#endif\n\t\t\tbool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\n\t\t\tbool frustumTest = inFrustum && shadowCoord.z <= 1.0;\n\t\t\tif ( frustumTest ) {\n\t\t\t\tfloat depth = texture2D( shadowMap, shadowCoord.xy ).r;\n\t\t\t\t#ifdef USE_REVERSED_DEPTH_BUFFER\n\t\t\t\t\tshadow = step( depth, shadowCoord.z );\n\t\t\t\t#else\n\t\t\t\t\tshadow = step( shadowCoord.z, depth );\n\t\t\t\t#endif\n\t\t\t}\n\t\t\treturn mix( 1.0, shadow, shadowIntensity );\n\t\t}\n\t#endif\n\t#if NUM_SUN_LIGHT_SHADOWS > 0\n\t\tfloat getSunShadow(\n\t\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\t\tsampler2DShadow shadowMap,\n\t\t\t#else\n\t\t\t\tsampler2D shadowMap,\n\t\t\t#endif\n\t\t\tSunLightShadow sunLightShadow,\n\t\t\tint shadowIndex\n\t\t) {\n\t\t\tvec4 shadowWorldPosition = vec4( vSunShadowWorldPosition.xyz + vSunShadowWorldNormal * sunLightShadow.shadowNormalBias, 1.0 );\n\t\t\tfloat viewDepth = vSunShadowWorldPosition.w;\n\t\t\tint cascadeOffset = shadowIndex * 4;\n\t\t\tfloat shadow = 1.0;\n\t\t\tfor ( int i = 3; i >= 0; i -- ) {\n\t\t\t\tvec4 cascade = sunShadowCascade[ cascadeOffset + i ];\n\t\t\t\tif ( viewDepth >= cascade.x && viewDepth < cascade.y ) {\n\t\t\t\t\tfloat cascadeShadow = getShadow( shadowMap, sunLightShadow.shadowMapSize, sunLightShadow.shadowIntensity, sunLightShadow.shadowBias, sunLightShadow.shadowRadius, sunShadowMatrix[ cascadeOffset + i ] * shadowWorldPosition );\n\t\t\t\t\tshadow = mix( cascadeShadow, shadow, smoothstep( cascade.z, cascade.y, viewDepth ) );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn shadow;\n\t\t}\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#if defined( SHADOWMAP_TYPE_PCF )\n\tfloat getPointShadow( samplerCubeShadow shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tfloat shadow = 1.0;\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\tvec3 absVec = abs( lightToPosition );\n\t\tfloat viewSpaceZ = max( max( absVec.x, absVec.y ), absVec.z );\n\t\tif ( viewSpaceZ - shadowCameraFar <= 0.0 && viewSpaceZ - shadowCameraNear >= 0.0 ) {\n\t\t\t#ifdef USE_REVERSED_DEPTH_BUFFER\n\t\t\t\tfloat dp = ( shadowCameraNear * ( shadowCameraFar - viewSpaceZ ) ) / ( viewSpaceZ * ( shadowCameraFar - shadowCameraNear ) );\n\t\t\t\tdp -= shadowBias;\n\t\t\t#else\n\t\t\t\tfloat dp = ( shadowCameraFar * ( viewSpaceZ - shadowCameraNear ) ) / ( viewSpaceZ * ( shadowCameraFar - shadowCameraNear ) );\n\t\t\t\tdp += shadowBias;\n\t\t\t#endif\n\t\t\tfloat texelSize = shadowRadius / shadowMapSize.x;\n\t\t\tvec3 absDir = abs( bd3D );\n\t\t\tvec3 tangent = absDir.x > absDir.z ? vec3( 0.0, 1.0, 0.0 ) : vec3( 1.0, 0.0, 0.0 );\n\t\t\ttangent = normalize( cross( bd3D, tangent ) );\n\t\t\tvec3 bitangent = cross( bd3D, tangent );\n\t\t\tfloat phi = interleavedGradientNoise( gl_FragCoord.xy ) * PI2;\n\t\t\tvec2 sample0 = vogelDiskSample( 0, 5, phi );\n\t\t\tvec2 sample1 = vogelDiskSample( 1, 5, phi );\n\t\t\tvec2 sample2 = vogelDiskSample( 2, 5, phi );\n\t\t\tvec2 sample3 = vogelDiskSample( 3, 5, phi );\n\t\t\tvec2 sample4 = vogelDiskSample( 4, 5, phi );\n\t\t\tshadow = (\n\t\t\t\ttexture( shadowMap, vec4( bd3D + ( tangent * sample0.x + bitangent * sample0.y ) * texelSize, dp ) ) +\n\t\t\t\ttexture( shadowMap, vec4( bd3D + ( tangent * sample1.x + bitangent * sample1.y ) * texelSize, dp ) ) +\n\t\t\t\ttexture( shadowMap, vec4( bd3D + ( tangent * sample2.x + bitangent * sample2.y ) * texelSize, dp ) ) +\n\t\t\t\ttexture( shadowMap, vec4( bd3D + ( tangent * sample3.x + bitangent * sample3.y ) * texelSize, dp ) ) +\n\t\t\t\ttexture( shadowMap, vec4( bd3D + ( tangent * sample4.x + bitangent * sample4.y ) * texelSize, dp ) )\n\t\t\t) * 0.2;\n\t\t}\n\t\treturn mix( 1.0, shadow, shadowIntensity );\n\t}\n\t#elif defined( SHADOWMAP_TYPE_BASIC )\n\tfloat getPointShadow( samplerCube shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tfloat shadow = 1.0;\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tvec3 absVec = abs( lightToPosition );\n\t\tfloat viewSpaceZ = max( max( absVec.x, absVec.y ), absVec.z );\n\t\tif ( viewSpaceZ - shadowCameraFar <= 0.0 && viewSpaceZ - shadowCameraNear >= 0.0 ) {\n\t\t\tfloat dp = ( shadowCameraFar * ( viewSpaceZ - shadowCameraNear ) ) / ( viewSpaceZ * ( shadowCameraFar - shadowCameraNear ) );\n\t\t\tdp += shadowBias;\n\t\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t\tfloat depth = textureCube( shadowMap, bd3D ).r;\n\t\t\t#ifdef USE_REVERSED_DEPTH_BUFFER\n\t\t\t\tdepth = 1.0 - depth;\n\t\t\t#endif\n\t\t\tshadow = step( dp, depth );\n\t\t}\n\t\treturn mix( 1.0, shadow, shadowIntensity );\n\t}\n\t#endif\n\t#endif\n#endif"; var shadowmap_pars_vertex = "#if NUM_SPOT_LIGHT_COORDS > 0\n\tuniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ];\n\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#ifdef USE_SHADOWMAP\n\t#if NUM_SUN_LIGHT_SHADOWS > 0\n\t\tvarying vec4 vSunShadowWorldPosition;\n\t\tvarying vec3 vSunShadowWorldNormal;\n\t#endif\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif"; @@ -8603,10 +8603,10 @@ function WebGLLights( extensions ) { // four cascades per sun light, matching the sun shadow shader chunks - for ( let i = 0; i < 4; i ++ ) { + for ( let j = 0; j < 4; j ++ ) { - state.sunShadowMatrix[ numSunShadows * 4 + i ] = shadow.getMatrix( i ); - state.sunShadowCascade[ numSunShadows * 4 + i ] = shadow._cascadeData[ i ]; + state.sunShadowMatrix[ numSunShadows * 4 + j ] = shadow.getMatrix( j ); + state.sunShadowCascade[ numSunShadows * 4 + j ] = shadow._cascadeData[ j ]; } @@ -8812,9 +8812,9 @@ function WebGLLights( extensions ) { state.directionalShadowMatrix.length = numDirectionalShadows; state.pointShadow.length = numPointShadows; state.pointShadowMap.length = numPointShadows; + state.pointShadowMatrix.length = numPointShadows; state.spotShadow.length = numSpotShadows; state.spotShadowMap.length = numSpotShadows; - state.pointShadowMatrix.length = numPointShadows; state.spotLightMatrix.length = numSpotShadows + numSpotMaps - numSpotShadowsWithMaps; state.spotLightMap.length = numSpotMaps; state.numSpotLightShadowsWithMaps = numSpotShadowsWithMaps; @@ -9220,7 +9220,6 @@ function WebGLShadowMap( renderer, objects, capabilities ) { _shadowMapSize.copy( shadow.mapSize ); - const viewportCount = shadow.getViewportCount(); const shadowFrameExtents = shadow.getFrameExtents(); _shadowMapSize.multiply( shadowFrameExtents ); @@ -9336,7 +9335,7 @@ function WebGLShadowMap( renderer, objects, capabilities ) { // For cube render targets (PointLights), render all 6 faces. Sun lights // render one atlas viewport per cascade. - const faceCount = shadow.map.isWebGLCubeRenderTarget ? 6 : viewportCount; + const faceCount = shadow.map.isWebGLCubeRenderTarget ? 6 : shadow.getViewportCount(); if ( light.isPointLight !== true ) shadow.updateMatrices( light, camera ); diff --git a/build/three.tsl.js b/build/three.tsl.js index c50e39db846648..2577a9b9695eae 100644 --- a/build/three.tsl.js +++ b/build/three.tsl.js @@ -438,6 +438,8 @@ const overrideNodes = TSL.overrideNodes; const packHalf2x16 = TSL.packHalf2x16; const packSnorm2x16 = TSL.packSnorm2x16; const packUnorm2x16 = TSL.packUnorm2x16; +const packSnorm4x8 = TSL.packSnorm4x8; +const packUnorm4x8 = TSL.packUnorm4x8; const packNormalToRGB = TSL.packNormalToRGB; const parabola = TSL.parabola; const parallaxDirection = TSL.parallaxDirection; @@ -609,6 +611,8 @@ const uniformTexture = TSL.uniformTexture; const unpackHalf2x16 = TSL.unpackHalf2x16; const unpackSnorm2x16 = TSL.unpackSnorm2x16; const unpackUnorm2x16 = TSL.unpackUnorm2x16; +const unpackSnorm4x8 = TSL.unpackSnorm4x8; +const unpackUnorm4x8 = TSL.unpackUnorm4x8; const unpackRGBToNormal = TSL.unpackRGBToNormal; const unpremultiplyAlpha = TSL.unpremultiplyAlpha; const userData = TSL.userData; @@ -665,4 +669,4 @@ for ( const key of Object.keys( THREE.TSL ) ) { log( code ); //*/ -export { BRDF_GGX, BRDF_Lambert, BasicPointShadowFilter, BasicShadowFilter, Break, Const, Continue, DFGLUT, D_GGX, Discard, EPSILON, F_Schlick, Fn, HALF_PI, INFINITY, If, Loop, NodeAccess, NodeShaderStage, NodeType, NodeUpdateType, OnAfterObjectUpdate, OnAfterRenderPipeline, OnBeforeMaterialUpdate, OnBeforeObjectUpdate, OnBeforeRenderPipeline, OnMaterialUpdate, OnObjectUpdate, PCFShadowFilter, PI, PI2, PointShadowFilter, Return, Schlick_to_F0, ShaderNode, Stack, Switch, TBNViewMatrix, TWO_PI, VSMShadowFilter, V_GGX_SmithCorrelated, Var, VarIntent, abs, acesFilmicToneMapping, acos, acosh, add, addMethodChaining, addNodeElement, agxToneMapping, all, alphaT, ambientOcclusion, and, anisotropy, anisotropyB, anisotropyT, any, array, asin, asinh, assign, atan, atanh, atomicAdd, atomicAnd, atomicFunc, atomicLoad, atomicMax, atomicMin, atomicOr, atomicStore, atomicSub, atomicXor, attenuationColor, attenuationDistance, attribute, attributeArray, backgroundBlurriness, backgroundIntensity, backgroundRotation, batch, batchIndirectIndex, bentNormalView, billboarding, bitAnd, bitNot, bitOr, bitXor, bitangentGeometry, bitangentLocal, bitangentView, bitangentWorld, bitcast, blendBurn, blendColor, blendDodge, blendOverlay, blendScreen, bool, buffer, bufferAttribute, builtin, builtinAOContext, builtinShadowContext, bumpMap, bvec2, bvec3, bvec4, bypass, cache, call, cameraFar, cameraIndex, cameraNear, cameraNormalMatrix, cameraPosition, cameraProjectionMatrix, cameraProjectionMatrixInverse, cameraViewMatrix, cameraViewport, cameraWorldMatrix, cbrt, cdl, ceil, checker, cineonToneMapping, clamp, clearcoat, clearcoatNormalView, clearcoatRoughness, clipSpace, code, color, colorSpaceToWorking, colorToDirection, compute, computeKernel, computeSkinning, context, convert, convertColorSpace, convertToTexture, cos, cosh, countLeadingZeros, countOneBits, countTrailingZeros, cross, cubeTexture, cubeTextureBase, dFdx, dFdy, dashSize, debug, decrement, decrementBefore, defaultBuildStages, defaultShaderStages, defined, degrees, deltaTime, densityFog, densityFogFactor, depth, depthPass, determinant, difference, diffuseColor, directPointLight, directionToColor, directionToFaceDirection, dispersion, distance, div, dot, drawIndex, dynamicBufferAttribute, element, emissive, equal, equirectDirection, equirectUV, exp, exp2, exponentialHeightFogFactor, expression, faceDirection, faceForward, faceforward, float, floatBitsToInt, floatBitsToUint, floor, fog, fract, frameGroup, frameId, frontFacing, fwidth, gain, gapSize, getConstNodeType, getCurrentStack, getDistanceAttenuation, getGeometryRoughness, getNormalFromDepth, getParallaxCorrectNormal, getRoughness, getScreenPosition, getScreenPositionFromClip, getShIrradianceAt, getShadowMaterial, getShadowRenderObjectFunction, getTextureIndex, getViewPosition, globalId, glsl, glslFn, grayscale, greaterThan, greaterThanEqual, hash, highpModelNormalViewMatrix, highpModelViewMatrix, hue, increment, incrementBefore, instance, instanceIndex, instancedArray, instancedBufferAttribute, instancedDynamicBufferAttribute, instancedMesh, int, intBitsToFloat, interleavedGradientNoise, inverse, inverseSqrt, inversesqrt, invocationLocalIndex, invocationSubgroupIndex, ior, iridescence, iridescenceIOR, iridescenceThickness, ivec2, ivec3, ivec4, js, label, length, lengthSq, lessThan, lessThanEqual, lightPosition, lightProjectionUV, lightShadowMatrix, lightTargetDirection, lightTargetPosition, lightViewPosition, lightingContext, lights, linearDepth, linearToneMapping, localId, log, log2, logarithmicDepthToViewZ, luminance, mat2, mat3, mat4, matcapUV, materialAO, materialAlphaTest, materialAnisotropy, materialAnisotropyVector, materialAttenuationColor, materialAttenuationDistance, materialClearcoat, materialClearcoatNormal, materialClearcoatRoughness, materialColor, materialDispersion, materialEmissive, materialEnvIntensity, materialEnvRotation, materialIOR, materialIridescence, materialIridescenceIOR, materialIridescenceThickness, materialLightMap, materialLineDashOffset, materialLineDashSize, materialLineGapSize, materialLineScale, materialLineWidth, materialMetalness, materialNormal, materialOpacity, materialPointSize, materialReference, materialReflectivity, materialRefractionRatio, materialRetroreflectivity, materialRotation, materialRoughness, materialSheen, materialSheenRoughness, materialShininess, materialSpecular, materialSpecularColor, materialSpecularIntensity, materialSpecularStrength, materialThickness, materialTransmission, max, maxMipLevel, mediumpModelViewMatrix, metalness, min, mix, mixElement, mod, modelDirection, modelNormalMatrix, modelPosition, modelRadius, modelScale, modelViewMatrix, modelViewPosition, modelViewProjection, modelWorldMatrix, modelWorldMatrixInverse, morphReference, mrt, mul, mx_aastep, mx_add, mx_atan2, mx_cell_noise_float, mx_cell_noise_vec3, mx_contrast, mx_divide, mx_fractal_noise_float, mx_fractal_noise_float_2d, mx_fractal_noise_vec2, mx_fractal_noise_vec3, mx_fractal_noise_vec4, mx_frame, mx_heighttonormal, mx_hsvtorgb, mx_ifequal, mx_ifgreater, mx_ifgreatereq, mx_invert, mx_modulo, mx_multiply, mx_noise_float, mx_noise_vec3, mx_noise_vec4, mx_place2d, mx_power, mx_ramp4, mx_ramplr, mx_ramptb, mx_rgbtohsv, mx_rotate2d, mx_rotate3d, mx_safepower, mx_separate, mx_smoothstep, mx_splitlr, mx_splittb, mx_srgb_texture_to_lin_rec709, mx_subtract, mx_timer, mx_transform_uv, mx_unifiednoise2d, mx_unifiednoise3d, mx_worley_noise_float, mx_worley_noise_float_2d, mx_worley_noise_float_3d, mx_worley_noise_vec2, mx_worley_noise_vec3, mx_worley_noise_vec3_style, negate, negateOnBackSide, neutralToneMapping, nodeArray, nodeImmutable, nodeObject, nodeObjectIntent, nodeObjects, nodeProxy, nodeProxyIntent, normalFlat, normalGeometry, normalLocal, normalMap, normalView, normalViewGeometry, normalWorld, normalWorldGeometry, normalize, not, notEqual, numWorkgroups, objectDirection, objectGroup, objectPosition, objectRadius, objectScale, objectViewPosition, objectWorldMatrix, oneMinus, or, orthographicDepthToViewZ, oscSawtooth, oscSine, oscSquare, oscTriangle, output, outputStruct, overloadingFn, overrideNode, overrideNodes, packHalf2x16, packNormalToRGB, packSnorm2x16, packUnorm2x16, parabola, parallaxDirection, parallaxUV, parameter, pass, passTexture, pcurve, perspectiveDepthToViewZ, pmremTexture, pointShadow, pointUV, pointWidth, positionGeometry, positionLocal, positionPrevious, positionView, positionViewDirection, positionWorld, positionWorldDirection, posterize, pow, pow2, pow3, pow4, premultiplyAlpha, property, radians, rand, range, rangeFog, rangeFogFactor, reciprocal, reference, referenceBuffer, reflect, reflectVector, reflectView, reflector, refract, refractVector, refractView, reinhardToneMapping, remap, remapClamp, renderGroup, renderOutput, rendererReference, replaceDefaultUV, retroreflectivity, rotate, rotateUV, roughness, round, rtt, sRGBTransferEOTF, sRGBTransferOETF, sample, sampler, samplerComparison, saturate, saturation, screen, screenCoordinate, screenDPR, screenSize, screenUV, select, setCurrentStack, setName, shaderStages, shadow, shadowPositionWorld, shapeCircle, sharedUniformGroup, sheen, sheenRoughness, shiftLeft, shiftRight, shininess, sign, sin, sinc, sinh, skinning, smoothstep, smoothstepElement, specularColor, specularF90, spherizeUV, split, spritesheetUV, sqrt, stack, step, stepElement, storage, storageBarrier, storageTexture, storageTexture3D, struct, sub, subBuild, subgroupAdd, subgroupAll, subgroupAnd, subgroupAny, subgroupBallot, subgroupBroadcast, subgroupBroadcastFirst, subgroupElect, subgroupExclusiveAdd, subgroupExclusiveMul, subgroupInclusiveAdd, subgroupInclusiveMul, subgroupIndex, subgroupMax, subgroupMin, subgroupMul, subgroupOr, subgroupShuffle, subgroupShuffleDown, subgroupShuffleUp, subgroupShuffleXor, subgroupSize, subgroupXor, tan, tangentGeometry, tangentLocal, tangentView, tangentWorld, tanh, texture, texture3D, textureBarrier, textureBicubic, textureBicubicLevel, textureLevel, textureLoad, textureSize, textureStore, thickness, time, toneMapping, toneMappingExposure, toonOutlinePass, transformDirection, transformNormal, transformNormalByInverseViewMatrix, transformNormalByViewMatrix, transformNormalToView, transformedClearcoatNormalView, transformedNormalView, transformedNormalWorld, transmission, transpose, triNoise3D, triplanarTexture, triplanarTextures, trunc, uint, uintBitsToFloat, uniform, uniformArray, uniformCubeTexture, uniformFlow, uniformGroup, uniformTexture, unpackHalf2x16, unpackRGBToNormal, unpackSnorm2x16, unpackUnorm2x16, unpremultiplyAlpha, userData, uv, uvec2, uvec3, uvec4, varying, varyingProperty, vec2, vec3, vec4, vectorComponents, velocity, vertexColor, vertexIndex, vertexStage, vibrance, viewZToLogarithmicDepth, viewZToOrthographicDepth, viewZToPerspectiveDepth, viewZToReversedOrthographicDepth, viewZToReversedPerspectiveDepth, viewport, viewportCoordinate, viewportDepthTexture, viewportLinearDepth, viewportMipTexture, viewportOpaqueMipTexture, viewportSafeUV, viewportSharedTexture, viewportSize, viewportTexture, viewportUV, vogelDiskSample, wgsl, wgslFn, workgroupArray, workgroupBarrier, workgroupId, workingToColorSpace, xor }; +export { BRDF_GGX, BRDF_Lambert, BasicPointShadowFilter, BasicShadowFilter, Break, Const, Continue, DFGLUT, D_GGX, Discard, EPSILON, F_Schlick, Fn, HALF_PI, INFINITY, If, Loop, NodeAccess, NodeShaderStage, NodeType, NodeUpdateType, OnAfterObjectUpdate, OnAfterRenderPipeline, OnBeforeMaterialUpdate, OnBeforeObjectUpdate, OnBeforeRenderPipeline, OnMaterialUpdate, OnObjectUpdate, PCFShadowFilter, PI, PI2, PointShadowFilter, Return, Schlick_to_F0, ShaderNode, Stack, Switch, TBNViewMatrix, TWO_PI, VSMShadowFilter, V_GGX_SmithCorrelated, Var, VarIntent, abs, acesFilmicToneMapping, acos, acosh, add, addMethodChaining, addNodeElement, agxToneMapping, all, alphaT, ambientOcclusion, and, anisotropy, anisotropyB, anisotropyT, any, array, asin, asinh, assign, atan, atanh, atomicAdd, atomicAnd, atomicFunc, atomicLoad, atomicMax, atomicMin, atomicOr, atomicStore, atomicSub, atomicXor, attenuationColor, attenuationDistance, attribute, attributeArray, backgroundBlurriness, backgroundIntensity, backgroundRotation, batch, batchIndirectIndex, bentNormalView, billboarding, bitAnd, bitNot, bitOr, bitXor, bitangentGeometry, bitangentLocal, bitangentView, bitangentWorld, bitcast, blendBurn, blendColor, blendDodge, blendOverlay, blendScreen, bool, buffer, bufferAttribute, builtin, builtinAOContext, builtinShadowContext, bumpMap, bvec2, bvec3, bvec4, bypass, cache, call, cameraFar, cameraIndex, cameraNear, cameraNormalMatrix, cameraPosition, cameraProjectionMatrix, cameraProjectionMatrixInverse, cameraViewMatrix, cameraViewport, cameraWorldMatrix, cbrt, cdl, ceil, checker, cineonToneMapping, clamp, clearcoat, clearcoatNormalView, clearcoatRoughness, clipSpace, code, color, colorSpaceToWorking, colorToDirection, compute, computeKernel, computeSkinning, context, convert, convertColorSpace, convertToTexture, cos, cosh, countLeadingZeros, countOneBits, countTrailingZeros, cross, cubeTexture, cubeTextureBase, dFdx, dFdy, dashSize, debug, decrement, decrementBefore, defaultBuildStages, defaultShaderStages, defined, degrees, deltaTime, densityFog, densityFogFactor, depth, depthPass, determinant, difference, diffuseColor, directPointLight, directionToColor, directionToFaceDirection, dispersion, distance, div, dot, drawIndex, dynamicBufferAttribute, element, emissive, equal, equirectDirection, equirectUV, exp, exp2, exponentialHeightFogFactor, expression, faceDirection, faceForward, faceforward, float, floatBitsToInt, floatBitsToUint, floor, fog, fract, frameGroup, frameId, frontFacing, fwidth, gain, gapSize, getConstNodeType, getCurrentStack, getDistanceAttenuation, getGeometryRoughness, getNormalFromDepth, getParallaxCorrectNormal, getRoughness, getScreenPosition, getScreenPositionFromClip, getShIrradianceAt, getShadowMaterial, getShadowRenderObjectFunction, getTextureIndex, getViewPosition, globalId, glsl, glslFn, grayscale, greaterThan, greaterThanEqual, hash, highpModelNormalViewMatrix, highpModelViewMatrix, hue, increment, incrementBefore, instance, instanceIndex, instancedArray, instancedBufferAttribute, instancedDynamicBufferAttribute, instancedMesh, int, intBitsToFloat, interleavedGradientNoise, inverse, inverseSqrt, inversesqrt, invocationLocalIndex, invocationSubgroupIndex, ior, iridescence, iridescenceIOR, iridescenceThickness, ivec2, ivec3, ivec4, js, label, length, lengthSq, lessThan, lessThanEqual, lightPosition, lightProjectionUV, lightShadowMatrix, lightTargetDirection, lightTargetPosition, lightViewPosition, lightingContext, lights, linearDepth, linearToneMapping, localId, log, log2, logarithmicDepthToViewZ, luminance, mat2, mat3, mat4, matcapUV, materialAO, materialAlphaTest, materialAnisotropy, materialAnisotropyVector, materialAttenuationColor, materialAttenuationDistance, materialClearcoat, materialClearcoatNormal, materialClearcoatRoughness, materialColor, materialDispersion, materialEmissive, materialEnvIntensity, materialEnvRotation, materialIOR, materialIridescence, materialIridescenceIOR, materialIridescenceThickness, materialLightMap, materialLineDashOffset, materialLineDashSize, materialLineGapSize, materialLineScale, materialLineWidth, materialMetalness, materialNormal, materialOpacity, materialPointSize, materialReference, materialReflectivity, materialRefractionRatio, materialRetroreflectivity, materialRotation, materialRoughness, materialSheen, materialSheenRoughness, materialShininess, materialSpecular, materialSpecularColor, materialSpecularIntensity, materialSpecularStrength, materialThickness, materialTransmission, max, maxMipLevel, mediumpModelViewMatrix, metalness, min, mix, mixElement, mod, modelDirection, modelNormalMatrix, modelPosition, modelRadius, modelScale, modelViewMatrix, modelViewPosition, modelViewProjection, modelWorldMatrix, modelWorldMatrixInverse, morphReference, mrt, mul, mx_aastep, mx_add, mx_atan2, mx_cell_noise_float, mx_cell_noise_vec3, mx_contrast, mx_divide, mx_fractal_noise_float, mx_fractal_noise_float_2d, mx_fractal_noise_vec2, mx_fractal_noise_vec3, mx_fractal_noise_vec4, mx_frame, mx_heighttonormal, mx_hsvtorgb, mx_ifequal, mx_ifgreater, mx_ifgreatereq, mx_invert, mx_modulo, mx_multiply, mx_noise_float, mx_noise_vec3, mx_noise_vec4, mx_place2d, mx_power, mx_ramp4, mx_ramplr, mx_ramptb, mx_rgbtohsv, mx_rotate2d, mx_rotate3d, mx_safepower, mx_separate, mx_smoothstep, mx_splitlr, mx_splittb, mx_srgb_texture_to_lin_rec709, mx_subtract, mx_timer, mx_transform_uv, mx_unifiednoise2d, mx_unifiednoise3d, mx_worley_noise_float, mx_worley_noise_float_2d, mx_worley_noise_float_3d, mx_worley_noise_vec2, mx_worley_noise_vec3, mx_worley_noise_vec3_style, negate, negateOnBackSide, neutralToneMapping, nodeArray, nodeImmutable, nodeObject, nodeObjectIntent, nodeObjects, nodeProxy, nodeProxyIntent, normalFlat, normalGeometry, normalLocal, normalMap, normalView, normalViewGeometry, normalWorld, normalWorldGeometry, normalize, not, notEqual, numWorkgroups, objectDirection, objectGroup, objectPosition, objectRadius, objectScale, objectViewPosition, objectWorldMatrix, oneMinus, or, orthographicDepthToViewZ, oscSawtooth, oscSine, oscSquare, oscTriangle, output, outputStruct, overloadingFn, overrideNode, overrideNodes, packHalf2x16, packNormalToRGB, packSnorm2x16, packSnorm4x8, packUnorm2x16, packUnorm4x8, parabola, parallaxDirection, parallaxUV, parameter, pass, passTexture, pcurve, perspectiveDepthToViewZ, pmremTexture, pointShadow, pointUV, pointWidth, positionGeometry, positionLocal, positionPrevious, positionView, positionViewDirection, positionWorld, positionWorldDirection, posterize, pow, pow2, pow3, pow4, premultiplyAlpha, property, radians, rand, range, rangeFog, rangeFogFactor, reciprocal, reference, referenceBuffer, reflect, reflectVector, reflectView, reflector, refract, refractVector, refractView, reinhardToneMapping, remap, remapClamp, renderGroup, renderOutput, rendererReference, replaceDefaultUV, retroreflectivity, rotate, rotateUV, roughness, round, rtt, sRGBTransferEOTF, sRGBTransferOETF, sample, sampler, samplerComparison, saturate, saturation, screen, screenCoordinate, screenDPR, screenSize, screenUV, select, setCurrentStack, setName, shaderStages, shadow, shadowPositionWorld, shapeCircle, sharedUniformGroup, sheen, sheenRoughness, shiftLeft, shiftRight, shininess, sign, sin, sinc, sinh, skinning, smoothstep, smoothstepElement, specularColor, specularF90, spherizeUV, split, spritesheetUV, sqrt, stack, step, stepElement, storage, storageBarrier, storageTexture, storageTexture3D, struct, sub, subBuild, subgroupAdd, subgroupAll, subgroupAnd, subgroupAny, subgroupBallot, subgroupBroadcast, subgroupBroadcastFirst, subgroupElect, subgroupExclusiveAdd, subgroupExclusiveMul, subgroupInclusiveAdd, subgroupInclusiveMul, subgroupIndex, subgroupMax, subgroupMin, subgroupMul, subgroupOr, subgroupShuffle, subgroupShuffleDown, subgroupShuffleUp, subgroupShuffleXor, subgroupSize, subgroupXor, tan, tangentGeometry, tangentLocal, tangentView, tangentWorld, tanh, texture, texture3D, textureBarrier, textureBicubic, textureBicubicLevel, textureLevel, textureLoad, textureSize, textureStore, thickness, time, toneMapping, toneMappingExposure, toonOutlinePass, transformDirection, transformNormal, transformNormalByInverseViewMatrix, transformNormalByViewMatrix, transformNormalToView, transformedClearcoatNormalView, transformedNormalView, transformedNormalWorld, transmission, transpose, triNoise3D, triplanarTexture, triplanarTextures, trunc, uint, uintBitsToFloat, uniform, uniformArray, uniformCubeTexture, uniformFlow, uniformGroup, uniformTexture, unpackHalf2x16, unpackRGBToNormal, unpackSnorm2x16, unpackSnorm4x8, unpackUnorm2x16, unpackUnorm4x8, unpremultiplyAlpha, userData, uv, uvec2, uvec3, uvec4, varying, varyingProperty, vec2, vec3, vec4, vectorComponents, velocity, vertexColor, vertexIndex, vertexStage, vibrance, viewZToLogarithmicDepth, viewZToOrthographicDepth, viewZToPerspectiveDepth, viewZToReversedOrthographicDepth, viewZToReversedPerspectiveDepth, viewport, viewportCoordinate, viewportDepthTexture, viewportLinearDepth, viewportMipTexture, viewportOpaqueMipTexture, viewportSafeUV, viewportSharedTexture, viewportSize, viewportTexture, viewportUV, vogelDiskSample, wgsl, wgslFn, workgroupArray, workgroupBarrier, workgroupId, workingToColorSpace, xor }; diff --git a/build/three.webgpu.js b/build/three.webgpu.js index a8335b29cf444e..d4b8c19670949e 100644 --- a/build/three.webgpu.js +++ b/build/three.webgpu.js @@ -4,7 +4,7 @@ * SPDX-License-Identifier: MIT */ import { DynamicDrawUsage, RenderObjectRefreshType, Color, Vector2, Vector3, Vector4, Matrix2, Matrix3, Matrix4, UnsignedIntType, IntType, error, RedFormat, RedIntegerFormat, DepthFormat, DepthStencilFormat, AlphaFormat, RGFormat, RGIntegerFormat, RGBFormat, RGBIntegerFormat, EventDispatcher, MathUtils, warn, WebGLCoordinateSystem, WebGPUCoordinateSystem, ColorManagement, SRGBTransfer, NoToneMapping, StaticDrawUsage, InterleavedBufferAttribute, InterleavedBuffer, NoColorSpace, log as log$1, warnOnce, Texture, Compatibility, LessCompare, LessEqualCompare, GreaterCompare, GreaterEqualCompare, NearestFilter, Sphere, BackSide, DoubleSide, CubeTexture, CubeReflectionMapping, CubeRefractionMapping, TangentSpaceNormalMap, NoNormalPacking, NormalRGPacking, NormalGAPacking, ObjectSpaceNormalMap, RED_GREEN_RGTC2_Format, RG11_EAC_Format, InstancedBufferAttribute, InstancedInterleavedBuffer, DataTexture, RGBAFormat, FloatType, DataArrayTexture, FramebufferTexture, LinearMipmapLinearFilter, DepthTexture, Material, LineBasicMaterial, LineDashedMaterial, NoBlending, MeshNormalMaterial, SRGBColorSpace, RenderTarget, BoxGeometry, Mesh, Scene, LinearFilter, CubeCamera, EquirectangularReflectionMapping, EquirectangularRefractionMapping, AddOperation, MixOperation, MultiplyOperation, MeshBasicMaterial, MeshLambertMaterial, MeshPhongMaterial, HalfFloatType, ClampToEdgeWrapping, BufferGeometry, OrthographicCamera, PerspectiveCamera, LinearSRGBColorSpace, CubeUVReflectionMapping, BufferAttribute, MeshStandardMaterial, MeshPhysicalMaterial, MeshToonMaterial, MeshMatcapMaterial, SpriteMaterial, PointsMaterial, ShadowMaterial, Uint32BufferAttribute, Uint16BufferAttribute, ByteType, UnsignedByteType, ShortType, UnsignedShortType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedInt248Type, UnsignedInt5999Type, UnsignedInt101111Type, NormalBlending, SrcAlphaFactor, OneMinusSrcAlphaFactor, AddEquation, MaterialBlending, Object3D, LinearMipMapLinearFilter, Plane, Float32BufferAttribute, UVMapping, PCFShadowMap, VSMShadowMap, BasicShadowMap, CubeDepthTexture, SphereGeometry, LinearMipmapNearestFilter, NearestMipmapLinearFilter, Float16BufferAttribute, yieldToMain, REVISION, ArrayCamera, PlaneGeometry, FrontSide, CustomBlending, ZeroFactor, CylinderGeometry, Quaternion, WebXRController, RAD2DEG, PCFSoftShadowMap, FrustumArray, Frustum, RGBAIntegerFormat, TimestampQuery, createCanvasElement, MaxEquation, MinEquation, ReverseSubtractEquation, SubtractEquation, OneMinusConstantAlphaFactor, ConstantAlphaFactor, OneMinusConstantColorFactor, ConstantColorFactor, OneMinusDstAlphaFactor, OneMinusDstColorFactor, OneMinusSrcColorFactor, DstAlphaFactor, DstColorFactor, SrcAlphaSaturateFactor, SrcColorFactor, OneFactor, CullFaceNone, CullFaceBack, CullFaceFront, MultiplyBlending, SubtractiveBlending, AdditiveBlending, NotEqualDepth, GreaterDepth, GreaterEqualDepth, EqualDepth, LessEqualDepth, LessDepth, AlwaysDepth, NeverDepth, ReversedDepthFuncs, RGB_S3TC_DXT1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGB_PVRTC_4BPPV1_Format, RGB_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_PVRTC_2BPPV1_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGBA_ETC2_EAC_Format, R11_EAC_Format, SIGNED_R11_EAC_Format, SIGNED_RG11_EAC_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_BPTC_Format, RGB_BPTC_SIGNED_Format, RGB_BPTC_UNSIGNED_Format, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, SIGNED_RED_GREEN_RGTC2_Format, MirroredRepeatWrapping, RepeatWrapping, NearestMipmapNearestFilter, NotEqualCompare, EqualCompare, AlwaysCompare, NeverCompare, LinearTransfer, getByteLength, isTypedArray, NotEqualStencilFunc, GreaterStencilFunc, GreaterEqualStencilFunc, EqualStencilFunc, LessEqualStencilFunc, LessStencilFunc, AlwaysStencilFunc, NeverStencilFunc, DecrementWrapStencilOp, IncrementWrapStencilOp, DecrementStencilOp, IncrementStencilOp, InvertStencilOp, ReplaceStencilOp, ZeroStencilOp, KeepStencilOp, SpotLight, PointLight, DirectionalLight, RectAreaLight, AmbientLight, HemisphereLight, LightProbe, LinearToneMapping, ReinhardToneMapping, CineonToneMapping, ACESFilmicToneMapping, AgXToneMapping, NeutralToneMapping, Group, Loader, FileLoader, MaterialLoader, ObjectLoader } from './three.core.js'; -export { AdditiveAnimationBlendMode, AnimationAction, AnimationClip, AnimationLoader, AnimationMixer, AnimationObjectGroup, AnimationUtils, ArcCurve, ArrowHelper, AttachedBindMode, Audio, AudioAnalyser, AudioContext, AudioListener, AudioLoader, AxesHelper, BasicDepthPacking, BatchedMesh, BezierInterpolant, Bone, BooleanKeyframeTrack, Box2, Box3, Box3Helper, BoxHelper, BufferGeometryLoader, Cache, Camera, CameraHelper, CanvasTexture, CapsuleGeometry, CatmullRomCurve3, CircleGeometry, Clock, ColorKeyframeTrack, CompressedArrayTexture, CompressedCubeTexture, CompressedTexture, CompressedTextureLoader, ConeGeometry, Controls, CubeTextureLoader, CubicBezierCurve, CubicBezierCurve3, CubicInterpolant, CullFaceFrontBack, Curve, CurvePath, CustomToneMapping, Cylindrical, Data3DTexture, DataTextureLoader, DataUtils, DefaultLoadingManager, DetachedBindMode, DirectionalLightHelper, DiscreteInterpolant, DodecahedronGeometry, DynamicCopyUsage, DynamicReadUsage, EdgesGeometry, EllipseCurve, Euler, ExternalTexture, ExtrudeGeometry, Fog, FogExp2, GLBufferAttribute, GLSL1, GLSL3, GridHelper, HTMLTexture, HemisphereLightHelper, IcosahedronGeometry, ImageBitmapLoader, ImageLoader, ImageUtils, InstancedBufferGeometry, InstancedMesh, Int16BufferAttribute, Int32BufferAttribute, Int8BufferAttribute, Interpolant, InterpolateBezier, InterpolateDiscrete, InterpolateLinear, InterpolateSmooth, InterpolationSamplingMode, InterpolationSamplingType, KeyframeTrack, LOD, LatheGeometry, Layers, Light, Line, Line3, LineCurve, LineCurve3, LineLoop, LineSegments, LinearInterpolant, LinearMipMapNearestFilter, LoaderUtils, LoadingManager, LoopOnce, LoopPingPong, LoopRepeat, MOUSE, MeshDepthMaterial, MeshDistanceMaterial, NearestMipMapLinearFilter, NearestMipMapNearestFilter, NormalAnimationBlendMode, NumberKeyframeTrack, OctahedronGeometry, Path, PlaneHelper, PointLightHelper, Points, PolarGridHelper, PolyhedronGeometry, PositionalAudio, PropertyBinding, PropertyMixer, QuadraticBezierCurve, QuadraticBezierCurve3, QuaternionKeyframeTrack, QuaternionLinearInterpolant, RGBADepthPacking, RGBDepthPacking, RGDepthPacking, RawShaderMaterial, Ray, Raycaster, RenderTarget3D, RingGeometry, ShaderMaterial, Shape, ShapeGeometry, ShapePath, ShapeUtils, Skeleton, SkeletonHelper, SkinnedMesh, Source, Spherical, SphericalHarmonics3, SplineCurve, SpotLightHelper, Sprite, StaticCopyUsage, StaticReadUsage, StereoCamera, StreamCopyUsage, StreamDrawUsage, StreamReadUsage, StringKeyframeTrack, SunLight, SunLightShadow, TOUCH, TetrahedronGeometry, TextureLoader, TextureSource, TextureUtils, Timer, TorusGeometry, TorusKnotGeometry, Triangle, TriangleFanDrawMode, TriangleStripDrawMode, TrianglesDrawMode, TubeGeometry, Uint8BufferAttribute, Uint8ClampedBufferAttribute, Uniform, UniformsGroup, VectorKeyframeTrack, VideoFrameTexture, VideoTexture, WebGL3DRenderTarget, WebGLArrayRenderTarget, WebGLRenderTarget, WireframeGeometry, WrapAroundEnding, ZeroCurvatureEnding, ZeroSlopeEnding, getConsoleFunction, setConsoleFunction } from './three.core.js'; +export { AdditiveAnimationBlendMode, AnimationAction, AnimationClip, AnimationLoader, AnimationMixer, AnimationObjectGroup, AnimationUtils, ArcCurve, ArrowHelper, AttachedBindMode, Audio, AudioAnalyser, AudioContext, AudioListener, AudioLoader, AxesHelper, BasicDepthPacking, BatchedMesh, BezierInterpolant, Bone, BooleanKeyframeTrack, Box2, Box3, Box3Helper, BoxHelper, BufferGeometryLoader, Cache, Camera, CameraHelper, CanvasTexture, CapsuleGeometry, CatmullRomCurve3, CircleGeometry, Clock, ColorKeyframeTrack, CompressedArrayTexture, CompressedCubeTexture, CompressedTexture, CompressedTextureLoader, ConeGeometry, Controls, CubeTextureLoader, CubicBezierCurve, CubicBezierCurve3, CubicInterpolant, CullFaceFrontBack, Curve, CurvePath, CustomToneMapping, Cylindrical, Data3DTexture, DataTextureLoader, DataUtils, DefaultLoadingManager, DetachedBindMode, DirectionalLightHelper, DiscreteInterpolant, DodecahedronGeometry, DynamicCopyUsage, DynamicReadUsage, EdgesGeometry, EllipseCurve, Euler, ExternalTexture, ExtrudeGeometry, Fog, FogExp2, GLBufferAttribute, GLSL1, GLSL3, GridHelper, HTMLTexture, HemisphereLightHelper, IcosahedronGeometry, ImageBitmapLoader, ImageLoader, ImageUtils, InstancedBufferGeometry, InstancedMesh, Int16BufferAttribute, Int32BufferAttribute, Int8BufferAttribute, Interpolant, InterpolateBezier, InterpolateDiscrete, InterpolateLinear, InterpolateSmooth, InterpolationSamplingMode, InterpolationSamplingType, KeyframeTrack, LOD, LatheGeometry, Layers, Light, Line, Line3, LineCurve, LineCurve3, LineLoop, LineSegments, LinearInterpolant, LinearMipMapNearestFilter, LoaderUtils, LoadingManager, LoopOnce, LoopPingPong, LoopRepeat, MOUSE, MeshDepthMaterial, MeshDistanceMaterial, NearestMipMapLinearFilter, NearestMipMapNearestFilter, NormalAnimationBlendMode, NumberKeyframeTrack, OctahedronGeometry, Path, PlaneHelper, PointLightHelper, Points, PolarGridHelper, PolyhedronGeometry, PositionalAudio, PropertyBinding, PropertyMixer, QuadraticBezierCurve, QuadraticBezierCurve3, QuaternionKeyframeTrack, QuaternionLinearInterpolant, RGBADepthPacking, RGBDepthPacking, RGDepthPacking, RawShaderMaterial, Ray, Raycaster, RenderTarget3D, RingGeometry, ShaderMaterial, Shape, ShapeGeometry, ShapePath, ShapeUtils, Skeleton, SkeletonHelper, SkinnedMesh, Source, Spherical, SphericalHarmonics3, SplineCurve, SpotLightHelper, Sprite, StaticCopyUsage, StaticReadUsage, StereoCamera, StreamCopyUsage, StreamDrawUsage, StreamReadUsage, StringKeyframeTrack, SunLight, TOUCH, TetrahedronGeometry, TextureLoader, TextureSource, TextureUtils, Timer, TorusGeometry, TorusKnotGeometry, Triangle, TriangleFanDrawMode, TriangleStripDrawMode, TrianglesDrawMode, TubeGeometry, Uint8BufferAttribute, Uint8ClampedBufferAttribute, Uniform, UniformsGroup, VectorKeyframeTrack, VideoFrameTexture, VideoTexture, WebGL3DRenderTarget, WebGLArrayRenderTarget, WebGLRenderTarget, WireframeGeometry, WrapAroundEnding, ZeroCurvatureEnding, ZeroSlopeEnding, getConsoleFunction, setConsoleFunction } from './three.core.js'; const refreshUniforms = [ 'alphaMap', @@ -37373,6 +37373,14 @@ class PackFloatNode extends TempNode { */ this.encoding = encoding; + /** + * The component layout of the packed integer. + * + * @type {'2x16' | '4x8'} + * @default '2x16' + */ + this.layout = '2x16'; + /** * This flag can be used for type testing. * @@ -37393,7 +37401,7 @@ class PackFloatNode extends TempNode { generate( builder ) { const inputType = this.vectorNode.getNodeType( builder ); - return `${ builder.getFloatPackingMethod( this.encoding ) }(${ this.vectorNode.build( builder, inputType )})`; + return `${ builder.getFloatPackingMethod( this.encoding, this.layout ) }(${ this.vectorNode.build( builder, inputType )})`; } @@ -37431,6 +37439,26 @@ const packUnorm2x16 = /*@__PURE__*/ nodeProxyIntent( PackFloatNode, 'unorm' ).se */ const packHalf2x16 = /*@__PURE__*/ nodeProxyIntent( PackFloatNode, 'float16' ).setParameterLength( 1 ); +/** + * Converts each component of the normalized float to 8-bit integer values. The results are packed into a single unsigned integer. + * + * @tsl + * @function + * @param {Node} value - The 4-component vector to be packed + * @returns {Node} + */ +const packSnorm4x8 = /*@__PURE__*/ nodeProxyIntent( PackFloatNode, 'snorm', null, { layout: '4x8' } ).setParameterLength( 1 ); + +/** + * Converts each component of the normalized float to 8-bit integer values. The results are packed into a single unsigned integer. + * + * @tsl + * @function + * @param {Node} value - The 4-component vector to be packed + * @returns {Node} + */ +const packUnorm4x8 = /*@__PURE__*/ nodeProxyIntent( PackFloatNode, 'unorm', null, { layout: '4x8' } ).setParameterLength( 1 ); + /** * This node represents an operation that unpacks values from a 32-bit unsigned integer, reinterpreting the results as a floating-point vector * @@ -37467,6 +37495,14 @@ class UnpackFloatNode extends TempNode { */ this.encoding = encoding; + /** + * The component layout of the packed integer. + * + * @type {'2x16' | '4x8'} + * @default '2x16' + */ + this.layout = '2x16'; + /** * This flag can be used for type testing. * @@ -37480,14 +37516,14 @@ class UnpackFloatNode extends TempNode { generateNodeType() { - return 'vec2'; + return this.layout === '4x8' ? 'vec4' : 'vec2'; } generate( builder ) { const inputType = this.uintNode.getNodeType( builder ); - return `${ builder.getFloatUnpackingMethod( this.encoding ) }(${ this.uintNode.build( builder, inputType )})`; + return `${ builder.getFloatUnpackingMethod( this.encoding, this.layout ) }(${ this.uintNode.build( builder, inputType )})`; } @@ -37523,6 +37559,26 @@ const unpackUnorm2x16 = /*@__PURE__*/ nodeProxyIntent( UnpackFloatNode, 'unorm' */ const unpackHalf2x16 = /*@__PURE__*/ nodeProxyIntent( UnpackFloatNode, 'float16' ).setParameterLength( 1 ); +/** + * Unpacks a 32-bit unsigned integer into four 8-bit values, interpreted as normalized signed integers. Returns a vec4 with all values. + * + * @tsl + * @function + * @param {Node} value - The unsigned integer to be unpacked + * @returns {Node} + */ +const unpackSnorm4x8 = /*@__PURE__*/ nodeProxyIntent( UnpackFloatNode, 'snorm', null, { layout: '4x8' } ).setParameterLength( 1 ); + +/** + * Unpacks a 32-bit unsigned integer into four 8-bit values, interpreted as normalized unsigned integers. Returns a vec4 with all values. + * + * @tsl + * @function + * @param {Node} value - The unsigned integer to be unpacked + * @returns {Node} + */ +const unpackUnorm4x8 = /*@__PURE__*/ nodeProxyIntent( UnpackFloatNode, 'unorm', null, { layout: '4x8' } ).setParameterLength( 1 ); + // https://github.com/cabbibo/glsl-tri-noise-3d @@ -49575,7 +49631,9 @@ var TSL = /*#__PURE__*/Object.freeze({ packHalf2x16: packHalf2x16, packNormalToRGB: packNormalToRGB, packSnorm2x16: packSnorm2x16, + packSnorm4x8: packSnorm4x8, packUnorm2x16: packUnorm2x16, + packUnorm4x8: packUnorm4x8, parabola: parabola, parallaxDirection: parallaxDirection, parallaxUV: parallaxUV, @@ -49752,7 +49810,9 @@ var TSL = /*#__PURE__*/Object.freeze({ unpackNormal: unpackNormal, unpackRGBToNormal: unpackRGBToNormal, unpackSnorm2x16: unpackSnorm2x16, + unpackSnorm4x8: unpackSnorm4x8, unpackUnorm2x16: unpackUnorm2x16, + unpackUnorm4x8: unpackUnorm4x8, unpremultiplyAlpha: unpremultiplyAlpha, userData: userData, uv: uv$1, @@ -65571,7 +65631,11 @@ vec4 tsl_textureGatherCompare_array( sampler2DArrayShadow map, vec3 coord, ivec2 ); return flipY ? ret.wzyx : ret; } -` ) +` ), + floatpack_snorm_4x8: new CodeNode( /* glsl */'uint tsl_packSnorm4x8( vec4 v ) { uvec4 u = uvec4( ivec4( round( clamp( v, -1.0, 1.0 ) * 127.0 ) ) & 0xff ); return u.x | u.y << 8 | u.z << 16 | u.w << 24; }' ), + floatpack_unorm_4x8: new CodeNode( /* glsl */'uint tsl_packUnorm4x8( vec4 v ) { uvec4 u = uvec4( round( clamp( v, 0.0, 1.0 ) * 255.0 ) ); return u.x | u.y << 8 | u.z << 16 | u.w << 24; }' ), + floatunpack_snorm_4x8: new CodeNode( /* glsl */'vec4 tsl_unpackSnorm4x8( uint x ) { return max( vec4( ivec4( x << 24, x << 16, x << 8, x ) >> 24 ) / 127.0, -1.0 ); }' ), + floatunpack_unorm_4x8: new CodeNode( /* glsl */'vec4 tsl_unpackUnorm4x8( uint x ) { return vec4( uvec4( x, x >> 8, x >> 16, x >> 24 ) & 0xffu ) / 255.0; }' ) }; const glslMethods = { @@ -65585,9 +65649,13 @@ const glslMethods = { floatpack_snorm_2x16: 'packSnorm2x16', floatpack_unorm_2x16: 'packUnorm2x16', floatpack_float16_2x16: 'packHalf2x16', + floatpack_snorm_4x8: 'tsl_packSnorm4x8', + floatpack_unorm_4x8: 'tsl_packUnorm4x8', floatunpack_snorm_2x16: 'unpackSnorm2x16', floatunpack_unorm_2x16: 'unpackUnorm2x16', - floatunpack_float16_2x16: 'unpackHalf2x16' + floatunpack_float16_2x16: 'unpackHalf2x16', + floatunpack_snorm_4x8: 'tsl_unpackSnorm4x8', + floatunpack_unorm_4x8: 'tsl_unpackUnorm4x8' }; const precisionLib = { @@ -65777,11 +65845,12 @@ class GLSLNodeBuilder extends NodeBuilder { * Returns the float packing method name for a given numeric encoding. * * @param {string} encoding - The numeric encoding that describes how the float values are mapped to the integer range. + * @param {string} [layout='2x16'] - The component layout of the packed integer. * @returns {string} The resolved GLSL float packing method name. */ - getFloatPackingMethod( encoding ) { + getFloatPackingMethod( encoding, layout = '2x16' ) { - return this.getMethod( `floatpack_${ encoding }_2x16` ); + return this.getMethod( `floatpack_${ encoding }_${ layout }` ); } @@ -65789,11 +65858,12 @@ class GLSLNodeBuilder extends NodeBuilder { * Returns the float unpacking method name for a given numeric encoding. * * @param {string} encoding - The numeric encoding that describes how the integer values are mapped to the float range. + * @param {string} [layout='2x16'] - The component layout of the packed integer. * @returns {string} The resolved GLSL float unpacking method name. */ - getFloatUnpackingMethod( encoding ) { + getFloatUnpackingMethod( encoding, layout = '2x16' ) { - return this.getMethod( `floatunpack_${ encoding }_2x16` ); + return this.getMethod( `floatunpack_${ encoding }_${ layout }` ); } @@ -80120,9 +80190,13 @@ const wgslMethods = { floatpack_snorm_2x16: 'pack2x16snorm', floatpack_unorm_2x16: 'pack2x16unorm', floatpack_float16_2x16: 'pack2x16float', + floatpack_snorm_4x8: 'pack4x8snorm', + floatpack_unorm_4x8: 'pack4x8unorm', floatunpack_snorm_2x16: 'unpack2x16snorm', floatunpack_unorm_2x16: 'unpack2x16unorm', - floatunpack_float16_2x16: 'unpack2x16float' + floatunpack_float16_2x16: 'unpack2x16float', + floatunpack_snorm_4x8: 'unpack4x8snorm', + floatunpack_unorm_4x8: 'unpack4x8unorm' }; // See: https://www.w3.org/TR/WGSL/#keyword-summary and #reserved-words-section @@ -82343,11 +82417,12 @@ ${ flowData.code } * Returns the float packing method name for a given numeric encoding. * * @param {string} encoding - The numeric encoding that describes how the float values are mapped to the integer range. + * @param {string} [layout='2x16'] - The component layout of the packed integer. * @returns {string} The resolve WGSL float packing method name. */ - getFloatPackingMethod( encoding ) { + getFloatPackingMethod( encoding, layout = '2x16' ) { - return this.getMethod( `floatpack_${ encoding }_2x16` ); + return this.getMethod( `floatpack_${ encoding }_${ layout }` ); } @@ -82355,11 +82430,12 @@ ${ flowData.code } * Returns the float unpacking method name for a given numeric encoding. * * @param {string} encoding - The numeric encoding that describes how the integer values are mapped to the float range. + * @param {string} [layout='2x16'] - The component layout of the packed integer. * @returns {string} The resolve WGSL float unpacking method name. */ - getFloatUnpackingMethod( encoding ) { + getFloatUnpackingMethod( encoding, layout = '2x16' ) { - return this.getMethod( `floatunpack_${ encoding }_2x16` ); + return this.getMethod( `floatunpack_${ encoding }_${ layout }` ); } diff --git a/build/three.webgpu.nodes.js b/build/three.webgpu.nodes.js index 78c0512985fda3..f90f5e47e749f5 100644 --- a/build/three.webgpu.nodes.js +++ b/build/three.webgpu.nodes.js @@ -4,7 +4,7 @@ * SPDX-License-Identifier: MIT */ import { DynamicDrawUsage, RenderObjectRefreshType, Color, Vector2, Vector3, Vector4, Matrix2, Matrix3, Matrix4, UnsignedIntType, IntType, error, RedFormat, RedIntegerFormat, DepthFormat, DepthStencilFormat, AlphaFormat, RGFormat, RGIntegerFormat, RGBFormat, RGBIntegerFormat, EventDispatcher, MathUtils, warn, WebGLCoordinateSystem, WebGPUCoordinateSystem, ColorManagement, SRGBTransfer, NoToneMapping, StaticDrawUsage, InterleavedBufferAttribute, InterleavedBuffer, NoColorSpace, log as log$1, warnOnce, Texture, Compatibility, LessCompare, LessEqualCompare, GreaterCompare, GreaterEqualCompare, NearestFilter, Sphere, BackSide, DoubleSide, CubeTexture, CubeReflectionMapping, CubeRefractionMapping, TangentSpaceNormalMap, NoNormalPacking, NormalRGPacking, NormalGAPacking, ObjectSpaceNormalMap, RED_GREEN_RGTC2_Format, RG11_EAC_Format, InstancedBufferAttribute, InstancedInterleavedBuffer, DataTexture, RGBAFormat, FloatType, DataArrayTexture, FramebufferTexture, LinearMipmapLinearFilter, DepthTexture, Material, LineBasicMaterial, LineDashedMaterial, NoBlending, MeshNormalMaterial, SRGBColorSpace, RenderTarget, BoxGeometry, Mesh, Scene, LinearFilter, CubeCamera, EquirectangularReflectionMapping, EquirectangularRefractionMapping, AddOperation, MixOperation, MultiplyOperation, MeshBasicMaterial, MeshLambertMaterial, MeshPhongMaterial, HalfFloatType, ClampToEdgeWrapping, BufferGeometry, OrthographicCamera, PerspectiveCamera, LinearSRGBColorSpace, CubeUVReflectionMapping, BufferAttribute, MeshStandardMaterial, MeshPhysicalMaterial, MeshToonMaterial, MeshMatcapMaterial, SpriteMaterial, PointsMaterial, ShadowMaterial, Uint32BufferAttribute, Uint16BufferAttribute, ByteType, UnsignedByteType, ShortType, UnsignedShortType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedInt248Type, UnsignedInt5999Type, UnsignedInt101111Type, NormalBlending, SrcAlphaFactor, OneMinusSrcAlphaFactor, AddEquation, MaterialBlending, Object3D, LinearMipMapLinearFilter, Plane, Float32BufferAttribute, UVMapping, PCFShadowMap, VSMShadowMap, BasicShadowMap, CubeDepthTexture, SphereGeometry, LinearMipmapNearestFilter, NearestMipmapLinearFilter, Float16BufferAttribute, yieldToMain, REVISION, ArrayCamera, PlaneGeometry, FrontSide, CustomBlending, ZeroFactor, CylinderGeometry, Quaternion, WebXRController, RAD2DEG, PCFSoftShadowMap, FrustumArray, Frustum, RGBAIntegerFormat, TimestampQuery, createCanvasElement, MaxEquation, MinEquation, ReverseSubtractEquation, SubtractEquation, OneMinusConstantAlphaFactor, ConstantAlphaFactor, OneMinusConstantColorFactor, ConstantColorFactor, OneMinusDstAlphaFactor, OneMinusDstColorFactor, OneMinusSrcColorFactor, DstAlphaFactor, DstColorFactor, SrcAlphaSaturateFactor, SrcColorFactor, OneFactor, CullFaceNone, CullFaceBack, CullFaceFront, MultiplyBlending, SubtractiveBlending, AdditiveBlending, NotEqualDepth, GreaterDepth, GreaterEqualDepth, EqualDepth, LessEqualDepth, LessDepth, AlwaysDepth, NeverDepth, ReversedDepthFuncs, RGB_S3TC_DXT1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGB_PVRTC_4BPPV1_Format, RGB_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_PVRTC_2BPPV1_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGBA_ETC2_EAC_Format, R11_EAC_Format, SIGNED_R11_EAC_Format, SIGNED_RG11_EAC_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_BPTC_Format, RGB_BPTC_SIGNED_Format, RGB_BPTC_UNSIGNED_Format, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, SIGNED_RED_GREEN_RGTC2_Format, MirroredRepeatWrapping, RepeatWrapping, NearestMipmapNearestFilter, NotEqualCompare, EqualCompare, AlwaysCompare, NeverCompare, LinearTransfer, getByteLength, isTypedArray, NotEqualStencilFunc, GreaterStencilFunc, GreaterEqualStencilFunc, EqualStencilFunc, LessEqualStencilFunc, LessStencilFunc, AlwaysStencilFunc, NeverStencilFunc, DecrementWrapStencilOp, IncrementWrapStencilOp, DecrementStencilOp, IncrementStencilOp, InvertStencilOp, ReplaceStencilOp, ZeroStencilOp, KeepStencilOp, SpotLight, PointLight, DirectionalLight, RectAreaLight, AmbientLight, HemisphereLight, LightProbe, LinearToneMapping, ReinhardToneMapping, CineonToneMapping, ACESFilmicToneMapping, AgXToneMapping, NeutralToneMapping, Group, Loader, FileLoader, MaterialLoader, ObjectLoader } from './three.core.js'; -export { AdditiveAnimationBlendMode, AnimationAction, AnimationClip, AnimationLoader, AnimationMixer, AnimationObjectGroup, AnimationUtils, ArcCurve, ArrowHelper, AttachedBindMode, Audio, AudioAnalyser, AudioContext, AudioListener, AudioLoader, AxesHelper, BasicDepthPacking, BatchedMesh, BezierInterpolant, Bone, BooleanKeyframeTrack, Box2, Box3, Box3Helper, BoxHelper, BufferGeometryLoader, Cache, Camera, CameraHelper, CanvasTexture, CapsuleGeometry, CatmullRomCurve3, CircleGeometry, Clock, ColorKeyframeTrack, CompressedArrayTexture, CompressedCubeTexture, CompressedTexture, CompressedTextureLoader, ConeGeometry, Controls, CubeTextureLoader, CubicBezierCurve, CubicBezierCurve3, CubicInterpolant, CullFaceFrontBack, Curve, CurvePath, CustomToneMapping, Cylindrical, Data3DTexture, DataTextureLoader, DataUtils, DefaultLoadingManager, DetachedBindMode, DirectionalLightHelper, DiscreteInterpolant, DodecahedronGeometry, DynamicCopyUsage, DynamicReadUsage, EdgesGeometry, EllipseCurve, Euler, ExternalTexture, ExtrudeGeometry, Fog, FogExp2, GLBufferAttribute, GLSL1, GLSL3, GridHelper, HTMLTexture, HemisphereLightHelper, IcosahedronGeometry, ImageBitmapLoader, ImageLoader, ImageUtils, InstancedBufferGeometry, InstancedMesh, Int16BufferAttribute, Int32BufferAttribute, Int8BufferAttribute, Interpolant, InterpolateBezier, InterpolateDiscrete, InterpolateLinear, InterpolateSmooth, InterpolationSamplingMode, InterpolationSamplingType, KeyframeTrack, LOD, LatheGeometry, Layers, Light, Line, Line3, LineCurve, LineCurve3, LineLoop, LineSegments, LinearInterpolant, LinearMipMapNearestFilter, LoaderUtils, LoadingManager, LoopOnce, LoopPingPong, LoopRepeat, MOUSE, MeshDepthMaterial, MeshDistanceMaterial, NearestMipMapLinearFilter, NearestMipMapNearestFilter, NormalAnimationBlendMode, NumberKeyframeTrack, OctahedronGeometry, Path, PlaneHelper, PointLightHelper, Points, PolarGridHelper, PolyhedronGeometry, PositionalAudio, PropertyBinding, PropertyMixer, QuadraticBezierCurve, QuadraticBezierCurve3, QuaternionKeyframeTrack, QuaternionLinearInterpolant, RGBADepthPacking, RGBDepthPacking, RGDepthPacking, RawShaderMaterial, Ray, Raycaster, RenderTarget3D, RingGeometry, ShaderMaterial, Shape, ShapeGeometry, ShapePath, ShapeUtils, Skeleton, SkeletonHelper, SkinnedMesh, Source, Spherical, SphericalHarmonics3, SplineCurve, SpotLightHelper, Sprite, StaticCopyUsage, StaticReadUsage, StereoCamera, StreamCopyUsage, StreamDrawUsage, StreamReadUsage, StringKeyframeTrack, SunLight, SunLightShadow, TOUCH, TetrahedronGeometry, TextureLoader, TextureSource, TextureUtils, Timer, TorusGeometry, TorusKnotGeometry, Triangle, TriangleFanDrawMode, TriangleStripDrawMode, TrianglesDrawMode, TubeGeometry, Uint8BufferAttribute, Uint8ClampedBufferAttribute, Uniform, UniformsGroup, VectorKeyframeTrack, VideoFrameTexture, VideoTexture, WebGL3DRenderTarget, WebGLArrayRenderTarget, WebGLRenderTarget, WireframeGeometry, WrapAroundEnding, ZeroCurvatureEnding, ZeroSlopeEnding, getConsoleFunction, setConsoleFunction } from './three.core.js'; +export { AdditiveAnimationBlendMode, AnimationAction, AnimationClip, AnimationLoader, AnimationMixer, AnimationObjectGroup, AnimationUtils, ArcCurve, ArrowHelper, AttachedBindMode, Audio, AudioAnalyser, AudioContext, AudioListener, AudioLoader, AxesHelper, BasicDepthPacking, BatchedMesh, BezierInterpolant, Bone, BooleanKeyframeTrack, Box2, Box3, Box3Helper, BoxHelper, BufferGeometryLoader, Cache, Camera, CameraHelper, CanvasTexture, CapsuleGeometry, CatmullRomCurve3, CircleGeometry, Clock, ColorKeyframeTrack, CompressedArrayTexture, CompressedCubeTexture, CompressedTexture, CompressedTextureLoader, ConeGeometry, Controls, CubeTextureLoader, CubicBezierCurve, CubicBezierCurve3, CubicInterpolant, CullFaceFrontBack, Curve, CurvePath, CustomToneMapping, Cylindrical, Data3DTexture, DataTextureLoader, DataUtils, DefaultLoadingManager, DetachedBindMode, DirectionalLightHelper, DiscreteInterpolant, DodecahedronGeometry, DynamicCopyUsage, DynamicReadUsage, EdgesGeometry, EllipseCurve, Euler, ExternalTexture, ExtrudeGeometry, Fog, FogExp2, GLBufferAttribute, GLSL1, GLSL3, GridHelper, HTMLTexture, HemisphereLightHelper, IcosahedronGeometry, ImageBitmapLoader, ImageLoader, ImageUtils, InstancedBufferGeometry, InstancedMesh, Int16BufferAttribute, Int32BufferAttribute, Int8BufferAttribute, Interpolant, InterpolateBezier, InterpolateDiscrete, InterpolateLinear, InterpolateSmooth, InterpolationSamplingMode, InterpolationSamplingType, KeyframeTrack, LOD, LatheGeometry, Layers, Light, Line, Line3, LineCurve, LineCurve3, LineLoop, LineSegments, LinearInterpolant, LinearMipMapNearestFilter, LoaderUtils, LoadingManager, LoopOnce, LoopPingPong, LoopRepeat, MOUSE, MeshDepthMaterial, MeshDistanceMaterial, NearestMipMapLinearFilter, NearestMipMapNearestFilter, NormalAnimationBlendMode, NumberKeyframeTrack, OctahedronGeometry, Path, PlaneHelper, PointLightHelper, Points, PolarGridHelper, PolyhedronGeometry, PositionalAudio, PropertyBinding, PropertyMixer, QuadraticBezierCurve, QuadraticBezierCurve3, QuaternionKeyframeTrack, QuaternionLinearInterpolant, RGBADepthPacking, RGBDepthPacking, RGDepthPacking, RawShaderMaterial, Ray, Raycaster, RenderTarget3D, RingGeometry, ShaderMaterial, Shape, ShapeGeometry, ShapePath, ShapeUtils, Skeleton, SkeletonHelper, SkinnedMesh, Source, Spherical, SphericalHarmonics3, SplineCurve, SpotLightHelper, Sprite, StaticCopyUsage, StaticReadUsage, StereoCamera, StreamCopyUsage, StreamDrawUsage, StreamReadUsage, StringKeyframeTrack, SunLight, TOUCH, TetrahedronGeometry, TextureLoader, TextureSource, TextureUtils, Timer, TorusGeometry, TorusKnotGeometry, Triangle, TriangleFanDrawMode, TriangleStripDrawMode, TrianglesDrawMode, TubeGeometry, Uint8BufferAttribute, Uint8ClampedBufferAttribute, Uniform, UniformsGroup, VectorKeyframeTrack, VideoFrameTexture, VideoTexture, WebGL3DRenderTarget, WebGLArrayRenderTarget, WebGLRenderTarget, WireframeGeometry, WrapAroundEnding, ZeroCurvatureEnding, ZeroSlopeEnding, getConsoleFunction, setConsoleFunction } from './three.core.js'; const refreshUniforms = [ 'alphaMap', @@ -37373,6 +37373,14 @@ class PackFloatNode extends TempNode { */ this.encoding = encoding; + /** + * The component layout of the packed integer. + * + * @type {'2x16' | '4x8'} + * @default '2x16' + */ + this.layout = '2x16'; + /** * This flag can be used for type testing. * @@ -37393,7 +37401,7 @@ class PackFloatNode extends TempNode { generate( builder ) { const inputType = this.vectorNode.getNodeType( builder ); - return `${ builder.getFloatPackingMethod( this.encoding ) }(${ this.vectorNode.build( builder, inputType )})`; + return `${ builder.getFloatPackingMethod( this.encoding, this.layout ) }(${ this.vectorNode.build( builder, inputType )})`; } @@ -37431,6 +37439,26 @@ const packUnorm2x16 = /*@__PURE__*/ nodeProxyIntent( PackFloatNode, 'unorm' ).se */ const packHalf2x16 = /*@__PURE__*/ nodeProxyIntent( PackFloatNode, 'float16' ).setParameterLength( 1 ); +/** + * Converts each component of the normalized float to 8-bit integer values. The results are packed into a single unsigned integer. + * + * @tsl + * @function + * @param {Node} value - The 4-component vector to be packed + * @returns {Node} + */ +const packSnorm4x8 = /*@__PURE__*/ nodeProxyIntent( PackFloatNode, 'snorm', null, { layout: '4x8' } ).setParameterLength( 1 ); + +/** + * Converts each component of the normalized float to 8-bit integer values. The results are packed into a single unsigned integer. + * + * @tsl + * @function + * @param {Node} value - The 4-component vector to be packed + * @returns {Node} + */ +const packUnorm4x8 = /*@__PURE__*/ nodeProxyIntent( PackFloatNode, 'unorm', null, { layout: '4x8' } ).setParameterLength( 1 ); + /** * This node represents an operation that unpacks values from a 32-bit unsigned integer, reinterpreting the results as a floating-point vector * @@ -37467,6 +37495,14 @@ class UnpackFloatNode extends TempNode { */ this.encoding = encoding; + /** + * The component layout of the packed integer. + * + * @type {'2x16' | '4x8'} + * @default '2x16' + */ + this.layout = '2x16'; + /** * This flag can be used for type testing. * @@ -37480,14 +37516,14 @@ class UnpackFloatNode extends TempNode { generateNodeType() { - return 'vec2'; + return this.layout === '4x8' ? 'vec4' : 'vec2'; } generate( builder ) { const inputType = this.uintNode.getNodeType( builder ); - return `${ builder.getFloatUnpackingMethod( this.encoding ) }(${ this.uintNode.build( builder, inputType )})`; + return `${ builder.getFloatUnpackingMethod( this.encoding, this.layout ) }(${ this.uintNode.build( builder, inputType )})`; } @@ -37523,6 +37559,26 @@ const unpackUnorm2x16 = /*@__PURE__*/ nodeProxyIntent( UnpackFloatNode, 'unorm' */ const unpackHalf2x16 = /*@__PURE__*/ nodeProxyIntent( UnpackFloatNode, 'float16' ).setParameterLength( 1 ); +/** + * Unpacks a 32-bit unsigned integer into four 8-bit values, interpreted as normalized signed integers. Returns a vec4 with all values. + * + * @tsl + * @function + * @param {Node} value - The unsigned integer to be unpacked + * @returns {Node} + */ +const unpackSnorm4x8 = /*@__PURE__*/ nodeProxyIntent( UnpackFloatNode, 'snorm', null, { layout: '4x8' } ).setParameterLength( 1 ); + +/** + * Unpacks a 32-bit unsigned integer into four 8-bit values, interpreted as normalized unsigned integers. Returns a vec4 with all values. + * + * @tsl + * @function + * @param {Node} value - The unsigned integer to be unpacked + * @returns {Node} + */ +const unpackUnorm4x8 = /*@__PURE__*/ nodeProxyIntent( UnpackFloatNode, 'unorm', null, { layout: '4x8' } ).setParameterLength( 1 ); + // https://github.com/cabbibo/glsl-tri-noise-3d @@ -49575,7 +49631,9 @@ var TSL = /*#__PURE__*/Object.freeze({ packHalf2x16: packHalf2x16, packNormalToRGB: packNormalToRGB, packSnorm2x16: packSnorm2x16, + packSnorm4x8: packSnorm4x8, packUnorm2x16: packUnorm2x16, + packUnorm4x8: packUnorm4x8, parabola: parabola, parallaxDirection: parallaxDirection, parallaxUV: parallaxUV, @@ -49752,7 +49810,9 @@ var TSL = /*#__PURE__*/Object.freeze({ unpackNormal: unpackNormal, unpackRGBToNormal: unpackRGBToNormal, unpackSnorm2x16: unpackSnorm2x16, + unpackSnorm4x8: unpackSnorm4x8, unpackUnorm2x16: unpackUnorm2x16, + unpackUnorm4x8: unpackUnorm4x8, unpremultiplyAlpha: unpremultiplyAlpha, userData: userData, uv: uv$1, @@ -65571,7 +65631,11 @@ vec4 tsl_textureGatherCompare_array( sampler2DArrayShadow map, vec3 coord, ivec2 ); return flipY ? ret.wzyx : ret; } -` ) +` ), + floatpack_snorm_4x8: new CodeNode( /* glsl */'uint tsl_packSnorm4x8( vec4 v ) { uvec4 u = uvec4( ivec4( round( clamp( v, -1.0, 1.0 ) * 127.0 ) ) & 0xff ); return u.x | u.y << 8 | u.z << 16 | u.w << 24; }' ), + floatpack_unorm_4x8: new CodeNode( /* glsl */'uint tsl_packUnorm4x8( vec4 v ) { uvec4 u = uvec4( round( clamp( v, 0.0, 1.0 ) * 255.0 ) ); return u.x | u.y << 8 | u.z << 16 | u.w << 24; }' ), + floatunpack_snorm_4x8: new CodeNode( /* glsl */'vec4 tsl_unpackSnorm4x8( uint x ) { return max( vec4( ivec4( x << 24, x << 16, x << 8, x ) >> 24 ) / 127.0, -1.0 ); }' ), + floatunpack_unorm_4x8: new CodeNode( /* glsl */'vec4 tsl_unpackUnorm4x8( uint x ) { return vec4( uvec4( x, x >> 8, x >> 16, x >> 24 ) & 0xffu ) / 255.0; }' ) }; const glslMethods = { @@ -65585,9 +65649,13 @@ const glslMethods = { floatpack_snorm_2x16: 'packSnorm2x16', floatpack_unorm_2x16: 'packUnorm2x16', floatpack_float16_2x16: 'packHalf2x16', + floatpack_snorm_4x8: 'tsl_packSnorm4x8', + floatpack_unorm_4x8: 'tsl_packUnorm4x8', floatunpack_snorm_2x16: 'unpackSnorm2x16', floatunpack_unorm_2x16: 'unpackUnorm2x16', - floatunpack_float16_2x16: 'unpackHalf2x16' + floatunpack_float16_2x16: 'unpackHalf2x16', + floatunpack_snorm_4x8: 'tsl_unpackSnorm4x8', + floatunpack_unorm_4x8: 'tsl_unpackUnorm4x8' }; const precisionLib = { @@ -65777,11 +65845,12 @@ class GLSLNodeBuilder extends NodeBuilder { * Returns the float packing method name for a given numeric encoding. * * @param {string} encoding - The numeric encoding that describes how the float values are mapped to the integer range. + * @param {string} [layout='2x16'] - The component layout of the packed integer. * @returns {string} The resolved GLSL float packing method name. */ - getFloatPackingMethod( encoding ) { + getFloatPackingMethod( encoding, layout = '2x16' ) { - return this.getMethod( `floatpack_${ encoding }_2x16` ); + return this.getMethod( `floatpack_${ encoding }_${ layout }` ); } @@ -65789,11 +65858,12 @@ class GLSLNodeBuilder extends NodeBuilder { * Returns the float unpacking method name for a given numeric encoding. * * @param {string} encoding - The numeric encoding that describes how the integer values are mapped to the float range. + * @param {string} [layout='2x16'] - The component layout of the packed integer. * @returns {string} The resolved GLSL float unpacking method name. */ - getFloatUnpackingMethod( encoding ) { + getFloatUnpackingMethod( encoding, layout = '2x16' ) { - return this.getMethod( `floatunpack_${ encoding }_2x16` ); + return this.getMethod( `floatunpack_${ encoding }_${ layout }` ); } @@ -80120,9 +80190,13 @@ const wgslMethods = { floatpack_snorm_2x16: 'pack2x16snorm', floatpack_unorm_2x16: 'pack2x16unorm', floatpack_float16_2x16: 'pack2x16float', + floatpack_snorm_4x8: 'pack4x8snorm', + floatpack_unorm_4x8: 'pack4x8unorm', floatunpack_snorm_2x16: 'unpack2x16snorm', floatunpack_unorm_2x16: 'unpack2x16unorm', - floatunpack_float16_2x16: 'unpack2x16float' + floatunpack_float16_2x16: 'unpack2x16float', + floatunpack_snorm_4x8: 'unpack4x8snorm', + floatunpack_unorm_4x8: 'unpack4x8unorm' }; // See: https://www.w3.org/TR/WGSL/#keyword-summary and #reserved-words-section @@ -82343,11 +82417,12 @@ ${ flowData.code } * Returns the float packing method name for a given numeric encoding. * * @param {string} encoding - The numeric encoding that describes how the float values are mapped to the integer range. + * @param {string} [layout='2x16'] - The component layout of the packed integer. * @returns {string} The resolve WGSL float packing method name. */ - getFloatPackingMethod( encoding ) { + getFloatPackingMethod( encoding, layout = '2x16' ) { - return this.getMethod( `floatpack_${ encoding }_2x16` ); + return this.getMethod( `floatpack_${ encoding }_${ layout }` ); } @@ -82355,11 +82430,12 @@ ${ flowData.code } * Returns the float unpacking method name for a given numeric encoding. * * @param {string} encoding - The numeric encoding that describes how the integer values are mapped to the float range. + * @param {string} [layout='2x16'] - The component layout of the packed integer. * @returns {string} The resolve WGSL float unpacking method name. */ - getFloatUnpackingMethod( encoding ) { + getFloatUnpackingMethod( encoding, layout = '2x16' ) { - return this.getMethod( `floatunpack_${ encoding }_2x16` ); + return this.getMethod( `floatunpack_${ encoding }_${ layout }` ); } From c3ce57e217b9361f66b795ec1d42b371ac4eb249 Mon Sep 17 00:00:00 2001 From: Nicu Date: Sun, 16 Aug 2026 11:52:51 +0300 Subject: [PATCH 5/7] TrackballControls: Implemented multi-touch rotate. (#34249) Co-authored-by: Michael Herzog --- examples/jsm/controls/TrackballControls.js | 111 ++++++++++++++++++++- examples/misc_controls_trackball.html | 11 +- 2 files changed, 119 insertions(+), 3 deletions(-) diff --git a/examples/jsm/controls/TrackballControls.js b/examples/jsm/controls/TrackballControls.js index a3722763f0b16a..f36cc134a8eba7 100644 --- a/examples/jsm/controls/TrackballControls.js +++ b/examples/jsm/controls/TrackballControls.js @@ -97,6 +97,14 @@ class TrackballControls extends Controls { */ this.panSpeed = 0.3; + /** + * The roll speed used for multi-touch roll. + * + * @type {number} + * @default 1 + */ + this.rollSpeed = 1.0; + /** * Whether rotation is disabled or not. * @@ -121,6 +129,15 @@ class TrackballControls extends Controls { */ this.noPan = false; + /** + * Whether two finger twist gesture rolls + * the camera around its view axis or not. + * + * @type {boolean} + * @default false + */ + this.multiTouchRoll = false; + /** * Whether damping is disabled or not. * @@ -209,10 +226,14 @@ class TrackballControls extends Controls { this.keyState = _STATE.NONE; this._lastPosition = new Vector3(); + this._lastUp = new Vector3(); this._lastZoom = 1; this._touchZoomDistanceStart = 0; this._touchZoomDistanceEnd = 0; + this._touchRollAngle = 0; + this._touchRollPointerIds = ''; this._lastAngle = 0; + this._lastRollAngle = 0; this._eye = new Vector3(); @@ -331,6 +352,12 @@ class TrackballControls extends Controls { this._rotateCamera(); + if ( this.multiTouchRoll === true ) { + + this._rollCamera(); + + } + } if ( ! this.noZoom ) { @@ -353,11 +380,15 @@ class TrackballControls extends Controls { this.object.lookAt( this.target ); - if ( this._lastPosition.distanceToSquared( this.object.position ) > _EPS ) { + const positionChanged = this._lastPosition.distanceToSquared( this.object.position ) > _EPS; + const rollChanged = this._lastUp.distanceToSquared( this.object.up ) > _EPS; + + if ( positionChanged || rollChanged ) { this.dispatchEvent( _changeEvent ); this._lastPosition.copy( this.object.position ); + this._lastUp.copy( this.object.up ); } @@ -365,11 +396,16 @@ class TrackballControls extends Controls { this.object.lookAt( this.target ); - if ( this._lastPosition.distanceToSquared( this.object.position ) > _EPS || this._lastZoom !== this.object.zoom ) { + const positionChanged = this._lastPosition.distanceToSquared( this.object.position ) > _EPS; + const rollChanged = this._lastUp.distanceToSquared( this.object.up ) > _EPS; + const zoomChanged = this._lastZoom !== this.object.zoom; + + if ( positionChanged || rollChanged || zoomChanged ) { this.dispatchEvent( _changeEvent ); this._lastPosition.copy( this.object.position ); + this._lastUp.copy( this.object.up ); this._lastZoom = this.object.zoom; } @@ -404,6 +440,7 @@ class TrackballControls extends Controls { this.dispatchEvent( _changeEvent ); this._lastPosition.copy( this.object.position ); + this._lastUp.copy( this.object.up ); this._lastZoom = this.object.zoom; } @@ -489,6 +526,76 @@ class TrackballControls extends Controls { } + _rollCamera() { + + const angle = this._getTouchRollAngle(); + + if ( angle ) { + + this._lastRollAngle = angle * this.rollSpeed; + + } else if ( ! this.staticMoving && this._lastRollAngle ) { + + this._lastRollAngle *= Math.sqrt( 1.0 - this.dynamicDampingFactor ); + + } else { + + return; + + } + + _eyeDirection.copy( this._eye ).normalize(); + _quaternion.setFromAxisAngle( _eyeDirection, this._lastRollAngle ); + + this.object.up.applyQuaternion( _quaternion ); + + } + + _getTouchRollAngle() { + + const first = this._pointers[ 0 ]; + const second = this._pointers[ 1 ]; + + if ( second === undefined || first.pointerType !== 'touch' || second.pointerType !== 'touch' ) { + + this._touchRollPointerIds = ''; + return 0; + + } + + const pointerIds = `${ first.pointerId },${ second.pointerId }`; + + const positionFirst = this._pointerPositions[ first.pointerId ]; + const positionSecond = this._pointerPositions[ second.pointerId ]; + + const rollAngle = Math.atan2( positionSecond.y - positionFirst.y, positionSecond.x - positionFirst.x ); + + // fingers changed or new gesture started + if ( pointerIds !== this._touchRollPointerIds ) { + + this._touchRollPointerIds = pointerIds; + this._touchRollAngle = rollAngle; + return 0; + + } + + let angle = rollAngle - this._touchRollAngle; + this._touchRollAngle = rollAngle; + + if ( angle > Math.PI ) { + + angle -= 2 * Math.PI; + + } else if ( angle < - Math.PI ) { + + angle += 2 * Math.PI; + + } + + return angle; + + } + _zoomCamera() { let factor; diff --git a/examples/misc_controls_trackball.html b/examples/misc_controls_trackball.html index 172326403e0013..d3308e74f6db3f 100644 --- a/examples/misc_controls_trackball.html +++ b/examples/misc_controls_trackball.html @@ -47,7 +47,8 @@ let perspectiveCamera, orthographicCamera, controls, scene, renderer, stats; const params = { - orthographicCamera: false + orthographicCamera: false, + multiTouchRoll: false }; const frustumSize = 400; @@ -124,6 +125,12 @@ } ); + gui.add( params, 'multiTouchRoll' ).name( 'multi touch roll' ).onChange( function ( value ) { + + controls.multiTouchRoll = value; + + } ); + // window.addEventListener( 'resize', onWindowResize ); @@ -140,6 +147,8 @@ controls.zoomSpeed = 1.2; controls.panSpeed = 0.8; + controls.multiTouchRoll = params.multiTouchRoll; + controls.keys = [ 'KeyA', 'KeyS', 'KeyD' ]; } From 95158726bccd0488d7664fd29942ee6654a13824 Mon Sep 17 00:00:00 2001 From: Michael Herzog Date: Sun, 16 Aug 2026 11:23:16 +0200 Subject: [PATCH 6/7] XRControllerModelFactory: Fix profile hot-swap. (#34266) --- .../jsm/webxr/XRControllerModelFactory.js | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/examples/jsm/webxr/XRControllerModelFactory.js b/examples/jsm/webxr/XRControllerModelFactory.js index 89bc545522720e..2228760b6f3db6 100644 --- a/examples/jsm/webxr/XRControllerModelFactory.js +++ b/examples/jsm/webxr/XRControllerModelFactory.js @@ -325,6 +325,7 @@ class XRControllerModelFactory { const controllerModel = new XRControllerModel(); let scene = null; + let connectionId = 0; // used to invalidate async operations of previous connections, see #34264 controller.addEventListener( 'connected', ( event ) => { @@ -332,15 +333,22 @@ class XRControllerModelFactory { if ( xrInputSource.targetRayMode !== 'tracked-pointer' || ! xrInputSource.gamepad || xrInputSource.hand ) return; + const id = ++ connectionId; + fetchProfile( xrInputSource, this.path, DEFAULT_PROFILE ).then( ( { profile, assetPath } ) => { + if ( id !== connectionId ) return; + controllerModel.motionController = new MotionController( xrInputSource, profile, assetPath ); - const cachedAsset = this._assetCache[ controllerModel.motionController.assetUrl ]; + const assetUrl = controllerModel.motionController.assetUrl; + + const cachedAsset = this._assetCache[ assetUrl ]; + if ( cachedAsset ) { scene = cachedAsset.scene.clone(); @@ -358,9 +366,11 @@ class XRControllerModelFactory { } this.gltfLoader.setPath( '' ); - this.gltfLoader.load( controllerModel.motionController.assetUrl, ( asset ) => { + this.gltfLoader.load( assetUrl, ( asset ) => { + + this._assetCache[ assetUrl ] = asset; - this._assetCache[ controllerModel.motionController.assetUrl ] = asset; + if ( id !== connectionId ) return; scene = asset.scene.clone(); @@ -372,7 +382,7 @@ class XRControllerModelFactory { null, () => { - throw new Error( `THREE.XRControllerModelFactory: Asset ${controllerModel.motionController.assetUrl} missing or malformed.` ); + throw new Error( `THREE.XRControllerModelFactory: Asset ${assetUrl} missing or malformed.` ); } ); @@ -388,6 +398,8 @@ class XRControllerModelFactory { controller.addEventListener( 'disconnected', () => { + connectionId ++; + controllerModel.motionController = null; controllerModel.remove( scene ); scene = null; From a4b88ac9253bb2a908834da8fa005dbdd583977e Mon Sep 17 00:00:00 2001 From: Michael Herzog Date: Sun, 16 Aug 2026 12:36:53 +0200 Subject: [PATCH 7/7] 3MFLoader: Basic support of Beam Lattice. (#34267) --- examples/jsm/loaders/3MFLoader.js | 203 ++++++++++++++++++++++- examples/models/3mf/README.md | 18 ++ examples/models/3mf/pyramid.3mf | Bin 0 -> 4830 bytes examples/models/3mf/spinal implant.3mf | Bin 0 -> 261883 bytes examples/models/3mf/variable voronoi.3mf | Bin 0 -> 20958 bytes examples/webgl_loader_3mf.html | 3 + 6 files changed, 223 insertions(+), 1 deletion(-) create mode 100644 examples/models/3mf/pyramid.3mf create mode 100644 examples/models/3mf/spinal implant.3mf create mode 100644 examples/models/3mf/variable voronoi.3mf diff --git a/examples/jsm/loaders/3MFLoader.js b/examples/jsm/loaders/3MFLoader.js index a62227890fdbcd..727efdcde780af 100644 --- a/examples/jsm/loaders/3MFLoader.js +++ b/examples/jsm/loaders/3MFLoader.js @@ -3,6 +3,7 @@ import { BufferGeometry, ClampToEdgeWrapping, Color, + CylinderGeometry, FileLoader, Float32BufferAttribute, Group, @@ -15,14 +16,21 @@ import { MeshStandardMaterial, MirroredRepeatWrapping, NearestFilter, + Quaternion, RepeatWrapping, + SphereGeometry, TextureLoader, - SRGBColorSpace + SRGBColorSpace, + Vector3 } from 'three'; import { unzipSync } from '../libs/fflate.module.js'; +import { mergeGeometries } from '../utils/BufferGeometryUtils.js'; const COLOR_SPACE_3MF = SRGBColorSpace; +const NS_BEAM_LATTICE = 'http://schemas.microsoft.com/3dmanufacturing/beamlattice/2017/02'; +const NS_BEAM_LATTICE_BALLS = 'http://schemas.microsoft.com/3dmanufacturing/beamlattice/balls/2020/07'; + /** * A loader for the [3D Manufacturing Format (3MF)](https://3mf.io/specification/) format. * @@ -38,6 +46,7 @@ const COLOR_SPACE_3MF = SRGBColorSpace; * - Texture 2D Groups * - Color Groups (Vertex Colors) * - Metallic Display Properties (PBR) + * - Beam Lattice * * ```js * const loader = new ThreeMFLoader(); @@ -604,10 +613,87 @@ class ThreeMFLoader extends Loader { meshData[ 'triangleProperties' ] = triangleProperties; meshData[ 'triangles' ] = new Uint32Array( triangles ); + const beamLatticeNode = meshNode.getElementsByTagNameNS( NS_BEAM_LATTICE, 'beamlattice' )[ 0 ]; + + if ( beamLatticeNode !== undefined ) { + + meshData[ 'beamlattice' ] = parseBeamLatticeNode( beamLatticeNode ); + + } + return meshData; } + function parseBeamLatticeNode( beamLatticeNode ) { + + const beamLatticeData = { + radius: parseFloat( beamLatticeNode.getAttribute( 'radius' ) ), // required + minLength: parseFloat( beamLatticeNode.getAttribute( 'minlength' ) ), + cap: beamLatticeNode.getAttribute( 'cap' ) || 'sphere', + ballMode: beamLatticeNode.getAttributeNS( NS_BEAM_LATTICE_BALLS, 'ballmode' ) || 'none', + ballRadius: parseFloat( beamLatticeNode.getAttributeNS( NS_BEAM_LATTICE_BALLS, 'ballradius' ) ), + beams: [], + balls: [] + }; + + // clipping requires boolean operations which are not supported ('clipping' is a legacy name of 'clippingmode') + + const clippingMode = beamLatticeNode.getAttribute( 'clippingmode' ) || beamLatticeNode.getAttribute( 'clipping' ); + + if ( clippingMode !== null && clippingMode !== 'none' ) { + + console.warn( 'THREE.3MFLoader: Beam lattice clipping is not supported. The lattice is rendered unclipped.' ); + + } + + const beamNodes = beamLatticeNode.getElementsByTagNameNS( NS_BEAM_LATTICE, 'beam' ); + + for ( let i = 0; i < beamNodes.length; i ++ ) { + + const beamNode = beamNodes[ i ]; + + const beamData = { + v1: parseInt( beamNode.getAttribute( 'v1' ), 10 ), // required + v2: parseInt( beamNode.getAttribute( 'v2' ), 10 ) // required + }; + + // optional + + const r1 = beamNode.getAttribute( 'r1' ); + const r2 = beamNode.getAttribute( 'r2' ); + + if ( r1 !== null ) beamData[ 'r1' ] = parseFloat( r1 ); + if ( r2 !== null ) beamData[ 'r2' ] = parseFloat( r2 ); + + beamLatticeData.beams.push( beamData ); + + } + + const ballNodes = beamLatticeNode.getElementsByTagNameNS( NS_BEAM_LATTICE_BALLS, 'ball' ); + + for ( let i = 0; i < ballNodes.length; i ++ ) { + + const ballNode = ballNodes[ i ]; + + const ballData = { + vindex: parseInt( ballNode.getAttribute( 'vindex' ), 10 ) // required + }; + + // optional + + const r = ballNode.getAttribute( 'r' ); + + if ( r !== null ) ballData[ 'r' ] = parseFloat( r ); + + beamLatticeData.balls.push( ballData ); + + } + + return beamLatticeData; + + } + function parseComponentsNode( componentsNode ) { const components = []; @@ -1211,6 +1297,111 @@ class ThreeMFLoader extends Loader { } + function buildLatticeMesh( meshData ) { + + const beamLatticeData = meshData[ 'beamlattice' ]; + const vertices = meshData[ 'vertices' ]; + + const geometries = []; + + const p1 = new Vector3(); + const p2 = new Vector3(); + const direction = new Vector3(); + const up = new Vector3( 0, 1, 0 ); + const quaternion = new Quaternion(); + const matrix = new Matrix4(); + + // beams + + const beams = beamLatticeData.beams; + const openEnded = beamLatticeData.cap !== 'butt'; + + // spheres for caps and balls are collected per vertex so joints are only built once + + const sphereRadii = new Map(); + + for ( let i = 0; i < beams.length; i ++ ) { + + const beam = beams[ i ]; + + p1.fromArray( vertices, beam.v1 * 3 ); + p2.fromArray( vertices, beam.v2 * 3 ); + + const length = p1.distanceTo( p2 ); + + if ( length < beamLatticeData.minLength ) continue; // consumers must ignore beams shorter than "minlength" + + const r1 = ( beam.r1 !== undefined ) ? beam.r1 : beamLatticeData.radius; + const r2 = ( beam.r2 !== undefined ) ? beam.r2 : r1; + + const geometry = new CylinderGeometry( r2, r1, length, 8, 1, openEnded ); + + direction.subVectors( p2, p1 ).divideScalar( length ); + quaternion.setFromUnitVectors( up, direction ); + + matrix.makeRotationFromQuaternion( quaternion ); + matrix.setPosition( p1.add( p2 ).multiplyScalar( 0.5 ) ); + + geometry.applyMatrix4( matrix ); + geometries.push( geometry ); + + if ( openEnded ) { + + // approximate "sphere" and "hemisphere" caps with a sphere per beam end + + sphereRadii.set( beam.v1, Math.max( r1, sphereRadii.get( beam.v1 ) || 0 ) ); + sphereRadii.set( beam.v2, Math.max( r2, sphereRadii.get( beam.v2 ) || 0 ) ); + + } + + if ( beamLatticeData.ballMode === 'all' ) { + + sphereRadii.set( beam.v1, Math.max( beamLatticeData.ballRadius, sphereRadii.get( beam.v1 ) || 0 ) ); + sphereRadii.set( beam.v2, Math.max( beamLatticeData.ballRadius, sphereRadii.get( beam.v2 ) || 0 ) ); + + } + + } + + // balls + + const balls = beamLatticeData.balls; + + for ( let i = 0; i < balls.length; i ++ ) { + + const ball = balls[ i ]; + const r = ( ball.r !== undefined ) ? ball.r : beamLatticeData.ballRadius; + + sphereRadii.set( ball.vindex, Math.max( r, sphereRadii.get( ball.vindex ) || 0 ) ); + + } + + for ( const [ vindex, radius ] of sphereRadii ) { + + const geometry = new SphereGeometry( radius, 8, 6 ); + + p1.fromArray( vertices, vindex * 3 ); + geometry.translate( p1.x, p1.y, p1.z ); + + geometries.push( geometry ); + + } + + // + + const geometry = mergeGeometries( geometries ); + + const material = new MeshPhongMaterial( { + name: Loader.DEFAULT_MATERIAL_NAME, + color: 0xffffff + } ); + + const mesh = new Mesh( geometry, material ); + + return mesh; + + } + function buildMeshes( resourceMap, meshData, objects, modelData, textureData, objectData ) { const keys = Object.keys( resourceMap ); @@ -1329,6 +1520,16 @@ class ThreeMFLoader extends Loader { const resourceMap = analyzeObject( meshData, objectData ); const meshes = buildMeshes( resourceMap, meshData, objects, modelData, textureData, objectData ); + if ( meshData[ 'beamlattice' ] !== undefined ) { + + const latticeMesh = buildLatticeMesh( meshData ); + + if ( objectData.name ) latticeMesh.name = objectData.name; + + meshes.push( latticeMesh ); + + } + for ( let i = 0, l = meshes.length; i < l; i ++ ) { group.add( meshes[ i ] ); diff --git a/examples/models/3mf/README.md b/examples/models/3mf/README.md index b057c470eb9150..613a427eb16008 100644 --- a/examples/models/3mf/README.md +++ b/examples/models/3mf/README.md @@ -18,6 +18,24 @@ Source: https://github.com/3MFConsortium/3mf-samples License: BSD 2-Clause "Simplified" License +### pyramid.3mf + +Source: https://github.com/3MFConsortium/3mf-samples + +License: BSD 2-Clause "Simplified" License + +### spinal implant.3mf + +Source: https://github.com/3MFConsortium/3mf-samples + +License: BSD 2-Clause "Simplified" License + +### variable voronoi.3mf + +Source: https://github.com/3MFConsortium/3mf-samples + +License: BSD 2-Clause "Simplified" License + ### vertexcolors.3mf Source: https://github.com/3MFConsortium/3mf-samples (original name `pyramid_vertexcolor.3mf`) diff --git a/examples/models/3mf/pyramid.3mf b/examples/models/3mf/pyramid.3mf new file mode 100644 index 0000000000000000000000000000000000000000..28ea966fadd0ba96662f795aa70cda5bcbb5a262 GIT binary patch literal 4830 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%0ArMbPZRQin=!iYY_RuVj{UGt{5<(OWjONg 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

+aR$82fN|Io80C`hlJh{jlPWIeA&iYV6ZoN2~ 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�rN8sS83v3&TL{qV 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

  • 6gSM+Afcq%u@}K; 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 W#~$f3F#cUcciQSt`}2?g&i)6!^M6GE literal 0 HcmV?d00001 diff --git a/examples/webgl_loader_3mf.html b/examples/webgl_loader_3mf.html index 9226e09fef978b..93a2c2f294e5d0 100644 --- a/examples/webgl_loader_3mf.html +++ b/examples/webgl_loader_3mf.html @@ -50,6 +50,9 @@ 'cube_gears', 'facecolors', 'multipletextures', + 'pyramid', + 'spinal implant', + 'variable voronoi', 'vertexcolors' ];