{"ast":null,"code":"import _asyncToGenerator from \"F:/workspace/202226701027/huinongbao-app/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js\";\nimport { SubMesh } from \"../subMesh.js\";\nimport { Mesh } from \"../mesh.js\";\nimport { VertexData } from \"../mesh.vertexData.js\";\nimport { Matrix, TmpVectors, Vector2, Vector3 } from \"../../Maths/math.vector.js\";\nimport { Logger } from \"../../Misc/logger.js\";\nimport { GaussianSplattingMaterial } from \"../../Materials/GaussianSplatting/gaussianSplattingMaterial.js\";\nimport { RawTexture } from \"../../Materials/Textures/rawTexture.js\";\nimport { Tools } from \"../../Misc/tools.js\";\nimport \"../thinInstanceMesh.js\";\nimport { ToHalfFloat } from \"../../Misc/textureTools.js\";\nimport { Scalar } from \"../../Maths/math.scalar.js\";\nimport { runCoroutineSync, runCoroutineAsync, createYieldingScheduler } from \"../../Misc/coroutine.js\";\n// @internal\nconst unpackUnorm = (value, bits) => {\n const t = (1 << bits) - 1;\n return (value & t) / t;\n};\n// @internal\nconst unpack111011 = (value, result) => {\n result.x = unpackUnorm(value >>> 21, 11);\n result.y = unpackUnorm(value >>> 11, 10);\n result.z = unpackUnorm(value, 11);\n};\n// @internal\nconst unpack8888 = (value, result) => {\n result[0] = unpackUnorm(value >>> 24, 8) * 255;\n result[1] = unpackUnorm(value >>> 16, 8) * 255;\n result[2] = unpackUnorm(value >>> 8, 8) * 255;\n result[3] = unpackUnorm(value, 8) * 255;\n};\n// @internal\n// unpack quaternion with 2,10,10,10 format (largest element, 3x10bit element)\nconst unpackRot = (value, result) => {\n const norm = 1.0 / (Math.sqrt(2) * 0.5);\n const a = (unpackUnorm(value >>> 20, 10) - 0.5) * norm;\n const b = (unpackUnorm(value >>> 10, 10) - 0.5) * norm;\n const c = (unpackUnorm(value, 10) - 0.5) * norm;\n const m = Math.sqrt(1.0 - (a * a + b * b + c * c));\n switch (value >>> 30) {\n case 0:\n result.set(m, a, b, c);\n break;\n case 1:\n result.set(a, m, b, c);\n break;\n case 2:\n result.set(a, b, m, c);\n break;\n case 3:\n result.set(a, b, c, m);\n break;\n }\n};\n/**\n * Representation of the types\n */\nvar PLYType;\n(function (PLYType) {\n PLYType[PLYType[\"FLOAT\"] = 0] = \"FLOAT\";\n PLYType[PLYType[\"INT\"] = 1] = \"INT\";\n PLYType[PLYType[\"UINT\"] = 2] = \"UINT\";\n PLYType[PLYType[\"DOUBLE\"] = 3] = \"DOUBLE\";\n PLYType[PLYType[\"UCHAR\"] = 4] = \"UCHAR\";\n PLYType[PLYType[\"UNDEFINED\"] = 5] = \"UNDEFINED\";\n})(PLYType || (PLYType = {}));\n/**\n * Usage types of the PLY values\n */\nvar PLYValue;\n(function (PLYValue) {\n PLYValue[PLYValue[\"MIN_X\"] = 0] = \"MIN_X\";\n PLYValue[PLYValue[\"MIN_Y\"] = 1] = \"MIN_Y\";\n PLYValue[PLYValue[\"MIN_Z\"] = 2] = \"MIN_Z\";\n PLYValue[PLYValue[\"MAX_X\"] = 3] = \"MAX_X\";\n PLYValue[PLYValue[\"MAX_Y\"] = 4] = \"MAX_Y\";\n PLYValue[PLYValue[\"MAX_Z\"] = 5] = \"MAX_Z\";\n PLYValue[PLYValue[\"MIN_SCALE_X\"] = 6] = \"MIN_SCALE_X\";\n PLYValue[PLYValue[\"MIN_SCALE_Y\"] = 7] = \"MIN_SCALE_Y\";\n PLYValue[PLYValue[\"MIN_SCALE_Z\"] = 8] = \"MIN_SCALE_Z\";\n PLYValue[PLYValue[\"MAX_SCALE_X\"] = 9] = \"MAX_SCALE_X\";\n PLYValue[PLYValue[\"MAX_SCALE_Y\"] = 10] = \"MAX_SCALE_Y\";\n PLYValue[PLYValue[\"MAX_SCALE_Z\"] = 11] = \"MAX_SCALE_Z\";\n PLYValue[PLYValue[\"PACKED_POSITION\"] = 12] = \"PACKED_POSITION\";\n PLYValue[PLYValue[\"PACKED_ROTATION\"] = 13] = \"PACKED_ROTATION\";\n PLYValue[PLYValue[\"PACKED_SCALE\"] = 14] = \"PACKED_SCALE\";\n PLYValue[PLYValue[\"PACKED_COLOR\"] = 15] = \"PACKED_COLOR\";\n PLYValue[PLYValue[\"X\"] = 16] = \"X\";\n PLYValue[PLYValue[\"Y\"] = 17] = \"Y\";\n PLYValue[PLYValue[\"Z\"] = 18] = \"Z\";\n PLYValue[PLYValue[\"SCALE_0\"] = 19] = \"SCALE_0\";\n PLYValue[PLYValue[\"SCALE_1\"] = 20] = \"SCALE_1\";\n PLYValue[PLYValue[\"SCALE_2\"] = 21] = \"SCALE_2\";\n PLYValue[PLYValue[\"DIFFUSE_RED\"] = 22] = \"DIFFUSE_RED\";\n PLYValue[PLYValue[\"DIFFUSE_GREEN\"] = 23] = \"DIFFUSE_GREEN\";\n PLYValue[PLYValue[\"DIFFUSE_BLUE\"] = 24] = \"DIFFUSE_BLUE\";\n PLYValue[PLYValue[\"OPACITY\"] = 25] = \"OPACITY\";\n PLYValue[PLYValue[\"F_DC_0\"] = 26] = \"F_DC_0\";\n PLYValue[PLYValue[\"F_DC_1\"] = 27] = \"F_DC_1\";\n PLYValue[PLYValue[\"F_DC_2\"] = 28] = \"F_DC_2\";\n PLYValue[PLYValue[\"F_DC_3\"] = 29] = \"F_DC_3\";\n PLYValue[PLYValue[\"ROT_0\"] = 30] = \"ROT_0\";\n PLYValue[PLYValue[\"ROT_1\"] = 31] = \"ROT_1\";\n PLYValue[PLYValue[\"ROT_2\"] = 32] = \"ROT_2\";\n PLYValue[PLYValue[\"ROT_3\"] = 33] = \"ROT_3\";\n PLYValue[PLYValue[\"UNDEFINED\"] = 34] = \"UNDEFINED\";\n})(PLYValue || (PLYValue = {}));\n/**\n * Class used to render a gaussian splatting mesh\n */\nexport class GaussianSplattingMesh extends Mesh {\n /**\n * Gets the covariancesA texture\n */\n get covariancesATexture() {\n return this._covariancesATexture;\n }\n /**\n * Gets the covariancesB texture\n */\n get covariancesBTexture() {\n return this._covariancesBTexture;\n }\n /**\n * Gets the centers texture\n */\n get centersTexture() {\n return this._centersTexture;\n }\n /**\n * Gets the colors texture\n */\n get colorsTexture() {\n return this._colorsTexture;\n }\n /**\n * set rendering material\n */\n set material(value) {\n this._material = value;\n this._material.backFaceCulling = true;\n this._material.cullBackFaces = false;\n value.resetDrawCache();\n }\n /**\n * get rendering material\n */\n get material() {\n return this._material;\n }\n /**\n * Creates a new gaussian splatting mesh\n * @param name defines the name of the mesh\n * @param url defines the url to load from (optional)\n * @param scene defines the hosting scene (optional)\n * @param keepInRam keep datas in ram for editing purpose\n */\n constructor(name, url = null, scene = null, keepInRam = false) {\n super(name, scene);\n this._vertexCount = 0;\n this._worker = null;\n this._frameIdLastUpdate = -1;\n this._modelViewMatrix = Matrix.Identity();\n this._canPostToWorker = true;\n this._readyToDisplay = false;\n this._covariancesATexture = null;\n this._covariancesBTexture = null;\n this._centersTexture = null;\n this._colorsTexture = null;\n this._splatPositions = null;\n this._splatIndex = null;\n //@ts-expect-error\n this._covariancesA = null;\n //@ts-expect-error\n this._covariancesB = null;\n //@ts-expect-error\n this._colors = null;\n this._keepInRam = false;\n this._delayedTextureUpdate = null;\n this._oldDirection = new Vector3();\n this._useRGBACovariants = false;\n this._material = null;\n this._tmpCovariances = [0, 0, 0, 0, 0, 0];\n this._sortIsDirty = false;\n const vertexData = new VertexData();\n // Use an intanced quad or triangle. Triangle might be a bit faster because of less shader invocation but I didn't see any difference.\n // Keeping both and use triangle for now.\n // for quad, use following lines\n //vertexData.positions = [-2, -2, 0, 2, -2, 0, 2, 2, 0, -2, 2, 0];\n //vertexData.indices = [0, 1, 2, 0, 2, 3];\n vertexData.positions = [-3, -2, 0, 3, -2, 0, 0, 4, 0];\n vertexData.indices = [0, 1, 2];\n vertexData.applyToMesh(this);\n this.subMeshes = [];\n // for quad, use following line\n //new SubMesh(0, 0, 4, 0, 6, this);\n new SubMesh(0, 0, 3, 0, 3, this);\n this.setEnabled(false);\n // webGL2 and webGPU support for RG texture with float16 is fine. not webGL1\n this._useRGBACovariants = !this.getEngine().isWebGPU && this.getEngine().version === 1.0;\n this._keepInRam = keepInRam;\n if (url) {\n this.loadFileAsync(url);\n }\n this._material = new GaussianSplattingMaterial(this.name + \"_material\", this._scene);\n }\n /**\n * Returns the class name\n * @returns \"GaussianSplattingMesh\"\n */\n getClassName() {\n return \"GaussianSplattingMesh\";\n }\n /**\n * Returns the total number of vertices (splats) within the mesh\n * @returns the total number of vertices\n */\n getTotalVertices() {\n return this._vertexCount;\n }\n /**\n * Is this node ready to be used/rendered\n * @param completeCheck defines if a complete check (including materials and lights) has to be done (false by default)\n * @returns true when ready\n */\n isReady(completeCheck = false) {\n if (!super.isReady(completeCheck, true)) {\n return false;\n }\n if (!this._readyToDisplay) {\n // mesh is ready when worker has done at least 1 sorting\n this._postToWorker(true);\n return false;\n }\n return true;\n }\n /** @internal */\n _postToWorker(forced = false) {\n const frameId = this.getScene().getFrameId();\n if ((forced || frameId !== this._frameIdLastUpdate) && this._worker && this._scene.activeCamera && this._canPostToWorker) {\n const cameraMatrix = this._scene.activeCamera.getViewMatrix();\n this.getWorldMatrix().multiplyToRef(cameraMatrix, this._modelViewMatrix);\n cameraMatrix.invertToRef(TmpVectors.Matrix[0]);\n this.getWorldMatrix().multiplyToRef(TmpVectors.Matrix[0], TmpVectors.Matrix[1]);\n Vector3.TransformNormalToRef(Vector3.Forward(this._scene.useRightHandedSystem), TmpVectors.Matrix[1], TmpVectors.Vector3[2]);\n TmpVectors.Vector3[2].normalize();\n const dot = Vector3.Dot(TmpVectors.Vector3[2], this._oldDirection);\n if (forced || Math.abs(dot - 1) >= 0.01) {\n this._oldDirection.copyFrom(TmpVectors.Vector3[2]);\n this._frameIdLastUpdate = frameId;\n this._canPostToWorker = false;\n this._worker.postMessage({\n view: this._modelViewMatrix.m,\n depthMix: this._depthMix,\n useRightHandedSystem: this._scene.useRightHandedSystem\n }, [this._depthMix.buffer]);\n }\n }\n }\n /**\n * Triggers the draw call for the mesh. Usually, you don't need to call this method by your own because the mesh rendering is handled by the scene rendering manager\n * @param subMesh defines the subMesh to render\n * @param enableAlphaMode defines if alpha mode can be changed\n * @param effectiveMeshReplacement defines an optional mesh used to provide info for the rendering\n * @returns the current mesh\n */\n render(subMesh, enableAlphaMode, effectiveMeshReplacement) {\n this._postToWorker();\n return super.render(subMesh, enableAlphaMode, effectiveMeshReplacement);\n }\n static _TypeNameToEnum(name) {\n switch (name) {\n case \"float\":\n return 0 /* PLYType.FLOAT */;\n case \"int\":\n return 1 /* PLYType.INT */;\n break;\n case \"uint\":\n return 2 /* PLYType.UINT */;\n case \"double\":\n return 3 /* PLYType.DOUBLE */;\n case \"uchar\":\n return 4 /* PLYType.UCHAR */;\n }\n return 5 /* PLYType.UNDEFINED */;\n }\n static _ValueNameToEnum(name) {\n switch (name) {\n case \"min_x\":\n return 0 /* PLYValue.MIN_X */;\n case \"min_y\":\n return 1 /* PLYValue.MIN_Y */;\n case \"min_z\":\n return 2 /* PLYValue.MIN_Z */;\n case \"max_x\":\n return 3 /* PLYValue.MAX_X */;\n case \"max_y\":\n return 4 /* PLYValue.MAX_Y */;\n case \"max_z\":\n return 5 /* PLYValue.MAX_Z */;\n case \"min_scale_x\":\n return 6 /* PLYValue.MIN_SCALE_X */;\n case \"min_scale_y\":\n return 7 /* PLYValue.MIN_SCALE_Y */;\n case \"min_scale_z\":\n return 8 /* PLYValue.MIN_SCALE_Z */;\n case \"max_scale_x\":\n return 9 /* PLYValue.MAX_SCALE_X */;\n case \"max_scale_y\":\n return 10 /* PLYValue.MAX_SCALE_Y */;\n case \"max_scale_z\":\n return 11 /* PLYValue.MAX_SCALE_Z */;\n case \"packed_position\":\n return 12 /* PLYValue.PACKED_POSITION */;\n case \"packed_rotation\":\n return 13 /* PLYValue.PACKED_ROTATION */;\n case \"packed_scale\":\n return 14 /* PLYValue.PACKED_SCALE */;\n case \"packed_color\":\n return 15 /* PLYValue.PACKED_COLOR */;\n case \"x\":\n return 16 /* PLYValue.X */;\n case \"y\":\n return 17 /* PLYValue.Y */;\n case \"z\":\n return 18 /* PLYValue.Z */;\n case \"scale_0\":\n return 19 /* PLYValue.SCALE_0 */;\n case \"scale_1\":\n return 20 /* PLYValue.SCALE_1 */;\n case \"scale_2\":\n return 21 /* PLYValue.SCALE_2 */;\n case \"diffuse_red\":\n case \"red\":\n return 22 /* PLYValue.DIFFUSE_RED */;\n case \"diffuse_green\":\n case \"green\":\n return 23 /* PLYValue.DIFFUSE_GREEN */;\n case \"diffuse_blue\":\n case \"blue\":\n return 24 /* PLYValue.DIFFUSE_BLUE */;\n case \"f_dc_0\":\n return 26 /* PLYValue.F_DC_0 */;\n case \"f_dc_1\":\n return 27 /* PLYValue.F_DC_1 */;\n case \"f_dc_2\":\n return 28 /* PLYValue.F_DC_2 */;\n case \"f_dc_3\":\n return 29 /* PLYValue.F_DC_3 */;\n case \"opacity\":\n return 25 /* PLYValue.OPACITY */;\n case \"rot_0\":\n return 30 /* PLYValue.ROT_0 */;\n case \"rot_1\":\n return 31 /* PLYValue.ROT_1 */;\n case \"rot_2\":\n return 32 /* PLYValue.ROT_2 */;\n case \"rot_3\":\n return 33 /* PLYValue.ROT_3 */;\n }\n return 34 /* PLYValue.UNDEFINED */;\n }\n /**\n * Parse a PLY file header and returns metas infos on splats and chunks\n * @param data the loaded buffer\n * @returns a PLYHeader\n */\n static ParseHeader(data) {\n const ubuf = new Uint8Array(data);\n const header = new TextDecoder().decode(ubuf.slice(0, 1024 * 10));\n const headerEnd = \"end_header\\n\";\n const headerEndIndex = header.indexOf(headerEnd);\n if (headerEndIndex < 0 || !header) {\n // standard splat\n return null;\n }\n const vertexCount = parseInt(/element vertex (\\d+)\\n/.exec(header)[1]);\n const chunkElement = /element chunk (\\d+)\\n/.exec(header);\n let chunkCount = 0;\n if (chunkElement) {\n chunkCount = parseInt(chunkElement[1]);\n }\n let rowVertexOffset = 0;\n let rowChunkOffset = 0;\n const offsets = {\n double: 8,\n int: 4,\n uint: 4,\n float: 4,\n short: 2,\n ushort: 2,\n uchar: 1,\n list: 0\n };\n let ElementMode;\n (function (ElementMode) {\n ElementMode[ElementMode[\"Vertex\"] = 0] = \"Vertex\";\n ElementMode[ElementMode[\"Chunk\"] = 1] = \"Chunk\";\n })(ElementMode || (ElementMode = {}));\n let chunkMode = 1 /* ElementMode.Chunk */;\n const vertexProperties = [];\n const chunkProperties = [];\n const filtered = header.slice(0, headerEndIndex).split(\"\\n\");\n for (const prop of filtered) {\n if (prop.startsWith(\"property \")) {\n const [, typeName, name] = prop.split(\" \");\n const value = GaussianSplattingMesh._ValueNameToEnum(name);\n const type = GaussianSplattingMesh._TypeNameToEnum(typeName);\n if (chunkMode == 1 /* ElementMode.Chunk */) {\n chunkProperties.push({\n value,\n type,\n offset: rowChunkOffset\n });\n rowChunkOffset += offsets[typeName];\n } else if (chunkMode == 0 /* ElementMode.Vertex */) {\n vertexProperties.push({\n value,\n type,\n offset: rowVertexOffset\n });\n rowVertexOffset += offsets[typeName];\n }\n if (!offsets[typeName]) {\n Logger.Warn(`Unsupported property type: ${typeName}.`);\n }\n } else if (prop.startsWith(\"element \")) {\n const [, type] = prop.split(\" \");\n if (type == \"chunk\") {\n chunkMode = 1 /* ElementMode.Chunk */;\n } else if (type == \"vertex\") {\n chunkMode = 0 /* ElementMode.Vertex */;\n }\n }\n }\n const dataView = new DataView(data, headerEndIndex + headerEnd.length);\n const buffer = new ArrayBuffer(GaussianSplattingMesh._RowOutputLength * vertexCount);\n return {\n vertexCount: vertexCount,\n chunkCount: chunkCount,\n rowVertexLength: rowVertexOffset,\n rowChunkLength: rowChunkOffset,\n vertexProperties: vertexProperties,\n chunkProperties: chunkProperties,\n dataView: dataView,\n buffer: buffer\n };\n }\n static _GetCompressedChunks(header, offset) {\n if (!header.chunkCount) {\n return null;\n }\n const dataView = header.dataView;\n const compressedChunks = new Array(header.chunkCount);\n for (let i = 0; i < header.chunkCount; i++) {\n const currentChunk = {\n min: new Vector3(),\n max: new Vector3(),\n minScale: new Vector3(),\n maxScale: new Vector3()\n };\n compressedChunks[i] = currentChunk;\n for (let propertyIndex = 0; propertyIndex < header.chunkProperties.length; propertyIndex++) {\n const property = header.chunkProperties[propertyIndex];\n let value;\n switch (property.type) {\n case 0 /* PLYType.FLOAT */:\n value = dataView.getFloat32(property.offset + offset.value, true);\n break;\n default:\n continue;\n }\n switch (property.value) {\n case 0 /* PLYValue.MIN_X */:\n currentChunk.min.x = value;\n break;\n case 1 /* PLYValue.MIN_Y */:\n currentChunk.min.y = value;\n break;\n case 2 /* PLYValue.MIN_Z */:\n currentChunk.min.z = value;\n break;\n case 3 /* PLYValue.MAX_X */:\n currentChunk.max.x = value;\n break;\n case 4 /* PLYValue.MAX_Y */:\n currentChunk.max.y = value;\n break;\n case 5 /* PLYValue.MAX_Z */:\n currentChunk.max.z = value;\n break;\n case 6 /* PLYValue.MIN_SCALE_X */:\n currentChunk.minScale.x = value;\n break;\n case 7 /* PLYValue.MIN_SCALE_Y */:\n currentChunk.minScale.y = value;\n break;\n case 8 /* PLYValue.MIN_SCALE_Z */:\n currentChunk.minScale.z = value;\n break;\n case 9 /* PLYValue.MAX_SCALE_X */:\n currentChunk.maxScale.x = value;\n break;\n case 10 /* PLYValue.MAX_SCALE_Y */:\n currentChunk.maxScale.y = value;\n break;\n case 11 /* PLYValue.MAX_SCALE_Z */:\n currentChunk.maxScale.z = value;\n break;\n }\n }\n offset.value += header.rowChunkLength;\n }\n return compressedChunks;\n }\n static _GetSplat(header, index, compressedChunks, offset) {\n const q = TmpVectors.Quaternion[0];\n const temp3 = TmpVectors.Vector3[0];\n const rowOutputLength = GaussianSplattingMesh._RowOutputLength;\n const buffer = header.buffer;\n const dataView = header.dataView;\n const position = new Float32Array(buffer, index * rowOutputLength, 3);\n const scale = new Float32Array(buffer, index * rowOutputLength + 12, 3);\n const rgba = new Uint8ClampedArray(buffer, index * rowOutputLength + 24, 4);\n const rot = new Uint8ClampedArray(buffer, index * rowOutputLength + 28, 4);\n const chunkIndex = index >> 8;\n let r0 = 255;\n let r1 = 0;\n let r2 = 0;\n let r3 = 0;\n for (let propertyIndex = 0; propertyIndex < header.vertexProperties.length; propertyIndex++) {\n const property = header.vertexProperties[propertyIndex];\n let value;\n switch (property.type) {\n case 0 /* PLYType.FLOAT */:\n value = dataView.getFloat32(offset.value + property.offset, true);\n break;\n case 1 /* PLYType.INT */:\n value = dataView.getInt32(offset.value + property.offset, true);\n break;\n case 2 /* PLYType.UINT */:\n value = dataView.getUint32(offset.value + property.offset, true);\n break;\n case 3 /* PLYType.DOUBLE */:\n value = dataView.getFloat64(offset.value + property.offset, true);\n break;\n case 4 /* PLYType.UCHAR */:\n value = dataView.getUint8(offset.value + property.offset);\n break;\n default:\n continue;\n }\n switch (property.value) {\n case 12 /* PLYValue.PACKED_POSITION */:\n {\n const compressedChunk = compressedChunks[chunkIndex];\n unpack111011(value, temp3);\n position[0] = Scalar.Lerp(compressedChunk.min.x, compressedChunk.max.x, temp3.x);\n position[1] = -Scalar.Lerp(compressedChunk.min.y, compressedChunk.max.y, temp3.y);\n position[2] = Scalar.Lerp(compressedChunk.min.z, compressedChunk.max.z, temp3.z);\n }\n break;\n case 13 /* PLYValue.PACKED_ROTATION */:\n {\n unpackRot(value, q);\n r0 = q.w;\n r1 = q.z;\n r2 = q.y;\n r3 = q.x;\n }\n break;\n case 14 /* PLYValue.PACKED_SCALE */:\n {\n const compressedChunk = compressedChunks[chunkIndex];\n unpack111011(value, temp3);\n scale[0] = Math.exp(Scalar.Lerp(compressedChunk.minScale.x, compressedChunk.maxScale.x, temp3.x));\n scale[1] = Math.exp(Scalar.Lerp(compressedChunk.minScale.y, compressedChunk.maxScale.y, temp3.y));\n scale[2] = Math.exp(Scalar.Lerp(compressedChunk.minScale.z, compressedChunk.maxScale.z, temp3.z));\n }\n break;\n case 15 /* PLYValue.PACKED_COLOR */:\n unpack8888(value, rgba);\n break;\n case 16 /* PLYValue.X */:\n position[0] = value;\n break;\n case 17 /* PLYValue.Y */:\n position[1] = value;\n break;\n case 18 /* PLYValue.Z */:\n position[2] = value;\n break;\n case 19 /* PLYValue.SCALE_0 */:\n scale[0] = Math.exp(value);\n break;\n case 20 /* PLYValue.SCALE_1 */:\n scale[1] = Math.exp(value);\n break;\n case 21 /* PLYValue.SCALE_2 */:\n scale[2] = Math.exp(value);\n break;\n case 22 /* PLYValue.DIFFUSE_RED */:\n rgba[0] = value;\n break;\n case 23 /* PLYValue.DIFFUSE_GREEN */:\n rgba[1] = value;\n break;\n case 24 /* PLYValue.DIFFUSE_BLUE */:\n rgba[2] = value;\n break;\n case 26 /* PLYValue.F_DC_0 */:\n rgba[0] = (0.5 + GaussianSplattingMesh._SH_C0 * value) * 255;\n break;\n case 27 /* PLYValue.F_DC_1 */:\n rgba[1] = (0.5 + GaussianSplattingMesh._SH_C0 * value) * 255;\n break;\n case 28 /* PLYValue.F_DC_2 */:\n rgba[2] = (0.5 + GaussianSplattingMesh._SH_C0 * value) * 255;\n break;\n case 29 /* PLYValue.F_DC_3 */:\n rgba[3] = (0.5 + GaussianSplattingMesh._SH_C0 * value) * 255;\n break;\n case 25 /* PLYValue.OPACITY */:\n rgba[3] = 1 / (1 + Math.exp(-value)) * 255;\n break;\n case 30 /* PLYValue.ROT_0 */:\n r0 = value;\n break;\n case 31 /* PLYValue.ROT_1 */:\n r1 = value;\n break;\n case 32 /* PLYValue.ROT_2 */:\n r2 = value;\n break;\n case 33 /* PLYValue.ROT_3 */:\n r3 = value;\n break;\n }\n }\n q.set(r1, r2, r3, r0);\n q.normalize();\n rot[0] = q.w * 128 + 128;\n rot[1] = q.x * 128 + 128;\n rot[2] = q.y * 128 + 128;\n rot[3] = q.z * 128 + 128;\n offset.value += header.rowVertexLength;\n }\n /**\n * Converts a .ply data array buffer to splat\n * if data array buffer is not ply, returns the original buffer\n * @param data the .ply data to load\n * @param useCoroutine use coroutine and yield\n * @returns the loaded splat buffer\n */\n static *ConvertPLYToSplat(data, useCoroutine = false) {\n const header = GaussianSplattingMesh.ParseHeader(data);\n if (!header) {\n return data;\n }\n const offset = {\n value: 0\n };\n const compressedChunks = GaussianSplattingMesh._GetCompressedChunks(header, offset);\n for (let i = 0; i < header.vertexCount; i++) {\n GaussianSplattingMesh._GetSplat(header, i, compressedChunks, offset);\n if (i % GaussianSplattingMesh._PlyConversionBatchSize === 0 && useCoroutine) {\n yield;\n }\n }\n return header.buffer;\n }\n /**\n * Converts a .ply data array buffer to splat\n * if data array buffer is not ply, returns the original buffer\n * @param data the .ply data to load\n * @returns the loaded splat buffer\n */\n static ConvertPLYToSplatAsync(data) {\n return _asyncToGenerator(function* () {\n return runCoroutineAsync(GaussianSplattingMesh.ConvertPLYToSplat(data, true), createYieldingScheduler());\n })();\n }\n /**\n * Loads a .splat Gaussian Splatting array buffer asynchronously\n * @param data arraybuffer containing splat file\n * @returns a promise that resolves when the operation is complete\n */\n loadDataAsync(data) {\n return this.updateDataAsync(data);\n }\n /**\n * Loads a .splat Gaussian or .ply Splatting file asynchronously\n * @param url path to the splat file to load\n * @returns a promise that resolves when the operation is complete\n * @deprecated Please use SceneLoader.ImportMeshAsync instead\n */\n loadFileAsync(url) {\n var _this = this;\n return Tools.LoadFileAsync(url, true).then( /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(function* (plyBuffer) {\n GaussianSplattingMesh.ConvertPLYToSplatAsync(plyBuffer).then(splatsData => {\n _this.updateDataAsync(splatsData);\n });\n });\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }());\n }\n /**\n * Releases resources associated with this mesh.\n * @param doNotRecurse Set to true to not recurse into each children (recurse into each children by default)\n */\n dispose(doNotRecurse) {\n var _this$_covariancesATe, _this$_covariancesBTe, _this$_centersTexture, _this$_colorsTexture, _this$_worker;\n (_this$_covariancesATe = this._covariancesATexture) === null || _this$_covariancesATe === void 0 || _this$_covariancesATe.dispose();\n (_this$_covariancesBTe = this._covariancesBTexture) === null || _this$_covariancesBTe === void 0 || _this$_covariancesBTe.dispose();\n (_this$_centersTexture = this._centersTexture) === null || _this$_centersTexture === void 0 || _this$_centersTexture.dispose();\n (_this$_colorsTexture = this._colorsTexture) === null || _this$_colorsTexture === void 0 || _this$_colorsTexture.dispose();\n this._covariancesATexture = null;\n this._covariancesBTexture = null;\n this._centersTexture = null;\n this._colorsTexture = null;\n (_this$_worker = this._worker) === null || _this$_worker === void 0 || _this$_worker.terminate();\n this._worker = null;\n super.dispose(doNotRecurse, true);\n }\n _copyTextures(source) {\n var _source$covariancesAT, _source$covariancesBT, _source$centersTextur, _source$colorsTexture;\n this._covariancesATexture = (_source$covariancesAT = source.covariancesATexture) === null || _source$covariancesAT === void 0 ? void 0 : _source$covariancesAT.clone();\n this._covariancesBTexture = (_source$covariancesBT = source.covariancesBTexture) === null || _source$covariancesBT === void 0 ? void 0 : _source$covariancesBT.clone();\n this._centersTexture = (_source$centersTextur = source.centersTexture) === null || _source$centersTextur === void 0 ? void 0 : _source$centersTextur.clone();\n this._colorsTexture = (_source$colorsTexture = source.colorsTexture) === null || _source$colorsTexture === void 0 ? void 0 : _source$colorsTexture.clone();\n }\n /**\n * Returns a new Mesh object generated from the current mesh properties.\n * @param name is a string, the name given to the new mesh\n * @returns a new Gaussian Splatting Mesh\n */\n clone(name = \"\") {\n const newGS = new GaussianSplattingMesh(name, undefined, this.getScene());\n newGS._copySource(this);\n newGS.makeGeometryUnique();\n newGS._vertexCount = this._vertexCount;\n newGS._copyTextures(this);\n newGS._modelViewMatrix = Matrix.Identity();\n newGS._splatPositions = this._splatPositions;\n newGS._readyToDisplay = false;\n newGS._instanciateWorker();\n const binfo = this.getBoundingInfo();\n newGS.getBoundingInfo().reConstruct(binfo.minimum, binfo.maximum, this.getWorldMatrix());\n newGS.forcedInstanceCount = newGS._vertexCount;\n newGS.setEnabled(true);\n return newGS;\n }\n _makeSplat(sourceIndex, destinationIndex, fBuffer, uBuffer, covA, covB, colorArray, minimum, maximum) {\n const matrixRotation = TmpVectors.Matrix[0];\n const matrixScale = TmpVectors.Matrix[1];\n const quaternion = TmpVectors.Quaternion[0];\n const covBSItemSize = this._useRGBACovariants ? 4 : 2;\n const x = fBuffer[8 * sourceIndex + 0];\n const y = -fBuffer[8 * sourceIndex + 1];\n const z = fBuffer[8 * sourceIndex + 2];\n this._splatPositions[4 * sourceIndex + 0] = x;\n this._splatPositions[4 * sourceIndex + 1] = y;\n this._splatPositions[4 * sourceIndex + 2] = z;\n minimum.minimizeInPlaceFromFloats(x, y, z);\n maximum.maximizeInPlaceFromFloats(x, y, z);\n quaternion.set((uBuffer[32 * sourceIndex + 28 + 1] - 128) / 128, (uBuffer[32 * sourceIndex + 28 + 2] - 128) / 128, (uBuffer[32 * sourceIndex + 28 + 3] - 128) / 128, -(uBuffer[32 * sourceIndex + 28 + 0] - 128) / 128);\n quaternion.toRotationMatrix(matrixRotation);\n Matrix.ScalingToRef(fBuffer[8 * sourceIndex + 3 + 0] * 2, fBuffer[8 * sourceIndex + 3 + 1] * 2, fBuffer[8 * sourceIndex + 3 + 2] * 2, matrixScale);\n const M = matrixRotation.multiplyToRef(matrixScale, TmpVectors.Matrix[0]).m;\n const covariances = this._tmpCovariances;\n covariances[0] = M[0] * M[0] + M[1] * M[1] + M[2] * M[2];\n covariances[1] = M[0] * M[4] + M[1] * M[5] + M[2] * M[6];\n covariances[2] = M[0] * M[8] + M[1] * M[9] + M[2] * M[10];\n covariances[3] = M[4] * M[4] + M[5] * M[5] + M[6] * M[6];\n covariances[4] = M[4] * M[8] + M[5] * M[9] + M[6] * M[10];\n covariances[5] = M[8] * M[8] + M[9] * M[9] + M[10] * M[10];\n // normalize covA, covB\n let factor = -10000;\n for (let covIndex = 0; covIndex < 6; covIndex++) {\n factor = Math.max(factor, Math.abs(covariances[covIndex]));\n }\n this._splatPositions[4 * sourceIndex + 3] = factor;\n const transform = factor;\n covA[destinationIndex * 4 + 0] = ToHalfFloat(covariances[0] / transform);\n covA[destinationIndex * 4 + 1] = ToHalfFloat(covariances[1] / transform);\n covA[destinationIndex * 4 + 2] = ToHalfFloat(covariances[2] / transform);\n covA[destinationIndex * 4 + 3] = ToHalfFloat(covariances[3] / transform);\n covB[destinationIndex * covBSItemSize + 0] = ToHalfFloat(covariances[4] / transform);\n covB[destinationIndex * covBSItemSize + 1] = ToHalfFloat(covariances[5] / transform);\n // colors\n colorArray[destinationIndex * 4 + 0] = uBuffer[32 * sourceIndex + 24 + 0];\n colorArray[destinationIndex * 4 + 1] = uBuffer[32 * sourceIndex + 24 + 1];\n colorArray[destinationIndex * 4 + 2] = uBuffer[32 * sourceIndex + 24 + 2];\n colorArray[destinationIndex * 4 + 3] = uBuffer[32 * sourceIndex + 24 + 3];\n }\n _updateTextures(covA, covB, colorArray) {\n const textureSize = this._getTextureSize(this._vertexCount);\n // Update the textures\n const createTextureFromData = (data, width, height, format) => {\n return new RawTexture(data, width, height, format, this._scene, false, false, 2, 1);\n };\n const createTextureFromDataU8 = (data, width, height, format) => {\n return new RawTexture(data, width, height, format, this._scene, false, false, 2, 0);\n };\n const createTextureFromDataF16 = (data, width, height, format) => {\n return new RawTexture(data, width, height, format, this._scene, false, false, 2, 2);\n };\n if (this._keepInRam) {\n this._covariancesA = covA;\n this._covariancesB = covB;\n this._colors = colorArray;\n }\n if (this._covariancesATexture) {\n this._delayedTextureUpdate = {\n covA: covA,\n covB: covB,\n colors: colorArray,\n centers: this._splatPositions\n };\n const positions = Float32Array.from(this._splatPositions);\n const vertexCount = this._vertexCount;\n this._worker.postMessage({\n positions,\n vertexCount\n }, [positions.buffer]);\n this._postToWorker(true);\n } else {\n this._covariancesATexture = createTextureFromDataF16(covA, textureSize.x, textureSize.y, 5);\n this._covariancesBTexture = createTextureFromDataF16(covB, textureSize.x, textureSize.y, this._useRGBACovariants ? 5 : 7);\n this._centersTexture = createTextureFromData(this._splatPositions, textureSize.x, textureSize.y, 5);\n this._colorsTexture = createTextureFromDataU8(colorArray, textureSize.x, textureSize.y, 5);\n this._instanciateWorker();\n }\n }\n *_updateData(data, isAsync) {\n var _GaussianSplattingMes;\n // if a covariance texture is present, then it's not a creation but an update\n if (!this._covariancesATexture) {\n this._readyToDisplay = false;\n }\n // Parse the data\n const uBuffer = new Uint8Array(data);\n const fBuffer = new Float32Array(uBuffer.buffer);\n const vertexCount = uBuffer.length / GaussianSplattingMesh._RowOutputLength;\n if (vertexCount != this._vertexCount) {\n this._updateSplatIndexBuffer(vertexCount);\n }\n this._vertexCount = vertexCount;\n const textureSize = this._getTextureSize(vertexCount);\n const textureLength = textureSize.x * textureSize.y;\n const lineCountUpdate = (_GaussianSplattingMes = GaussianSplattingMesh.ProgressiveUpdateAmount) !== null && _GaussianSplattingMes !== void 0 ? _GaussianSplattingMes : textureSize.y;\n const textureLengthPerUpdate = textureSize.x * lineCountUpdate;\n this._splatPositions = new Float32Array(4 * textureLength);\n const covA = new Uint16Array(textureLength * 4);\n const covB = new Uint16Array((this._useRGBACovariants ? 4 : 2) * textureLength);\n const colorArray = new Uint8Array(textureLength * 4);\n const minimum = new Vector3(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);\n const maximum = new Vector3(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);\n if (GaussianSplattingMesh.ProgressiveUpdateAmount) {\n // create textures with not filled-yet array, then update directly portions of it\n this._updateTextures(covA, covB, colorArray);\n this.setEnabled(true);\n const partCount = Math.ceil(textureSize.y / lineCountUpdate);\n for (let partIndex = 0; partIndex < partCount; partIndex++) {\n const updateLine = partIndex * lineCountUpdate;\n const splatIndexBase = updateLine * textureSize.x;\n for (let i = 0; i < textureLengthPerUpdate; i++) {\n this._makeSplat(splatIndexBase + i, splatIndexBase + i, fBuffer, uBuffer, covA, covB, colorArray, minimum, maximum);\n }\n this._updateSubTextures(this._splatPositions, covA, covB, colorArray, updateLine, Math.min(lineCountUpdate, textureSize.y - updateLine));\n // Update the binfo\n this.getBoundingInfo().reConstruct(minimum, maximum, this.getWorldMatrix());\n if (isAsync) {\n yield;\n }\n }\n // sort will be dirty here as just finished filled positions will not be sorted\n const positions = Float32Array.from(this._splatPositions);\n const vertexCount = this._vertexCount;\n this._worker.postMessage({\n positions,\n vertexCount\n }, [positions.buffer]);\n this._sortIsDirty = true;\n } else {\n for (let i = 0; i < vertexCount; i++) {\n this._makeSplat(i, i, fBuffer, uBuffer, covA, covB, colorArray, minimum, maximum);\n if (isAsync && i % GaussianSplattingMesh._SplatBatchSize === 0) {\n yield;\n }\n }\n // textures\n this._updateTextures(covA, covB, colorArray);\n // Update the binfo\n this.getBoundingInfo().reConstruct(minimum, maximum, this.getWorldMatrix());\n this.setEnabled(true);\n }\n this._postToWorker(true);\n }\n /**\n * Update asynchronously the buffer\n * @param data array buffer containing center, color, orientation and scale of splats\n * @returns a promise\n */\n updateDataAsync(data) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n return runCoroutineAsync(_this2._updateData(data, true), createYieldingScheduler());\n })();\n }\n /**\n * @experimental\n * Update data from GS (position, orientation, color, scaling)\n * @param data array that contain all the datas\n */\n updateData(data) {\n runCoroutineSync(this._updateData(data, false));\n }\n // in case size is different\n _updateSplatIndexBuffer(vertexCount) {\n if (!this._splatIndex || vertexCount > this._splatIndex.length) {\n this._splatIndex = new Float32Array(vertexCount);\n this.thinInstanceSetBuffer(\"splatIndex\", this._splatIndex, 1, false);\n }\n this.forcedInstanceCount = vertexCount;\n }\n _updateSubTextures(centers, covA, covB, colors, lineStart, lineCount) {\n const updateTextureFromData = (texture, data, width, lineStart, lineCount) => {\n this.getEngine().updateTextureData(texture.getInternalTexture(), data, 0, lineStart, width, lineCount, 0, 0, false);\n };\n const updateTextureFromDataU8 = (texture, data, width, lineStart, lineCount) => {\n this.getEngine().updateTextureData(texture.getInternalTexture(), data, 0, lineStart, width, lineCount, 0, 0, false);\n };\n const updateTextureFromDataF16 = (texture, data, width, lineStart, lineCount) => {\n this.getEngine().updateTextureData(texture.getInternalTexture(), data, 0, lineStart, width, lineCount, 0, 0, false);\n };\n const textureSize = this._getTextureSize(this._vertexCount);\n const covBSItemSize = this._useRGBACovariants ? 4 : 2;\n const texelStart = lineStart * textureSize.x;\n const texelCount = lineCount * textureSize.x;\n const covAView = new Uint16Array(covA.buffer, texelStart * 4 * Uint16Array.BYTES_PER_ELEMENT, texelCount * 4);\n const covBView = new Uint16Array(covB.buffer, texelStart * covBSItemSize * Uint16Array.BYTES_PER_ELEMENT, texelCount * covBSItemSize);\n const colorsView = new Uint8Array(colors.buffer, texelStart * 4, texelCount * 4);\n const centersView = new Float32Array(centers.buffer, texelStart * 4 * Float32Array.BYTES_PER_ELEMENT, texelCount * 4);\n updateTextureFromDataF16(this._covariancesATexture, covAView, textureSize.x, lineStart, lineCount);\n updateTextureFromDataF16(this._covariancesBTexture, covBView, textureSize.x, lineStart, lineCount);\n updateTextureFromData(this._centersTexture, centersView, textureSize.x, lineStart, lineCount);\n updateTextureFromDataU8(this._colorsTexture, colorsView, textureSize.x, lineStart, lineCount);\n }\n _instanciateWorker() {\n var _this$_worker2;\n if (!this._vertexCount) {\n return;\n }\n this._updateSplatIndexBuffer(this._vertexCount);\n // Start the worker thread\n (_this$_worker2 = this._worker) === null || _this$_worker2 === void 0 || _this$_worker2.terminate();\n this._worker = new Worker(URL.createObjectURL(new Blob([\"(\", GaussianSplattingMesh._CreateWorker.toString(), \")(self)\"], {\n type: \"application/javascript\"\n })));\n this._depthMix = new BigInt64Array(this._vertexCount);\n const positions = Float32Array.from(this._splatPositions);\n const vertexCount = this._vertexCount;\n this._worker.postMessage({\n positions,\n vertexCount\n }, [positions.buffer]);\n this._worker.onmessage = e => {\n this._depthMix = e.data.depthMix;\n const indexMix = new Uint32Array(e.data.depthMix.buffer);\n if (this._splatIndex) {\n for (let j = 0; j < this._vertexCount; j++) {\n this._splatIndex[j] = indexMix[2 * j];\n }\n }\n if (this._delayedTextureUpdate) {\n const textureSize = this._getTextureSize(vertexCount);\n this._updateSubTextures(this._delayedTextureUpdate.centers, this._delayedTextureUpdate.covA, this._delayedTextureUpdate.covB, this._delayedTextureUpdate.colors, 0, textureSize.y);\n this._delayedTextureUpdate = null;\n }\n this.thinInstanceBufferUpdated(\"splatIndex\");\n this._canPostToWorker = true;\n this._readyToDisplay = true;\n // sort is dirty when GS is visible for progressive update with a this message arriving but positions were partially filled\n // another update needs to be kicked. The kick can't happen just when the position buffer is ready because _canPostToWorker might be false.\n if (this._sortIsDirty) {\n this._postToWorker(true);\n this._sortIsDirty = false;\n }\n };\n }\n _getTextureSize(length) {\n const engine = this._scene.getEngine();\n const width = engine.getCaps().maxTextureSize;\n let height = 1;\n if (engine.version === 1 && !engine.isWebGPU) {\n while (width * height < length) {\n height *= 2;\n }\n } else {\n height = Math.ceil(length / width);\n }\n if (height > width) {\n Logger.Error(\"GaussianSplatting texture size: (\" + width + \", \" + height + \"), maxTextureSize: \" + width);\n height = width;\n }\n return new Vector2(width, height);\n }\n}\nGaussianSplattingMesh._RowOutputLength = 3 * 4 + 3 * 4 + 4 + 4; // Vector3 position, Vector3 scale, 1 u8 quaternion, 1 color with alpha\nGaussianSplattingMesh._SH_C0 = 0.28209479177387814;\n// batch size between 2 yield calls. This value is a tradeoff between updates overhead and framerate hiccups\n// This step is faster the PLY conversion. So batch size can be bigger\nGaussianSplattingMesh._SplatBatchSize = 327680;\n// batch size between 2 yield calls during the PLY to splat conversion.\nGaussianSplattingMesh._PlyConversionBatchSize = 32768;\n/**\n * Set the number of batch (a batch is 16384 splats) after which a display update is performed\n * A value of 0 (default) means display update will not happens before splat is ready.\n */\nGaussianSplattingMesh.ProgressiveUpdateAmount = 0;\nGaussianSplattingMesh._CreateWorker = function (self) {\n let vertexCount = 0;\n let positions;\n let depthMix;\n let indices;\n let floatMix;\n self.onmessage = e => {\n // updated on init\n if (e.data.positions) {\n positions = e.data.positions;\n vertexCount = e.data.vertexCount;\n }\n // udpate on view changed\n else {\n const viewProj = e.data.view;\n if (!positions || !viewProj) {\n // Sanity check, it shouldn't happen!\n throw new Error(\"positions or view is not defined!\");\n }\n depthMix = e.data.depthMix;\n indices = new Uint32Array(depthMix.buffer);\n floatMix = new Float32Array(depthMix.buffer);\n // Sort\n for (let j = 0; j < vertexCount; j++) {\n indices[2 * j] = j;\n }\n let depthFactor = -1;\n if (e.data.useRightHandedSystem) {\n depthFactor = 1;\n }\n for (let j = 0; j < vertexCount; j++) {\n floatMix[2 * j + 1] = 10000 + (viewProj[2] * positions[4 * j + 0] + viewProj[6] * positions[4 * j + 1] + viewProj[10] * positions[4 * j + 2]) * depthFactor;\n }\n depthMix.sort();\n self.postMessage({\n depthMix\n }, [depthMix.buffer]);\n }\n };\n};","map":{"version":3,"names":["SubMesh","Mesh","VertexData","Matrix","TmpVectors","Vector2","Vector3","Logger","GaussianSplattingMaterial","RawTexture","Tools","ToHalfFloat","Scalar","runCoroutineSync","runCoroutineAsync","createYieldingScheduler","unpackUnorm","value","bits","t","unpack111011","result","x","y","z","unpack8888","unpackRot","norm","Math","sqrt","a","b","c","m","set","PLYType","PLYValue","GaussianSplattingMesh","covariancesATexture","_covariancesATexture","covariancesBTexture","_covariancesBTexture","centersTexture","_centersTexture","colorsTexture","_colorsTexture","material","_material","backFaceCulling","cullBackFaces","resetDrawCache","constructor","name","url","scene","keepInRam","_vertexCount","_worker","_frameIdLastUpdate","_modelViewMatrix","Identity","_canPostToWorker","_readyToDisplay","_splatPositions","_splatIndex","_covariancesA","_covariancesB","_colors","_keepInRam","_delayedTextureUpdate","_oldDirection","_useRGBACovariants","_tmpCovariances","_sortIsDirty","vertexData","positions","indices","applyToMesh","subMeshes","setEnabled","getEngine","isWebGPU","version","loadFileAsync","_scene","getClassName","getTotalVertices","isReady","completeCheck","_postToWorker","forced","frameId","getScene","getFrameId","activeCamera","cameraMatrix","getViewMatrix","getWorldMatrix","multiplyToRef","invertToRef","TransformNormalToRef","Forward","useRightHandedSystem","normalize","dot","Dot","abs","copyFrom","postMessage","view","depthMix","_depthMix","buffer","render","subMesh","enableAlphaMode","effectiveMeshReplacement","_TypeNameToEnum","_ValueNameToEnum","ParseHeader","data","ubuf","Uint8Array","header","TextDecoder","decode","slice","headerEnd","headerEndIndex","indexOf","vertexCount","parseInt","exec","chunkElement","chunkCount","rowVertexOffset","rowChunkOffset","offsets","double","int","uint","float","short","ushort","uchar","list","ElementMode","chunkMode","vertexProperties","chunkProperties","filtered","split","prop","startsWith","typeName","type","push","offset","Warn","dataView","DataView","length","ArrayBuffer","_RowOutputLength","rowVertexLength","rowChunkLength","_GetCompressedChunks","compressedChunks","Array","i","currentChunk","min","max","minScale","maxScale","propertyIndex","property","getFloat32","_GetSplat","index","q","Quaternion","temp3","rowOutputLength","position","Float32Array","scale","rgba","Uint8ClampedArray","rot","chunkIndex","r0","r1","r2","r3","getInt32","getUint32","getFloat64","getUint8","compressedChunk","Lerp","w","exp","_SH_C0","ConvertPLYToSplat","useCoroutine","_PlyConversionBatchSize","ConvertPLYToSplatAsync","_asyncToGenerator","loadDataAsync","updateDataAsync","_this","LoadFileAsync","then","_ref","plyBuffer","splatsData","_x","apply","arguments","dispose","doNotRecurse","_this$_covariancesATe","_this$_covariancesBTe","_this$_centersTexture","_this$_colorsTexture","_this$_worker","terminate","_copyTextures","source","_source$covariancesAT","_source$covariancesBT","_source$centersTextur","_source$colorsTexture","clone","newGS","undefined","_copySource","makeGeometryUnique","_instanciateWorker","binfo","getBoundingInfo","reConstruct","minimum","maximum","forcedInstanceCount","_makeSplat","sourceIndex","destinationIndex","fBuffer","uBuffer","covA","covB","colorArray","matrixRotation","matrixScale","quaternion","covBSItemSize","minimizeInPlaceFromFloats","maximizeInPlaceFromFloats","toRotationMatrix","ScalingToRef","M","covariances","factor","covIndex","transform","_updateTextures","textureSize","_getTextureSize","createTextureFromData","width","height","format","createTextureFromDataU8","createTextureFromDataF16","colors","centers","from","_updateData","isAsync","_GaussianSplattingMes","_updateSplatIndexBuffer","textureLength","lineCountUpdate","ProgressiveUpdateAmount","textureLengthPerUpdate","Uint16Array","Number","MAX_VALUE","partCount","ceil","partIndex","updateLine","splatIndexBase","_updateSubTextures","_SplatBatchSize","_this2","updateData","thinInstanceSetBuffer","lineStart","lineCount","updateTextureFromData","texture","updateTextureData","getInternalTexture","updateTextureFromDataU8","updateTextureFromDataF16","texelStart","texelCount","covAView","BYTES_PER_ELEMENT","covBView","colorsView","centersView","_this$_worker2","Worker","URL","createObjectURL","Blob","_CreateWorker","toString","BigInt64Array","onmessage","e","indexMix","Uint32Array","j","thinInstanceBufferUpdated","engine","getCaps","maxTextureSize","Error","self","floatMix","viewProj","depthFactor","sort"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Meshes/GaussianSplatting/gaussianSplattingMesh.js"],"sourcesContent":["import { SubMesh } from \"../subMesh.js\";\nimport { Mesh } from \"../mesh.js\";\nimport { VertexData } from \"../mesh.vertexData.js\";\nimport { Matrix, TmpVectors, Vector2, Vector3 } from \"../../Maths/math.vector.js\";\nimport { Logger } from \"../../Misc/logger.js\";\nimport { GaussianSplattingMaterial } from \"../../Materials/GaussianSplatting/gaussianSplattingMaterial.js\";\nimport { RawTexture } from \"../../Materials/Textures/rawTexture.js\";\n\nimport { Tools } from \"../../Misc/tools.js\";\nimport \"../thinInstanceMesh.js\";\nimport { ToHalfFloat } from \"../../Misc/textureTools.js\";\nimport { Scalar } from \"../../Maths/math.scalar.js\";\nimport { runCoroutineSync, runCoroutineAsync, createYieldingScheduler } from \"../../Misc/coroutine.js\";\n// @internal\nconst unpackUnorm = (value, bits) => {\n const t = (1 << bits) - 1;\n return (value & t) / t;\n};\n// @internal\nconst unpack111011 = (value, result) => {\n result.x = unpackUnorm(value >>> 21, 11);\n result.y = unpackUnorm(value >>> 11, 10);\n result.z = unpackUnorm(value, 11);\n};\n// @internal\nconst unpack8888 = (value, result) => {\n result[0] = unpackUnorm(value >>> 24, 8) * 255;\n result[1] = unpackUnorm(value >>> 16, 8) * 255;\n result[2] = unpackUnorm(value >>> 8, 8) * 255;\n result[3] = unpackUnorm(value, 8) * 255;\n};\n// @internal\n// unpack quaternion with 2,10,10,10 format (largest element, 3x10bit element)\nconst unpackRot = (value, result) => {\n const norm = 1.0 / (Math.sqrt(2) * 0.5);\n const a = (unpackUnorm(value >>> 20, 10) - 0.5) * norm;\n const b = (unpackUnorm(value >>> 10, 10) - 0.5) * norm;\n const c = (unpackUnorm(value, 10) - 0.5) * norm;\n const m = Math.sqrt(1.0 - (a * a + b * b + c * c));\n switch (value >>> 30) {\n case 0:\n result.set(m, a, b, c);\n break;\n case 1:\n result.set(a, m, b, c);\n break;\n case 2:\n result.set(a, b, m, c);\n break;\n case 3:\n result.set(a, b, c, m);\n break;\n }\n};\n/**\n * Representation of the types\n */\nvar PLYType;\n(function (PLYType) {\n PLYType[PLYType[\"FLOAT\"] = 0] = \"FLOAT\";\n PLYType[PLYType[\"INT\"] = 1] = \"INT\";\n PLYType[PLYType[\"UINT\"] = 2] = \"UINT\";\n PLYType[PLYType[\"DOUBLE\"] = 3] = \"DOUBLE\";\n PLYType[PLYType[\"UCHAR\"] = 4] = \"UCHAR\";\n PLYType[PLYType[\"UNDEFINED\"] = 5] = \"UNDEFINED\";\n})(PLYType || (PLYType = {}));\n/**\n * Usage types of the PLY values\n */\nvar PLYValue;\n(function (PLYValue) {\n PLYValue[PLYValue[\"MIN_X\"] = 0] = \"MIN_X\";\n PLYValue[PLYValue[\"MIN_Y\"] = 1] = \"MIN_Y\";\n PLYValue[PLYValue[\"MIN_Z\"] = 2] = \"MIN_Z\";\n PLYValue[PLYValue[\"MAX_X\"] = 3] = \"MAX_X\";\n PLYValue[PLYValue[\"MAX_Y\"] = 4] = \"MAX_Y\";\n PLYValue[PLYValue[\"MAX_Z\"] = 5] = \"MAX_Z\";\n PLYValue[PLYValue[\"MIN_SCALE_X\"] = 6] = \"MIN_SCALE_X\";\n PLYValue[PLYValue[\"MIN_SCALE_Y\"] = 7] = \"MIN_SCALE_Y\";\n PLYValue[PLYValue[\"MIN_SCALE_Z\"] = 8] = \"MIN_SCALE_Z\";\n PLYValue[PLYValue[\"MAX_SCALE_X\"] = 9] = \"MAX_SCALE_X\";\n PLYValue[PLYValue[\"MAX_SCALE_Y\"] = 10] = \"MAX_SCALE_Y\";\n PLYValue[PLYValue[\"MAX_SCALE_Z\"] = 11] = \"MAX_SCALE_Z\";\n PLYValue[PLYValue[\"PACKED_POSITION\"] = 12] = \"PACKED_POSITION\";\n PLYValue[PLYValue[\"PACKED_ROTATION\"] = 13] = \"PACKED_ROTATION\";\n PLYValue[PLYValue[\"PACKED_SCALE\"] = 14] = \"PACKED_SCALE\";\n PLYValue[PLYValue[\"PACKED_COLOR\"] = 15] = \"PACKED_COLOR\";\n PLYValue[PLYValue[\"X\"] = 16] = \"X\";\n PLYValue[PLYValue[\"Y\"] = 17] = \"Y\";\n PLYValue[PLYValue[\"Z\"] = 18] = \"Z\";\n PLYValue[PLYValue[\"SCALE_0\"] = 19] = \"SCALE_0\";\n PLYValue[PLYValue[\"SCALE_1\"] = 20] = \"SCALE_1\";\n PLYValue[PLYValue[\"SCALE_2\"] = 21] = \"SCALE_2\";\n PLYValue[PLYValue[\"DIFFUSE_RED\"] = 22] = \"DIFFUSE_RED\";\n PLYValue[PLYValue[\"DIFFUSE_GREEN\"] = 23] = \"DIFFUSE_GREEN\";\n PLYValue[PLYValue[\"DIFFUSE_BLUE\"] = 24] = \"DIFFUSE_BLUE\";\n PLYValue[PLYValue[\"OPACITY\"] = 25] = \"OPACITY\";\n PLYValue[PLYValue[\"F_DC_0\"] = 26] = \"F_DC_0\";\n PLYValue[PLYValue[\"F_DC_1\"] = 27] = \"F_DC_1\";\n PLYValue[PLYValue[\"F_DC_2\"] = 28] = \"F_DC_2\";\n PLYValue[PLYValue[\"F_DC_3\"] = 29] = \"F_DC_3\";\n PLYValue[PLYValue[\"ROT_0\"] = 30] = \"ROT_0\";\n PLYValue[PLYValue[\"ROT_1\"] = 31] = \"ROT_1\";\n PLYValue[PLYValue[\"ROT_2\"] = 32] = \"ROT_2\";\n PLYValue[PLYValue[\"ROT_3\"] = 33] = \"ROT_3\";\n PLYValue[PLYValue[\"UNDEFINED\"] = 34] = \"UNDEFINED\";\n})(PLYValue || (PLYValue = {}));\n/**\n * Class used to render a gaussian splatting mesh\n */\nexport class GaussianSplattingMesh extends Mesh {\n /**\n * Gets the covariancesA texture\n */\n get covariancesATexture() {\n return this._covariancesATexture;\n }\n /**\n * Gets the covariancesB texture\n */\n get covariancesBTexture() {\n return this._covariancesBTexture;\n }\n /**\n * Gets the centers texture\n */\n get centersTexture() {\n return this._centersTexture;\n }\n /**\n * Gets the colors texture\n */\n get colorsTexture() {\n return this._colorsTexture;\n }\n /**\n * set rendering material\n */\n set material(value) {\n this._material = value;\n this._material.backFaceCulling = true;\n this._material.cullBackFaces = false;\n value.resetDrawCache();\n }\n /**\n * get rendering material\n */\n get material() {\n return this._material;\n }\n /**\n * Creates a new gaussian splatting mesh\n * @param name defines the name of the mesh\n * @param url defines the url to load from (optional)\n * @param scene defines the hosting scene (optional)\n * @param keepInRam keep datas in ram for editing purpose\n */\n constructor(name, url = null, scene = null, keepInRam = false) {\n super(name, scene);\n this._vertexCount = 0;\n this._worker = null;\n this._frameIdLastUpdate = -1;\n this._modelViewMatrix = Matrix.Identity();\n this._canPostToWorker = true;\n this._readyToDisplay = false;\n this._covariancesATexture = null;\n this._covariancesBTexture = null;\n this._centersTexture = null;\n this._colorsTexture = null;\n this._splatPositions = null;\n this._splatIndex = null;\n //@ts-expect-error\n this._covariancesA = null;\n //@ts-expect-error\n this._covariancesB = null;\n //@ts-expect-error\n this._colors = null;\n this._keepInRam = false;\n this._delayedTextureUpdate = null;\n this._oldDirection = new Vector3();\n this._useRGBACovariants = false;\n this._material = null;\n this._tmpCovariances = [0, 0, 0, 0, 0, 0];\n this._sortIsDirty = false;\n const vertexData = new VertexData();\n // Use an intanced quad or triangle. Triangle might be a bit faster because of less shader invocation but I didn't see any difference.\n // Keeping both and use triangle for now.\n // for quad, use following lines\n //vertexData.positions = [-2, -2, 0, 2, -2, 0, 2, 2, 0, -2, 2, 0];\n //vertexData.indices = [0, 1, 2, 0, 2, 3];\n vertexData.positions = [-3, -2, 0, 3, -2, 0, 0, 4, 0];\n vertexData.indices = [0, 1, 2];\n vertexData.applyToMesh(this);\n this.subMeshes = [];\n // for quad, use following line\n //new SubMesh(0, 0, 4, 0, 6, this);\n new SubMesh(0, 0, 3, 0, 3, this);\n this.setEnabled(false);\n // webGL2 and webGPU support for RG texture with float16 is fine. not webGL1\n this._useRGBACovariants = !this.getEngine().isWebGPU && this.getEngine().version === 1.0;\n this._keepInRam = keepInRam;\n if (url) {\n this.loadFileAsync(url);\n }\n this._material = new GaussianSplattingMaterial(this.name + \"_material\", this._scene);\n }\n /**\n * Returns the class name\n * @returns \"GaussianSplattingMesh\"\n */\n getClassName() {\n return \"GaussianSplattingMesh\";\n }\n /**\n * Returns the total number of vertices (splats) within the mesh\n * @returns the total number of vertices\n */\n getTotalVertices() {\n return this._vertexCount;\n }\n /**\n * Is this node ready to be used/rendered\n * @param completeCheck defines if a complete check (including materials and lights) has to be done (false by default)\n * @returns true when ready\n */\n isReady(completeCheck = false) {\n if (!super.isReady(completeCheck, true)) {\n return false;\n }\n if (!this._readyToDisplay) {\n // mesh is ready when worker has done at least 1 sorting\n this._postToWorker(true);\n return false;\n }\n return true;\n }\n /** @internal */\n _postToWorker(forced = false) {\n const frameId = this.getScene().getFrameId();\n if ((forced || frameId !== this._frameIdLastUpdate) && this._worker && this._scene.activeCamera && this._canPostToWorker) {\n const cameraMatrix = this._scene.activeCamera.getViewMatrix();\n this.getWorldMatrix().multiplyToRef(cameraMatrix, this._modelViewMatrix);\n cameraMatrix.invertToRef(TmpVectors.Matrix[0]);\n this.getWorldMatrix().multiplyToRef(TmpVectors.Matrix[0], TmpVectors.Matrix[1]);\n Vector3.TransformNormalToRef(Vector3.Forward(this._scene.useRightHandedSystem), TmpVectors.Matrix[1], TmpVectors.Vector3[2]);\n TmpVectors.Vector3[2].normalize();\n const dot = Vector3.Dot(TmpVectors.Vector3[2], this._oldDirection);\n if (forced || Math.abs(dot - 1) >= 0.01) {\n this._oldDirection.copyFrom(TmpVectors.Vector3[2]);\n this._frameIdLastUpdate = frameId;\n this._canPostToWorker = false;\n this._worker.postMessage({ view: this._modelViewMatrix.m, depthMix: this._depthMix, useRightHandedSystem: this._scene.useRightHandedSystem }, [\n this._depthMix.buffer,\n ]);\n }\n }\n }\n /**\n * Triggers the draw call for the mesh. Usually, you don't need to call this method by your own because the mesh rendering is handled by the scene rendering manager\n * @param subMesh defines the subMesh to render\n * @param enableAlphaMode defines if alpha mode can be changed\n * @param effectiveMeshReplacement defines an optional mesh used to provide info for the rendering\n * @returns the current mesh\n */\n render(subMesh, enableAlphaMode, effectiveMeshReplacement) {\n this._postToWorker();\n return super.render(subMesh, enableAlphaMode, effectiveMeshReplacement);\n }\n static _TypeNameToEnum(name) {\n switch (name) {\n case \"float\":\n return 0 /* PLYType.FLOAT */;\n case \"int\":\n return 1 /* PLYType.INT */;\n break;\n case \"uint\":\n return 2 /* PLYType.UINT */;\n case \"double\":\n return 3 /* PLYType.DOUBLE */;\n case \"uchar\":\n return 4 /* PLYType.UCHAR */;\n }\n return 5 /* PLYType.UNDEFINED */;\n }\n static _ValueNameToEnum(name) {\n switch (name) {\n case \"min_x\":\n return 0 /* PLYValue.MIN_X */;\n case \"min_y\":\n return 1 /* PLYValue.MIN_Y */;\n case \"min_z\":\n return 2 /* PLYValue.MIN_Z */;\n case \"max_x\":\n return 3 /* PLYValue.MAX_X */;\n case \"max_y\":\n return 4 /* PLYValue.MAX_Y */;\n case \"max_z\":\n return 5 /* PLYValue.MAX_Z */;\n case \"min_scale_x\":\n return 6 /* PLYValue.MIN_SCALE_X */;\n case \"min_scale_y\":\n return 7 /* PLYValue.MIN_SCALE_Y */;\n case \"min_scale_z\":\n return 8 /* PLYValue.MIN_SCALE_Z */;\n case \"max_scale_x\":\n return 9 /* PLYValue.MAX_SCALE_X */;\n case \"max_scale_y\":\n return 10 /* PLYValue.MAX_SCALE_Y */;\n case \"max_scale_z\":\n return 11 /* PLYValue.MAX_SCALE_Z */;\n case \"packed_position\":\n return 12 /* PLYValue.PACKED_POSITION */;\n case \"packed_rotation\":\n return 13 /* PLYValue.PACKED_ROTATION */;\n case \"packed_scale\":\n return 14 /* PLYValue.PACKED_SCALE */;\n case \"packed_color\":\n return 15 /* PLYValue.PACKED_COLOR */;\n case \"x\":\n return 16 /* PLYValue.X */;\n case \"y\":\n return 17 /* PLYValue.Y */;\n case \"z\":\n return 18 /* PLYValue.Z */;\n case \"scale_0\":\n return 19 /* PLYValue.SCALE_0 */;\n case \"scale_1\":\n return 20 /* PLYValue.SCALE_1 */;\n case \"scale_2\":\n return 21 /* PLYValue.SCALE_2 */;\n case \"diffuse_red\":\n case \"red\":\n return 22 /* PLYValue.DIFFUSE_RED */;\n case \"diffuse_green\":\n case \"green\":\n return 23 /* PLYValue.DIFFUSE_GREEN */;\n case \"diffuse_blue\":\n case \"blue\":\n return 24 /* PLYValue.DIFFUSE_BLUE */;\n case \"f_dc_0\":\n return 26 /* PLYValue.F_DC_0 */;\n case \"f_dc_1\":\n return 27 /* PLYValue.F_DC_1 */;\n case \"f_dc_2\":\n return 28 /* PLYValue.F_DC_2 */;\n case \"f_dc_3\":\n return 29 /* PLYValue.F_DC_3 */;\n case \"opacity\":\n return 25 /* PLYValue.OPACITY */;\n case \"rot_0\":\n return 30 /* PLYValue.ROT_0 */;\n case \"rot_1\":\n return 31 /* PLYValue.ROT_1 */;\n case \"rot_2\":\n return 32 /* PLYValue.ROT_2 */;\n case \"rot_3\":\n return 33 /* PLYValue.ROT_3 */;\n }\n return 34 /* PLYValue.UNDEFINED */;\n }\n /**\n * Parse a PLY file header and returns metas infos on splats and chunks\n * @param data the loaded buffer\n * @returns a PLYHeader\n */\n static ParseHeader(data) {\n const ubuf = new Uint8Array(data);\n const header = new TextDecoder().decode(ubuf.slice(0, 1024 * 10));\n const headerEnd = \"end_header\\n\";\n const headerEndIndex = header.indexOf(headerEnd);\n if (headerEndIndex < 0 || !header) {\n // standard splat\n return null;\n }\n const vertexCount = parseInt(/element vertex (\\d+)\\n/.exec(header)[1]);\n const chunkElement = /element chunk (\\d+)\\n/.exec(header);\n let chunkCount = 0;\n if (chunkElement) {\n chunkCount = parseInt(chunkElement[1]);\n }\n let rowVertexOffset = 0;\n let rowChunkOffset = 0;\n const offsets = {\n double: 8,\n int: 4,\n uint: 4,\n float: 4,\n short: 2,\n ushort: 2,\n uchar: 1,\n list: 0,\n };\n let ElementMode;\n (function (ElementMode) {\n ElementMode[ElementMode[\"Vertex\"] = 0] = \"Vertex\";\n ElementMode[ElementMode[\"Chunk\"] = 1] = \"Chunk\";\n })(ElementMode || (ElementMode = {}));\n let chunkMode = 1 /* ElementMode.Chunk */;\n const vertexProperties = [];\n const chunkProperties = [];\n const filtered = header.slice(0, headerEndIndex).split(\"\\n\");\n for (const prop of filtered) {\n if (prop.startsWith(\"property \")) {\n const [, typeName, name] = prop.split(\" \");\n const value = GaussianSplattingMesh._ValueNameToEnum(name);\n const type = GaussianSplattingMesh._TypeNameToEnum(typeName);\n if (chunkMode == 1 /* ElementMode.Chunk */) {\n chunkProperties.push({ value, type, offset: rowChunkOffset });\n rowChunkOffset += offsets[typeName];\n }\n else if (chunkMode == 0 /* ElementMode.Vertex */) {\n vertexProperties.push({ value, type, offset: rowVertexOffset });\n rowVertexOffset += offsets[typeName];\n }\n if (!offsets[typeName]) {\n Logger.Warn(`Unsupported property type: ${typeName}.`);\n }\n }\n else if (prop.startsWith(\"element \")) {\n const [, type] = prop.split(\" \");\n if (type == \"chunk\") {\n chunkMode = 1 /* ElementMode.Chunk */;\n }\n else if (type == \"vertex\") {\n chunkMode = 0 /* ElementMode.Vertex */;\n }\n }\n }\n const dataView = new DataView(data, headerEndIndex + headerEnd.length);\n const buffer = new ArrayBuffer(GaussianSplattingMesh._RowOutputLength * vertexCount);\n return {\n vertexCount: vertexCount,\n chunkCount: chunkCount,\n rowVertexLength: rowVertexOffset,\n rowChunkLength: rowChunkOffset,\n vertexProperties: vertexProperties,\n chunkProperties: chunkProperties,\n dataView: dataView,\n buffer: buffer,\n };\n }\n static _GetCompressedChunks(header, offset) {\n if (!header.chunkCount) {\n return null;\n }\n const dataView = header.dataView;\n const compressedChunks = new Array(header.chunkCount);\n for (let i = 0; i < header.chunkCount; i++) {\n const currentChunk = { min: new Vector3(), max: new Vector3(), minScale: new Vector3(), maxScale: new Vector3() };\n compressedChunks[i] = currentChunk;\n for (let propertyIndex = 0; propertyIndex < header.chunkProperties.length; propertyIndex++) {\n const property = header.chunkProperties[propertyIndex];\n let value;\n switch (property.type) {\n case 0 /* PLYType.FLOAT */:\n value = dataView.getFloat32(property.offset + offset.value, true);\n break;\n default:\n continue;\n }\n switch (property.value) {\n case 0 /* PLYValue.MIN_X */:\n currentChunk.min.x = value;\n break;\n case 1 /* PLYValue.MIN_Y */:\n currentChunk.min.y = value;\n break;\n case 2 /* PLYValue.MIN_Z */:\n currentChunk.min.z = value;\n break;\n case 3 /* PLYValue.MAX_X */:\n currentChunk.max.x = value;\n break;\n case 4 /* PLYValue.MAX_Y */:\n currentChunk.max.y = value;\n break;\n case 5 /* PLYValue.MAX_Z */:\n currentChunk.max.z = value;\n break;\n case 6 /* PLYValue.MIN_SCALE_X */:\n currentChunk.minScale.x = value;\n break;\n case 7 /* PLYValue.MIN_SCALE_Y */:\n currentChunk.minScale.y = value;\n break;\n case 8 /* PLYValue.MIN_SCALE_Z */:\n currentChunk.minScale.z = value;\n break;\n case 9 /* PLYValue.MAX_SCALE_X */:\n currentChunk.maxScale.x = value;\n break;\n case 10 /* PLYValue.MAX_SCALE_Y */:\n currentChunk.maxScale.y = value;\n break;\n case 11 /* PLYValue.MAX_SCALE_Z */:\n currentChunk.maxScale.z = value;\n break;\n }\n }\n offset.value += header.rowChunkLength;\n }\n return compressedChunks;\n }\n static _GetSplat(header, index, compressedChunks, offset) {\n const q = TmpVectors.Quaternion[0];\n const temp3 = TmpVectors.Vector3[0];\n const rowOutputLength = GaussianSplattingMesh._RowOutputLength;\n const buffer = header.buffer;\n const dataView = header.dataView;\n const position = new Float32Array(buffer, index * rowOutputLength, 3);\n const scale = new Float32Array(buffer, index * rowOutputLength + 12, 3);\n const rgba = new Uint8ClampedArray(buffer, index * rowOutputLength + 24, 4);\n const rot = new Uint8ClampedArray(buffer, index * rowOutputLength + 28, 4);\n const chunkIndex = index >> 8;\n let r0 = 255;\n let r1 = 0;\n let r2 = 0;\n let r3 = 0;\n for (let propertyIndex = 0; propertyIndex < header.vertexProperties.length; propertyIndex++) {\n const property = header.vertexProperties[propertyIndex];\n let value;\n switch (property.type) {\n case 0 /* PLYType.FLOAT */:\n value = dataView.getFloat32(offset.value + property.offset, true);\n break;\n case 1 /* PLYType.INT */:\n value = dataView.getInt32(offset.value + property.offset, true);\n break;\n case 2 /* PLYType.UINT */:\n value = dataView.getUint32(offset.value + property.offset, true);\n break;\n case 3 /* PLYType.DOUBLE */:\n value = dataView.getFloat64(offset.value + property.offset, true);\n break;\n case 4 /* PLYType.UCHAR */:\n value = dataView.getUint8(offset.value + property.offset);\n break;\n default:\n continue;\n }\n switch (property.value) {\n case 12 /* PLYValue.PACKED_POSITION */:\n {\n const compressedChunk = compressedChunks[chunkIndex];\n unpack111011(value, temp3);\n position[0] = Scalar.Lerp(compressedChunk.min.x, compressedChunk.max.x, temp3.x);\n position[1] = -Scalar.Lerp(compressedChunk.min.y, compressedChunk.max.y, temp3.y);\n position[2] = Scalar.Lerp(compressedChunk.min.z, compressedChunk.max.z, temp3.z);\n }\n break;\n case 13 /* PLYValue.PACKED_ROTATION */:\n {\n unpackRot(value, q);\n r0 = q.w;\n r1 = q.z;\n r2 = q.y;\n r3 = q.x;\n }\n break;\n case 14 /* PLYValue.PACKED_SCALE */:\n {\n const compressedChunk = compressedChunks[chunkIndex];\n unpack111011(value, temp3);\n scale[0] = Math.exp(Scalar.Lerp(compressedChunk.minScale.x, compressedChunk.maxScale.x, temp3.x));\n scale[1] = Math.exp(Scalar.Lerp(compressedChunk.minScale.y, compressedChunk.maxScale.y, temp3.y));\n scale[2] = Math.exp(Scalar.Lerp(compressedChunk.minScale.z, compressedChunk.maxScale.z, temp3.z));\n }\n break;\n case 15 /* PLYValue.PACKED_COLOR */:\n unpack8888(value, rgba);\n break;\n case 16 /* PLYValue.X */:\n position[0] = value;\n break;\n case 17 /* PLYValue.Y */:\n position[1] = value;\n break;\n case 18 /* PLYValue.Z */:\n position[2] = value;\n break;\n case 19 /* PLYValue.SCALE_0 */:\n scale[0] = Math.exp(value);\n break;\n case 20 /* PLYValue.SCALE_1 */:\n scale[1] = Math.exp(value);\n break;\n case 21 /* PLYValue.SCALE_2 */:\n scale[2] = Math.exp(value);\n break;\n case 22 /* PLYValue.DIFFUSE_RED */:\n rgba[0] = value;\n break;\n case 23 /* PLYValue.DIFFUSE_GREEN */:\n rgba[1] = value;\n break;\n case 24 /* PLYValue.DIFFUSE_BLUE */:\n rgba[2] = value;\n break;\n case 26 /* PLYValue.F_DC_0 */:\n rgba[0] = (0.5 + GaussianSplattingMesh._SH_C0 * value) * 255;\n break;\n case 27 /* PLYValue.F_DC_1 */:\n rgba[1] = (0.5 + GaussianSplattingMesh._SH_C0 * value) * 255;\n break;\n case 28 /* PLYValue.F_DC_2 */:\n rgba[2] = (0.5 + GaussianSplattingMesh._SH_C0 * value) * 255;\n break;\n case 29 /* PLYValue.F_DC_3 */:\n rgba[3] = (0.5 + GaussianSplattingMesh._SH_C0 * value) * 255;\n break;\n case 25 /* PLYValue.OPACITY */:\n rgba[3] = (1 / (1 + Math.exp(-value))) * 255;\n break;\n case 30 /* PLYValue.ROT_0 */:\n r0 = value;\n break;\n case 31 /* PLYValue.ROT_1 */:\n r1 = value;\n break;\n case 32 /* PLYValue.ROT_2 */:\n r2 = value;\n break;\n case 33 /* PLYValue.ROT_3 */:\n r3 = value;\n break;\n }\n }\n q.set(r1, r2, r3, r0);\n q.normalize();\n rot[0] = q.w * 128 + 128;\n rot[1] = q.x * 128 + 128;\n rot[2] = q.y * 128 + 128;\n rot[3] = q.z * 128 + 128;\n offset.value += header.rowVertexLength;\n }\n /**\n * Converts a .ply data array buffer to splat\n * if data array buffer is not ply, returns the original buffer\n * @param data the .ply data to load\n * @param useCoroutine use coroutine and yield\n * @returns the loaded splat buffer\n */\n static *ConvertPLYToSplat(data, useCoroutine = false) {\n const header = GaussianSplattingMesh.ParseHeader(data);\n if (!header) {\n return data;\n }\n const offset = { value: 0 };\n const compressedChunks = GaussianSplattingMesh._GetCompressedChunks(header, offset);\n for (let i = 0; i < header.vertexCount; i++) {\n GaussianSplattingMesh._GetSplat(header, i, compressedChunks, offset);\n if (i % GaussianSplattingMesh._PlyConversionBatchSize === 0 && useCoroutine) {\n yield;\n }\n }\n return header.buffer;\n }\n /**\n * Converts a .ply data array buffer to splat\n * if data array buffer is not ply, returns the original buffer\n * @param data the .ply data to load\n * @returns the loaded splat buffer\n */\n static async ConvertPLYToSplatAsync(data) {\n return runCoroutineAsync(GaussianSplattingMesh.ConvertPLYToSplat(data, true), createYieldingScheduler());\n }\n /**\n * Loads a .splat Gaussian Splatting array buffer asynchronously\n * @param data arraybuffer containing splat file\n * @returns a promise that resolves when the operation is complete\n */\n loadDataAsync(data) {\n return this.updateDataAsync(data);\n }\n /**\n * Loads a .splat Gaussian or .ply Splatting file asynchronously\n * @param url path to the splat file to load\n * @returns a promise that resolves when the operation is complete\n * @deprecated Please use SceneLoader.ImportMeshAsync instead\n */\n loadFileAsync(url) {\n return Tools.LoadFileAsync(url, true).then(async (plyBuffer) => {\n GaussianSplattingMesh.ConvertPLYToSplatAsync(plyBuffer).then((splatsData) => {\n this.updateDataAsync(splatsData);\n });\n });\n }\n /**\n * Releases resources associated with this mesh.\n * @param doNotRecurse Set to true to not recurse into each children (recurse into each children by default)\n */\n dispose(doNotRecurse) {\n this._covariancesATexture?.dispose();\n this._covariancesBTexture?.dispose();\n this._centersTexture?.dispose();\n this._colorsTexture?.dispose();\n this._covariancesATexture = null;\n this._covariancesBTexture = null;\n this._centersTexture = null;\n this._colorsTexture = null;\n this._worker?.terminate();\n this._worker = null;\n super.dispose(doNotRecurse, true);\n }\n _copyTextures(source) {\n this._covariancesATexture = source.covariancesATexture?.clone();\n this._covariancesBTexture = source.covariancesBTexture?.clone();\n this._centersTexture = source.centersTexture?.clone();\n this._colorsTexture = source.colorsTexture?.clone();\n }\n /**\n * Returns a new Mesh object generated from the current mesh properties.\n * @param name is a string, the name given to the new mesh\n * @returns a new Gaussian Splatting Mesh\n */\n clone(name = \"\") {\n const newGS = new GaussianSplattingMesh(name, undefined, this.getScene());\n newGS._copySource(this);\n newGS.makeGeometryUnique();\n newGS._vertexCount = this._vertexCount;\n newGS._copyTextures(this);\n newGS._modelViewMatrix = Matrix.Identity();\n newGS._splatPositions = this._splatPositions;\n newGS._readyToDisplay = false;\n newGS._instanciateWorker();\n const binfo = this.getBoundingInfo();\n newGS.getBoundingInfo().reConstruct(binfo.minimum, binfo.maximum, this.getWorldMatrix());\n newGS.forcedInstanceCount = newGS._vertexCount;\n newGS.setEnabled(true);\n return newGS;\n }\n _makeSplat(sourceIndex, destinationIndex, fBuffer, uBuffer, covA, covB, colorArray, minimum, maximum) {\n const matrixRotation = TmpVectors.Matrix[0];\n const matrixScale = TmpVectors.Matrix[1];\n const quaternion = TmpVectors.Quaternion[0];\n const covBSItemSize = this._useRGBACovariants ? 4 : 2;\n const x = fBuffer[8 * sourceIndex + 0];\n const y = -fBuffer[8 * sourceIndex + 1];\n const z = fBuffer[8 * sourceIndex + 2];\n this._splatPositions[4 * sourceIndex + 0] = x;\n this._splatPositions[4 * sourceIndex + 1] = y;\n this._splatPositions[4 * sourceIndex + 2] = z;\n minimum.minimizeInPlaceFromFloats(x, y, z);\n maximum.maximizeInPlaceFromFloats(x, y, z);\n quaternion.set((uBuffer[32 * sourceIndex + 28 + 1] - 128) / 128, (uBuffer[32 * sourceIndex + 28 + 2] - 128) / 128, (uBuffer[32 * sourceIndex + 28 + 3] - 128) / 128, -(uBuffer[32 * sourceIndex + 28 + 0] - 128) / 128);\n quaternion.toRotationMatrix(matrixRotation);\n Matrix.ScalingToRef(fBuffer[8 * sourceIndex + 3 + 0] * 2, fBuffer[8 * sourceIndex + 3 + 1] * 2, fBuffer[8 * sourceIndex + 3 + 2] * 2, matrixScale);\n const M = matrixRotation.multiplyToRef(matrixScale, TmpVectors.Matrix[0]).m;\n const covariances = this._tmpCovariances;\n covariances[0] = M[0] * M[0] + M[1] * M[1] + M[2] * M[2];\n covariances[1] = M[0] * M[4] + M[1] * M[5] + M[2] * M[6];\n covariances[2] = M[0] * M[8] + M[1] * M[9] + M[2] * M[10];\n covariances[3] = M[4] * M[4] + M[5] * M[5] + M[6] * M[6];\n covariances[4] = M[4] * M[8] + M[5] * M[9] + M[6] * M[10];\n covariances[5] = M[8] * M[8] + M[9] * M[9] + M[10] * M[10];\n // normalize covA, covB\n let factor = -10000;\n for (let covIndex = 0; covIndex < 6; covIndex++) {\n factor = Math.max(factor, Math.abs(covariances[covIndex]));\n }\n this._splatPositions[4 * sourceIndex + 3] = factor;\n const transform = factor;\n covA[destinationIndex * 4 + 0] = ToHalfFloat(covariances[0] / transform);\n covA[destinationIndex * 4 + 1] = ToHalfFloat(covariances[1] / transform);\n covA[destinationIndex * 4 + 2] = ToHalfFloat(covariances[2] / transform);\n covA[destinationIndex * 4 + 3] = ToHalfFloat(covariances[3] / transform);\n covB[destinationIndex * covBSItemSize + 0] = ToHalfFloat(covariances[4] / transform);\n covB[destinationIndex * covBSItemSize + 1] = ToHalfFloat(covariances[5] / transform);\n // colors\n colorArray[destinationIndex * 4 + 0] = uBuffer[32 * sourceIndex + 24 + 0];\n colorArray[destinationIndex * 4 + 1] = uBuffer[32 * sourceIndex + 24 + 1];\n colorArray[destinationIndex * 4 + 2] = uBuffer[32 * sourceIndex + 24 + 2];\n colorArray[destinationIndex * 4 + 3] = uBuffer[32 * sourceIndex + 24 + 3];\n }\n _updateTextures(covA, covB, colorArray) {\n const textureSize = this._getTextureSize(this._vertexCount);\n // Update the textures\n const createTextureFromData = (data, width, height, format) => {\n return new RawTexture(data, width, height, format, this._scene, false, false, 2, 1);\n };\n const createTextureFromDataU8 = (data, width, height, format) => {\n return new RawTexture(data, width, height, format, this._scene, false, false, 2, 0);\n };\n const createTextureFromDataF16 = (data, width, height, format) => {\n return new RawTexture(data, width, height, format, this._scene, false, false, 2, 2);\n };\n if (this._keepInRam) {\n this._covariancesA = covA;\n this._covariancesB = covB;\n this._colors = colorArray;\n }\n if (this._covariancesATexture) {\n this._delayedTextureUpdate = { covA: covA, covB: covB, colors: colorArray, centers: this._splatPositions };\n const positions = Float32Array.from(this._splatPositions);\n const vertexCount = this._vertexCount;\n this._worker.postMessage({ positions, vertexCount }, [positions.buffer]);\n this._postToWorker(true);\n }\n else {\n this._covariancesATexture = createTextureFromDataF16(covA, textureSize.x, textureSize.y, 5);\n this._covariancesBTexture = createTextureFromDataF16(covB, textureSize.x, textureSize.y, this._useRGBACovariants ? 5 : 7);\n this._centersTexture = createTextureFromData(this._splatPositions, textureSize.x, textureSize.y, 5);\n this._colorsTexture = createTextureFromDataU8(colorArray, textureSize.x, textureSize.y, 5);\n this._instanciateWorker();\n }\n }\n *_updateData(data, isAsync) {\n // if a covariance texture is present, then it's not a creation but an update\n if (!this._covariancesATexture) {\n this._readyToDisplay = false;\n }\n // Parse the data\n const uBuffer = new Uint8Array(data);\n const fBuffer = new Float32Array(uBuffer.buffer);\n const vertexCount = uBuffer.length / GaussianSplattingMesh._RowOutputLength;\n if (vertexCount != this._vertexCount) {\n this._updateSplatIndexBuffer(vertexCount);\n }\n this._vertexCount = vertexCount;\n const textureSize = this._getTextureSize(vertexCount);\n const textureLength = textureSize.x * textureSize.y;\n const lineCountUpdate = GaussianSplattingMesh.ProgressiveUpdateAmount ?? textureSize.y;\n const textureLengthPerUpdate = textureSize.x * lineCountUpdate;\n this._splatPositions = new Float32Array(4 * textureLength);\n const covA = new Uint16Array(textureLength * 4);\n const covB = new Uint16Array((this._useRGBACovariants ? 4 : 2) * textureLength);\n const colorArray = new Uint8Array(textureLength * 4);\n const minimum = new Vector3(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);\n const maximum = new Vector3(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);\n if (GaussianSplattingMesh.ProgressiveUpdateAmount) {\n // create textures with not filled-yet array, then update directly portions of it\n this._updateTextures(covA, covB, colorArray);\n this.setEnabled(true);\n const partCount = Math.ceil(textureSize.y / lineCountUpdate);\n for (let partIndex = 0; partIndex < partCount; partIndex++) {\n const updateLine = partIndex * lineCountUpdate;\n const splatIndexBase = updateLine * textureSize.x;\n for (let i = 0; i < textureLengthPerUpdate; i++) {\n this._makeSplat(splatIndexBase + i, splatIndexBase + i, fBuffer, uBuffer, covA, covB, colorArray, minimum, maximum);\n }\n this._updateSubTextures(this._splatPositions, covA, covB, colorArray, updateLine, Math.min(lineCountUpdate, textureSize.y - updateLine));\n // Update the binfo\n this.getBoundingInfo().reConstruct(minimum, maximum, this.getWorldMatrix());\n if (isAsync) {\n yield;\n }\n }\n // sort will be dirty here as just finished filled positions will not be sorted\n const positions = Float32Array.from(this._splatPositions);\n const vertexCount = this._vertexCount;\n this._worker.postMessage({ positions, vertexCount }, [positions.buffer]);\n this._sortIsDirty = true;\n }\n else {\n for (let i = 0; i < vertexCount; i++) {\n this._makeSplat(i, i, fBuffer, uBuffer, covA, covB, colorArray, minimum, maximum);\n if (isAsync && i % GaussianSplattingMesh._SplatBatchSize === 0) {\n yield;\n }\n }\n // textures\n this._updateTextures(covA, covB, colorArray);\n // Update the binfo\n this.getBoundingInfo().reConstruct(minimum, maximum, this.getWorldMatrix());\n this.setEnabled(true);\n }\n this._postToWorker(true);\n }\n /**\n * Update asynchronously the buffer\n * @param data array buffer containing center, color, orientation and scale of splats\n * @returns a promise\n */\n async updateDataAsync(data) {\n return runCoroutineAsync(this._updateData(data, true), createYieldingScheduler());\n }\n /**\n * @experimental\n * Update data from GS (position, orientation, color, scaling)\n * @param data array that contain all the datas\n */\n updateData(data) {\n runCoroutineSync(this._updateData(data, false));\n }\n // in case size is different\n _updateSplatIndexBuffer(vertexCount) {\n if (!this._splatIndex || vertexCount > this._splatIndex.length) {\n this._splatIndex = new Float32Array(vertexCount);\n this.thinInstanceSetBuffer(\"splatIndex\", this._splatIndex, 1, false);\n }\n this.forcedInstanceCount = vertexCount;\n }\n _updateSubTextures(centers, covA, covB, colors, lineStart, lineCount) {\n const updateTextureFromData = (texture, data, width, lineStart, lineCount) => {\n this.getEngine().updateTextureData(texture.getInternalTexture(), data, 0, lineStart, width, lineCount, 0, 0, false);\n };\n const updateTextureFromDataU8 = (texture, data, width, lineStart, lineCount) => {\n this.getEngine().updateTextureData(texture.getInternalTexture(), data, 0, lineStart, width, lineCount, 0, 0, false);\n };\n const updateTextureFromDataF16 = (texture, data, width, lineStart, lineCount) => {\n this.getEngine().updateTextureData(texture.getInternalTexture(), data, 0, lineStart, width, lineCount, 0, 0, false);\n };\n const textureSize = this._getTextureSize(this._vertexCount);\n const covBSItemSize = this._useRGBACovariants ? 4 : 2;\n const texelStart = lineStart * textureSize.x;\n const texelCount = lineCount * textureSize.x;\n const covAView = new Uint16Array(covA.buffer, texelStart * 4 * Uint16Array.BYTES_PER_ELEMENT, texelCount * 4);\n const covBView = new Uint16Array(covB.buffer, texelStart * covBSItemSize * Uint16Array.BYTES_PER_ELEMENT, texelCount * covBSItemSize);\n const colorsView = new Uint8Array(colors.buffer, texelStart * 4, texelCount * 4);\n const centersView = new Float32Array(centers.buffer, texelStart * 4 * Float32Array.BYTES_PER_ELEMENT, texelCount * 4);\n updateTextureFromDataF16(this._covariancesATexture, covAView, textureSize.x, lineStart, lineCount);\n updateTextureFromDataF16(this._covariancesBTexture, covBView, textureSize.x, lineStart, lineCount);\n updateTextureFromData(this._centersTexture, centersView, textureSize.x, lineStart, lineCount);\n updateTextureFromDataU8(this._colorsTexture, colorsView, textureSize.x, lineStart, lineCount);\n }\n _instanciateWorker() {\n if (!this._vertexCount) {\n return;\n }\n this._updateSplatIndexBuffer(this._vertexCount);\n // Start the worker thread\n this._worker?.terminate();\n this._worker = new Worker(URL.createObjectURL(new Blob([\"(\", GaussianSplattingMesh._CreateWorker.toString(), \")(self)\"], {\n type: \"application/javascript\",\n })));\n this._depthMix = new BigInt64Array(this._vertexCount);\n const positions = Float32Array.from(this._splatPositions);\n const vertexCount = this._vertexCount;\n this._worker.postMessage({ positions, vertexCount }, [positions.buffer]);\n this._worker.onmessage = (e) => {\n this._depthMix = e.data.depthMix;\n const indexMix = new Uint32Array(e.data.depthMix.buffer);\n if (this._splatIndex) {\n for (let j = 0; j < this._vertexCount; j++) {\n this._splatIndex[j] = indexMix[2 * j];\n }\n }\n if (this._delayedTextureUpdate) {\n const textureSize = this._getTextureSize(vertexCount);\n this._updateSubTextures(this._delayedTextureUpdate.centers, this._delayedTextureUpdate.covA, this._delayedTextureUpdate.covB, this._delayedTextureUpdate.colors, 0, textureSize.y);\n this._delayedTextureUpdate = null;\n }\n this.thinInstanceBufferUpdated(\"splatIndex\");\n this._canPostToWorker = true;\n this._readyToDisplay = true;\n // sort is dirty when GS is visible for progressive update with a this message arriving but positions were partially filled\n // another update needs to be kicked. The kick can't happen just when the position buffer is ready because _canPostToWorker might be false.\n if (this._sortIsDirty) {\n this._postToWorker(true);\n this._sortIsDirty = false;\n }\n };\n }\n _getTextureSize(length) {\n const engine = this._scene.getEngine();\n const width = engine.getCaps().maxTextureSize;\n let height = 1;\n if (engine.version === 1 && !engine.isWebGPU) {\n while (width * height < length) {\n height *= 2;\n }\n }\n else {\n height = Math.ceil(length / width);\n }\n if (height > width) {\n Logger.Error(\"GaussianSplatting texture size: (\" + width + \", \" + height + \"), maxTextureSize: \" + width);\n height = width;\n }\n return new Vector2(width, height);\n }\n}\nGaussianSplattingMesh._RowOutputLength = 3 * 4 + 3 * 4 + 4 + 4; // Vector3 position, Vector3 scale, 1 u8 quaternion, 1 color with alpha\nGaussianSplattingMesh._SH_C0 = 0.28209479177387814;\n// batch size between 2 yield calls. This value is a tradeoff between updates overhead and framerate hiccups\n// This step is faster the PLY conversion. So batch size can be bigger\nGaussianSplattingMesh._SplatBatchSize = 327680;\n// batch size between 2 yield calls during the PLY to splat conversion.\nGaussianSplattingMesh._PlyConversionBatchSize = 32768;\n/**\n * Set the number of batch (a batch is 16384 splats) after which a display update is performed\n * A value of 0 (default) means display update will not happens before splat is ready.\n */\nGaussianSplattingMesh.ProgressiveUpdateAmount = 0;\nGaussianSplattingMesh._CreateWorker = function (self) {\n let vertexCount = 0;\n let positions;\n let depthMix;\n let indices;\n let floatMix;\n self.onmessage = (e) => {\n // updated on init\n if (e.data.positions) {\n positions = e.data.positions;\n vertexCount = e.data.vertexCount;\n }\n // udpate on view changed\n else {\n const viewProj = e.data.view;\n if (!positions || !viewProj) {\n // Sanity check, it shouldn't happen!\n throw new Error(\"positions or view is not defined!\");\n }\n depthMix = e.data.depthMix;\n indices = new Uint32Array(depthMix.buffer);\n floatMix = new Float32Array(depthMix.buffer);\n // Sort\n for (let j = 0; j < vertexCount; j++) {\n indices[2 * j] = j;\n }\n let depthFactor = -1;\n if (e.data.useRightHandedSystem) {\n depthFactor = 1;\n }\n for (let j = 0; j < vertexCount; j++) {\n floatMix[2 * j + 1] = 10000 + (viewProj[2] * positions[4 * j + 0] + viewProj[6] * positions[4 * j + 1] + viewProj[10] * positions[4 * j + 2]) * depthFactor;\n }\n depthMix.sort();\n self.postMessage({ depthMix }, [depthMix.buffer]);\n }\n };\n};\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}