From cd1224cb9c9d9f4fe009caefa7d58170a1f8f7d5 Mon Sep 17 00:00:00 2001 From: Takahiro Date: Thu, 1 Dec 2022 23:49:49 -0800 Subject: [PATCH 1/4] BatchedMesh addon --- examples/files.json | 1 + examples/jsm/objects/BatchedMesh.js | 467 ++++++++++++++++++++++ examples/screenshots/webgl_mesh_batch.jpg | Bin 0 -> 63583 bytes examples/webgl_mesh_batch.html | 347 ++++++++++++++++ 4 files changed, 815 insertions(+) create mode 100644 examples/jsm/objects/BatchedMesh.js create mode 100644 examples/screenshots/webgl_mesh_batch.jpg create mode 100644 examples/webgl_mesh_batch.html diff --git a/examples/files.json b/examples/files.json index 51248d6713b316..5cc57d9eb99dbf 100644 --- a/examples/files.json +++ b/examples/files.json @@ -173,6 +173,7 @@ "webgl_materials_wireframe", "webgl_math_obb", "webgl_math_orientation_transform", + "webgl_mesh_batch", "webgl_mirror", "webgl_modifier_curve", "webgl_modifier_curve_instanced", diff --git a/examples/jsm/objects/BatchedMesh.js b/examples/jsm/objects/BatchedMesh.js new file mode 100644 index 00000000000000..16f909ff18dd30 --- /dev/null +++ b/examples/jsm/objects/BatchedMesh.js @@ -0,0 +1,467 @@ +import { + BufferAttribute, + BufferGeometry, + DataTexture, + FloatType, + MathUtils, + Matrix4, + Mesh, + RGBAFormat +} from 'three'; + +const _identityMatrix = new Matrix4(); +const _zeroMatrix = new Matrix4().set( + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0 +); + +// Custom shaders +const batchingParsVertex = ` +#ifdef BATCHING + attribute float id; + uniform highp sampler2D batchingTexture; + uniform int batchingTextureSize; + mat4 getBatchingMatrix( const in float i ) { + float j = i * 4.0; + float x = mod( j, float( batchingTextureSize ) ); + float y = floor( j / float( batchingTextureSize ) ); + float dx = 1.0 / float( batchingTextureSize ); + float dy = 1.0 / float( batchingTextureSize ); + y = dy * ( y + 0.5 ); + vec4 v1 = texture2D( batchingTexture, vec2( dx * ( x + 0.5 ), y ) ); + vec4 v2 = texture2D( batchingTexture, vec2( dx * ( x + 1.5 ), y ) ); + vec4 v3 = texture2D( batchingTexture, vec2( dx * ( x + 2.5 ), y ) ); + vec4 v4 = texture2D( batchingTexture, vec2( dx * ( x + 3.5 ), y ) ); + mat4 bone = mat4( v1, v2, v3, v4 ); + return bone; + } +#endif +`; + +const batchingbaseVertex = ` +#ifdef BATCHING + mat4 batchingMatrix = getBatchingMatrix( id ); +#endif +`; + +const batchingnormalVertex = ` +#ifdef BATCHING + objectNormal = vec4( batchingMatrix * vec4( objectNormal, 0.0 ) ).xyz; + #ifdef USE_TANGENT + objectTangent = vec4( batchingMatrix * vec4( objectTangent, 0.0 ) ).xyz; + #endif +#endif +`; + +const batchingVertex = ` +#ifdef BATCHING + transformed = ( batchingMatrix * vec4( transformed, 1.0 ) ).xyz; +#endif +`; + +// @TODO: SkinnedMesh support? +// @TODO: Future work if needed. Move into the core. Can be optimized more with WEBGL_multi_draw. + +class BatchedMesh extends Mesh { + + constructor( maxGeometryCount, maxVertexCount, maxIndexCount = maxVertexCount * 2, material ) { + + super( new BufferGeometry(), material ); + + this._vertexStarts = []; + this._vertexCounts = []; + this._indexStarts = []; + this._indexCounts = []; + + this._visibles = []; + this._alives = []; + + this._maxGeometryCount = maxGeometryCount; + this._maxVertexCount = maxVertexCount; + this._maxIndexCount = maxIndexCount; + + this._geometryInitialized = false; + this._geometryCount = 0; + this._vertexCount = 0; + this._indexCount = 0; + + // Local matrix per geometry by using data texture + // @TODO: Support uniform parameter per geometry + + this._matrices = []; + this._matricesArray = null; + this._matricesTexture = null; + this._matricesTextureSize = null; + + // @TODO: Calculate the entire binding box and make frustumCulled true + this.frustumCulled = false; + + this._customUniforms = { + batchingTexture: { value: null }, + batchingTextureSize: { value: 0 } + }; + + this._initMatricesTexture(); + this._initShader(); + + } + + _initMatricesTexture() { + + // layout (1 matrix = 4 pixels) + // RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4) + // with 8x8 pixel texture max 16 matrices * 4 pixels = (8 * 8) + // 16x16 pixel texture max 64 matrices * 4 pixels = (16 * 16) + // 32x32 pixel texture max 256 matrices * 4 pixels = (32 * 32) + // 64x64 pixel texture max 1024 matrices * 4 pixels = (64 * 64) + + let size = Math.sqrt( this._maxGeometryCount * 4 ); // 4 pixels needed for 1 matrix + size = MathUtils.ceilPowerOfTwo( size ); + size = Math.max( size, 4 ); + + const matricesArray = new Float32Array( size * size * 4 ); // 4 floats per RGBA pixel + const matricesTexture = new DataTexture( matricesArray, size, size, RGBAFormat, FloatType ); + + this._matricesArray = matricesArray; + this._matricesTexture = matricesTexture; + this._matricesTextureSize = size; + + this._customUniforms.batchingTexture.value = this._matricesTexture; + this._customUniforms.batchingTextureSize.value = this._matricesTextureSize; + + } + + _initShader() { + + const material = this.material; + const currentOnBeforeCompile = material.onBeforeCompile; + const customUniforms = this._customUniforms; + + material.onBeforeCompile = function onBeforeCompile ( parameters, renderer ) { + + // Is this replacement stable across any materials? + parameters.vertexShader = parameters.vertexShader + .replace( + '#include ', + '#include \n' + + batchingParsVertex + ) + .replace( + '#include ', + '#include \n' + + batchingbaseVertex + + batchingnormalVertex + ) + .replace( + '#include ', + '#include \n' + + batchingVertex + ); + + for ( const uniformName in customUniforms ) { + + parameters.uniforms[ uniformName ] = customUniforms[ uniformName ]; + + } + + // for debug + // console.log( parameters.vertexShader, parameters.uniforms ); + + currentOnBeforeCompile.call( this, parameters, renderer ); + + }; + + material.defines = material.defines || {}; + material.defines.BATCHING = false; + + } + + getGeometryCount() { + + return this._geometryCount; + + } + + getVertexCount() { + + return this._vertexCount; + + } + + getIndexCount() { + + return this._indexCount; + + } + + applyGeometry( geometry ) { + + // @TODO: geometry.groups support? + // @TODO: geometry.drawRange support? + // @TODO: geometry.mortphAttributes support? + + if ( this._geometryCount >= this._maxGeometryCount ) { + + // @TODO: Error handling + + } + + if ( this._geometryInitialized === false ) { + + for ( const attributeName in geometry.attributes ) { + + const srcAttribute = geometry.getAttribute( attributeName ); + const { array, itemSize, normalized } = srcAttribute; + + const dstArray = new array.constructor( this._maxVertexCount * itemSize ); + const dstAttribute = new srcAttribute.constructor( dstArray, itemSize, normalized ); + dstAttribute.setUsage( srcAttribute.usage ); + + this.geometry.setAttribute( attributeName, dstAttribute ); + + } + + if ( geometry.getIndex() !== null ) { + + const indexArray = this._maxVertexCount > 65536 + ? new Uint32Array( this._maxIndexCount ) + : new Uint16Array( this._maxIndexCount ); + + this.geometry.setIndex( new BufferAttribute( indexArray, 1 ) ); + + } + + const idArray = this._maxGeometryCount > 65536 + ? new Uint32Array( this._maxVertexCount ) + : new Uint16Array( this._maxVertexCount ); + // @TODO: What if attribute name 'id' is already used? + this.geometry.setAttribute( 'id', new BufferAttribute( idArray, 1 ) ); + + this._geometryInitialized = true; + + } else { + + // @TODO: Check if geometry has the same attributes set + + } + + const hasIndex = this.geometry.getIndex() !== null; + const dstIndex = this.geometry.getIndex(); + const srcIndex = geometry.getIndex(); + + // Assuming geometry has position attribute + const srcPositionAttribute = geometry.getAttribute( 'position' ); + + this._vertexStarts.push( this._vertexCount ); + this._vertexCounts.push( srcPositionAttribute.count ); + + if ( hasIndex ) { + + this._indexStarts.push( this._indexCount ); + this._indexCounts.push( srcIndex.count ); + + } + + this._visibles.push( true ); + this._alives.push( true ); + + // @TODO: Error handling if exceeding maxVertexCount or maxIndexCount + + for ( const attributeName in geometry.attributes ) { + + const srcAttribute = geometry.getAttribute( attributeName ); + const dstAttribute = this.geometry.getAttribute( attributeName ); + + dstAttribute.array.set( srcAttribute.array, this._vertexCount * dstAttribute.itemSize ); + dstAttribute.needsUpdate = true; + + } + + if ( hasIndex ) { + + for ( let i = 0; i < srcIndex.count; i ++ ) { + + dstIndex.setX( this._indexCount + i, this._vertexCount + srcIndex.getX( i ) ); + + } + + this._indexCount += srcIndex.count; + dstIndex.needsUpdate = true; + + } + + const geometryId = this._geometryCount; + this._geometryCount ++; + + const idAttribute = this.geometry.getAttribute( 'id' ); + + for ( let i = 0; i < srcPositionAttribute.count; i ++ ) { + + idAttribute.setX( this._vertexCount + i, geometryId ); + + } + + idAttribute.needsUpdate = true; + + this._vertexCount += srcPositionAttribute.count; + + this._matrices.push( new Matrix4() ); + _identityMatrix.toArray( this._matricesArray, geometryId * 16 ); + this._matricesTexture.needsUpdate = true; + + return geometryId; + + } + + deleteGeometry( geometryId ) { + + if ( geometryId >= this._alives.length || this._alives[ geometryId ] === false ) { + + return this; + + } + + this._alives[ geometryId ] = false; + _zeroMatrix.toArray( this._matricesArray, geometryId * 16 ); + this._matricesTexture.needsUpdate = true; + + // User needs to call optimize() to pack the data. + + return this; + + } + + optimize() { + + // @TODO: Implement + + return this; + + } + + setMatrixAt( geometryId, matrix ) { + + // @TODO: Map geometryId to index of the arrays because + // optimize() can make geometryId mismatch the index + + if ( geometryId >= this._matrices.length || this._alives[ geometryId ] === false ) { + + return this; + + } + + this._matrices[ geometryId ].copy( matrix ); + + if ( this._visibles[ geometryId ] === true ) { + + matrix.toArray( this._matricesArray, geometryId * 16 ); + this._matricesTexture.needsUpdate = true; + + } + + return this; + + } + + getMatrixAt( geometryId, matrix ) { + + if ( geometryId >= this._matrices.length || this._alives[ geometryId ] === false ) { + + return matrix; + + } + + return matrix.copy( this._matrices[ geometryId ] ); + + } + + setVisibleAt( geometryId, visible ) { + + if ( geometryId >= this._visibles.length || this._alives[ geometryId ] === false ) { + + return this; + + } + + if ( this._visibles[ geometryId ] === visible ) { + + return this; + + } + + if ( visible === true ) { + + this._matrices[ geometryId ].toArray( this._matricesArray, geometryId * 16 ); + + } else { + + _zeroMatrix.toArray( this._matricesArray, geometryId * 16 ); + + } + + this._matricesTexture.needsUpdate = true; + this._visibles[ geometryId ] = visible; + return this; + + } + + getVisibleAt( geometryId ) { + + if ( geometryId >= this._visibles.length || this._alives[ geometryId ] === false ) { + + return false; + + } + + return this._visibles[ geometryId ]; + + } + + copy( source ) { + + super.copy( source ); + + // @TODO: Implement + + return this; + + } + + toJSON( meta ) { + + // @TODO: Implement + + return super.toJSON( meta ); + + } + + dispose() { + + // Assuming the geometry is not shared with other meshes + this.geometry.dispose(); + + this._matricesTexture.dispose(); + this._matricesTexture = null; + return this; + + } + + onBeforeRender( _renderer, _scene, _camera, _geometry, material, _group ) { + + material.defines.BATCHING = true; + + // @TODO: Implement frustum culling for each geometry + + } + + onAfterRender( _renderer, _scene, _camera, _geometry, material, _group ) { + + material.defines.BATCHING = false; + + } + +} + +export { BatchedMesh }; diff --git a/examples/screenshots/webgl_mesh_batch.jpg b/examples/screenshots/webgl_mesh_batch.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dfa382b47e0c031badb6b7181c8c89809df654a6 GIT binary patch literal 63583 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 literal 0 HcmV?d00001 diff --git a/examples/webgl_mesh_batch.html b/examples/webgl_mesh_batch.html new file mode 100644 index 00000000000000..8d57ac60de9707 --- /dev/null +++ b/examples/webgl_mesh_batch.html @@ -0,0 +1,347 @@ + + + + three.js webgl - mesh - batch + + + + + + + +
+ + three.js webgl - mesh - batch + +
+ +
+ + + + + + + + + + + From 2e4e26eaa66fb4198b1f5ebf921f06837312dcfb Mon Sep 17 00:00:00 2001 From: Michael Herzog Date: Wed, 18 Oct 2023 16:45:06 +0200 Subject: [PATCH 2/4] Update webgl_mesh_batch.html Improve code style. --- examples/webgl_mesh_batch.html | 183 ++++++++++++++------------------- 1 file changed, 78 insertions(+), 105 deletions(-) diff --git a/examples/webgl_mesh_batch.html b/examples/webgl_mesh_batch.html index 8d57ac60de9707..425a8724c4bc8a 100644 --- a/examples/webgl_mesh_batch.html +++ b/examples/webgl_mesh_batch.html @@ -9,10 +9,6 @@ #info { background-color: rgba(0,0,0,0.75); } - - .dg .folder .gui-stats { - height: auto; - } @@ -23,12 +19,6 @@ -
- - - - - From 8543ef8a08b621bb1861db02d34cda96ed7c1190 Mon Sep 17 00:00:00 2001 From: Michael Herzog Date: Wed, 18 Oct 2023 16:46:39 +0200 Subject: [PATCH 3/4] Update webgl_mesh_batch.html Formatting. --- examples/webgl_mesh_batch.html | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/examples/webgl_mesh_batch.html b/examples/webgl_mesh_batch.html index 425a8724c4bc8a..090f24b290ae0b 100644 --- a/examples/webgl_mesh_batch.html +++ b/examples/webgl_mesh_batch.html @@ -19,14 +19,14 @@ - + } +