{"version":3,"file":"gaussian-splats-3d.umd.cjs","sources":["../src/AbortablePromise.js","../src/Util.js","../src/loaders/UncompressedSplatArray.js","../src/Constants.js","../src/loaders/SplatBuffer.js","../src/loaders/ply/PlayCanvasCompressedPlyParser.js","../src/loaders/ply/PlyFormat.js","../src/loaders/ply/PlyParserUtils.js","../src/loaders/ply/INRIAV1PlyParser.js","../src/loaders/ply/INRIAV2PlyParser.js","../src/loaders/ply/PlyParser.js","../src/loaders/SplatPartitioner.js","../src/loaders/SplatBufferGenerator.js","../src/loaders/LoaderStatus.js","../src/loaders/DirectLoadError.js","../src/loaders/InternalLoadType.js","../src/loaders/ply/PlyLoader.js","../src/loaders/Compression.js","../src/loaders/spz/SpzLoader.js","../src/loaders/splat/SplatParser.js","../src/loaders/splat/SplatLoader.js","../src/loaders/ksplat/KSplatLoader.js","../src/loaders/SceneFormat.js","../src/loaders/Utils.js","../src/OrbitControls.js","../src/ui/Util.js","../src/ui/LoadingSpinner.js","../src/ui/LoadingProgressBar.js","../src/ui/InfoPanel.js","../src/ArrowHelper.js","../src/SceneHelper.js","../src/raycaster/Ray.js","../src/raycaster/Hit.js","../src/SplatRenderMode.js","../src/raycaster/Raycaster.js","../src/splatmesh/SplatMaterial.js","../src/splatmesh/SplatMaterial3D.js","../src/splatmesh/SplatMaterial2D.js","../src/splatmesh/SplatGeometry.js","../src/splatmesh/SplatScene.js","../src/splattree/SplatTree.js","../src/three-shim/WebGLExtensions.js","../src/three-shim/WebGLCapabilities.js","../src/SceneRevealMode.js","../src/LogLevel.js","../src/splatmesh/SplatMesh.js","../src/worker/sorter.wasm","../src/worker/sorter_no_simd.wasm","../src/worker/sorter_non_shared.wasm","../src/worker/sorter_no_simd_non_shared.wasm","../src/worker/SortWorker.js","../src/webxr/WebXRMode.js","../src/webxr/VRButton.js","../src/webxr/ARButton.js","../src/RenderMode.js","../src/ui/GSVisionLogo.js","../src/ui/Controls.js","../src/ui/Presets.js","../node_modules/three/examples/jsm/lines/LineSegmentsGeometry.js","../node_modules/three/examples/jsm/lines/LineMaterial.js","../node_modules/three/examples/jsm/lines/LineSegments2.js","../node_modules/three/examples/jsm/lines/LineGeometry.js","../node_modules/three/examples/jsm/lines/Line2.js","../src/ui/Labels.js","../src/Viewer.js","../src/DropInViewer.js"],"sourcesContent":["/**\n * AbortablePromise: A quick & dirty wrapper for JavaScript's Promise class that allows the underlying\n * asynchronous operation to be cancelled. It is only meant for simple situations where no complex promise\n * chaining or merging occurs. It needs a significant amount of work to truly replicate the full\n * functionality of JavaScript's Promise class. Look at Util.fetchWithProgress() for example usage.\n *\n * This class was primarily added to allow splat scene downloads to be cancelled. It has not been tested\n * very thoroughly and the implementation is kinda janky. If you can at all help it, please avoid using it :)\n */\nexport class AbortablePromise {\n\tstatic idGen = 0;\n\n\tconstructor(promiseFunc, abortHandler) {\n\t\tlet resolver;\n\t\tlet rejecter;\n\t\tthis.promise = new Promise((resolve, reject) => {\n\t\t\tresolver = resolve;\n\t\t\trejecter = reject;\n\t\t});\n\n\t\tconst promiseResolve = resolver.bind(this);\n\t\tconst promiseReject = rejecter.bind(this);\n\n\t\tconst resolve = (...args) => {\n\t\t\tpromiseResolve(...args);\n\t\t};\n\n\t\tconst reject = (error) => {\n\t\t\tpromiseReject(error);\n\t\t};\n\n\t\tpromiseFunc(resolve.bind(this), reject.bind(this));\n\t\tthis.abortHandler = abortHandler;\n\t\tthis.id = AbortablePromise.idGen++;\n\t}\n\n\tthen(onResolve) {\n\t\treturn new AbortablePromise((resolve, reject) => {\n\t\t\tthis.promise = this.promise\n\t\t\t\t.then((...args) => {\n\t\t\t\t\tconst onResolveResult = onResolve(...args);\n\t\t\t\t\tif (onResolveResult instanceof Promise || onResolveResult instanceof AbortablePromise) {\n\t\t\t\t\t\tonResolveResult.then((...args2) => {\n\t\t\t\t\t\t\tresolve(...args2);\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresolve(onResolveResult);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\treject(error);\n\t\t\t\t});\n\t\t}, this.abortHandler);\n\t}\n\n\tcatch(onFail) {\n\t\treturn new AbortablePromise((resolve) => {\n\t\t\tthis.promise = this.promise\n\t\t\t\t.then((...args) => {\n\t\t\t\t\tresolve(...args);\n\t\t\t\t})\n\t\t\t\t.catch(onFail);\n\t\t}, this.abortHandler);\n\t}\n\n\tabort(reason) {\n\t\tif (this.abortHandler) this.abortHandler(reason);\n\t}\n}\n\nexport class AbortedPromiseError extends Error {\n\tconstructor(msg) {\n\t\tsuper(msg);\n\t}\n}\n","import { AbortablePromise, AbortedPromiseError } from \"./AbortablePromise.js\";\n\nexport const floatToHalf = (function() {\n\tconst floatView = new Float32Array(1);\n\tconst int32View = new Int32Array(floatView.buffer);\n\n\treturn function(val) {\n\t\tfloatView[0] = val;\n\t\tconst x = int32View[0];\n\n\t\tlet bits = (x >> 16) & 0x8000;\n\t\tlet m = (x >> 12) & 0x07ff;\n\t\tconst e = (x >> 23) & 0xff;\n\n\t\tif (e < 103) return bits;\n\n\t\tif (e > 142) {\n\t\t\tbits |= 0x7c00;\n\t\t\tbits |= (e == 255 ? 0 : 1) && x & 0x007fffff;\n\t\t\treturn bits;\n\t\t}\n\n\t\tif (e < 113) {\n\t\t\tm |= 0x0800;\n\t\t\tbits |= (m >> (114 - e)) + ((m >> (113 - e)) & 1);\n\t\t\treturn bits;\n\t\t}\n\n\t\tbits |= ((e - 112) << 10) | (m >> 1);\n\t\tbits += m & 1;\n\t\treturn bits;\n\t};\n})();\n\nexport const uintEncodedFloat = (function() {\n\tconst floatView = new Float32Array(1);\n\tconst int32View = new Int32Array(floatView.buffer);\n\n\treturn function(f) {\n\t\tfloatView[0] = f;\n\t\treturn int32View[0];\n\t};\n})();\n\nexport const rgbaToInteger = function(r, g, b, a) {\n\treturn r + (g << 8) + (b << 16) + (a << 24);\n};\n\nexport const rgbaArrayToInteger = function(arr, offset) {\n\treturn arr[offset] + (arr[offset + 1] << 8) + (arr[offset + 2] << 16) + (arr[offset + 3] << 24);\n};\n\nexport const fetchWithProgress = function(path, onProgress, saveChunks = true, headers) {\n\tconst abortController = new AbortController();\n\tconst signal = abortController.signal;\n\tlet aborted = false;\n\tconst abortHandler = (reason) => {\n\t\tabortController.abort(reason);\n\t\taborted = true;\n\t};\n\n\tlet onProgressCalledAtComplete = false;\n\tconst localOnProgress = (percent, percentLabel, chunk, fileSize) => {\n\t\tif (onProgress && !onProgressCalledAtComplete) {\n\t\t\tonProgress(percent, percentLabel, chunk, fileSize);\n\t\t\tif (percent === 100) {\n\t\t\t\tonProgressCalledAtComplete = true;\n\t\t\t}\n\t\t}\n\t};\n\n\treturn new AbortablePromise((resolve, reject) => {\n\t\tconst fetchOptions = { signal };\n\t\tif (headers) fetchOptions.headers = headers;\n\t\tfetch(path, fetchOptions)\n\t\t\t.then(async (data) => {\n\t\t\t\t// Handle error conditions where data is still returned\n\t\t\t\tif (!data.ok) {\n\t\t\t\t\tconst errorText = await data.text();\n\t\t\t\t\treject(new Error(`Fetch failed: ${data.status} ${data.statusText} ${errorText}`));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst reader = data.body.getReader();\n\t\t\t\tlet bytesDownloaded = 0;\n\t\t\t\tlet _fileSize = data.headers.get(\"Content-Length\");\n\t\t\t\tlet fileSize = _fileSize ? parseInt(_fileSize) : undefined;\n\n\t\t\t\tconst chunks = [];\n\n\t\t\t\twhile (!aborted) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst { value: chunk, done } = await reader.read();\n\t\t\t\t\t\tif (done) {\n\t\t\t\t\t\t\tlocalOnProgress(100, \"100%\", chunk, fileSize);\n\t\t\t\t\t\t\tif (saveChunks) {\n\t\t\t\t\t\t\t\tconst buffer = new Blob(chunks).arrayBuffer();\n\t\t\t\t\t\t\t\tresolve(buffer);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbytesDownloaded += chunk.length;\n\t\t\t\t\t\tlet percent;\n\t\t\t\t\t\tlet percentLabel;\n\t\t\t\t\t\tif (fileSize !== undefined) {\n\t\t\t\t\t\t\tpercent = (bytesDownloaded / fileSize) * 100;\n\t\t\t\t\t\t\tpercentLabel = `${percent.toFixed(2)}%`;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (saveChunks) {\n\t\t\t\t\t\t\tchunks.push(chunk);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlocalOnProgress(percent, percentLabel, chunk, fileSize);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\treject(error);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\treject(new AbortedPromiseError(error));\n\t\t\t});\n\t}, abortHandler);\n};\n\nexport const clamp = function(val, min, max) {\n\treturn Math.max(Math.min(val, max), min);\n};\n\nexport const getCurrentTime = function() {\n\treturn performance.now() / 1000;\n};\n\nexport const disposeAllMeshes = (object3D) => {\n\tif (object3D.geometry) {\n\t\tobject3D.geometry.dispose();\n\t\tobject3D.geometry = null;\n\t}\n\tif (object3D.material) {\n\t\tobject3D.material.dispose();\n\t\tobject3D.material = null;\n\t}\n\tif (object3D.children) {\n\t\tfor (let child of object3D.children) {\n\t\t\tdisposeAllMeshes(child);\n\t\t}\n\t}\n};\n\nexport const delayedExecute = (func, fast) => {\n\treturn new Promise((resolve) => {\n\t\twindow.setTimeout(\n\t\t\t() => {\n\t\t\t\tresolve(func ? func() : undefined);\n\t\t\t},\n\t\t\tfast ? 1 : 50,\n\t\t);\n\t});\n};\n\nexport const getSphericalHarmonicsComponentCountForDegree = (sphericalHarmonicsDegree = 0) => {\n\tlet shCoeffPerSplat = 0;\n\tif (sphericalHarmonicsDegree === 1) {\n\t\tshCoeffPerSplat = 9;\n\t} else if (sphericalHarmonicsDegree === 2) {\n\t\tshCoeffPerSplat = 24;\n\t} else if (sphericalHarmonicsDegree === 3) {\n\t\tshCoeffPerSplat = 45;\n\t} else if (sphericalHarmonicsDegree > 3) {\n\t\tthrow new Error(\"getSphericalHarmonicsComponentCountForDegree() -> Invalid spherical harmonics degree\");\n\t}\n\treturn shCoeffPerSplat;\n};\n\nexport const nativePromiseWithExtractedComponents = () => {\n\tlet resolver;\n\tlet rejecter;\n\tconst promise = new Promise((resolve, reject) => {\n\t\tresolver = resolve;\n\t\trejecter = reject;\n\t});\n\treturn {\n\t\tpromise: promise,\n\t\tresolve: resolver,\n\t\treject: rejecter,\n\t};\n};\n\nexport const abortablePromiseWithExtractedComponents = (abortHandler) => {\n\tlet resolver;\n\tlet rejecter;\n\tif (!abortHandler) {\n\t\tabortHandler = () => {};\n\t}\n\tconst promise = new AbortablePromise((resolve, reject) => {\n\t\tresolver = resolve;\n\t\trejecter = reject;\n\t}, abortHandler);\n\treturn {\n\t\tpromise: promise,\n\t\tresolve: resolver,\n\t\treject: rejecter,\n\t};\n};\n\nclass Semver {\n\tconstructor(major, minor, patch) {\n\t\tthis.major = major;\n\t\tthis.minor = minor;\n\t\tthis.patch = patch;\n\t}\n\n\ttoString() {\n\t\treturn `${this.major}_${this.minor}_${this.patch}`;\n\t}\n}\n\nexport function isIOS() {\n\tconst ua = navigator.userAgent;\n\treturn ua.indexOf(\"iPhone\") > 0 || ua.indexOf(\"iPad\") > 0;\n}\n\nexport function getIOSSemever() {\n\tif (isIOS()) {\n\t\tconst extract = navigator.userAgent.match(/OS (\\d+)_(\\d+)_?(\\d+)?/);\n\t\treturn new Semver(\n\t\t\tparseInt(extract[1] || 0, 10),\n\t\t\tparseInt(extract[2] || 0, 10),\n\t\t\tparseInt(extract[3] || 0, 10),\n\t\t);\n\t} else {\n\t\treturn null; // or [0,0,0]\n\t}\n}\n","import { getSphericalHarmonicsComponentCountForDegree } from \"../Util.js\";\n\nconst BASE_COMPONENT_COUNT = 14;\n\nexport class UncompressedSplatArray {\n\tstatic OFFSET = {\n\t\tX: 0,\n\t\tY: 1,\n\t\tZ: 2,\n\t\tSCALE0: 3,\n\t\tSCALE1: 4,\n\t\tSCALE2: 5,\n\t\tROTATION0: 6,\n\t\tROTATION1: 7,\n\t\tROTATION2: 8,\n\t\tROTATION3: 9,\n\t\tFDC0: 10,\n\t\tFDC1: 11,\n\t\tFDC2: 12,\n\t\tOPACITY: 13,\n\t\tFRC0: 14,\n\t\tFRC1: 15,\n\t\tFRC2: 16,\n\t\tFRC3: 17,\n\t\tFRC4: 18,\n\t\tFRC5: 19,\n\t\tFRC6: 20,\n\t\tFRC7: 21,\n\t\tFRC8: 22,\n\t\tFRC9: 23,\n\t\tFRC10: 24,\n\t\tFRC11: 25,\n\t\tFRC12: 26,\n\t\tFRC13: 27,\n\t\tFRC14: 28,\n\t\tFRC15: 29,\n\t\tFRC16: 30,\n\t\tFRC17: 31,\n\t\tFRC18: 32,\n\t\tFRC19: 33,\n\t\tFRC20: 34,\n\t\tFRC21: 35,\n\t\tFRC22: 36,\n\t\tFRC23: 37,\n\t};\n\n\tconstructor(sphericalHarmonicsDegree = 0) {\n\t\tthis.sphericalHarmonicsDegree = sphericalHarmonicsDegree;\n\t\tthis.sphericalHarmonicsCount = getSphericalHarmonicsComponentCountForDegree(\n\t\t\tthis.sphericalHarmonicsDegree,\n\t\t);\n\t\tthis.componentCount = this.sphericalHarmonicsCount + BASE_COMPONENT_COUNT;\n\t\tthis.defaultSphericalHarmonics = new Array(this.sphericalHarmonicsCount).fill(0);\n\t\tthis.splats = [];\n\t\tthis.splatCount = 0;\n\t}\n\n\tstatic createSplat(sphericalHarmonicsDegree = 0) {\n\t\tconst baseSplat = [0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0];\n\t\tlet shEntries = getSphericalHarmonicsComponentCountForDegree(sphericalHarmonicsDegree);\n\t\tfor (let i = 0; i < shEntries; i++) baseSplat.push(0);\n\t\treturn baseSplat;\n\t}\n\n\taddSplat(splat) {\n\t\tthis.splats.push(splat);\n\t\tthis.splatCount++;\n\t}\n\n\tgetSplat(index) {\n\t\treturn this.splats[index];\n\t}\n\n\taddDefaultSplat() {\n\t\tconst newSplat = UncompressedSplatArray.createSplat(this.sphericalHarmonicsDegree);\n\t\tthis.addSplat(newSplat);\n\t\treturn newSplat;\n\t}\n\n\taddSplatFromComonents(x, y, z, scale0, scale1, scale2, rot0, rot1, rot2, rot3, r, g, b, opacity, ...rest) {\n\t\tconst newSplat = [\n\t\t\tx,\n\t\t\ty,\n\t\t\tz,\n\t\t\tscale0,\n\t\t\tscale1,\n\t\t\tscale2,\n\t\t\trot0,\n\t\t\trot1,\n\t\t\trot2,\n\t\t\trot3,\n\t\t\tr,\n\t\t\tg,\n\t\t\tb,\n\t\t\topacity,\n\t\t\t...this.defaultSphericalHarmonics,\n\t\t];\n\t\tfor (let i = 0; i < rest.length && i < this.sphericalHarmonicsCount; i++) {\n\t\t\tnewSplat[i] = rest[i];\n\t\t}\n\t\tthis.addSplat(newSplat);\n\t\treturn newSplat;\n\t}\n\n\taddSplatFromArray(src, srcIndex) {\n\t\tconst srcSplat = src.splats[srcIndex];\n\t\tconst newSplat = UncompressedSplatArray.createSplat(this.sphericalHarmonicsDegree);\n\t\tfor (let i = 0; i < this.componentCount && i < srcSplat.length; i++) {\n\t\t\tnewSplat[i] = srcSplat[i];\n\t\t}\n\t\tthis.addSplat(newSplat);\n\t}\n}\n","export class Constants {\n\tstatic DefaultSplatSortDistanceMapPrecision = 16;\n\tstatic MemoryPageSize = 65536;\n\tstatic BytesPerFloat = 4;\n\tstatic BytesPerInt = 4;\n\tstatic MaxScenes = 32;\n\tstatic ProgressiveLoadSectionSize = 262144;\n\tstatic ProgressiveLoadSectionDelayDuration = 15;\n\tstatic SphericalHarmonics8BitCompressionRange = 3;\n}\n","import * as THREE from \"three\";\nimport { UncompressedSplatArray } from \"./UncompressedSplatArray.js\";\nimport { clamp, getSphericalHarmonicsComponentCountForDegree } from \"../Util.js\";\nimport { Constants } from \"../Constants.js\";\n\nconst DefaultSphericalHarmonics8BitCompressionRange = Constants.SphericalHarmonics8BitCompressionRange;\nconst DefaultSphericalHarmonics8BitCompressionHalfRange = DefaultSphericalHarmonics8BitCompressionRange / 2.0;\n\nconst toHalfFloat = THREE.DataUtils.toHalfFloat.bind(THREE.DataUtils);\nconst fromHalfFloat = THREE.DataUtils.fromHalfFloat.bind(THREE.DataUtils);\n\nconst toUncompressedFloat = (f, compressionLevel, isSH = false, range8BitMin, range8BitMax) => {\n\tif (compressionLevel === 0) {\n\t\treturn f;\n\t} else if (compressionLevel === 1 || (compressionLevel === 2 && !isSH)) {\n\t\treturn THREE.DataUtils.fromHalfFloat(f);\n\t} else if (compressionLevel === 2) {\n\t\treturn fromUint8(f, range8BitMin, range8BitMax);\n\t}\n};\n\nconst toUint8 = (v, rangeMin, rangeMax) => {\n\tv = clamp(v, rangeMin, rangeMax);\n\tconst range = rangeMax - rangeMin;\n\treturn clamp(Math.floor(((v - rangeMin) / range) * 255), 0, 255);\n};\n\nconst fromUint8 = (v, rangeMin, rangeMax) => {\n\tconst range = rangeMax - rangeMin;\n\treturn (v / 255) * range + rangeMin;\n};\n\nconst fromHalfFloatToUint8 = (v, rangeMin, rangeMax) => {\n\treturn toUint8(fromHalfFloat(v, rangeMin, rangeMax));\n};\n\nconst fromUint8ToHalfFloat = (v, rangeMin, rangeMax) => {\n\treturn toHalfFloat(fromUint8(v, rangeMin, rangeMax));\n};\n\nconst dataViewFloatForCompressionLevel = (dataView, floatIndex, compressionLevel, isSH = false) => {\n\tif (compressionLevel === 0) {\n\t\treturn dataView.getFloat32(floatIndex * 4, true);\n\t} else if (compressionLevel === 1 || (compressionLevel === 2 && !isSH)) {\n\t\treturn dataView.getUint16(floatIndex * 2, true);\n\t} else {\n\t\treturn dataView.getUint8(floatIndex, true);\n\t}\n};\n\nconst convertBetweenCompressionLevels = (function() {\n\tconst noop = (v) => v;\n\n\treturn function(val, fromLevel, toLevel, isSH = false) {\n\t\tif (fromLevel === toLevel) return val;\n\t\tlet outputConversionFunc = noop;\n\n\t\tif (fromLevel === 2 && isSH) {\n\t\t\tif (toLevel === 1) outputConversionFunc = fromUint8ToHalfFloat;\n\t\t\telse if (toLevel == 0) {\n\t\t\t\toutputConversionFunc = fromUint8;\n\t\t\t}\n\t\t} else if (fromLevel === 2 || fromLevel === 1) {\n\t\t\tif (toLevel === 0) outputConversionFunc = fromHalfFloat;\n\t\t\telse if (toLevel == 2) {\n\t\t\t\tif (!isSH) outputConversionFunc = noop;\n\t\t\t\telse outputConversionFunc = fromHalfFloatToUint8;\n\t\t\t}\n\t\t} else if (fromLevel === 0) {\n\t\t\tif (toLevel === 1) outputConversionFunc = toHalfFloat;\n\t\t\telse if (toLevel == 2) {\n\t\t\t\tif (!isSH) outputConversionFunc = toHalfFloat;\n\t\t\t\telse outputConversionFunc = toUint8;\n\t\t\t}\n\t\t}\n\n\t\treturn outputConversionFunc(val);\n\t};\n})();\n\nconst copyBetweenBuffers = (srcBuffer, srcOffset, destBuffer, destOffset, byteCount = 0) => {\n\tconst src = new Uint8Array(srcBuffer, srcOffset);\n\tconst dest = new Uint8Array(destBuffer, destOffset);\n\tfor (let i = 0; i < byteCount; i++) {\n\t\tdest[i] = src[i];\n\t}\n};\n\n/**\n * SplatBuffer: Container for splat data from a single scene/file and capable of (mediocre) compression.\n */\nexport class SplatBuffer {\n\tstatic CurrentMajorVersion = 0;\n\tstatic CurrentMinorVersion = 1;\n\n\tstatic CenterComponentCount = 3;\n\tstatic ScaleComponentCount = 3;\n\tstatic RotationComponentCount = 4;\n\tstatic ColorComponentCount = 4;\n\tstatic CovarianceComponentCount = 6;\n\n\tstatic SplatScaleOffsetFloat = 3;\n\tstatic SplatRotationOffsetFloat = 6;\n\n\tstatic CompressionLevels = {\n\t\t0: {\n\t\t\tBytesPerCenter: 12,\n\t\t\tBytesPerScale: 12,\n\t\t\tBytesPerRotation: 16,\n\t\t\tBytesPerColor: 4,\n\t\t\tScaleOffsetBytes: 12,\n\t\t\tRotationffsetBytes: 24,\n\t\t\tColorOffsetBytes: 40,\n\t\t\tSphericalHarmonicsOffsetBytes: 44,\n\t\t\tScaleRange: 1,\n\t\t\tBytesPerSphericalHarmonicsComponent: 4,\n\t\t\tSphericalHarmonicsOffsetFloat: 11,\n\t\t\tSphericalHarmonicsDegrees: {\n\t\t\t\t0: { BytesPerSplat: 44 },\n\t\t\t\t1: { BytesPerSplat: 80 },\n\t\t\t\t2: { BytesPerSplat: 140 },\n\t\t\t},\n\t\t},\n\t\t1: {\n\t\t\tBytesPerCenter: 6,\n\t\t\tBytesPerScale: 6,\n\t\t\tBytesPerRotation: 8,\n\t\t\tBytesPerColor: 4,\n\t\t\tScaleOffsetBytes: 6,\n\t\t\tRotationffsetBytes: 12,\n\t\t\tColorOffsetBytes: 20,\n\t\t\tSphericalHarmonicsOffsetBytes: 24,\n\t\t\tScaleRange: 32767,\n\t\t\tBytesPerSphericalHarmonicsComponent: 2,\n\t\t\tSphericalHarmonicsOffsetFloat: 12,\n\t\t\tSphericalHarmonicsDegrees: {\n\t\t\t\t0: { BytesPerSplat: 24 },\n\t\t\t\t1: { BytesPerSplat: 42 },\n\t\t\t\t2: { BytesPerSplat: 72 },\n\t\t\t},\n\t\t},\n\t\t2: {\n\t\t\tBytesPerCenter: 6,\n\t\t\tBytesPerScale: 6,\n\t\t\tBytesPerRotation: 8,\n\t\t\tBytesPerColor: 4,\n\t\t\tScaleOffsetBytes: 6,\n\t\t\tRotationffsetBytes: 12,\n\t\t\tColorOffsetBytes: 20,\n\t\t\tSphericalHarmonicsOffsetBytes: 24,\n\t\t\tScaleRange: 32767,\n\t\t\tBytesPerSphericalHarmonicsComponent: 1,\n\t\t\tSphericalHarmonicsOffsetFloat: 12,\n\t\t\tSphericalHarmonicsDegrees: {\n\t\t\t\t0: { BytesPerSplat: 24 },\n\t\t\t\t1: { BytesPerSplat: 33 },\n\t\t\t\t2: { BytesPerSplat: 48 },\n\t\t\t},\n\t\t},\n\t};\n\n\tstatic CovarianceSizeFloats = 6;\n\n\tstatic HeaderSizeBytes = 4096;\n\tstatic SectionHeaderSizeBytes = 1024;\n\n\tstatic BucketStorageSizeBytes = 12;\n\tstatic BucketStorageSizeFloats = 3;\n\n\tstatic BucketBlockSize = 5.0;\n\tstatic BucketSize = 256;\n\n\tconstructor(bufferData, secLoadedCountsToMax = true) {\n\t\tthis.constructFromBuffer(bufferData, secLoadedCountsToMax);\n\t}\n\n\tgetSplatCount() {\n\t\treturn this.splatCount;\n\t}\n\n\tgetMaxSplatCount() {\n\t\treturn this.maxSplatCount;\n\t}\n\n\tgetMinSphericalHarmonicsDegree() {\n\t\tlet minSphericalHarmonicsDegree = 0;\n\t\tfor (let i = 0; i < this.sections.length; i++) {\n\t\t\tconst section = this.sections[i];\n\t\t\tif (i === 0 || section.sphericalHarmonicsDegree < minSphericalHarmonicsDegree) {\n\t\t\t\tminSphericalHarmonicsDegree = section.sphericalHarmonicsDegree;\n\t\t\t}\n\t\t}\n\t\treturn minSphericalHarmonicsDegree;\n\t}\n\n\tgetBucketIndex(section, localSplatIndex) {\n\t\tlet bucketIndex;\n\t\tconst maxSplatIndexInFullBuckets = section.fullBucketCount * section.bucketSize;\n\t\tif (localSplatIndex < maxSplatIndexInFullBuckets) {\n\t\t\tbucketIndex = Math.floor(localSplatIndex / section.bucketSize);\n\t\t} else {\n\t\t\tlet bucketSplatIndex = maxSplatIndexInFullBuckets;\n\t\t\tbucketIndex = section.fullBucketCount;\n\t\t\tlet partiallyFullBucketIndex = 0;\n\t\t\twhile (bucketSplatIndex < section.splatCount) {\n\t\t\t\tlet currentPartiallyFilledBucketSize = section.partiallyFilledBucketLengths[partiallyFullBucketIndex];\n\t\t\t\tif (\n\t\t\t\t\tlocalSplatIndex >= bucketSplatIndex &&\n\t\t\t\t\tlocalSplatIndex < bucketSplatIndex + currentPartiallyFilledBucketSize\n\t\t\t\t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tbucketSplatIndex += currentPartiallyFilledBucketSize;\n\t\t\t\tbucketIndex++;\n\t\t\t\tpartiallyFullBucketIndex++;\n\t\t\t}\n\t\t}\n\t\treturn bucketIndex;\n\t}\n\n\tgetSplatCenter(globalSplatIndex, outCenter, transform) {\n\t\tconst sectionIndex = this.globalSplatIndexToSectionMap[globalSplatIndex];\n\t\tconst section = this.sections[sectionIndex];\n\t\tconst localSplatIndex = globalSplatIndex - section.splatCountOffset;\n\n\t\tconst srcSplatCentersBase = section.bytesPerSplat * localSplatIndex;\n\t\tconst dataView = new DataView(this.bufferData, section.dataBase + srcSplatCentersBase);\n\n\t\tconst x = dataViewFloatForCompressionLevel(dataView, 0, this.compressionLevel);\n\t\tconst y = dataViewFloatForCompressionLevel(dataView, 1, this.compressionLevel);\n\t\tconst z = dataViewFloatForCompressionLevel(dataView, 2, this.compressionLevel);\n\t\tif (this.compressionLevel >= 1) {\n\t\t\tconst bucketIndex = this.getBucketIndex(section, localSplatIndex);\n\t\t\tconst bucketBase = bucketIndex * SplatBuffer.BucketStorageSizeFloats;\n\t\t\tconst sf = section.compressionScaleFactor;\n\t\t\tconst sr = section.compressionScaleRange;\n\t\t\toutCenter.x = (x - sr) * sf + section.bucketArray[bucketBase];\n\t\t\toutCenter.y = (y - sr) * sf + section.bucketArray[bucketBase + 1];\n\t\t\toutCenter.z = (z - sr) * sf + section.bucketArray[bucketBase + 2];\n\t\t} else {\n\t\t\toutCenter.x = x;\n\t\t\toutCenter.y = y;\n\t\t\toutCenter.z = z;\n\t\t}\n\t\tif (transform) outCenter.applyMatrix4(transform);\n\t}\n\n\tgetSplatScaleAndRotation = (function() {\n\t\tconst scaleMatrix = new THREE.Matrix4();\n\t\tconst rotationMatrix = new THREE.Matrix4();\n\t\tconst tempMatrix = new THREE.Matrix4();\n\t\tconst tempPosition = new THREE.Vector3();\n\t\tconst scale = new THREE.Vector3();\n\t\tconst rotation = new THREE.Quaternion();\n\n\t\treturn function(index, outScale, outRotation, transform, scaleOverride) {\n\t\t\tconst sectionIndex = this.globalSplatIndexToSectionMap[index];\n\t\t\tconst section = this.sections[sectionIndex];\n\t\t\tconst localSplatIndex = index - section.splatCountOffset;\n\n\t\t\tconst srcSplatScalesBase =\n\t\t\t\tsection.bytesPerSplat * localSplatIndex +\n\t\t\t\tSplatBuffer.CompressionLevels[this.compressionLevel].ScaleOffsetBytes;\n\n\t\t\tconst dataView = new DataView(this.bufferData, section.dataBase + srcSplatScalesBase);\n\n\t\t\tscale.set(\n\t\t\t\ttoUncompressedFloat(\n\t\t\t\t\tdataViewFloatForCompressionLevel(dataView, 0, this.compressionLevel),\n\t\t\t\t\tthis.compressionLevel,\n\t\t\t\t),\n\t\t\t\ttoUncompressedFloat(\n\t\t\t\t\tdataViewFloatForCompressionLevel(dataView, 1, this.compressionLevel),\n\t\t\t\t\tthis.compressionLevel,\n\t\t\t\t),\n\t\t\t\ttoUncompressedFloat(\n\t\t\t\t\tdataViewFloatForCompressionLevel(dataView, 2, this.compressionLevel),\n\t\t\t\t\tthis.compressionLevel,\n\t\t\t\t),\n\t\t\t);\n\t\t\tif (scaleOverride) {\n\t\t\t\tif (scaleOverride.x !== undefined) scale.x = scaleOverride.x;\n\t\t\t\tif (scaleOverride.y !== undefined) scale.y = scaleOverride.y;\n\t\t\t\tif (scaleOverride.z !== undefined) scale.z = scaleOverride.z;\n\t\t\t}\n\n\t\t\trotation.set(\n\t\t\t\ttoUncompressedFloat(\n\t\t\t\t\tdataViewFloatForCompressionLevel(dataView, 4, this.compressionLevel),\n\t\t\t\t\tthis.compressionLevel,\n\t\t\t\t),\n\t\t\t\ttoUncompressedFloat(\n\t\t\t\t\tdataViewFloatForCompressionLevel(dataView, 5, this.compressionLevel),\n\t\t\t\t\tthis.compressionLevel,\n\t\t\t\t),\n\t\t\t\ttoUncompressedFloat(\n\t\t\t\t\tdataViewFloatForCompressionLevel(dataView, 6, this.compressionLevel),\n\t\t\t\t\tthis.compressionLevel,\n\t\t\t\t),\n\t\t\t\ttoUncompressedFloat(\n\t\t\t\t\tdataViewFloatForCompressionLevel(dataView, 3, this.compressionLevel),\n\t\t\t\t\tthis.compressionLevel,\n\t\t\t\t),\n\t\t\t);\n\n\t\t\tif (transform) {\n\t\t\t\tscaleMatrix.makeScale(scale.x, scale.y, scale.z);\n\t\t\t\trotationMatrix.makeRotationFromQuaternion(rotation);\n\t\t\t\ttempMatrix.copy(scaleMatrix).multiply(rotationMatrix).multiply(transform);\n\t\t\t\ttempMatrix.decompose(tempPosition, outRotation, outScale);\n\t\t\t} else {\n\t\t\t\toutScale.copy(scale);\n\t\t\t\toutRotation.copy(rotation);\n\t\t\t}\n\t\t};\n\t})();\n\n\tgetSplatColor(globalSplatIndex, outColor) {\n\t\tconst sectionIndex = this.globalSplatIndexToSectionMap[globalSplatIndex];\n\t\tconst section = this.sections[sectionIndex];\n\t\tconst localSplatIndex = globalSplatIndex - section.splatCountOffset;\n\n\t\tconst srcSplatColorsBase =\n\t\t\tsection.bytesPerSplat * localSplatIndex +\n\t\t\tSplatBuffer.CompressionLevels[this.compressionLevel].ColorOffsetBytes;\n\t\tconst splatColorsArray = new Uint8Array(this.bufferData, section.dataBase + srcSplatColorsBase, 4);\n\n\t\toutColor.set(splatColorsArray[0], splatColorsArray[1], splatColorsArray[2], splatColorsArray[3]);\n\t}\n\n\tfillSplatCenterArray(outCenterArray, transform, srcFrom, srcTo, destFrom) {\n\t\tconst splatCount = this.splatCount;\n\n\t\tsrcFrom = srcFrom || 0;\n\t\tsrcTo = srcTo || splatCount - 1;\n\t\tif (destFrom === undefined) destFrom = srcFrom;\n\n\t\tconst center = new THREE.Vector3();\n\t\tfor (let i = srcFrom; i <= srcTo; i++) {\n\t\t\tconst sectionIndex = this.globalSplatIndexToSectionMap[i];\n\t\t\tconst section = this.sections[sectionIndex];\n\t\t\tconst localSplatIndex = i - section.splatCountOffset;\n\t\t\tconst centerDestBase = (i - srcFrom + destFrom) * SplatBuffer.CenterComponentCount;\n\n\t\t\tconst srcSplatCentersBase = section.bytesPerSplat * localSplatIndex;\n\t\t\tconst dataView = new DataView(this.bufferData, section.dataBase + srcSplatCentersBase);\n\n\t\t\tconst x = dataViewFloatForCompressionLevel(dataView, 0, this.compressionLevel);\n\t\t\tconst y = dataViewFloatForCompressionLevel(dataView, 1, this.compressionLevel);\n\t\t\tconst z = dataViewFloatForCompressionLevel(dataView, 2, this.compressionLevel);\n\t\t\tif (this.compressionLevel >= 1) {\n\t\t\t\tconst bucketIndex = this.getBucketIndex(section, localSplatIndex);\n\t\t\t\tconst bucketBase = bucketIndex * SplatBuffer.BucketStorageSizeFloats;\n\t\t\t\tconst sf = section.compressionScaleFactor;\n\t\t\t\tconst sr = section.compressionScaleRange;\n\t\t\t\tcenter.x = (x - sr) * sf + section.bucketArray[bucketBase];\n\t\t\t\tcenter.y = (y - sr) * sf + section.bucketArray[bucketBase + 1];\n\t\t\t\tcenter.z = (z - sr) * sf + section.bucketArray[bucketBase + 2];\n\t\t\t} else {\n\t\t\t\tcenter.x = x;\n\t\t\t\tcenter.y = y;\n\t\t\t\tcenter.z = z;\n\t\t\t}\n\t\t\tif (transform) {\n\t\t\t\tcenter.applyMatrix4(transform);\n\t\t\t}\n\t\t\toutCenterArray[centerDestBase] = center.x;\n\t\t\toutCenterArray[centerDestBase + 1] = center.y;\n\t\t\toutCenterArray[centerDestBase + 2] = center.z;\n\t\t}\n\t}\n\n\tfillSplatScaleRotationArray = (function() {\n\t\tconst scaleMatrix = new THREE.Matrix4();\n\t\tconst rotationMatrix = new THREE.Matrix4();\n\t\tconst tempMatrix = new THREE.Matrix4();\n\t\tconst scale = new THREE.Vector3();\n\t\tconst rotation = new THREE.Quaternion();\n\t\tconst tempPosition = new THREE.Vector3();\n\n\t\tconst ensurePositiveW = (quaternion) => {\n\t\t\tconst flip = quaternion.w < 0 ? -1 : 1;\n\t\t\tquaternion.x *= flip;\n\t\t\tquaternion.y *= flip;\n\t\t\tquaternion.z *= flip;\n\t\t\tquaternion.w *= flip;\n\t\t};\n\n\t\treturn function(\n\t\t\toutScaleArray,\n\t\t\toutRotationArray,\n\t\t\ttransform,\n\t\t\tsrcFrom,\n\t\t\tsrcTo,\n\t\t\tdestFrom,\n\t\t\tdesiredOutputCompressionLevel,\n\t\t\tscaleOverride,\n\t\t) {\n\t\t\tconst splatCount = this.splatCount;\n\n\t\t\tsrcFrom = srcFrom || 0;\n\t\t\tsrcTo = srcTo || splatCount - 1;\n\t\t\tif (destFrom === undefined) destFrom = srcFrom;\n\n\t\t\tconst outputConversion = (value, srcCompressionLevel) => {\n\t\t\t\tif (srcCompressionLevel === undefined) srcCompressionLevel = this.compressionLevel;\n\t\t\t\treturn convertBetweenCompressionLevels(value, srcCompressionLevel, desiredOutputCompressionLevel);\n\t\t\t};\n\n\t\t\tfor (let i = srcFrom; i <= srcTo; i++) {\n\t\t\t\tconst sectionIndex = this.globalSplatIndexToSectionMap[i];\n\t\t\t\tconst section = this.sections[sectionIndex];\n\t\t\t\tconst localSplatIndex = i - section.splatCountOffset;\n\n\t\t\t\tconst srcSplatScalesBase =\n\t\t\t\t\tsection.bytesPerSplat * localSplatIndex +\n\t\t\t\t\tSplatBuffer.CompressionLevels[this.compressionLevel].ScaleOffsetBytes;\n\n\t\t\t\tconst scaleDestBase = (i - srcFrom + destFrom) * SplatBuffer.ScaleComponentCount;\n\t\t\t\tconst rotationDestBase = (i - srcFrom + destFrom) * SplatBuffer.RotationComponentCount;\n\t\t\t\tconst dataView = new DataView(this.bufferData, section.dataBase + srcSplatScalesBase);\n\n\t\t\t\tconst srcScaleX =\n\t\t\t\t\tscaleOverride && scaleOverride.x !== undefined ?\n\t\t\t\t\t\tscaleOverride.x :\n\t\t\t\t\t\tdataViewFloatForCompressionLevel(dataView, 0, this.compressionLevel);\n\t\t\t\tconst srcScaleY =\n\t\t\t\t\tscaleOverride && scaleOverride.y !== undefined ?\n\t\t\t\t\t\tscaleOverride.y :\n\t\t\t\t\t\tdataViewFloatForCompressionLevel(dataView, 1, this.compressionLevel);\n\t\t\t\tconst srcScaleZ =\n\t\t\t\t\tscaleOverride && scaleOverride.z !== undefined ?\n\t\t\t\t\t\tscaleOverride.z :\n\t\t\t\t\t\tdataViewFloatForCompressionLevel(dataView, 2, this.compressionLevel);\n\n\t\t\t\tconst srcRotationW = dataViewFloatForCompressionLevel(dataView, 3, this.compressionLevel);\n\t\t\t\tconst srcRotationX = dataViewFloatForCompressionLevel(dataView, 4, this.compressionLevel);\n\t\t\t\tconst srcRotationY = dataViewFloatForCompressionLevel(dataView, 5, this.compressionLevel);\n\t\t\t\tconst srcRotationZ = dataViewFloatForCompressionLevel(dataView, 6, this.compressionLevel);\n\n\t\t\t\tscale.set(\n\t\t\t\t\ttoUncompressedFloat(srcScaleX, this.compressionLevel),\n\t\t\t\t\ttoUncompressedFloat(srcScaleY, this.compressionLevel),\n\t\t\t\t\ttoUncompressedFloat(srcScaleZ, this.compressionLevel),\n\t\t\t\t);\n\n\t\t\t\trotation\n\t\t\t\t\t.set(\n\t\t\t\t\t\ttoUncompressedFloat(srcRotationX, this.compressionLevel),\n\t\t\t\t\t\ttoUncompressedFloat(srcRotationY, this.compressionLevel),\n\t\t\t\t\t\ttoUncompressedFloat(srcRotationZ, this.compressionLevel),\n\t\t\t\t\t\ttoUncompressedFloat(srcRotationW, this.compressionLevel),\n\t\t\t\t\t)\n\t\t\t\t\t.normalize();\n\n\t\t\t\tif (transform) {\n\t\t\t\t\ttempPosition.set(0, 0, 0);\n\t\t\t\t\tscaleMatrix.makeScale(scale.x, scale.y, scale.z);\n\t\t\t\t\trotationMatrix.makeRotationFromQuaternion(rotation);\n\t\t\t\t\ttempMatrix.identity().premultiply(scaleMatrix).premultiply(rotationMatrix);\n\t\t\t\t\ttempMatrix.premultiply(transform);\n\t\t\t\t\ttempMatrix.decompose(tempPosition, rotation, scale);\n\t\t\t\t\trotation.normalize();\n\t\t\t\t}\n\n\t\t\t\tensurePositiveW(rotation);\n\n\t\t\t\tif (outScaleArray) {\n\t\t\t\t\toutScaleArray[scaleDestBase] = outputConversion(scale.x, 0);\n\t\t\t\t\toutScaleArray[scaleDestBase + 1] = outputConversion(scale.y, 0);\n\t\t\t\t\toutScaleArray[scaleDestBase + 2] = outputConversion(scale.z, 0);\n\t\t\t\t}\n\n\t\t\t\tif (outRotationArray) {\n\t\t\t\t\toutRotationArray[rotationDestBase] = outputConversion(rotation.x, 0);\n\t\t\t\t\toutRotationArray[rotationDestBase + 1] = outputConversion(rotation.y, 0);\n\t\t\t\t\toutRotationArray[rotationDestBase + 2] = outputConversion(rotation.z, 0);\n\t\t\t\t\toutRotationArray[rotationDestBase + 3] = outputConversion(rotation.w, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t})();\n\n\tstatic computeCovariance = (function() {\n\t\tconst tempMatrix4 = new THREE.Matrix4();\n\t\tconst scaleMatrix = new THREE.Matrix3();\n\t\tconst rotationMatrix = new THREE.Matrix3();\n\t\tconst covarianceMatrix = new THREE.Matrix3();\n\t\tconst transformedCovariance = new THREE.Matrix3();\n\t\tconst transform3x3 = new THREE.Matrix3();\n\t\tconst transform3x3Transpose = new THREE.Matrix3();\n\n\t\treturn function(\n\t\t\tscale,\n\t\t\trotation,\n\t\t\ttransform,\n\t\t\toutCovariance,\n\t\t\toutOffset = 0,\n\t\t\tdesiredOutputCompressionLevel,\n\t\t) {\n\t\t\ttempMatrix4.makeScale(scale.x, scale.y, scale.z);\n\t\t\tscaleMatrix.setFromMatrix4(tempMatrix4);\n\n\t\t\ttempMatrix4.makeRotationFromQuaternion(rotation);\n\t\t\trotationMatrix.setFromMatrix4(tempMatrix4);\n\n\t\t\tcovarianceMatrix.copy(rotationMatrix).multiply(scaleMatrix);\n\t\t\ttransformedCovariance.copy(covarianceMatrix).transpose().premultiply(covarianceMatrix);\n\n\t\t\tif (transform) {\n\t\t\t\ttransform3x3.setFromMatrix4(transform);\n\t\t\t\ttransform3x3Transpose.copy(transform3x3).transpose();\n\t\t\t\ttransformedCovariance.multiply(transform3x3Transpose);\n\t\t\t\ttransformedCovariance.premultiply(transform3x3);\n\t\t\t}\n\n\t\t\tif (desiredOutputCompressionLevel >= 1) {\n\t\t\t\toutCovariance[outOffset] = toHalfFloat(transformedCovariance.elements[0]);\n\t\t\t\toutCovariance[outOffset + 1] = toHalfFloat(transformedCovariance.elements[3]);\n\t\t\t\toutCovariance[outOffset + 2] = toHalfFloat(transformedCovariance.elements[6]);\n\t\t\t\toutCovariance[outOffset + 3] = toHalfFloat(transformedCovariance.elements[4]);\n\t\t\t\toutCovariance[outOffset + 4] = toHalfFloat(transformedCovariance.elements[7]);\n\t\t\t\toutCovariance[outOffset + 5] = toHalfFloat(transformedCovariance.elements[8]);\n\t\t\t} else {\n\t\t\t\toutCovariance[outOffset] = transformedCovariance.elements[0];\n\t\t\t\toutCovariance[outOffset + 1] = transformedCovariance.elements[3];\n\t\t\t\toutCovariance[outOffset + 2] = transformedCovariance.elements[6];\n\t\t\t\toutCovariance[outOffset + 3] = transformedCovariance.elements[4];\n\t\t\t\toutCovariance[outOffset + 4] = transformedCovariance.elements[7];\n\t\t\t\toutCovariance[outOffset + 5] = transformedCovariance.elements[8];\n\t\t\t}\n\t\t};\n\t})();\n\n\tfillSplatCovarianceArray(\n\t\tcovarianceArray,\n\t\ttransform,\n\t\tsrcFrom,\n\t\tsrcTo,\n\t\tdestFrom,\n\t\tdesiredOutputCompressionLevel,\n\t) {\n\t\tconst splatCount = this.splatCount;\n\n\t\tconst scale = new THREE.Vector3();\n\t\tconst rotation = new THREE.Quaternion();\n\n\t\tsrcFrom = srcFrom || 0;\n\t\tsrcTo = srcTo || splatCount - 1;\n\t\tif (destFrom === undefined) destFrom = srcFrom;\n\n\t\tfor (let i = srcFrom; i <= srcTo; i++) {\n\t\t\tconst sectionIndex = this.globalSplatIndexToSectionMap[i];\n\t\t\tconst section = this.sections[sectionIndex];\n\t\t\tconst localSplatIndex = i - section.splatCountOffset;\n\n\t\t\tconst covarianceDestBase = (i - srcFrom + destFrom) * SplatBuffer.CovarianceComponentCount;\n\t\t\tconst srcSplatScalesBase =\n\t\t\t\tsection.bytesPerSplat * localSplatIndex +\n\t\t\t\tSplatBuffer.CompressionLevels[this.compressionLevel].ScaleOffsetBytes;\n\n\t\t\tconst dataView = new DataView(this.bufferData, section.dataBase + srcSplatScalesBase);\n\n\t\t\tscale.set(\n\t\t\t\ttoUncompressedFloat(\n\t\t\t\t\tdataViewFloatForCompressionLevel(dataView, 0, this.compressionLevel),\n\t\t\t\t\tthis.compressionLevel,\n\t\t\t\t),\n\t\t\t\ttoUncompressedFloat(\n\t\t\t\t\tdataViewFloatForCompressionLevel(dataView, 1, this.compressionLevel),\n\t\t\t\t\tthis.compressionLevel,\n\t\t\t\t),\n\t\t\t\ttoUncompressedFloat(\n\t\t\t\t\tdataViewFloatForCompressionLevel(dataView, 2, this.compressionLevel),\n\t\t\t\t\tthis.compressionLevel,\n\t\t\t\t),\n\t\t\t);\n\n\t\t\trotation.set(\n\t\t\t\ttoUncompressedFloat(\n\t\t\t\t\tdataViewFloatForCompressionLevel(dataView, 4, this.compressionLevel),\n\t\t\t\t\tthis.compressionLevel,\n\t\t\t\t),\n\t\t\t\ttoUncompressedFloat(\n\t\t\t\t\tdataViewFloatForCompressionLevel(dataView, 5, this.compressionLevel),\n\t\t\t\t\tthis.compressionLevel,\n\t\t\t\t),\n\t\t\t\ttoUncompressedFloat(\n\t\t\t\t\tdataViewFloatForCompressionLevel(dataView, 6, this.compressionLevel),\n\t\t\t\t\tthis.compressionLevel,\n\t\t\t\t),\n\t\t\t\ttoUncompressedFloat(\n\t\t\t\t\tdataViewFloatForCompressionLevel(dataView, 3, this.compressionLevel),\n\t\t\t\t\tthis.compressionLevel,\n\t\t\t\t),\n\t\t\t);\n\n\t\t\tSplatBuffer.computeCovariance(\n\t\t\t\tscale,\n\t\t\t\trotation,\n\t\t\t\ttransform,\n\t\t\t\tcovarianceArray,\n\t\t\t\tcovarianceDestBase,\n\t\t\t\tdesiredOutputCompressionLevel,\n\t\t\t);\n\t\t}\n\t}\n\n\tfillSplatColorArray(outColorArray, minimumAlpha, srcFrom, srcTo, destFrom) {\n\t\tconst splatCount = this.splatCount;\n\n\t\tsrcFrom = srcFrom || 0;\n\t\tsrcTo = srcTo || splatCount - 1;\n\t\tif (destFrom === undefined) destFrom = srcFrom;\n\n\t\tfor (let i = srcFrom; i <= srcTo; i++) {\n\t\t\tconst sectionIndex = this.globalSplatIndexToSectionMap[i];\n\t\t\tconst section = this.sections[sectionIndex];\n\t\t\tconst localSplatIndex = i - section.splatCountOffset;\n\n\t\t\tconst colorDestBase = (i - srcFrom + destFrom) * SplatBuffer.ColorComponentCount;\n\t\t\tconst srcSplatColorsBase =\n\t\t\t\tsection.bytesPerSplat * localSplatIndex +\n\t\t\t\tSplatBuffer.CompressionLevels[this.compressionLevel].ColorOffsetBytes;\n\n\t\t\tconst dataView = new Uint8Array(this.bufferData, section.dataBase + srcSplatColorsBase);\n\n\t\t\tlet alpha = dataView[3];\n\t\t\talpha = alpha >= minimumAlpha ? alpha : 0;\n\n\t\t\toutColorArray[colorDestBase] = dataView[0];\n\t\t\toutColorArray[colorDestBase + 1] = dataView[1];\n\t\t\toutColorArray[colorDestBase + 2] = dataView[2];\n\t\t\toutColorArray[colorDestBase + 3] = alpha;\n\t\t}\n\t}\n\n\tfillSphericalHarmonicsArray = (function() {\n\t\tconst sphericalHarmonicVectors = [];\n\t\tfor (let i = 0; i < 15; i++) {\n\t\t\tsphericalHarmonicVectors[i] = new THREE.Vector3();\n\t\t}\n\n\t\tconst tempMatrix3 = new THREE.Matrix3();\n\t\tconst tempMatrix4 = new THREE.Matrix4();\n\n\t\tconst tempTranslation = new THREE.Vector3();\n\t\tconst tempScale = new THREE.Vector3();\n\t\tconst tempRotation = new THREE.Quaternion();\n\n\t\tconst sh11 = [];\n\t\tconst sh12 = [];\n\t\tconst sh13 = [];\n\n\t\tconst sh21 = [];\n\t\tconst sh22 = [];\n\t\tconst sh23 = [];\n\t\tconst sh24 = [];\n\t\tconst sh25 = [];\n\n\t\tconst shIn1 = [];\n\t\tconst shIn2 = [];\n\t\tconst shIn3 = [];\n\t\tconst shIn4 = [];\n\t\tconst shIn5 = [];\n\n\t\tconst shOut1 = [];\n\t\tconst shOut2 = [];\n\t\tconst shOut3 = [];\n\t\tconst shOut4 = [];\n\t\tconst shOut5 = [];\n\n\t\tconst noop = (v) => v;\n\n\t\tconst set3 = (array, val1, val2, val3) => {\n\t\t\tarray[0] = val1;\n\t\t\tarray[1] = val2;\n\t\t\tarray[2] = val3;\n\t\t};\n\n\t\tconst set3FromArray = (array, srcDestView, stride, srcBase, compressionLevel) => {\n\t\t\tarray[0] = dataViewFloatForCompressionLevel(srcDestView, srcBase, compressionLevel, true);\n\t\t\tarray[1] = dataViewFloatForCompressionLevel(srcDestView, srcBase + stride, compressionLevel, true);\n\t\t\tarray[2] = dataViewFloatForCompressionLevel(\n\t\t\t\tsrcDestView,\n\t\t\t\tsrcBase + stride + stride,\n\t\t\t\tcompressionLevel,\n\t\t\t\ttrue,\n\t\t\t);\n\t\t};\n\n\t\tconst copy3 = (srcArray, destArray) => {\n\t\t\tdestArray[0] = srcArray[0];\n\t\t\tdestArray[1] = srcArray[1];\n\t\t\tdestArray[2] = srcArray[2];\n\t\t};\n\n\t\tconst setOutput3 = (srcArray, destArray, destBase, conversionFunc) => {\n\t\t\tdestArray[destBase] = conversionFunc(srcArray[0]);\n\t\t\tdestArray[destBase + 1] = conversionFunc(srcArray[1]);\n\t\t\tdestArray[destBase + 2] = conversionFunc(srcArray[2]);\n\t\t};\n\n\t\tconst toUncompressedFloatArray3 = (src, dest, compressionLevel, range8BitMin, range8BitMax) => {\n\t\t\tdest[0] = toUncompressedFloat(src[0], compressionLevel, true, range8BitMin, range8BitMax);\n\t\t\tdest[1] = toUncompressedFloat(src[1], compressionLevel, true, range8BitMin, range8BitMax);\n\t\t\tdest[2] = toUncompressedFloat(src[2], compressionLevel, true, range8BitMin, range8BitMax);\n\t\t\treturn dest;\n\t\t};\n\n\t\treturn function(\n\t\t\toutSphericalHarmonicsArray,\n\t\t\toutSphericalHarmonicsDegree,\n\t\t\ttransform,\n\t\t\tsrcFrom,\n\t\t\tsrcTo,\n\t\t\tdestFrom,\n\t\t\tdesiredOutputCompressionLevel,\n\t\t) {\n\t\t\tconst splatCount = this.splatCount;\n\n\t\t\tsrcFrom = srcFrom || 0;\n\t\t\tsrcTo = srcTo || splatCount - 1;\n\t\t\tif (destFrom === undefined) destFrom = srcFrom;\n\n\t\t\tif (transform && outSphericalHarmonicsDegree >= 1) {\n\t\t\t\ttempMatrix4.copy(transform);\n\t\t\t\ttempMatrix4.decompose(tempTranslation, tempRotation, tempScale);\n\t\t\t\ttempRotation.normalize();\n\t\t\t\ttempMatrix4.makeRotationFromQuaternion(tempRotation);\n\t\t\t\ttempMatrix3.setFromMatrix4(tempMatrix4);\n\t\t\t\tset3(sh11, tempMatrix3.elements[4], -tempMatrix3.elements[7], tempMatrix3.elements[1]);\n\t\t\t\tset3(sh12, -tempMatrix3.elements[5], tempMatrix3.elements[8], -tempMatrix3.elements[2]);\n\t\t\t\tset3(sh13, tempMatrix3.elements[3], -tempMatrix3.elements[6], tempMatrix3.elements[0]);\n\t\t\t}\n\n\t\t\tconst localFromHalfFloatToUint8 = (v) => {\n\t\t\t\treturn fromHalfFloatToUint8(v, this.minSphericalHarmonicsCoeff, this.maxSphericalHarmonicsCoeff);\n\t\t\t};\n\n\t\t\tconst localToUint8 = (v) => {\n\t\t\t\treturn toUint8(v, this.minSphericalHarmonicsCoeff, this.maxSphericalHarmonicsCoeff);\n\t\t\t};\n\n\t\t\tfor (let i = srcFrom; i <= srcTo; i++) {\n\t\t\t\tconst sectionIndex = this.globalSplatIndexToSectionMap[i];\n\t\t\t\tconst section = this.sections[sectionIndex];\n\t\t\t\toutSphericalHarmonicsDegree = Math.min(outSphericalHarmonicsDegree, section.sphericalHarmonicsDegree);\n\t\t\t\tconst outSphericalHarmonicsComponentsCount =\n\t\t\t\t\tgetSphericalHarmonicsComponentCountForDegree(outSphericalHarmonicsDegree);\n\n\t\t\t\tconst localSplatIndex = i - section.splatCountOffset;\n\n\t\t\t\tconst srcSplatSHBase =\n\t\t\t\t\tsection.bytesPerSplat * localSplatIndex +\n\t\t\t\t\tSplatBuffer.CompressionLevels[this.compressionLevel].SphericalHarmonicsOffsetBytes;\n\n\t\t\t\tconst dataView = new DataView(this.bufferData, section.dataBase + srcSplatSHBase);\n\n\t\t\t\tconst shDestBase = (i - srcFrom + destFrom) * outSphericalHarmonicsComponentsCount;\n\n\t\t\t\tlet compressionLevelForOutputConversion = transform ? 0 : this.compressionLevel;\n\t\t\t\tlet outputConversionFunc = noop;\n\t\t\t\tif (compressionLevelForOutputConversion !== desiredOutputCompressionLevel) {\n\t\t\t\t\tif (compressionLevelForOutputConversion === 1) {\n\t\t\t\t\t\tif (desiredOutputCompressionLevel === 0) outputConversionFunc = fromHalfFloat;\n\t\t\t\t\t\telse if (desiredOutputCompressionLevel == 2) outputConversionFunc = localFromHalfFloatToUint8;\n\t\t\t\t\t} else if (compressionLevelForOutputConversion === 0) {\n\t\t\t\t\t\tif (desiredOutputCompressionLevel === 1) outputConversionFunc = toHalfFloat;\n\t\t\t\t\t\telse if (desiredOutputCompressionLevel == 2) outputConversionFunc = localToUint8;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst minShCoeff = this.minSphericalHarmonicsCoeff;\n\t\t\t\tconst maxShCoeff = this.maxSphericalHarmonicsCoeff;\n\n\t\t\t\tif (outSphericalHarmonicsDegree >= 1) {\n\t\t\t\t\tset3FromArray(shIn1, dataView, 3, 0, this.compressionLevel);\n\t\t\t\t\tset3FromArray(shIn2, dataView, 3, 1, this.compressionLevel);\n\t\t\t\t\tset3FromArray(shIn3, dataView, 3, 2, this.compressionLevel);\n\n\t\t\t\t\tif (transform) {\n\t\t\t\t\t\ttoUncompressedFloatArray3(shIn1, shIn1, this.compressionLevel, minShCoeff, maxShCoeff);\n\t\t\t\t\t\ttoUncompressedFloatArray3(shIn2, shIn2, this.compressionLevel, minShCoeff, maxShCoeff);\n\t\t\t\t\t\ttoUncompressedFloatArray3(shIn3, shIn3, this.compressionLevel, minShCoeff, maxShCoeff);\n\t\t\t\t\t\tSplatBuffer.rotateSphericalHarmonics3(\n\t\t\t\t\t\t\tshIn1,\n\t\t\t\t\t\t\tshIn2,\n\t\t\t\t\t\t\tshIn3,\n\t\t\t\t\t\t\tsh11,\n\t\t\t\t\t\t\tsh12,\n\t\t\t\t\t\t\tsh13,\n\t\t\t\t\t\t\tshOut1,\n\t\t\t\t\t\t\tshOut2,\n\t\t\t\t\t\t\tshOut3,\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcopy3(shIn1, shOut1);\n\t\t\t\t\t\tcopy3(shIn2, shOut2);\n\t\t\t\t\t\tcopy3(shIn3, shOut3);\n\t\t\t\t\t}\n\n\t\t\t\t\tsetOutput3(shOut1, outSphericalHarmonicsArray, shDestBase, outputConversionFunc);\n\t\t\t\t\tsetOutput3(shOut2, outSphericalHarmonicsArray, shDestBase + 3, outputConversionFunc);\n\t\t\t\t\tsetOutput3(shOut3, outSphericalHarmonicsArray, shDestBase + 6, outputConversionFunc);\n\n\t\t\t\t\tif (outSphericalHarmonicsDegree >= 2) {\n\t\t\t\t\t\tset3FromArray(shIn1, dataView, 5, 9, this.compressionLevel);\n\t\t\t\t\t\tset3FromArray(shIn2, dataView, 5, 10, this.compressionLevel);\n\t\t\t\t\t\tset3FromArray(shIn3, dataView, 5, 11, this.compressionLevel);\n\t\t\t\t\t\tset3FromArray(shIn4, dataView, 5, 12, this.compressionLevel);\n\t\t\t\t\t\tset3FromArray(shIn5, dataView, 5, 13, this.compressionLevel);\n\n\t\t\t\t\t\tif (transform) {\n\t\t\t\t\t\t\ttoUncompressedFloatArray3(shIn1, shIn1, this.compressionLevel, minShCoeff, maxShCoeff);\n\t\t\t\t\t\t\ttoUncompressedFloatArray3(shIn2, shIn2, this.compressionLevel, minShCoeff, maxShCoeff);\n\t\t\t\t\t\t\ttoUncompressedFloatArray3(shIn3, shIn3, this.compressionLevel, minShCoeff, maxShCoeff);\n\t\t\t\t\t\t\ttoUncompressedFloatArray3(shIn4, shIn4, this.compressionLevel, minShCoeff, maxShCoeff);\n\t\t\t\t\t\t\ttoUncompressedFloatArray3(shIn5, shIn5, this.compressionLevel, minShCoeff, maxShCoeff);\n\t\t\t\t\t\t\tSplatBuffer.rotateSphericalHarmonics5(\n\t\t\t\t\t\t\t\tshIn1,\n\t\t\t\t\t\t\t\tshIn2,\n\t\t\t\t\t\t\t\tshIn3,\n\t\t\t\t\t\t\t\tshIn4,\n\t\t\t\t\t\t\t\tshIn5,\n\t\t\t\t\t\t\t\tsh11,\n\t\t\t\t\t\t\t\tsh12,\n\t\t\t\t\t\t\t\tsh13,\n\t\t\t\t\t\t\t\tsh21,\n\t\t\t\t\t\t\t\tsh22,\n\t\t\t\t\t\t\t\tsh23,\n\t\t\t\t\t\t\t\tsh24,\n\t\t\t\t\t\t\t\tsh25,\n\t\t\t\t\t\t\t\tshOut1,\n\t\t\t\t\t\t\t\tshOut2,\n\t\t\t\t\t\t\t\tshOut3,\n\t\t\t\t\t\t\t\tshOut4,\n\t\t\t\t\t\t\t\tshOut5,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcopy3(shIn1, shOut1);\n\t\t\t\t\t\t\tcopy3(shIn2, shOut2);\n\t\t\t\t\t\t\tcopy3(shIn3, shOut3);\n\t\t\t\t\t\t\tcopy3(shIn4, shOut4);\n\t\t\t\t\t\t\tcopy3(shIn5, shOut5);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tsetOutput3(shOut1, outSphericalHarmonicsArray, shDestBase + 9, outputConversionFunc);\n\t\t\t\t\t\tsetOutput3(shOut2, outSphericalHarmonicsArray, shDestBase + 12, outputConversionFunc);\n\t\t\t\t\t\tsetOutput3(shOut3, outSphericalHarmonicsArray, shDestBase + 15, outputConversionFunc);\n\t\t\t\t\t\tsetOutput3(shOut4, outSphericalHarmonicsArray, shDestBase + 18, outputConversionFunc);\n\t\t\t\t\t\tsetOutput3(shOut5, outSphericalHarmonicsArray, shDestBase + 21, outputConversionFunc);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t})();\n\n\tstatic dot3 = (v1, v2, v3, transformRow, outArray) => {\n\t\toutArray[0] = outArray[1] = outArray[2] = 0;\n\t\tconst t0 = transformRow[0];\n\t\tconst t1 = transformRow[1];\n\t\tconst t2 = transformRow[2];\n\t\tSplatBuffer.addInto3(v1[0] * t0, v1[1] * t0, v1[2] * t0, outArray);\n\t\tSplatBuffer.addInto3(v2[0] * t1, v2[1] * t1, v2[2] * t1, outArray);\n\t\tSplatBuffer.addInto3(v3[0] * t2, v3[1] * t2, v3[2] * t2, outArray);\n\t};\n\n\tstatic addInto3 = (val1, val2, val3, destArray) => {\n\t\tdestArray[0] = destArray[0] + val1;\n\t\tdestArray[1] = destArray[1] + val2;\n\t\tdestArray[2] = destArray[2] + val3;\n\t};\n\n\tstatic dot5 = (v1, v2, v3, v4, v5, transformRow, outArray) => {\n\t\toutArray[0] = outArray[1] = outArray[2] = 0;\n\t\tconst t0 = transformRow[0];\n\t\tconst t1 = transformRow[1];\n\t\tconst t2 = transformRow[2];\n\t\tconst t3 = transformRow[3];\n\t\tconst t4 = transformRow[4];\n\t\tSplatBuffer.addInto3(v1[0] * t0, v1[1] * t0, v1[2] * t0, outArray);\n\t\tSplatBuffer.addInto3(v2[0] * t1, v2[1] * t1, v2[2] * t1, outArray);\n\t\tSplatBuffer.addInto3(v3[0] * t2, v3[1] * t2, v3[2] * t2, outArray);\n\t\tSplatBuffer.addInto3(v4[0] * t3, v4[1] * t3, v4[2] * t3, outArray);\n\t\tSplatBuffer.addInto3(v5[0] * t4, v5[1] * t4, v5[2] * t4, outArray);\n\t};\n\n\tstatic rotateSphericalHarmonics3 = (in1, in2, in3, tsh11, tsh12, tsh13, out1, out2, out3) => {\n\t\tSplatBuffer.dot3(in1, in2, in3, tsh11, out1);\n\t\tSplatBuffer.dot3(in1, in2, in3, tsh12, out2);\n\t\tSplatBuffer.dot3(in1, in2, in3, tsh13, out3);\n\t};\n\n\tstatic rotateSphericalHarmonics5 = (\n\t\tin1,\n\t\tin2,\n\t\tin3,\n\t\tin4,\n\t\tin5,\n\t\ttsh11,\n\t\ttsh12,\n\t\ttsh13,\n\t\ttsh21,\n\t\ttsh22,\n\t\ttsh23,\n\t\ttsh24,\n\t\ttsh25,\n\t\tout1,\n\t\tout2,\n\t\tout3,\n\t\tout4,\n\t\tout5,\n\t) => {\n\t\tconst kSqrt0104 = Math.sqrt(1.0 / 4.0);\n\t\tconst kSqrt0304 = Math.sqrt(3.0 / 4.0);\n\t\tconst kSqrt0103 = Math.sqrt(1.0 / 3.0);\n\t\tconst kSqrt0403 = Math.sqrt(4.0 / 3.0);\n\t\tconst kSqrt0112 = Math.sqrt(1.0 / 12.0);\n\n\t\ttsh21[0] =\n\t\t\tkSqrt0104 * (tsh13[2] * tsh11[0] + tsh13[0] * tsh11[2] + (tsh11[2] * tsh13[0] + tsh11[0] * tsh13[2]));\n\t\ttsh21[1] = tsh13[1] * tsh11[0] + tsh11[1] * tsh13[0];\n\t\ttsh21[2] = kSqrt0304 * (tsh13[1] * tsh11[1] + tsh11[1] * tsh13[1]);\n\t\ttsh21[3] = tsh13[1] * tsh11[2] + tsh11[1] * tsh13[2];\n\t\ttsh21[4] =\n\t\t\tkSqrt0104 * (tsh13[2] * tsh11[2] - tsh13[0] * tsh11[0] + (tsh11[2] * tsh13[2] - tsh11[0] * tsh13[0]));\n\t\tSplatBuffer.dot5(in1, in2, in3, in4, in5, tsh21, out1);\n\n\t\ttsh22[0] =\n\t\t\tkSqrt0104 * (tsh12[2] * tsh11[0] + tsh12[0] * tsh11[2] + (tsh11[2] * tsh12[0] + tsh11[0] * tsh12[2]));\n\t\ttsh22[1] = tsh12[1] * tsh11[0] + tsh11[1] * tsh12[0];\n\t\ttsh22[2] = kSqrt0304 * (tsh12[1] * tsh11[1] + tsh11[1] * tsh12[1]);\n\t\ttsh22[3] = tsh12[1] * tsh11[2] + tsh11[1] * tsh12[2];\n\t\ttsh22[4] =\n\t\t\tkSqrt0104 * (tsh12[2] * tsh11[2] - tsh12[0] * tsh11[0] + (tsh11[2] * tsh12[2] - tsh11[0] * tsh12[0]));\n\t\tSplatBuffer.dot5(in1, in2, in3, in4, in5, tsh22, out2);\n\n\t\ttsh23[0] =\n\t\t\tkSqrt0103 * (tsh12[2] * tsh12[0] + tsh12[0] * tsh12[2]) +\n\t\t\t-kSqrt0112 * (tsh13[2] * tsh13[0] + tsh13[0] * tsh13[2] + (tsh11[2] * tsh11[0] + tsh11[0] * tsh11[2]));\n\t\ttsh23[1] = kSqrt0403 * tsh12[1] * tsh12[0] + -kSqrt0103 * (tsh13[1] * tsh13[0] + tsh11[1] * tsh11[0]);\n\t\ttsh23[2] = tsh12[1] * tsh12[1] + -kSqrt0104 * (tsh13[1] * tsh13[1] + tsh11[1] * tsh11[1]);\n\t\ttsh23[3] = kSqrt0403 * tsh12[1] * tsh12[2] + -kSqrt0103 * (tsh13[1] * tsh13[2] + tsh11[1] * tsh11[2]);\n\t\ttsh23[4] =\n\t\t\tkSqrt0103 * (tsh12[2] * tsh12[2] - tsh12[0] * tsh12[0]) +\n\t\t\t-kSqrt0112 * (tsh13[2] * tsh13[2] - tsh13[0] * tsh13[0] + (tsh11[2] * tsh11[2] - tsh11[0] * tsh11[0]));\n\t\tSplatBuffer.dot5(in1, in2, in3, in4, in5, tsh23, out3);\n\n\t\ttsh24[0] =\n\t\t\tkSqrt0104 * (tsh12[2] * tsh13[0] + tsh12[0] * tsh13[2] + (tsh13[2] * tsh12[0] + tsh13[0] * tsh12[2]));\n\t\ttsh24[1] = tsh12[1] * tsh13[0] + tsh13[1] * tsh12[0];\n\t\ttsh24[2] = kSqrt0304 * (tsh12[1] * tsh13[1] + tsh13[1] * tsh12[1]);\n\t\ttsh24[3] = tsh12[1] * tsh13[2] + tsh13[1] * tsh12[2];\n\t\ttsh24[4] =\n\t\t\tkSqrt0104 * (tsh12[2] * tsh13[2] - tsh12[0] * tsh13[0] + (tsh13[2] * tsh12[2] - tsh13[0] * tsh12[0]));\n\t\tSplatBuffer.dot5(in1, in2, in3, in4, in5, tsh24, out4);\n\n\t\ttsh25[0] =\n\t\t\tkSqrt0104 * (tsh13[2] * tsh13[0] + tsh13[0] * tsh13[2] - (tsh11[2] * tsh11[0] + tsh11[0] * tsh11[2]));\n\t\ttsh25[1] = tsh13[1] * tsh13[0] - tsh11[1] * tsh11[0];\n\t\ttsh25[2] = kSqrt0304 * (tsh13[1] * tsh13[1] - tsh11[1] * tsh11[1]);\n\t\ttsh25[3] = tsh13[1] * tsh13[2] - tsh11[1] * tsh11[2];\n\t\ttsh25[4] =\n\t\t\tkSqrt0104 * (tsh13[2] * tsh13[2] - tsh13[0] * tsh13[0] - (tsh11[2] * tsh11[2] - tsh11[0] * tsh11[0]));\n\t\tSplatBuffer.dot5(in1, in2, in3, in4, in5, tsh25, out5);\n\t};\n\n\tstatic parseHeader(buffer) {\n\t\tconst headerArrayUint8 = new Uint8Array(buffer, 0, SplatBuffer.HeaderSizeBytes);\n\t\tconst headerArrayUint16 = new Uint16Array(buffer, 0, SplatBuffer.HeaderSizeBytes / 2);\n\t\tconst headerArrayUint32 = new Uint32Array(buffer, 0, SplatBuffer.HeaderSizeBytes / 4);\n\t\tconst headerArrayFloat32 = new Float32Array(buffer, 0, SplatBuffer.HeaderSizeBytes / 4);\n\t\tconst versionMajor = headerArrayUint8[0];\n\t\tconst versionMinor = headerArrayUint8[1];\n\t\tconst maxSectionCount = headerArrayUint32[1];\n\t\tconst sectionCount = headerArrayUint32[2];\n\t\tconst maxSplatCount = headerArrayUint32[3];\n\t\tconst splatCount = headerArrayUint32[4];\n\t\tconst compressionLevel = headerArrayUint16[10];\n\t\tconst sceneCenter = new THREE.Vector3(\n\t\t\theaderArrayFloat32[6],\n\t\t\theaderArrayFloat32[7],\n\t\t\theaderArrayFloat32[8],\n\t\t);\n\n\t\tconst minSphericalHarmonicsCoeff =\n\t\t\theaderArrayFloat32[9] || -DefaultSphericalHarmonics8BitCompressionHalfRange;\n\t\tconst maxSphericalHarmonicsCoeff =\n\t\t\theaderArrayFloat32[10] || DefaultSphericalHarmonics8BitCompressionHalfRange;\n\n\t\treturn {\n\t\t\tversionMajor,\n\t\t\tversionMinor,\n\t\t\tmaxSectionCount,\n\t\t\tsectionCount,\n\t\t\tmaxSplatCount,\n\t\t\tsplatCount,\n\t\t\tcompressionLevel,\n\t\t\tsceneCenter,\n\t\t\tminSphericalHarmonicsCoeff,\n\t\t\tmaxSphericalHarmonicsCoeff,\n\t\t};\n\t}\n\n\tstatic writeHeaderCountsToBuffer(sectionCount, splatCount, buffer) {\n\t\tconst headerArrayUint32 = new Uint32Array(buffer, 0, SplatBuffer.HeaderSizeBytes / 4);\n\t\theaderArrayUint32[2] = sectionCount;\n\t\theaderArrayUint32[4] = splatCount;\n\t}\n\n\tstatic writeHeaderToBuffer(header, buffer) {\n\t\tconst headerArrayUint8 = new Uint8Array(buffer, 0, SplatBuffer.HeaderSizeBytes);\n\t\tconst headerArrayUint16 = new Uint16Array(buffer, 0, SplatBuffer.HeaderSizeBytes / 2);\n\t\tconst headerArrayUint32 = new Uint32Array(buffer, 0, SplatBuffer.HeaderSizeBytes / 4);\n\t\tconst headerArrayFloat32 = new Float32Array(buffer, 0, SplatBuffer.HeaderSizeBytes / 4);\n\t\theaderArrayUint8[0] = header.versionMajor;\n\t\theaderArrayUint8[1] = header.versionMinor;\n\t\theaderArrayUint8[2] = 0; // unused for now\n\t\theaderArrayUint8[3] = 0; // unused for now\n\t\theaderArrayUint32[1] = header.maxSectionCount;\n\t\theaderArrayUint32[2] = header.sectionCount;\n\t\theaderArrayUint32[3] = header.maxSplatCount;\n\t\theaderArrayUint32[4] = header.splatCount;\n\t\theaderArrayUint16[10] = header.compressionLevel;\n\t\theaderArrayFloat32[6] = header.sceneCenter.x;\n\t\theaderArrayFloat32[7] = header.sceneCenter.y;\n\t\theaderArrayFloat32[8] = header.sceneCenter.z;\n\t\theaderArrayFloat32[9] =\n\t\t\theader.minSphericalHarmonicsCoeff || -DefaultSphericalHarmonics8BitCompressionHalfRange;\n\t\theaderArrayFloat32[10] =\n\t\t\theader.maxSphericalHarmonicsCoeff || DefaultSphericalHarmonics8BitCompressionHalfRange;\n\t}\n\n\tstatic parseSectionHeaders(header, buffer, offset = 0, secLoadedCountsToMax) {\n\t\tconst compressionLevel = header.compressionLevel;\n\n\t\tconst maxSectionCount = header.maxSectionCount;\n\t\tconst sectionHeaderArrayUint16 = new Uint16Array(\n\t\t\tbuffer,\n\t\t\toffset,\n\t\t\t(maxSectionCount * SplatBuffer.SectionHeaderSizeBytes) / 2,\n\t\t);\n\t\tconst sectionHeaderArrayUint32 = new Uint32Array(\n\t\t\tbuffer,\n\t\t\toffset,\n\t\t\t(maxSectionCount * SplatBuffer.SectionHeaderSizeBytes) / 4,\n\t\t);\n\t\tconst sectionHeaderArrayFloat32 = new Float32Array(\n\t\t\tbuffer,\n\t\t\toffset,\n\t\t\t(maxSectionCount * SplatBuffer.SectionHeaderSizeBytes) / 4,\n\t\t);\n\n\t\tconst sectionHeaders = [];\n\t\tlet sectionHeaderBase = 0;\n\t\tlet sectionHeaderBaseUint16 = sectionHeaderBase / 2;\n\t\tlet sectionHeaderBaseUint32 = sectionHeaderBase / 4;\n\t\tlet sectionBase =\n\t\t\tSplatBuffer.HeaderSizeBytes + header.maxSectionCount * SplatBuffer.SectionHeaderSizeBytes;\n\t\tlet splatCountOffset = 0;\n\t\tfor (let i = 0; i < maxSectionCount; i++) {\n\t\t\tconst maxSplatCount = sectionHeaderArrayUint32[sectionHeaderBaseUint32 + 1];\n\t\t\tconst bucketSize = sectionHeaderArrayUint32[sectionHeaderBaseUint32 + 2];\n\t\t\tconst bucketCount = sectionHeaderArrayUint32[sectionHeaderBaseUint32 + 3];\n\t\t\tconst bucketBlockSize = sectionHeaderArrayFloat32[sectionHeaderBaseUint32 + 4];\n\t\t\tconst halfBucketBlockSize = bucketBlockSize / 2.0;\n\t\t\tconst bucketStorageSizeBytes = sectionHeaderArrayUint16[sectionHeaderBaseUint16 + 10];\n\t\t\tconst compressionScaleRange =\n\t\t\t\tsectionHeaderArrayUint32[sectionHeaderBaseUint32 + 6] ||\n\t\t\t\tSplatBuffer.CompressionLevels[compressionLevel].ScaleRange;\n\t\t\tconst fullBucketCount = sectionHeaderArrayUint32[sectionHeaderBaseUint32 + 8];\n\t\t\tconst partiallyFilledBucketCount = sectionHeaderArrayUint32[sectionHeaderBaseUint32 + 9];\n\t\t\tconst bucketsMetaDataSizeBytes = partiallyFilledBucketCount * 4;\n\t\t\tconst bucketsStorageSizeBytes = bucketStorageSizeBytes * bucketCount + bucketsMetaDataSizeBytes;\n\n\t\t\tconst sphericalHarmonicsDegree = sectionHeaderArrayUint16[sectionHeaderBaseUint16 + 20];\n\t\t\tconst { bytesPerSplat } = SplatBuffer.calculateComponentStorage(\n\t\t\t\tcompressionLevel,\n\t\t\t\tsphericalHarmonicsDegree,\n\t\t\t);\n\n\t\t\tconst splatDataStorageSizeBytes = bytesPerSplat * maxSplatCount;\n\t\t\tconst storageSizeBytes = splatDataStorageSizeBytes + bucketsStorageSizeBytes;\n\t\t\tconst sectionHeader = {\n\t\t\t\tbytesPerSplat: bytesPerSplat,\n\t\t\t\tsplatCountOffset: splatCountOffset,\n\t\t\t\tsplatCount: secLoadedCountsToMax ? maxSplatCount : 0,\n\t\t\t\tmaxSplatCount: maxSplatCount,\n\t\t\t\tbucketSize: bucketSize,\n\t\t\t\tbucketCount: bucketCount,\n\t\t\t\tbucketBlockSize: bucketBlockSize,\n\t\t\t\thalfBucketBlockSize: halfBucketBlockSize,\n\t\t\t\tbucketStorageSizeBytes: bucketStorageSizeBytes,\n\t\t\t\tbucketsStorageSizeBytes: bucketsStorageSizeBytes,\n\t\t\t\tsplatDataStorageSizeBytes: splatDataStorageSizeBytes,\n\t\t\t\tstorageSizeBytes: storageSizeBytes,\n\t\t\t\tcompressionScaleRange: compressionScaleRange,\n\t\t\t\tcompressionScaleFactor: halfBucketBlockSize / compressionScaleRange,\n\t\t\t\tbase: sectionBase,\n\t\t\t\tbucketsBase: sectionBase + bucketsMetaDataSizeBytes,\n\t\t\t\tdataBase: sectionBase + bucketsStorageSizeBytes,\n\t\t\t\tfullBucketCount: fullBucketCount,\n\t\t\t\tpartiallyFilledBucketCount: partiallyFilledBucketCount,\n\t\t\t\tsphericalHarmonicsDegree: sphericalHarmonicsDegree,\n\t\t\t};\n\t\t\tsectionHeaders[i] = sectionHeader;\n\t\t\tsectionBase += storageSizeBytes;\n\t\t\tsectionHeaderBase += SplatBuffer.SectionHeaderSizeBytes;\n\t\t\tsectionHeaderBaseUint16 = sectionHeaderBase / 2;\n\t\t\tsectionHeaderBaseUint32 = sectionHeaderBase / 4;\n\t\t\tsplatCountOffset += maxSplatCount;\n\t\t}\n\n\t\treturn sectionHeaders;\n\t}\n\n\tstatic writeSectionHeaderToBuffer(sectionHeader, compressionLevel, buffer, offset = 0) {\n\t\tconst sectionHeadeArrayUint16 = new Uint16Array(buffer, offset, SplatBuffer.SectionHeaderSizeBytes / 2);\n\t\tconst sectionHeadeArrayUint32 = new Uint32Array(buffer, offset, SplatBuffer.SectionHeaderSizeBytes / 4);\n\t\tconst sectionHeadeArrayFloat32 = new Float32Array(buffer, offset, SplatBuffer.SectionHeaderSizeBytes / 4);\n\n\t\tsectionHeadeArrayUint32[0] = sectionHeader.splatCount;\n\t\tsectionHeadeArrayUint32[1] = sectionHeader.maxSplatCount;\n\t\tsectionHeadeArrayUint32[2] = compressionLevel >= 1 ? sectionHeader.bucketSize : 0;\n\t\tsectionHeadeArrayUint32[3] = compressionLevel >= 1 ? sectionHeader.bucketCount : 0;\n\t\tsectionHeadeArrayFloat32[4] = compressionLevel >= 1 ? sectionHeader.bucketBlockSize : 0.0;\n\t\tsectionHeadeArrayUint16[10] = compressionLevel >= 1 ? SplatBuffer.BucketStorageSizeBytes : 0;\n\t\tsectionHeadeArrayUint32[6] = compressionLevel >= 1 ? sectionHeader.compressionScaleRange : 0;\n\t\tsectionHeadeArrayUint32[7] = sectionHeader.storageSizeBytes;\n\t\tsectionHeadeArrayUint32[8] = compressionLevel >= 1 ? sectionHeader.fullBucketCount : 0;\n\t\tsectionHeadeArrayUint32[9] = compressionLevel >= 1 ? sectionHeader.partiallyFilledBucketCount : 0;\n\t\tsectionHeadeArrayUint16[20] = sectionHeader.sphericalHarmonicsDegree;\n\t}\n\n\tstatic writeSectionHeaderSplatCountToBuffer(splatCount, buffer, offset = 0) {\n\t\tconst sectionHeadeArrayUint32 = new Uint32Array(buffer, offset, SplatBuffer.SectionHeaderSizeBytes / 4);\n\t\tsectionHeadeArrayUint32[0] = splatCount;\n\t}\n\n\tconstructFromBuffer(bufferData, secLoadedCountsToMax) {\n\t\tthis.bufferData = bufferData;\n\n\t\tthis.globalSplatIndexToLocalSplatIndexMap = [];\n\t\tthis.globalSplatIndexToSectionMap = [];\n\n\t\tconst header = SplatBuffer.parseHeader(this.bufferData);\n\t\tthis.versionMajor = header.versionMajor;\n\t\tthis.versionMinor = header.versionMinor;\n\t\tthis.maxSectionCount = header.maxSectionCount;\n\t\tthis.sectionCount = secLoadedCountsToMax ? header.maxSectionCount : 0;\n\t\tthis.maxSplatCount = header.maxSplatCount;\n\t\tthis.splatCount = secLoadedCountsToMax ? header.maxSplatCount : 0;\n\t\tthis.compressionLevel = header.compressionLevel;\n\t\tthis.sceneCenter = new THREE.Vector3().copy(header.sceneCenter);\n\t\tthis.minSphericalHarmonicsCoeff = header.minSphericalHarmonicsCoeff;\n\t\tthis.maxSphericalHarmonicsCoeff = header.maxSphericalHarmonicsCoeff;\n\n\t\tthis.sections = SplatBuffer.parseSectionHeaders(\n\t\t\theader,\n\t\t\tthis.bufferData,\n\t\t\tSplatBuffer.HeaderSizeBytes,\n\t\t\tsecLoadedCountsToMax,\n\t\t);\n\n\t\tthis.linkBufferArrays();\n\t\tthis.buildMaps();\n\t}\n\n\tstatic calculateComponentStorage(compressionLevel, sphericalHarmonicsDegree) {\n\t\tconst bytesPerCenter = SplatBuffer.CompressionLevels[compressionLevel].BytesPerCenter;\n\t\tconst bytesPerScale = SplatBuffer.CompressionLevels[compressionLevel].BytesPerScale;\n\t\tconst bytesPerRotation = SplatBuffer.CompressionLevels[compressionLevel].BytesPerRotation;\n\t\tconst bytesPerColor = SplatBuffer.CompressionLevels[compressionLevel].BytesPerColor;\n\t\tconst sphericalHarmonicsComponentsPerSplat =\n\t\t\tgetSphericalHarmonicsComponentCountForDegree(sphericalHarmonicsDegree);\n\t\tconst sphericalHarmonicsBytesPerSplat =\n\t\t\tSplatBuffer.CompressionLevels[compressionLevel].BytesPerSphericalHarmonicsComponent *\n\t\t\tsphericalHarmonicsComponentsPerSplat;\n\t\tconst bytesPerSplat =\n\t\t\tbytesPerCenter + bytesPerScale + bytesPerRotation + bytesPerColor + sphericalHarmonicsBytesPerSplat;\n\t\treturn {\n\t\t\tbytesPerCenter,\n\t\t\tbytesPerScale,\n\t\t\tbytesPerRotation,\n\t\t\tbytesPerColor,\n\t\t\tsphericalHarmonicsComponentsPerSplat,\n\t\t\tsphericalHarmonicsBytesPerSplat,\n\t\t\tbytesPerSplat,\n\t\t};\n\t}\n\n\tlinkBufferArrays() {\n\t\tfor (let i = 0; i < this.maxSectionCount; i++) {\n\t\t\tconst section = this.sections[i];\n\t\t\tsection.bucketArray = new Float32Array(\n\t\t\t\tthis.bufferData,\n\t\t\t\tsection.bucketsBase,\n\t\t\t\tsection.bucketCount * SplatBuffer.BucketStorageSizeFloats,\n\t\t\t);\n\t\t\tif (section.partiallyFilledBucketCount > 0) {\n\t\t\t\tsection.partiallyFilledBucketLengths = new Uint32Array(\n\t\t\t\t\tthis.bufferData,\n\t\t\t\t\tsection.base,\n\t\t\t\t\tsection.partiallyFilledBucketCount,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tbuildMaps() {\n\t\tlet cumulativeSplatCount = 0;\n\t\tfor (let i = 0; i < this.maxSectionCount; i++) {\n\t\t\tconst section = this.sections[i];\n\t\t\tfor (let j = 0; j < section.maxSplatCount; j++) {\n\t\t\t\tconst globalSplatIndex = cumulativeSplatCount + j;\n\t\t\t\tthis.globalSplatIndexToLocalSplatIndexMap[globalSplatIndex] = j;\n\t\t\t\tthis.globalSplatIndexToSectionMap[globalSplatIndex] = i;\n\t\t\t}\n\t\t\tcumulativeSplatCount += section.maxSplatCount;\n\t\t}\n\t}\n\n\tupdateLoadedCounts(newSectionCount, newSplatCount) {\n\t\tSplatBuffer.writeHeaderCountsToBuffer(newSectionCount, newSplatCount, this.bufferData);\n\t\tthis.sectionCount = newSectionCount;\n\t\tthis.splatCount = newSplatCount;\n\t}\n\n\tupdateSectionLoadedCounts(sectionIndex, newSplatCount) {\n\t\tconst sectionHeaderOffset =\n\t\t\tSplatBuffer.HeaderSizeBytes + SplatBuffer.SectionHeaderSizeBytes * sectionIndex;\n\t\tSplatBuffer.writeSectionHeaderSplatCountToBuffer(newSplatCount, this.bufferData, sectionHeaderOffset);\n\t\tthis.sections[sectionIndex].splatCount = newSplatCount;\n\t}\n\n\tstatic writeSplatDataToSectionBuffer = (function() {\n\t\tconst tempCenterBuffer = new ArrayBuffer(12);\n\t\tconst tempScaleBuffer = new ArrayBuffer(12);\n\t\tconst tempRotationBuffer = new ArrayBuffer(16);\n\t\tconst tempColorBuffer = new ArrayBuffer(4);\n\t\tconst tempSHBuffer = new ArrayBuffer(256);\n\t\tconst tempRot = new THREE.Quaternion();\n\t\tconst tempScale = new THREE.Vector3();\n\t\tconst bucketCenterDelta = new THREE.Vector3();\n\n\t\tconst {\n\t\t\tX: OFFSET_X,\n\t\t\tY: OFFSET_Y,\n\t\t\tZ: OFFSET_Z,\n\t\t\tSCALE0: OFFSET_SCALE0,\n\t\t\tSCALE1: OFFSET_SCALE1,\n\t\t\tSCALE2: OFFSET_SCALE2,\n\t\t\tROTATION0: OFFSET_ROT0,\n\t\t\tROTATION1: OFFSET_ROT1,\n\t\t\tROTATION2: OFFSET_ROT2,\n\t\t\tROTATION3: OFFSET_ROT3,\n\t\t\tFDC0: OFFSET_FDC0,\n\t\t\tFDC1: OFFSET_FDC1,\n\t\t\tFDC2: OFFSET_FDC2,\n\t\t\tOPACITY: OFFSET_OPACITY,\n\t\t\tFRC0: OFFSET_FRC0,\n\t\t\tFRC9: OFFSET_FRC9,\n\t\t} = UncompressedSplatArray.OFFSET;\n\n\t\tconst compressPositionOffset = (v, compressionScaleFactor, compressionScaleRange) => {\n\t\t\tconst doubleCompressionScaleRange = compressionScaleRange * 2 + 1;\n\t\t\tv = Math.round(v * compressionScaleFactor) + compressionScaleRange;\n\t\t\treturn clamp(v, 0, doubleCompressionScaleRange);\n\t\t};\n\n\t\treturn function(\n\t\t\ttargetSplat,\n\t\t\tsectionBuffer,\n\t\t\tbufferOffset,\n\t\t\tcompressionLevel,\n\t\t\tsphericalHarmonicsDegree,\n\t\t\tbucketCenter,\n\t\t\tcompressionScaleFactor,\n\t\t\tcompressionScaleRange,\n\t\t\tminSphericalHarmonicsCoeff = -DefaultSphericalHarmonics8BitCompressionHalfRange,\n\t\t\tmaxSphericalHarmonicsCoeff = DefaultSphericalHarmonics8BitCompressionHalfRange,\n\t\t) {\n\t\t\tconst sphericalHarmonicsComponentsPerSplat =\n\t\t\t\tgetSphericalHarmonicsComponentCountForDegree(sphericalHarmonicsDegree);\n\t\t\tconst bytesPerCenter = SplatBuffer.CompressionLevels[compressionLevel].BytesPerCenter;\n\t\t\tconst bytesPerScale = SplatBuffer.CompressionLevels[compressionLevel].BytesPerScale;\n\t\t\tconst bytesPerRotation = SplatBuffer.CompressionLevels[compressionLevel].BytesPerRotation;\n\t\t\tconst bytesPerColor = SplatBuffer.CompressionLevels[compressionLevel].BytesPerColor;\n\n\t\t\tconst centerBase = bufferOffset;\n\t\t\tconst scaleBase = centerBase + bytesPerCenter;\n\t\t\tconst rotationBase = scaleBase + bytesPerScale;\n\t\t\tconst colorBase = rotationBase + bytesPerRotation;\n\t\t\tconst sphericalHarmonicsBase = colorBase + bytesPerColor;\n\n\t\t\tif (targetSplat[OFFSET_ROT0] !== undefined) {\n\t\t\t\ttempRot.set(\n\t\t\t\t\ttargetSplat[OFFSET_ROT0],\n\t\t\t\t\ttargetSplat[OFFSET_ROT1],\n\t\t\t\t\ttargetSplat[OFFSET_ROT2],\n\t\t\t\t\ttargetSplat[OFFSET_ROT3],\n\t\t\t\t);\n\t\t\t\ttempRot.normalize();\n\t\t\t} else {\n\t\t\t\ttempRot.set(1.0, 0.0, 0.0, 0.0);\n\t\t\t}\n\n\t\t\tif (targetSplat[OFFSET_SCALE0] !== undefined) {\n\t\t\t\ttempScale.set(\n\t\t\t\t\ttargetSplat[OFFSET_SCALE0] || 0,\n\t\t\t\t\ttargetSplat[OFFSET_SCALE1] || 0,\n\t\t\t\t\ttargetSplat[OFFSET_SCALE2] || 0,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\ttempScale.set(0, 0, 0);\n\t\t\t}\n\n\t\t\tif (compressionLevel === 0) {\n\t\t\t\tconst center = new Float32Array(sectionBuffer, centerBase, SplatBuffer.CenterComponentCount);\n\t\t\t\tconst rot = new Float32Array(sectionBuffer, rotationBase, SplatBuffer.RotationComponentCount);\n\t\t\t\tconst scale = new Float32Array(sectionBuffer, scaleBase, SplatBuffer.ScaleComponentCount);\n\n\t\t\t\trot.set([tempRot.x, tempRot.y, tempRot.z, tempRot.w]);\n\t\t\t\tscale.set([tempScale.x, tempScale.y, tempScale.z]);\n\t\t\t\tcenter.set([targetSplat[OFFSET_X], targetSplat[OFFSET_Y], targetSplat[OFFSET_Z]]);\n\n\t\t\t\tif (sphericalHarmonicsDegree > 0) {\n\t\t\t\t\tconst shOut = new Float32Array(\n\t\t\t\t\t\tsectionBuffer,\n\t\t\t\t\t\tsphericalHarmonicsBase,\n\t\t\t\t\t\tsphericalHarmonicsComponentsPerSplat,\n\t\t\t\t\t);\n\t\t\t\t\tif (sphericalHarmonicsDegree >= 1) {\n\t\t\t\t\t\tfor (let s = 0; s < 9; s++) shOut[s] = targetSplat[OFFSET_FRC0 + s] || 0;\n\t\t\t\t\t\tif (sphericalHarmonicsDegree >= 2) {\n\t\t\t\t\t\t\tfor (let s = 0; s < 15; s++) shOut[s + 9] = targetSplat[OFFSET_FRC9 + s] || 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst center = new Uint16Array(tempCenterBuffer, 0, SplatBuffer.CenterComponentCount);\n\t\t\t\tconst rot = new Uint16Array(tempRotationBuffer, 0, SplatBuffer.RotationComponentCount);\n\t\t\t\tconst scale = new Uint16Array(tempScaleBuffer, 0, SplatBuffer.ScaleComponentCount);\n\n\t\t\t\trot.set([\n\t\t\t\t\ttoHalfFloat(tempRot.x),\n\t\t\t\t\ttoHalfFloat(tempRot.y),\n\t\t\t\t\ttoHalfFloat(tempRot.z),\n\t\t\t\t\ttoHalfFloat(tempRot.w),\n\t\t\t\t]);\n\t\t\t\tscale.set([toHalfFloat(tempScale.x), toHalfFloat(tempScale.y), toHalfFloat(tempScale.z)]);\n\n\t\t\t\tbucketCenterDelta\n\t\t\t\t\t.set(targetSplat[OFFSET_X], targetSplat[OFFSET_Y], targetSplat[OFFSET_Z])\n\t\t\t\t\t.sub(bucketCenter);\n\t\t\t\tbucketCenterDelta.x = compressPositionOffset(\n\t\t\t\t\tbucketCenterDelta.x,\n\t\t\t\t\tcompressionScaleFactor,\n\t\t\t\t\tcompressionScaleRange,\n\t\t\t\t);\n\t\t\t\tbucketCenterDelta.y = compressPositionOffset(\n\t\t\t\t\tbucketCenterDelta.y,\n\t\t\t\t\tcompressionScaleFactor,\n\t\t\t\t\tcompressionScaleRange,\n\t\t\t\t);\n\t\t\t\tbucketCenterDelta.z = compressPositionOffset(\n\t\t\t\t\tbucketCenterDelta.z,\n\t\t\t\t\tcompressionScaleFactor,\n\t\t\t\t\tcompressionScaleRange,\n\t\t\t\t);\n\t\t\t\tcenter.set([bucketCenterDelta.x, bucketCenterDelta.y, bucketCenterDelta.z]);\n\n\t\t\t\tif (sphericalHarmonicsDegree > 0) {\n\t\t\t\t\tconst SHArrayType = compressionLevel === 1 ? Uint16Array : Uint8Array;\n\t\t\t\t\tconst bytesPerSHComponent = compressionLevel === 1 ? 2 : 1;\n\t\t\t\t\tconst shOut = new SHArrayType(tempSHBuffer, 0, sphericalHarmonicsComponentsPerSplat);\n\t\t\t\t\tif (sphericalHarmonicsDegree >= 1) {\n\t\t\t\t\t\tfor (let s = 0; s < 9; s++) {\n\t\t\t\t\t\t\tconst srcVal = targetSplat[OFFSET_FRC0 + s] || 0;\n\t\t\t\t\t\t\tshOut[s] =\n\t\t\t\t\t\t\t\tcompressionLevel === 1 ?\n\t\t\t\t\t\t\t\t\ttoHalfFloat(srcVal) :\n\t\t\t\t\t\t\t\t\ttoUint8(srcVal, minSphericalHarmonicsCoeff, maxSphericalHarmonicsCoeff);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst degree1ByteCount = 9 * bytesPerSHComponent;\n\t\t\t\t\t\tcopyBetweenBuffers(shOut.buffer, 0, sectionBuffer, sphericalHarmonicsBase, degree1ByteCount);\n\t\t\t\t\t\tif (sphericalHarmonicsDegree >= 2) {\n\t\t\t\t\t\t\tfor (let s = 0; s < 15; s++) {\n\t\t\t\t\t\t\t\tconst srcVal = targetSplat[OFFSET_FRC9 + s] || 0;\n\t\t\t\t\t\t\t\tshOut[s + 9] =\n\t\t\t\t\t\t\t\t\tcompressionLevel === 1 ?\n\t\t\t\t\t\t\t\t\t\ttoHalfFloat(srcVal) :\n\t\t\t\t\t\t\t\t\t\ttoUint8(srcVal, minSphericalHarmonicsCoeff, maxSphericalHarmonicsCoeff);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcopyBetweenBuffers(\n\t\t\t\t\t\t\t\tshOut.buffer,\n\t\t\t\t\t\t\t\tdegree1ByteCount,\n\t\t\t\t\t\t\t\tsectionBuffer,\n\t\t\t\t\t\t\t\tsphericalHarmonicsBase + degree1ByteCount,\n\t\t\t\t\t\t\t\t15 * bytesPerSHComponent,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcopyBetweenBuffers(center.buffer, 0, sectionBuffer, centerBase, 6);\n\t\t\t\tcopyBetweenBuffers(scale.buffer, 0, sectionBuffer, scaleBase, 6);\n\t\t\t\tcopyBetweenBuffers(rot.buffer, 0, sectionBuffer, rotationBase, 8);\n\t\t\t}\n\n\t\t\tconst rgba = new Uint8ClampedArray(tempColorBuffer, 0, 4);\n\t\t\trgba.set([targetSplat[OFFSET_FDC0] || 0, targetSplat[OFFSET_FDC1] || 0, targetSplat[OFFSET_FDC2] || 0]);\n\t\t\trgba[3] = targetSplat[OFFSET_OPACITY] || 0;\n\n\t\t\tcopyBetweenBuffers(rgba.buffer, 0, sectionBuffer, colorBase, 4);\n\t\t};\n\t})();\n\n\tstatic generateFromUncompressedSplatArrays(\n\t\tsplatArrays,\n\t\tminimumAlpha,\n\t\tcompressionLevel,\n\t\tsceneCenter,\n\t\tblockSize,\n\t\tbucketSize,\n\t\toptions = [],\n\t) {\n\t\tlet shDegree = 0;\n\t\tfor (let sa = 0; sa < splatArrays.length; sa++) {\n\t\t\tconst splatArray = splatArrays[sa];\n\t\t\tshDegree = Math.max(splatArray.sphericalHarmonicsDegree, shDegree);\n\t\t}\n\n\t\tlet minSphericalHarmonicsCoeff;\n\t\tlet maxSphericalHarmonicsCoeff;\n\n\t\tfor (let sa = 0; sa < splatArrays.length; sa++) {\n\t\t\tconst splatArray = splatArrays[sa];\n\t\t\tfor (let i = 0; i < splatArray.splats.length; i++) {\n\t\t\t\tconst splat = splatArray.splats[i];\n\t\t\t\tfor (\n\t\t\t\t\tlet sc = UncompressedSplatArray.OFFSET.FRC0;\n\t\t\t\t\tsc < UncompressedSplatArray.OFFSET.FRC23 && sc < splat.length;\n\t\t\t\t\tsc++\n\t\t\t\t) {\n\t\t\t\t\tif (!minSphericalHarmonicsCoeff || splat[sc] < minSphericalHarmonicsCoeff) {\n\t\t\t\t\t\tminSphericalHarmonicsCoeff = splat[sc];\n\t\t\t\t\t}\n\t\t\t\t\tif (!maxSphericalHarmonicsCoeff || splat[sc] > maxSphericalHarmonicsCoeff) {\n\t\t\t\t\t\tmaxSphericalHarmonicsCoeff = splat[sc];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tminSphericalHarmonicsCoeff =\n\t\t\tminSphericalHarmonicsCoeff || -DefaultSphericalHarmonics8BitCompressionHalfRange;\n\t\tmaxSphericalHarmonicsCoeff =\n\t\t\tmaxSphericalHarmonicsCoeff || DefaultSphericalHarmonics8BitCompressionHalfRange;\n\n\t\tconst { bytesPerSplat } = SplatBuffer.calculateComponentStorage(compressionLevel, shDegree);\n\t\tconst compressionScaleRange = SplatBuffer.CompressionLevels[compressionLevel].ScaleRange;\n\n\t\tconst sectionBuffers = [];\n\t\tconst sectionHeaderBuffers = [];\n\t\tlet totalSplatCount = 0;\n\n\t\tfor (let sa = 0; sa < splatArrays.length; sa++) {\n\t\t\tconst splatArray = splatArrays[sa];\n\t\t\tconst validSplats = new UncompressedSplatArray(shDegree);\n\t\t\tfor (let i = 0; i < splatArray.splatCount; i++) {\n\t\t\t\tconst targetSplat = splatArray.splats[i];\n\t\t\t\tif ((targetSplat[UncompressedSplatArray.OFFSET.OPACITY] || 0) >= minimumAlpha) {\n\t\t\t\t\tvalidSplats.addSplat(targetSplat);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst sectionOptions = options[sa] || {};\n\t\t\tconst sectionBlockSize =\n\t\t\t\t(sectionOptions.blockSizeFactor || 1) * (blockSize || SplatBuffer.BucketBlockSize);\n\t\t\tconst sectionBucketSize = Math.ceil(\n\t\t\t\t(sectionOptions.bucketSizeFactor || 1) * (bucketSize || SplatBuffer.BucketSize),\n\t\t\t);\n\n\t\t\tconst bucketInfo = SplatBuffer.computeBucketsForUncompressedSplatArray(\n\t\t\t\tvalidSplats,\n\t\t\t\tsectionBlockSize,\n\t\t\t\tsectionBucketSize,\n\t\t\t);\n\t\t\tconst fullBucketCount = bucketInfo.fullBuckets.length;\n\t\t\tconst partiallyFullBucketLengths = bucketInfo.partiallyFullBuckets.map(\n\t\t\t\t(bucket) => bucket.splats.length,\n\t\t\t);\n\t\t\tconst partiallyFilledBucketCount = partiallyFullBucketLengths.length;\n\t\t\tconst buckets = [...bucketInfo.fullBuckets, ...bucketInfo.partiallyFullBuckets];\n\n\t\t\tconst sectionDataSizeBytes = validSplats.splats.length * bytesPerSplat;\n\t\t\tconst bucketMetaDataSizeBytes = partiallyFilledBucketCount * 4;\n\t\t\tconst bucketDataBytes =\n\t\t\t\tcompressionLevel >= 1 ?\n\t\t\t\t\tbuckets.length * SplatBuffer.BucketStorageSizeBytes + bucketMetaDataSizeBytes :\n\t\t\t\t\t0;\n\t\t\tconst sectionSizeBytes = sectionDataSizeBytes + bucketDataBytes;\n\t\t\tconst sectionBuffer = new ArrayBuffer(sectionSizeBytes);\n\n\t\t\tconst compressionScaleFactor = compressionScaleRange / (sectionBlockSize * 0.5);\n\t\t\tconst bucketCenter = new THREE.Vector3();\n\n\t\t\tlet outSplatCount = 0;\n\t\t\tfor (let b = 0; b < buckets.length; b++) {\n\t\t\t\tconst bucket = buckets[b];\n\t\t\t\tbucketCenter.fromArray(bucket.center);\n\t\t\t\tfor (let i = 0; i < bucket.splats.length; i++) {\n\t\t\t\t\tlet row = bucket.splats[i];\n\t\t\t\t\tconst targetSplat = validSplats.splats[row];\n\t\t\t\t\tconst bufferOffset = bucketDataBytes + outSplatCount * bytesPerSplat;\n\t\t\t\t\tSplatBuffer.writeSplatDataToSectionBuffer(\n\t\t\t\t\t\ttargetSplat,\n\t\t\t\t\t\tsectionBuffer,\n\t\t\t\t\t\tbufferOffset,\n\t\t\t\t\t\tcompressionLevel,\n\t\t\t\t\t\tshDegree,\n\t\t\t\t\t\tbucketCenter,\n\t\t\t\t\t\tcompressionScaleFactor,\n\t\t\t\t\t\tcompressionScaleRange,\n\t\t\t\t\t\tminSphericalHarmonicsCoeff,\n\t\t\t\t\t\tmaxSphericalHarmonicsCoeff,\n\t\t\t\t\t);\n\t\t\t\t\toutSplatCount++;\n\t\t\t\t}\n\t\t\t}\n\t\t\ttotalSplatCount += outSplatCount;\n\n\t\t\tif (compressionLevel >= 1) {\n\t\t\t\tconst bucketMetaDataArray = new Uint32Array(sectionBuffer, 0, partiallyFullBucketLengths.length * 4);\n\t\t\t\tfor (let pfb = 0; pfb < partiallyFullBucketLengths.length; pfb++) {\n\t\t\t\t\tbucketMetaDataArray[pfb] = partiallyFullBucketLengths[pfb];\n\t\t\t\t}\n\t\t\t\tconst bucketArray = new Float32Array(\n\t\t\t\t\tsectionBuffer,\n\t\t\t\t\tbucketMetaDataSizeBytes,\n\t\t\t\t\tbuckets.length * SplatBuffer.BucketStorageSizeFloats,\n\t\t\t\t);\n\t\t\t\tfor (let b = 0; b < buckets.length; b++) {\n\t\t\t\t\tconst bucket = buckets[b];\n\t\t\t\t\tconst base = b * 3;\n\t\t\t\t\tbucketArray[base] = bucket.center[0];\n\t\t\t\t\tbucketArray[base + 1] = bucket.center[1];\n\t\t\t\t\tbucketArray[base + 2] = bucket.center[2];\n\t\t\t\t}\n\t\t\t}\n\t\t\tsectionBuffers.push(sectionBuffer);\n\n\t\t\tconst sectionHeaderBuffer = new ArrayBuffer(SplatBuffer.SectionHeaderSizeBytes);\n\t\t\tSplatBuffer.writeSectionHeaderToBuffer(\n\t\t\t\t{\n\t\t\t\t\tmaxSplatCount: outSplatCount,\n\t\t\t\t\tsplatCount: outSplatCount,\n\t\t\t\t\tbucketSize: sectionBucketSize,\n\t\t\t\t\tbucketCount: buckets.length,\n\t\t\t\t\tbucketBlockSize: sectionBlockSize,\n\t\t\t\t\tcompressionScaleRange: compressionScaleRange,\n\t\t\t\t\tstorageSizeBytes: sectionSizeBytes,\n\t\t\t\t\tfullBucketCount: fullBucketCount,\n\t\t\t\t\tpartiallyFilledBucketCount: partiallyFilledBucketCount,\n\t\t\t\t\tsphericalHarmonicsDegree: shDegree,\n\t\t\t\t},\n\t\t\t\tcompressionLevel,\n\t\t\t\tsectionHeaderBuffer,\n\t\t\t\t0,\n\t\t\t);\n\t\t\tsectionHeaderBuffers.push(sectionHeaderBuffer);\n\t\t}\n\n\t\tlet sectionsCumulativeSizeBytes = 0;\n\t\tfor (let sectionBuffer of sectionBuffers) sectionsCumulativeSizeBytes += sectionBuffer.byteLength;\n\t\tconst unifiedBufferSize =\n\t\t\tSplatBuffer.HeaderSizeBytes +\n\t\t\tSplatBuffer.SectionHeaderSizeBytes * sectionBuffers.length +\n\t\t\tsectionsCumulativeSizeBytes;\n\t\tconst unifiedBuffer = new ArrayBuffer(unifiedBufferSize);\n\n\t\tSplatBuffer.writeHeaderToBuffer(\n\t\t\t{\n\t\t\t\tversionMajor: 0,\n\t\t\t\tversionMinor: 1,\n\t\t\t\tmaxSectionCount: sectionBuffers.length,\n\t\t\t\tsectionCount: sectionBuffers.length,\n\t\t\t\tmaxSplatCount: totalSplatCount,\n\t\t\t\tsplatCount: totalSplatCount,\n\t\t\t\tcompressionLevel: compressionLevel,\n\t\t\t\tsceneCenter: sceneCenter,\n\t\t\t\tminSphericalHarmonicsCoeff: minSphericalHarmonicsCoeff,\n\t\t\t\tmaxSphericalHarmonicsCoeff: maxSphericalHarmonicsCoeff,\n\t\t\t},\n\t\t\tunifiedBuffer,\n\t\t);\n\n\t\tlet currentUnifiedBase = SplatBuffer.HeaderSizeBytes;\n\t\tfor (let sectionHeaderBuffer of sectionHeaderBuffers) {\n\t\t\tnew Uint8Array(unifiedBuffer, currentUnifiedBase, SplatBuffer.SectionHeaderSizeBytes).set(\n\t\t\t\tnew Uint8Array(sectionHeaderBuffer),\n\t\t\t);\n\t\t\tcurrentUnifiedBase += SplatBuffer.SectionHeaderSizeBytes;\n\t\t}\n\n\t\tfor (let sectionBuffer of sectionBuffers) {\n\t\t\tnew Uint8Array(unifiedBuffer, currentUnifiedBase, sectionBuffer.byteLength).set(\n\t\t\t\tnew Uint8Array(sectionBuffer),\n\t\t\t);\n\t\t\tcurrentUnifiedBase += sectionBuffer.byteLength;\n\t\t}\n\n\t\tconst splatBuffer = new SplatBuffer(unifiedBuffer);\n\t\treturn splatBuffer;\n\t}\n\n\tstatic computeBucketsForUncompressedSplatArray(splatArray, blockSize, bucketSize) {\n\t\tlet splatCount = splatArray.splatCount;\n\t\tconst halfBlockSize = blockSize / 2.0;\n\n\t\tconst min = new THREE.Vector3();\n\t\tconst max = new THREE.Vector3();\n\n\t\tfor (let i = 0; i < splatCount; i++) {\n\t\t\tconst targetSplat = splatArray.splats[i];\n\t\t\tconst center = [\n\t\t\t\ttargetSplat[UncompressedSplatArray.OFFSET.X],\n\t\t\t\ttargetSplat[UncompressedSplatArray.OFFSET.Y],\n\t\t\t\ttargetSplat[UncompressedSplatArray.OFFSET.Z],\n\t\t\t];\n\t\t\tif (i === 0 || center[0] < min.x) min.x = center[0];\n\t\t\tif (i === 0 || center[0] > max.x) max.x = center[0];\n\t\t\tif (i === 0 || center[1] < min.y) min.y = center[1];\n\t\t\tif (i === 0 || center[1] > max.y) max.y = center[1];\n\t\t\tif (i === 0 || center[2] < min.z) min.z = center[2];\n\t\t\tif (i === 0 || center[2] > max.z) max.z = center[2];\n\t\t}\n\n\t\tconst dimensions = new THREE.Vector3().copy(max).sub(min);\n\t\tconst yBlocks = Math.ceil(dimensions.y / blockSize);\n\t\tconst zBlocks = Math.ceil(dimensions.z / blockSize);\n\n\t\tconst blockCenter = new THREE.Vector3();\n\t\tconst fullBuckets = [];\n\t\tconst partiallyFullBuckets = {};\n\n\t\tfor (let i = 0; i < splatCount; i++) {\n\t\t\tconst targetSplat = splatArray.splats[i];\n\t\t\tconst center = [\n\t\t\t\ttargetSplat[UncompressedSplatArray.OFFSET.X],\n\t\t\t\ttargetSplat[UncompressedSplatArray.OFFSET.Y],\n\t\t\t\ttargetSplat[UncompressedSplatArray.OFFSET.Z],\n\t\t\t];\n\t\t\tconst xBlock = Math.floor((center[0] - min.x) / blockSize);\n\t\t\tconst yBlock = Math.floor((center[1] - min.y) / blockSize);\n\t\t\tconst zBlock = Math.floor((center[2] - min.z) / blockSize);\n\n\t\t\tblockCenter.x = xBlock * blockSize + min.x + halfBlockSize;\n\t\t\tblockCenter.y = yBlock * blockSize + min.y + halfBlockSize;\n\t\t\tblockCenter.z = zBlock * blockSize + min.z + halfBlockSize;\n\n\t\t\tconst bucketId = xBlock * (yBlocks * zBlocks) + yBlock * zBlocks + zBlock;\n\t\t\tlet bucket = partiallyFullBuckets[bucketId];\n\t\t\tif (!bucket) {\n\t\t\t\tpartiallyFullBuckets[bucketId] = bucket = {\n\t\t\t\t\tsplats: [],\n\t\t\t\t\tcenter: blockCenter.toArray(),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tbucket.splats.push(i);\n\t\t\tif (bucket.splats.length >= bucketSize) {\n\t\t\t\tfullBuckets.push(bucket);\n\t\t\t\tpartiallyFullBuckets[bucketId] = null;\n\t\t\t}\n\t\t}\n\n\t\tconst partiallyFullBucketArray = [];\n\t\tfor (let bucketId in partiallyFullBuckets) {\n\t\t\tif (partiallyFullBuckets.hasOwnProperty(bucketId)) {\n\t\t\t\tconst bucket = partiallyFullBuckets[bucketId];\n\t\t\t\tif (bucket) {\n\t\t\t\t\tpartiallyFullBucketArray.push(bucket);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tfullBuckets: fullBuckets,\n\t\t\tpartiallyFullBuckets: partiallyFullBucketArray,\n\t\t};\n\t}\n\n\tstatic preallocateUncompressed(splatCount, sphericalHarmonicsDegrees) {\n\t\tconst shDescriptor =\n\t\t\tSplatBuffer.CompressionLevels[0].SphericalHarmonicsDegrees[sphericalHarmonicsDegrees];\n\t\tconst splatBufferDataOffsetBytes = SplatBuffer.HeaderSizeBytes + SplatBuffer.SectionHeaderSizeBytes;\n\t\tconst splatBufferSizeBytes = splatBufferDataOffsetBytes + shDescriptor.BytesPerSplat * splatCount;\n\t\tconst outBuffer = new ArrayBuffer(splatBufferSizeBytes);\n\t\tSplatBuffer.writeHeaderToBuffer(\n\t\t\t{\n\t\t\t\tversionMajor: SplatBuffer.CurrentMajorVersion,\n\t\t\t\tversionMinor: SplatBuffer.CurrentMinorVersion,\n\t\t\t\tmaxSectionCount: 1,\n\t\t\t\tsectionCount: 1,\n\t\t\t\tmaxSplatCount: splatCount,\n\t\t\t\tsplatCount: splatCount,\n\t\t\t\tcompressionLevel: 0,\n\t\t\t\tsceneCenter: new THREE.Vector3(),\n\t\t\t},\n\t\t\toutBuffer,\n\t\t);\n\n\t\tSplatBuffer.writeSectionHeaderToBuffer(\n\t\t\t{\n\t\t\t\tmaxSplatCount: splatCount,\n\t\t\t\tsplatCount: splatCount,\n\t\t\t\tbucketSize: 0,\n\t\t\t\tbucketCount: 0,\n\t\t\t\tbucketBlockSize: 0,\n\t\t\t\tcompressionScaleRange: 0,\n\t\t\t\tstorageSizeBytes: 0,\n\t\t\t\tfullBucketCount: 0,\n\t\t\t\tpartiallyFilledBucketCount: 0,\n\t\t\t\tsphericalHarmonicsDegree: sphericalHarmonicsDegrees,\n\t\t\t},\n\t\t\t0,\n\t\t\toutBuffer,\n\t\t\tSplatBuffer.HeaderSizeBytes,\n\t\t);\n\n\t\treturn {\n\t\t\tsplatBuffer: new SplatBuffer(outBuffer, true),\n\t\t\tsplatBufferDataOffsetBytes,\n\t\t};\n\t}\n}\n","import { UncompressedSplatArray } from \"../UncompressedSplatArray.js\";\nimport { SplatBuffer } from \"../SplatBuffer.js\";\nimport { clamp } from \"../../Util.js\";\nimport * as THREE from \"three\";\n\nconst HeaderMagicBytes = new Uint8Array([112, 108, 121, 10]);\nconst HeaderEndTokenBytes = new Uint8Array([10, 101, 110, 100, 95, 104, 101, 97, 100, 101, 114, 10]);\nconst HeaderEndToken = \"end_header\";\n\nconst DataTypeMap = new Map([\n\t[\"char\", Int8Array],\n\t[\"uchar\", Uint8Array],\n\t[\"short\", Int16Array],\n\t[\"ushort\", Uint16Array],\n\t[\"int\", Int32Array],\n\t[\"uint\", Uint32Array],\n\t[\"float\", Float32Array],\n\t[\"double\", Float64Array],\n]);\n\nconst unpackUnorm = (value, bits) => {\n\tconst t = (1 << bits) - 1;\n\treturn (value & t) / t;\n};\n\nconst unpack111011 = (result, value) => {\n\tresult.x = unpackUnorm(value >>> 21, 11);\n\tresult.y = unpackUnorm(value >>> 11, 10);\n\tresult.z = unpackUnorm(value, 11);\n};\n\nconst unpack8888 = (result, value) => {\n\tresult.x = unpackUnorm(value >>> 24, 8);\n\tresult.y = unpackUnorm(value >>> 16, 8);\n\tresult.z = unpackUnorm(value >>> 8, 8);\n\tresult.w = unpackUnorm(value, 8);\n};\n\n// unpack quaternion with 2,10,10,10 format (largest element, 3x10bit element)\nconst unpackRot = (result, value) => {\n\tconst norm = 1.0 / (Math.sqrt(2) * 0.5);\n\tconst a = (unpackUnorm(value >>> 20, 10) - 0.5) * norm;\n\tconst b = (unpackUnorm(value >>> 10, 10) - 0.5) * norm;\n\tconst c = (unpackUnorm(value, 10) - 0.5) * norm;\n\tconst m = Math.sqrt(1.0 - (a * a + b * b + c * c));\n\n\tswitch (value >>> 30) {\n\t\tcase 0:\n\t\t\tresult.set(m, a, b, c);\n\t\t\tbreak;\n\t\tcase 1:\n\t\t\tresult.set(a, m, b, c);\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tresult.set(a, b, m, c);\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tresult.set(a, b, c, m);\n\t\t\tbreak;\n\t}\n};\n\nconst lerp = (a, b, t) => {\n\treturn a * (1 - t) + b * t;\n};\n\nconst getElementPropStorage = (element, name) => {\n\treturn element.properties.find((p) => p.name === name && p.storage)?.storage;\n};\n\nexport class PlayCanvasCompressedPlyParser {\n\tstatic decodeHeaderText(headerText) {\n\t\tlet element;\n\t\tlet chunkElement;\n\t\tlet vertexElement;\n\t\tlet shElement;\n\n\t\tconst headerLines = headerText.split(\"\\n\").filter((line) => !line.startsWith(\"comment \"));\n\n\t\tlet bytesPerSplat = 0;\n\t\tlet done = false;\n\t\tfor (let i = 1; i < headerLines.length; ++i) {\n\t\t\tconst words = headerLines[i].split(\" \");\n\n\t\t\tswitch (words[0]) {\n\t\t\t\tcase \"format\":\n\t\t\t\t\tif (words[1] !== \"binary_little_endian\") {\n\t\t\t\t\t\tthrow new Error(\"Unsupported ply format\");\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"element\":\n\t\t\t\t\telement = {\n\t\t\t\t\t\tname: words[1],\n\t\t\t\t\t\tcount: parseInt(words[2], 10),\n\t\t\t\t\t\tproperties: [],\n\t\t\t\t\t\tstorageSizeBytes: 0,\n\t\t\t\t\t};\n\t\t\t\t\tif (element.name === \"chunk\") chunkElement = element;\n\t\t\t\t\telse if (element.name === \"vertex\") vertexElement = element;\n\t\t\t\t\telse if (element.name === \"sh\") shElement = element;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"property\": {\n\t\t\t\t\tif (!DataTypeMap.has(words[1])) {\n\t\t\t\t\t\tthrow new Error(`Unrecognized property data type '${words[1]}' in ply header`);\n\t\t\t\t\t}\n\t\t\t\t\tconst StorageType = DataTypeMap.get(words[1]);\n\t\t\t\t\tconst storageSizeByes = StorageType.BYTES_PER_ELEMENT * element.count;\n\t\t\t\t\tif (element.name === \"vertex\") bytesPerSplat += StorageType.BYTES_PER_ELEMENT;\n\t\t\t\t\telement.properties.push({\n\t\t\t\t\t\ttype: words[1],\n\t\t\t\t\t\tname: words[2],\n\t\t\t\t\t\tstorage: null,\n\t\t\t\t\t\tbyteSize: StorageType.BYTES_PER_ELEMENT,\n\t\t\t\t\t\tstorageSizeByes: storageSizeByes,\n\t\t\t\t\t});\n\t\t\t\t\telement.storageSizeBytes += storageSizeByes;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase HeaderEndToken:\n\t\t\t\t\tdone = true;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(`Unrecognized header value '${words[0]}' in ply header`);\n\t\t\t}\n\t\t\tif (done) break;\n\t\t}\n\n\t\tlet sphericalHarmonicsDegree = 0;\n\t\tlet sphericalHarmonicsPerSplat = 0;\n\t\tif (shElement) {\n\t\t\tsphericalHarmonicsPerSplat = shElement.properties.length;\n\t\t\tif (shElement.properties.length >= 45) {\n\t\t\t\tsphericalHarmonicsDegree = 3;\n\t\t\t} else if (shElement.properties.length >= 24) {\n\t\t\t\tsphericalHarmonicsDegree = 2;\n\t\t\t} else if (shElement.properties.length >= 9) {\n\t\t\t\tsphericalHarmonicsDegree = 1;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tchunkElement: chunkElement,\n\t\t\tvertexElement: vertexElement,\n\t\t\tshElement: shElement,\n\t\t\tbytesPerSplat: bytesPerSplat,\n\t\t\theaderSizeBytes: headerText.indexOf(HeaderEndToken) + HeaderEndToken.length + 1,\n\t\t\tsphericalHarmonicsDegree: sphericalHarmonicsDegree,\n\t\t\tsphericalHarmonicsPerSplat: sphericalHarmonicsPerSplat,\n\t\t};\n\t}\n\n\tstatic decodeHeader(plyBuffer) {\n\t\t/**\n\t\t * Searches for the first occurrence of a sequence within a buffer.\n\t\t * @example\n\t\t * find(new Uint8Array([1, 2, 3, 4]), new Uint8Array([3, 4])); // 2\n\t\t * @param {Uint8Array} buf - The buffer in which to search.\n\t\t * @param {Uint8Array} search - The sequence to search for.\n\t\t * @return {number} The index of the first occurrence of the search sequence in the buffer, or -1 if not found.\n\t\t */\n\t\tconst find = (buf, search) => {\n\t\t\tconst endIndex = buf.length - search.length;\n\t\t\tlet i;\n\t\t\tlet j;\n\t\t\tfor (i = 0; i <= endIndex; ++i) {\n\t\t\t\tfor (j = 0; j < search.length; ++j) {\n\t\t\t\t\tif (buf[i + j] !== search[j]) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (j === search.length) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn -1;\n\t\t};\n\n\t\t/**\n\t\t * Checks if array 'a' starts with the same elements as array 'b'.\n\t\t * @example\n\t\t * startsWith(new Uint8Array([1, 2, 3, 4]), new Uint8Array([1, 2])); // true\n\t\t * @param {Uint8Array} a - The array to check against.\n\t\t * @param {Uint8Array} b - The array of elements to look for at the start of 'a'.\n\t\t * @return {boolean} - True if 'a' starts with all elements of 'b', otherwise false.\n\t\t */\n\t\tconst startsWith = (a, b) => {\n\t\t\tif (a.length < b.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tfor (let i = 0; i < b.length; ++i) {\n\t\t\t\tif (a[i] !== b[i]) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t};\n\n\t\tlet buf = new Uint8Array(plyBuffer);\n\t\tlet endHeaderTokenOffset;\n\n\t\tif (buf.length >= HeaderMagicBytes.length && !startsWith(buf, HeaderMagicBytes)) {\n\t\t\tthrow new Error(\"Invalid PLY header\");\n\t\t}\n\n\t\tendHeaderTokenOffset = find(buf, HeaderEndTokenBytes);\n\t\tif (endHeaderTokenOffset === -1) {\n\t\t\tthrow new Error(\"End of PLY header not found\");\n\t\t}\n\n\t\tconst headerText = new TextDecoder(\"ascii\").decode(buf.slice(0, endHeaderTokenOffset));\n\n\t\tconst {\n\t\t\tchunkElement,\n\t\t\tvertexElement,\n\t\t\tshElement,\n\t\t\tsphericalHarmonicsDegree,\n\t\t\tsphericalHarmonicsPerSplat,\n\t\t\tbytesPerSplat,\n\t\t} = PlayCanvasCompressedPlyParser.decodeHeaderText(headerText);\n\n\t\treturn {\n\t\t\theaderSizeBytes: endHeaderTokenOffset + HeaderEndTokenBytes.length,\n\t\t\tbytesPerSplat: bytesPerSplat,\n\t\t\tchunkElement: chunkElement,\n\t\t\tvertexElement: vertexElement,\n\t\t\tshElement: shElement,\n\t\t\tsphericalHarmonicsDegree: sphericalHarmonicsDegree,\n\t\t\tsphericalHarmonicsPerSplat: sphericalHarmonicsPerSplat,\n\t\t};\n\t}\n\n\tstatic readElementData(element, readBuffer, readOffset, fromIndex, toIndex, propertyFilter = null) {\n\t\tlet dataView = readBuffer instanceof DataView ? readBuffer : new DataView(readBuffer);\n\n\t\tfromIndex = fromIndex || 0;\n\t\ttoIndex = toIndex || element.count - 1;\n\t\tfor (let e = fromIndex; e <= toIndex; ++e) {\n\t\t\tfor (let j = 0; j < element.properties.length; ++j) {\n\t\t\t\tconst property = element.properties[j];\n\n\t\t\t\tconst StorageType = DataTypeMap.get(property.type);\n\t\t\t\tconst requiredStorageSizeBytes = StorageType.BYTES_PER_ELEMENT * element.count;\n\t\t\t\tif (\n\t\t\t\t\t(!property.storage || property.storage.byteLength < requiredStorageSizeBytes) &&\n\t\t\t\t\t(!propertyFilter || propertyFilter(property.name))\n\t\t\t\t) {\n\t\t\t\t\tproperty.storage = new StorageType(element.count);\n\t\t\t\t}\n\n\t\t\t\tif (property.storage) {\n\t\t\t\t\tswitch (property.type) {\n\t\t\t\t\t\tcase \"char\":\n\t\t\t\t\t\t\tproperty.storage[e] = dataView.getInt8(readOffset);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"uchar\":\n\t\t\t\t\t\t\tproperty.storage[e] = dataView.getUint8(readOffset);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"short\":\n\t\t\t\t\t\t\tproperty.storage[e] = dataView.getInt16(readOffset, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"ushort\":\n\t\t\t\t\t\t\tproperty.storage[e] = dataView.getUint16(readOffset, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"int\":\n\t\t\t\t\t\t\tproperty.storage[e] = dataView.getInt32(readOffset, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"uint\":\n\t\t\t\t\t\t\tproperty.storage[e] = dataView.getUint32(readOffset, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"float\":\n\t\t\t\t\t\t\tproperty.storage[e] = dataView.getFloat32(readOffset, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"double\":\n\t\t\t\t\t\t\tproperty.storage[e] = dataView.getFloat64(readOffset, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treadOffset += property.byteSize;\n\t\t\t}\n\t\t}\n\n\t\treturn readOffset;\n\t}\n\n\tstatic readPly(plyBuffer, propertyFilter = null) {\n\t\tconst header = PlayCanvasCompressedPlyParser.decodeHeader(plyBuffer);\n\n\t\tlet readIndex = PlayCanvasCompressedPlyParser.readElementData(\n\t\t\theader.chunkElement,\n\t\t\tplyBuffer,\n\t\t\theader.headerSizeBytes,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tpropertyFilter,\n\t\t);\n\t\treadIndex = PlayCanvasCompressedPlyParser.readElementData(\n\t\t\theader.vertexElement,\n\t\t\tplyBuffer,\n\t\t\treadIndex,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tpropertyFilter,\n\t\t);\n\t\tPlayCanvasCompressedPlyParser.readElementData(\n\t\t\theader.shElement,\n\t\t\tplyBuffer,\n\t\t\treadIndex,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tpropertyFilter,\n\t\t);\n\n\t\treturn {\n\t\t\tchunkElement: header.chunkElement,\n\t\t\tvertexElement: header.vertexElement,\n\t\t\tshElement: header.shElement,\n\t\t\tsphericalHarmonicsDegree: header.sphericalHarmonicsDegree,\n\t\t\tsphericalHarmonicsPerSplat: header.sphericalHarmonicsPerSplat,\n\t\t};\n\t}\n\n\tstatic getElementStorageArrays(chunkElement, vertexElement, shElement) {\n\t\tconst storageArrays = {};\n\n\t\tif (vertexElement) {\n\t\t\tconst minR = getElementPropStorage(chunkElement, \"min_r\");\n\t\t\tconst minG = getElementPropStorage(chunkElement, \"min_g\");\n\t\t\tconst minB = getElementPropStorage(chunkElement, \"min_b\");\n\t\t\tconst maxR = getElementPropStorage(chunkElement, \"max_r\");\n\t\t\tconst maxG = getElementPropStorage(chunkElement, \"max_g\");\n\t\t\tconst maxB = getElementPropStorage(chunkElement, \"max_b\");\n\t\t\tconst minX = getElementPropStorage(chunkElement, \"min_x\");\n\t\t\tconst minY = getElementPropStorage(chunkElement, \"min_y\");\n\t\t\tconst minZ = getElementPropStorage(chunkElement, \"min_z\");\n\t\t\tconst maxX = getElementPropStorage(chunkElement, \"max_x\");\n\t\t\tconst maxY = getElementPropStorage(chunkElement, \"max_y\");\n\t\t\tconst maxZ = getElementPropStorage(chunkElement, \"max_z\");\n\t\t\tconst minScaleX = getElementPropStorage(chunkElement, \"min_scale_x\");\n\t\t\tconst minScaleY = getElementPropStorage(chunkElement, \"min_scale_y\");\n\t\t\tconst minScaleZ = getElementPropStorage(chunkElement, \"min_scale_z\");\n\t\t\tconst maxScaleX = getElementPropStorage(chunkElement, \"max_scale_x\");\n\t\t\tconst maxScaleY = getElementPropStorage(chunkElement, \"max_scale_y\");\n\t\t\tconst maxScaleZ = getElementPropStorage(chunkElement, \"max_scale_z\");\n\t\t\tconst position = getElementPropStorage(vertexElement, \"packed_position\");\n\t\t\tconst rotation = getElementPropStorage(vertexElement, \"packed_rotation\");\n\t\t\tconst scale = getElementPropStorage(vertexElement, \"packed_scale\");\n\t\t\tconst color = getElementPropStorage(vertexElement, \"packed_color\");\n\n\t\t\tstorageArrays[\"colorExtremes\"] = {\n\t\t\t\tminR,\n\t\t\t\tmaxR,\n\t\t\t\tminG,\n\t\t\t\tmaxG,\n\t\t\t\tminB,\n\t\t\t\tmaxB,\n\t\t\t};\n\t\t\tstorageArrays[\"positionExtremes\"] = {\n\t\t\t\tminX,\n\t\t\t\tmaxX,\n\t\t\t\tminY,\n\t\t\t\tmaxY,\n\t\t\t\tminZ,\n\t\t\t\tmaxZ,\n\t\t\t};\n\t\t\tstorageArrays[\"scaleExtremes\"] = {\n\t\t\t\tminScaleX,\n\t\t\t\tmaxScaleX,\n\t\t\t\tminScaleY,\n\t\t\t\tmaxScaleY,\n\t\t\t\tminScaleZ,\n\t\t\t\tmaxScaleZ,\n\t\t\t};\n\t\t\tstorageArrays[\"position\"] = position;\n\t\t\tstorageArrays[\"rotation\"] = rotation;\n\t\t\tstorageArrays[\"scale\"] = scale;\n\t\t\tstorageArrays[\"color\"] = color;\n\t\t}\n\n\t\tif (shElement) {\n\t\t\tconst shStorageArrays = {};\n\t\t\tfor (let i = 0; i < 45; i++) {\n\t\t\t\tconst fRestKey = `f_rest_${i}`;\n\t\t\t\tconst fRest = getElementPropStorage(shElement, fRestKey);\n\t\t\t\tif (fRest) {\n\t\t\t\t\tshStorageArrays[fRestKey] = fRest;\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tstorageArrays[\"sh\"] = shStorageArrays;\n\t\t}\n\n\t\treturn storageArrays;\n\t}\n\n\tstatic decompressBaseSplat = (function() {\n\t\tconst p = new THREE.Vector3();\n\t\tconst r = new THREE.Quaternion();\n\t\tconst s = new THREE.Vector3();\n\t\tconst c = new THREE.Vector4();\n\n\t\tconst OFFSET = UncompressedSplatArray.OFFSET;\n\n\t\treturn function(\n\t\t\tindex,\n\t\t\tchunkSplatIndexOffset,\n\t\t\tpositionArray,\n\t\t\tpositionExtremes,\n\t\t\tscaleArray,\n\t\t\tscaleExtremes,\n\t\t\trotationArray,\n\t\t\tcolorExtremes,\n\t\t\tcolorArray,\n\t\t\toutSplat,\n\t\t) {\n\t\t\toutSplat = outSplat || UncompressedSplatArray.createSplat();\n\n\t\t\tconst chunkIndex = Math.floor((chunkSplatIndexOffset + index) / 256);\n\n\t\t\tunpack111011(p, positionArray[index]);\n\t\t\tunpackRot(r, rotationArray[index]);\n\t\t\tunpack111011(s, scaleArray[index]);\n\t\t\tunpack8888(c, colorArray[index]);\n\n\t\t\toutSplat[OFFSET.X] = lerp(positionExtremes.minX[chunkIndex], positionExtremes.maxX[chunkIndex], p.x);\n\t\t\toutSplat[OFFSET.Y] = lerp(positionExtremes.minY[chunkIndex], positionExtremes.maxY[chunkIndex], p.y);\n\t\t\toutSplat[OFFSET.Z] = lerp(positionExtremes.minZ[chunkIndex], positionExtremes.maxZ[chunkIndex], p.z);\n\n\t\t\toutSplat[OFFSET.ROTATION0] = r.x;\n\t\t\toutSplat[OFFSET.ROTATION1] = r.y;\n\t\t\toutSplat[OFFSET.ROTATION2] = r.z;\n\t\t\toutSplat[OFFSET.ROTATION3] = r.w;\n\n\t\t\toutSplat[OFFSET.SCALE0] = Math.exp(\n\t\t\t\tlerp(scaleExtremes.minScaleX[chunkIndex], scaleExtremes.maxScaleX[chunkIndex], s.x),\n\t\t\t);\n\t\t\toutSplat[OFFSET.SCALE1] = Math.exp(\n\t\t\t\tlerp(scaleExtremes.minScaleY[chunkIndex], scaleExtremes.maxScaleY[chunkIndex], s.y),\n\t\t\t);\n\t\t\toutSplat[OFFSET.SCALE2] = Math.exp(\n\t\t\t\tlerp(scaleExtremes.minScaleZ[chunkIndex], scaleExtremes.maxScaleZ[chunkIndex], s.z),\n\t\t\t);\n\n\t\t\tif (colorExtremes.minR && colorExtremes.maxR) {\n\t\t\t\toutSplat[OFFSET.FDC0] = clamp(\n\t\t\t\t\tMath.round(lerp(colorExtremes.minR[chunkIndex], colorExtremes.maxR[chunkIndex], c.x) * 255),\n\t\t\t\t\t0,\n\t\t\t\t\t255,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\toutSplat[OFFSET.FDC0] = clamp(Math.floor(c.x * 255), 0, 255);\n\t\t\t}\n\t\t\tif (colorExtremes.minG && colorExtremes.maxG) {\n\t\t\t\toutSplat[OFFSET.FDC1] = clamp(\n\t\t\t\t\tMath.round(lerp(colorExtremes.minG[chunkIndex], colorExtremes.maxG[chunkIndex], c.y) * 255),\n\t\t\t\t\t0,\n\t\t\t\t\t255,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\toutSplat[OFFSET.FDC1] = clamp(Math.floor(c.y * 255), 0, 255);\n\t\t\t}\n\t\t\tif (colorExtremes.minB && colorExtremes.maxB) {\n\t\t\t\toutSplat[OFFSET.FDC2] = clamp(\n\t\t\t\t\tMath.round(lerp(colorExtremes.minB[chunkIndex], colorExtremes.maxB[chunkIndex], c.z) * 255),\n\t\t\t\t\t0,\n\t\t\t\t\t255,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\toutSplat[OFFSET.FDC2] = clamp(Math.floor(c.z * 255), 0, 255);\n\t\t\t}\n\t\t\toutSplat[OFFSET.OPACITY] = clamp(Math.floor(c.w * 255), 0, 255);\n\n\t\t\treturn outSplat;\n\t\t};\n\t})();\n\n\tstatic decompressSphericalHarmonics = (function() {\n\t\tconst shCoeffMap = [0, 3, 8, 15];\n\n\t\tconst shIndexMap = [\n\t\t\t0, 1, 2, 9, 10, 11, 12, 13, 24, 25, 26, 27, 28, 29, 30, 3, 4, 5, 14, 15, 16, 17, 18, 31, 32, 33, 34, 35,\n\t\t\t36, 37, 6, 7, 8, 19, 20, 21, 22, 23, 38, 39, 40, 41, 42, 43, 44,\n\t\t];\n\n\t\treturn function(index, shArray, outSphericalHarmonicsDegree, readSphericalHarmonicsDegree, outSplat) {\n\t\t\toutSplat = outSplat || UncompressedSplatArray.createSplat();\n\t\t\tlet outSHCoeff = shCoeffMap[outSphericalHarmonicsDegree];\n\t\t\tlet readSHCoeff = shCoeffMap[readSphericalHarmonicsDegree];\n\t\t\tfor (let j = 0; j < 3; ++j) {\n\t\t\t\tfor (let k = 0; k < 15; ++k) {\n\t\t\t\t\tconst outIndex = shIndexMap[j * 15 + k];\n\t\t\t\t\tif (k < outSHCoeff && k < readSHCoeff) {\n\t\t\t\t\t\toutSplat[UncompressedSplatArray.OFFSET.FRC0 + outIndex] =\n\t\t\t\t\t\t\tshArray[j * readSHCoeff + k][index] * (8 / 255) - 4;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn outSplat;\n\t\t};\n\t})();\n\n\tstatic parseToUncompressedSplatBufferSection(\n\t\tchunkElement,\n\t\tvertexElement,\n\t\tfromIndex,\n\t\ttoIndex,\n\t\tchunkSplatIndexOffset,\n\t\tvertexDataBuffer,\n\t\toutBuffer,\n\t\toutOffset,\n\t\tpropertyFilter = null,\n\t) {\n\t\tPlayCanvasCompressedPlyParser.readElementData(\n\t\t\tvertexElement,\n\t\t\tvertexDataBuffer,\n\t\t\t0,\n\t\t\tfromIndex,\n\t\t\ttoIndex,\n\t\t\tpropertyFilter,\n\t\t);\n\n\t\tconst outBytesPerSplat = SplatBuffer.CompressionLevels[0].SphericalHarmonicsDegrees[0].BytesPerSplat;\n\n\t\tconst { positionExtremes, scaleExtremes, colorExtremes, position, rotation, scale, color } =\n\t\t\tPlayCanvasCompressedPlyParser.getElementStorageArrays(chunkElement, vertexElement);\n\n\t\tconst tempSplat = UncompressedSplatArray.createSplat();\n\n\t\tfor (let i = fromIndex; i <= toIndex; ++i) {\n\t\t\tPlayCanvasCompressedPlyParser.decompressBaseSplat(\n\t\t\t\ti,\n\t\t\t\tchunkSplatIndexOffset,\n\t\t\t\tposition,\n\t\t\t\tpositionExtremes,\n\t\t\t\tscale,\n\t\t\t\tscaleExtremes,\n\t\t\t\trotation,\n\t\t\t\tcolorExtremes,\n\t\t\t\tcolor,\n\t\t\t\ttempSplat,\n\t\t\t);\n\t\t\tconst outBase = i * outBytesPerSplat + outOffset;\n\t\t\tSplatBuffer.writeSplatDataToSectionBuffer(tempSplat, outBuffer, outBase, 0, 0);\n\t\t}\n\t}\n\n\tstatic parseToUncompressedSplatArraySection(\n\t\tchunkElement,\n\t\tvertexElement,\n\t\tfromIndex,\n\t\ttoIndex,\n\t\tchunkSplatIndexOffset,\n\t\tvertexDataBuffer,\n\t\tsplatArray,\n\t\tpropertyFilter = null,\n\t) {\n\t\tPlayCanvasCompressedPlyParser.readElementData(\n\t\t\tvertexElement,\n\t\t\tvertexDataBuffer,\n\t\t\t0,\n\t\t\tfromIndex,\n\t\t\ttoIndex,\n\t\t\tpropertyFilter,\n\t\t);\n\n\t\tconst { positionExtremes, scaleExtremes, colorExtremes, position, rotation, scale, color } =\n\t\t\tPlayCanvasCompressedPlyParser.getElementStorageArrays(chunkElement, vertexElement);\n\n\t\tfor (let i = fromIndex; i <= toIndex; ++i) {\n\t\t\tconst tempSplat = UncompressedSplatArray.createSplat();\n\t\t\tPlayCanvasCompressedPlyParser.decompressBaseSplat(\n\t\t\t\ti,\n\t\t\t\tchunkSplatIndexOffset,\n\t\t\t\tposition,\n\t\t\t\tpositionExtremes,\n\t\t\t\tscale,\n\t\t\t\tscaleExtremes,\n\t\t\t\trotation,\n\t\t\t\tcolorExtremes,\n\t\t\t\tcolor,\n\t\t\t\ttempSplat,\n\t\t\t);\n\t\t\tsplatArray.addSplat(tempSplat);\n\t\t}\n\t}\n\n\tstatic parseSphericalHarmonicsToUncompressedSplatArraySection(\n\t\tchunkElement,\n\t\tshElement,\n\t\tfromIndex,\n\t\ttoIndex,\n\t\tvertexDataBuffer,\n\t\tvertexReadOffset,\n\t\toutSphericalHarmonicsDegree,\n\t\treadSphericalHarmonicsDegree,\n\t\tsplatArray,\n\t\tpropertyFilter = null,\n\t) {\n\t\tPlayCanvasCompressedPlyParser.readElementData(\n\t\t\tshElement,\n\t\t\tvertexDataBuffer,\n\t\t\tvertexReadOffset,\n\t\t\tfromIndex,\n\t\t\ttoIndex,\n\t\t\tpropertyFilter,\n\t\t);\n\n\t\tconst { sh } = PlayCanvasCompressedPlyParser.getElementStorageArrays(chunkElement, undefined, shElement);\n\t\tconst shArrays = Object.values(sh);\n\n\t\tfor (let i = fromIndex; i <= toIndex; ++i) {\n\t\t\tPlayCanvasCompressedPlyParser.decompressSphericalHarmonics(\n\t\t\t\ti,\n\t\t\t\tshArrays,\n\t\t\t\toutSphericalHarmonicsDegree,\n\t\t\t\treadSphericalHarmonicsDegree,\n\t\t\t\tsplatArray.splats[i],\n\t\t\t);\n\t\t}\n\t}\n\n\tstatic parseToUncompressedSplatArray(plyBuffer, outSphericalHarmonicsDegree) {\n\t\tconst { chunkElement, vertexElement, shElement, sphericalHarmonicsDegree } =\n\t\t\tPlayCanvasCompressedPlyParser.readPly(plyBuffer);\n\n\t\toutSphericalHarmonicsDegree = Math.min(outSphericalHarmonicsDegree, sphericalHarmonicsDegree);\n\n\t\tconst splatArray = new UncompressedSplatArray(outSphericalHarmonicsDegree);\n\n\t\tconst { positionExtremes, scaleExtremes, colorExtremes, position, rotation, scale, color } =\n\t\t\tPlayCanvasCompressedPlyParser.getElementStorageArrays(chunkElement, vertexElement);\n\n\t\tlet shArrays;\n\t\tif (outSphericalHarmonicsDegree > 0) {\n\t\t\tconst { sh } = PlayCanvasCompressedPlyParser.getElementStorageArrays(\n\t\t\t\tchunkElement,\n\t\t\t\tundefined,\n\t\t\t\tshElement,\n\t\t\t);\n\t\t\tshArrays = Object.values(sh);\n\t\t}\n\n\t\tfor (let i = 0; i < vertexElement.count; ++i) {\n\t\t\tsplatArray.addDefaultSplat();\n\t\t\tconst newSplat = splatArray.getSplat(splatArray.splatCount - 1);\n\n\t\t\tPlayCanvasCompressedPlyParser.decompressBaseSplat(\n\t\t\t\ti,\n\t\t\t\t0,\n\t\t\t\tposition,\n\t\t\t\tpositionExtremes,\n\t\t\t\tscale,\n\t\t\t\tscaleExtremes,\n\t\t\t\trotation,\n\t\t\t\tcolorExtremes,\n\t\t\t\tcolor,\n\t\t\t\tnewSplat,\n\t\t\t);\n\n\t\t\tif (outSphericalHarmonicsDegree > 0) {\n\t\t\t\tPlayCanvasCompressedPlyParser.decompressSphericalHarmonics(\n\t\t\t\t\ti,\n\t\t\t\t\tshArrays,\n\t\t\t\t\toutSphericalHarmonicsDegree,\n\t\t\t\t\tsphericalHarmonicsDegree,\n\t\t\t\t\tnewSplat,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn splatArray;\n\t}\n\n\tstatic parseToUncompressedSplatBuffer(plyBuffer, outSphericalHarmonicsDegree) {\n\t\tconst { chunkElement, vertexElement, shElement, sphericalHarmonicsDegree } =\n\t\t\tPlayCanvasCompressedPlyParser.readPly(plyBuffer);\n\n\t\toutSphericalHarmonicsDegree = Math.min(outSphericalHarmonicsDegree, sphericalHarmonicsDegree);\n\n\t\tconst { splatBuffer, splatBufferDataOffsetBytes } = SplatBuffer.preallocateUncompressed(\n\t\t\tvertexElement.count,\n\t\t\toutSphericalHarmonicsDegree,\n\t\t);\n\n\t\tconst { positionExtremes, scaleExtremes, colorExtremes, position, rotation, scale, color } =\n\t\t\tPlayCanvasCompressedPlyParser.getElementStorageArrays(chunkElement, vertexElement);\n\n\t\tlet shArrays;\n\t\tif (outSphericalHarmonicsDegree > 0) {\n\t\t\tconst { sh } = PlayCanvasCompressedPlyParser.getElementStorageArrays(\n\t\t\t\tchunkElement,\n\t\t\t\tundefined,\n\t\t\t\tshElement,\n\t\t\t);\n\t\t\tshArrays = Object.values(sh);\n\t\t}\n\n\t\tconst outBytesPerSplat =\n\t\t\tSplatBuffer.CompressionLevels[0].SphericalHarmonicsDegrees[outSphericalHarmonicsDegree].BytesPerSplat;\n\n\t\tconst newSplat = UncompressedSplatArray.createSplat(outSphericalHarmonicsDegree);\n\n\t\tfor (let i = 0; i < vertexElement.count; ++i) {\n\t\t\tPlayCanvasCompressedPlyParser.decompressBaseSplat(\n\t\t\t\ti,\n\t\t\t\t0,\n\t\t\t\tposition,\n\t\t\t\tpositionExtremes,\n\t\t\t\tscale,\n\t\t\t\tscaleExtremes,\n\t\t\t\trotation,\n\t\t\t\tcolorExtremes,\n\t\t\t\tcolor,\n\t\t\t\tnewSplat,\n\t\t\t);\n\t\t\tif (outSphericalHarmonicsDegree > 0) {\n\t\t\t\tPlayCanvasCompressedPlyParser.decompressSphericalHarmonics(\n\t\t\t\t\ti,\n\t\t\t\t\tshArrays,\n\t\t\t\t\toutSphericalHarmonicsDegree,\n\t\t\t\t\tsphericalHarmonicsDegree,\n\t\t\t\t\tnewSplat,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst outBase = i * outBytesPerSplat + splatBufferDataOffsetBytes;\n\t\t\tSplatBuffer.writeSplatDataToSectionBuffer(\n\t\t\t\tnewSplat,\n\t\t\t\tsplatBuffer.bufferData,\n\t\t\t\toutBase,\n\t\t\t\t0,\n\t\t\t\toutSphericalHarmonicsDegree,\n\t\t\t);\n\t\t}\n\n\t\treturn splatBuffer;\n\t}\n}\n","export const PlyFormat = {\n\tINRIAV1: 0,\n\tINRIAV2: 1,\n\tPlayCanvasCompressed: 2,\n};\n","import { PlyFormat } from \"./PlyFormat.js\";\n\nconst [\n\tFieldSizeIdDouble,\n\tFieldSizeIdInt,\n\tFieldSizeIdUInt,\n\tFieldSizeIdFloat,\n\tFieldSizeIdShort,\n\tFieldSizeIdUShort,\n\tFieldSizeIdUChar,\n] = [0, 1, 2, 3, 4, 5, 6];\n\nconst FieldSizeStringMap = {\n\tdouble: FieldSizeIdDouble,\n\tint: FieldSizeIdInt,\n\tuint: FieldSizeIdUInt,\n\tfloat: FieldSizeIdFloat,\n\tshort: FieldSizeIdShort,\n\tushort: FieldSizeIdUShort,\n\tuchar: FieldSizeIdUChar,\n};\n\nconst FieldSize = {\n\t[FieldSizeIdDouble]: 8,\n\t[FieldSizeIdInt]: 4,\n\t[FieldSizeIdUInt]: 4,\n\t[FieldSizeIdFloat]: 4,\n\t[FieldSizeIdShort]: 2,\n\t[FieldSizeIdUShort]: 2,\n\t[FieldSizeIdUChar]: 1,\n};\n\nexport class PlyParserUtils {\n\tstatic HeaderEndToken = \"end_header\";\n\n\tstatic decodeSectionHeader(headerLines, fieldNameIdMap, headerStartLine = 0) {\n\t\tconst extractedLines = [];\n\n\t\tlet processingSection = false;\n\t\tlet headerEndLine = -1;\n\t\tlet vertexCount = 0;\n\t\tlet endOfHeader = false;\n\t\tlet sectionName = null;\n\n\t\tconst fieldIds = [];\n\t\tconst fieldTypes = [];\n\t\tconst allFieldNames = [];\n\t\tconst usedFieldNames = [];\n\t\tconst fieldTypesByName = {};\n\n\t\tfor (let i = headerStartLine; i < headerLines.length; i++) {\n\t\t\tconst line = headerLines[i].trim();\n\t\t\tif (line.startsWith(\"element\")) {\n\t\t\t\tif (processingSection) {\n\t\t\t\t\theaderEndLine--;\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tprocessingSection = true;\n\t\t\t\t\theaderStartLine = i;\n\t\t\t\t\theaderEndLine = i;\n\t\t\t\t\tconst lineComponents = line.split(\" \");\n\t\t\t\t\tlet validComponents = 0;\n\t\t\t\t\tfor (let lineComponent of lineComponents) {\n\t\t\t\t\t\tconst trimmedComponent = lineComponent.trim();\n\t\t\t\t\t\tif (trimmedComponent.length > 0) {\n\t\t\t\t\t\t\tvalidComponents++;\n\t\t\t\t\t\t\tif (validComponents === 2) {\n\t\t\t\t\t\t\t\tsectionName = trimmedComponent;\n\t\t\t\t\t\t\t} else if (validComponents === 3) {\n\t\t\t\t\t\t\t\tvertexCount = parseInt(trimmedComponent);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (line.startsWith(\"property\")) {\n\t\t\t\tconst fieldMatch = line.match(/(\\w+)\\s+(\\w+)\\s+(\\w+)/);\n\t\t\t\tif (fieldMatch) {\n\t\t\t\t\tconst fieldTypeStr = fieldMatch[2];\n\t\t\t\t\tconst fieldName = fieldMatch[3];\n\t\t\t\t\tallFieldNames.push(fieldName);\n\t\t\t\t\tconst fieldId = fieldNameIdMap[fieldName];\n\t\t\t\t\tfieldTypesByName[fieldName] = fieldTypeStr;\n\t\t\t\t\tconst fieldType = FieldSizeStringMap[fieldTypeStr];\n\t\t\t\t\tif (fieldId !== undefined) {\n\t\t\t\t\t\tusedFieldNames.push(fieldName);\n\t\t\t\t\t\tfieldIds.push(fieldId);\n\t\t\t\t\t\tfieldTypes[fieldId] = fieldType;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (line === PlyParserUtils.HeaderEndToken) {\n\t\t\t\tendOfHeader = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (processingSection) {\n\t\t\t\textractedLines.push(line);\n\t\t\t\theaderEndLine++;\n\t\t\t}\n\t\t}\n\n\t\tconst fieldOffsets = [];\n\t\tlet bytesPerVertex = 0;\n\t\tfor (let fieldName of allFieldNames) {\n\t\t\tconst fieldType = fieldTypesByName[fieldName];\n\t\t\tif (fieldTypesByName.hasOwnProperty(fieldName)) {\n\t\t\t\tconst fieldId = fieldNameIdMap[fieldName];\n\t\t\t\tif (fieldId !== undefined) {\n\t\t\t\t\tfieldOffsets[fieldId] = bytesPerVertex;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbytesPerVertex += FieldSize[FieldSizeStringMap[fieldType]];\n\t\t}\n\n\t\tconst sphericalHarmonics = PlyParserUtils.decodeSphericalHarmonicsFromSectionHeader(\n\t\t\tallFieldNames,\n\t\t\tfieldNameIdMap,\n\t\t);\n\n\t\treturn {\n\t\t\theaderLines: extractedLines,\n\t\t\theaderStartLine: headerStartLine,\n\t\t\theaderEndLine: headerEndLine,\n\t\t\tfieldTypes: fieldTypes,\n\t\t\tfieldIds: fieldIds,\n\t\t\tfieldOffsets: fieldOffsets,\n\t\t\tbytesPerVertex: bytesPerVertex,\n\t\t\tvertexCount: vertexCount,\n\t\t\tdataSizeBytes: bytesPerVertex * vertexCount,\n\t\t\tendOfHeader: endOfHeader,\n\t\t\tsectionName: sectionName,\n\t\t\tsphericalHarmonicsDegree: sphericalHarmonics.degree,\n\t\t\tsphericalHarmonicsCoefficientsPerChannel: sphericalHarmonics.coefficientsPerChannel,\n\t\t\tsphericalHarmonicsDegree1Fields: sphericalHarmonics.degree1Fields,\n\t\t\tsphericalHarmonicsDegree2Fields: sphericalHarmonics.degree2Fields,\n\t\t};\n\t}\n\n\tstatic decodeSphericalHarmonicsFromSectionHeader(fieldNames, fieldNameIdMap) {\n\t\tlet sphericalHarmonicsFieldCount = 0;\n\t\tlet coefficientsPerChannel = 0;\n\t\tfor (let fieldName of fieldNames) {\n\t\t\tif (fieldName.startsWith(\"f_rest\")) sphericalHarmonicsFieldCount++;\n\t\t}\n\t\tcoefficientsPerChannel = sphericalHarmonicsFieldCount / 3;\n\t\tlet degree = 0;\n\t\tif (coefficientsPerChannel >= 3) degree = 1;\n\t\tif (coefficientsPerChannel >= 8) degree = 2;\n\n\t\tlet degree1Fields = [];\n\t\tlet degree2Fields = [];\n\n\t\tfor (let rgb = 0; rgb < 3; rgb++) {\n\t\t\tif (degree >= 1) {\n\t\t\t\tfor (let i = 0; i < 3; i++) {\n\t\t\t\t\tdegree1Fields.push(fieldNameIdMap[\"f_rest_\" + (i + coefficientsPerChannel * rgb)]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (degree >= 2) {\n\t\t\t\tfor (let i = 0; i < 5; i++) {\n\t\t\t\t\tdegree2Fields.push(fieldNameIdMap[\"f_rest_\" + (i + coefficientsPerChannel * rgb + 3)]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tdegree: degree,\n\t\t\tcoefficientsPerChannel: coefficientsPerChannel,\n\t\t\tdegree1Fields: degree1Fields,\n\t\t\tdegree2Fields: degree2Fields,\n\t\t};\n\t}\n\n\tstatic getHeaderSectionNames(headerLines) {\n\t\tconst sectionNames = [];\n\t\tfor (let headerLine of headerLines) {\n\t\t\tif (headerLine.startsWith(\"element\")) {\n\t\t\t\tconst lineComponents = headerLine.split(\" \");\n\t\t\t\tlet validComponents = 0;\n\t\t\t\tfor (let lineComponent of lineComponents) {\n\t\t\t\t\tconst trimmedComponent = lineComponent.trim();\n\t\t\t\t\tif (trimmedComponent.length > 0) {\n\t\t\t\t\t\tvalidComponents++;\n\t\t\t\t\t\tif (validComponents === 2) {\n\t\t\t\t\t\t\tsectionNames.push(trimmedComponent);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn sectionNames;\n\t}\n\n\tstatic checkTextForEndHeader(endHeaderTestText) {\n\t\tif (endHeaderTestText.includes(PlyParserUtils.HeaderEndToken)) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tstatic checkBufferForEndHeader(buffer, searchOfset, chunkSize, decoder) {\n\t\tconst endHeaderTestChunk = new Uint8Array(buffer, Math.max(0, searchOfset - chunkSize), chunkSize);\n\t\tconst endHeaderTestText = decoder.decode(endHeaderTestChunk);\n\t\treturn PlyParserUtils.checkTextForEndHeader(endHeaderTestText);\n\t}\n\n\tstatic extractHeaderFromBufferToText(plyBuffer) {\n\t\tconst decoder = new TextDecoder();\n\t\tlet headerOffset = 0;\n\t\tlet headerText = \"\";\n\t\tconst readChunkSize = 100;\n\n\t\twhile (true) {\n\t\t\tif (headerOffset + readChunkSize >= plyBuffer.byteLength) {\n\t\t\t\tthrow new Error(\"End of file reached while searching for end of header\");\n\t\t\t}\n\t\t\tconst headerChunk = new Uint8Array(plyBuffer, headerOffset, readChunkSize);\n\t\t\theaderText += decoder.decode(headerChunk);\n\t\t\theaderOffset += readChunkSize;\n\n\t\t\tif (PlyParserUtils.checkBufferForEndHeader(plyBuffer, headerOffset, readChunkSize * 2, decoder)) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn headerText;\n\t}\n\n\tstatic readHeaderFromBuffer(plyBuffer) {\n\t\tconst decoder = new TextDecoder();\n\t\tlet headerOffset = 0;\n\t\tlet headerText = \"\";\n\t\tconst readChunkSize = 100;\n\n\t\twhile (true) {\n\t\t\tif (headerOffset + readChunkSize >= plyBuffer.byteLength) {\n\t\t\t\tthrow new Error(\"End of file reached while searching for end of header\");\n\t\t\t}\n\t\t\tconst headerChunk = new Uint8Array(plyBuffer, headerOffset, readChunkSize);\n\t\t\theaderText += decoder.decode(headerChunk);\n\t\t\theaderOffset += readChunkSize;\n\n\t\t\tif (PlyParserUtils.checkBufferForEndHeader(plyBuffer, headerOffset, readChunkSize * 2, decoder)) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn headerText;\n\t}\n\n\tstatic convertHeaderTextToLines(headerText) {\n\t\tconst headerLines = headerText.split(\"\\n\");\n\t\tconst prunedLines = [];\n\t\tfor (let i = 0; i < headerLines.length; i++) {\n\t\t\tconst line = headerLines[i].trim();\n\t\t\tprunedLines.push(line);\n\t\t\tif (line === PlyParserUtils.HeaderEndToken) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn prunedLines;\n\t}\n\n\tstatic determineHeaderFormatFromHeaderText(headertText) {\n\t\tconst headerLines = PlyParserUtils.convertHeaderTextToLines(headertText);\n\t\tlet format = PlyFormat.INRIAV1;\n\t\tfor (let i = 0; i < headerLines.length; i++) {\n\t\t\tconst line = headerLines[i].trim();\n\t\t\tif (line.startsWith(\"element chunk\") || line.match(/[A-Za-z]*packed_[A-Za-z]*/)) {\n\t\t\t\tformat = PlyFormat.PlayCanvasCompressed;\n\t\t\t} else if (line.startsWith(\"element codebook_centers\")) {\n\t\t\t\tformat = PlyFormat.INRIAV2;\n\t\t\t} else if (line === PlyParserUtils.HeaderEndToken) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn format;\n\t}\n\n\tstatic determineHeaderFormatFromPlyBuffer(plyBuffer) {\n\t\tconst headertText = PlyParserUtils.extractHeaderFromBufferToText(plyBuffer);\n\t\treturn PlyParserUtils.determineHeaderFormatFromHeaderText(headertText);\n\t}\n\n\tstatic readVertex(vertexData, header, row, dataOffset, fieldsToRead, rawVertex, normalize = true) {\n\t\tconst offset = row * header.bytesPerVertex + dataOffset;\n\t\tconst fieldOffsets = header.fieldOffsets;\n\t\tconst fieldTypes = header.fieldTypes;\n\t\tfor (let fieldId of fieldsToRead) {\n\t\t\tconst fieldType = fieldTypes[fieldId];\n\t\t\tif (fieldType === FieldSizeIdFloat) {\n\t\t\t\trawVertex[fieldId] = vertexData.getFloat32(offset + fieldOffsets[fieldId], true);\n\t\t\t} else if (fieldType === FieldSizeIdShort) {\n\t\t\t\trawVertex[fieldId] = vertexData.getInt16(offset + fieldOffsets[fieldId], true);\n\t\t\t} else if (fieldType === FieldSizeIdUShort) {\n\t\t\t\trawVertex[fieldId] = vertexData.getUint16(offset + fieldOffsets[fieldId], true);\n\t\t\t} else if (fieldType === FieldSizeIdInt) {\n\t\t\t\trawVertex[fieldId] = vertexData.getInt32(offset + fieldOffsets[fieldId], true);\n\t\t\t} else if (fieldType === FieldSizeIdUInt) {\n\t\t\t\trawVertex[fieldId] = vertexData.getUint32(offset + fieldOffsets[fieldId], true);\n\t\t\t} else if (fieldType === FieldSizeIdUChar) {\n\t\t\t\tif (normalize) {\n\t\t\t\t\trawVertex[fieldId] = vertexData.getUint8(offset + fieldOffsets[fieldId]) / 255.0;\n\t\t\t\t} else {\n\t\t\t\t\trawVertex[fieldId] = vertexData.getUint8(offset + fieldOffsets[fieldId]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n","import * as THREE from \"three\";\nimport { clamp } from \"../../Util.js\";\nimport { UncompressedSplatArray } from \"../UncompressedSplatArray.js\";\nimport { SplatBuffer } from \"../SplatBuffer.js\";\nimport { PlyParserUtils } from \"./PlyParserUtils.js\";\n\nconst BaseFieldNamesToRead = [\n\t\"scale_0\",\n\t\"scale_1\",\n\t\"scale_2\",\n\t\"rot_0\",\n\t\"rot_1\",\n\t\"rot_2\",\n\t\"rot_3\",\n\t\"x\",\n\t\"y\",\n\t\"z\",\n\t\"f_dc_0\",\n\t\"f_dc_1\",\n\t\"f_dc_2\",\n\t\"opacity\",\n\t\"red\",\n\t\"green\",\n\t\"blue\",\n\t\"f_rest_0\",\n];\n\nconst BaseFieldsToReadIndexes = BaseFieldNamesToRead.map((e, i) => i);\n\nconst [\n\tSCALE_0,\n\tSCALE_1,\n\tSCALE_2,\n\tROT_0,\n\tROT_1,\n\tROT_2,\n\tROT_3,\n\tX,\n\tY,\n\tZ,\n\tF_DC_0,\n\tF_DC_1,\n\tF_DC_2,\n\tOPACITY,\n\tRED,\n\tGREEN,\n\tBLUE,\n\tF_REST_0,\n] = BaseFieldsToReadIndexes;\n\nexport class INRIAV1PlyParser {\n\tstatic decodeHeaderLines(headerLines) {\n\t\tlet shLineCount = 0;\n\t\theaderLines.forEach((line) => {\n\t\t\tif (line.includes(\"f_rest_\")) shLineCount++;\n\t\t});\n\n\t\tlet shFieldsToReadCount = 0;\n\t\tif (shLineCount >= 45) {\n\t\t\tshFieldsToReadCount = 45;\n\t\t} else if (shLineCount >= 24) {\n\t\t\tshFieldsToReadCount = 24;\n\t\t} else if (shLineCount >= 9) {\n\t\t\tshFieldsToReadCount = 9;\n\t\t}\n\n\t\tconst shFieldIndexesToMap = Array.from(Array(Math.max(shFieldsToReadCount - 1, 0)));\n\t\tlet shRemainingFieldNamesToRead = shFieldIndexesToMap.map((element, index) => `f_rest_${index + 1}`);\n\n\t\tconst fieldNamesToRead = [...BaseFieldNamesToRead, ...shRemainingFieldNamesToRead];\n\t\tconst fieldsToReadIndexes = fieldNamesToRead.map((e, i) => i);\n\n\t\tconst fieldNameIdMap = fieldsToReadIndexes.reduce((acc, element) => {\n\t\t\tacc[fieldNamesToRead[element]] = element;\n\t\t\treturn acc;\n\t\t}, {});\n\t\tconst header = PlyParserUtils.decodeSectionHeader(headerLines, fieldNameIdMap, 0);\n\t\theader.splatCount = header.vertexCount;\n\t\theader.bytesPerSplat = header.bytesPerVertex;\n\t\theader.fieldsToReadIndexes = fieldsToReadIndexes;\n\t\treturn header;\n\t}\n\n\tstatic decodeHeaderText(headerText) {\n\t\tconst headerLines = PlyParserUtils.convertHeaderTextToLines(headerText);\n\t\tconst header = INRIAV1PlyParser.decodeHeaderLines(headerLines);\n\t\theader.headerText = headerText;\n\t\theader.headerSizeBytes =\n\t\t\theaderText.indexOf(PlyParserUtils.HeaderEndToken) + PlyParserUtils.HeaderEndToken.length + 1;\n\t\treturn header;\n\t}\n\n\tstatic decodeHeaderFromBuffer(plyBuffer) {\n\t\tconst headerText = PlyParserUtils.readHeaderFromBuffer(plyBuffer);\n\t\treturn INRIAV1PlyParser.decodeHeaderText(headerText);\n\t}\n\n\tstatic findSplatData(plyBuffer, header) {\n\t\treturn new DataView(plyBuffer, header.headerSizeBytes);\n\t}\n\n\tstatic parseToUncompressedSplatBufferSection(\n\t\theader,\n\t\tfromSplat,\n\t\ttoSplat,\n\t\tsplatData,\n\t\tsplatDataOffset,\n\t\ttoBuffer,\n\t\ttoOffset,\n\t\toutSphericalHarmonicsDegree = 0,\n\t) {\n\t\toutSphericalHarmonicsDegree = Math.min(outSphericalHarmonicsDegree, header.sphericalHarmonicsDegree);\n\t\tconst outBytesPerSplat =\n\t\t\tSplatBuffer.CompressionLevels[0].SphericalHarmonicsDegrees[outSphericalHarmonicsDegree].BytesPerSplat;\n\n\t\tfor (let i = fromSplat; i <= toSplat; i++) {\n\t\t\tconst parsedSplat = INRIAV1PlyParser.parseToUncompressedSplat(\n\t\t\t\tsplatData,\n\t\t\t\ti,\n\t\t\t\theader,\n\t\t\t\tsplatDataOffset,\n\t\t\t\toutSphericalHarmonicsDegree,\n\t\t\t);\n\t\t\tconst outBase = i * outBytesPerSplat + toOffset;\n\t\t\tSplatBuffer.writeSplatDataToSectionBuffer(\n\t\t\t\tparsedSplat,\n\t\t\t\ttoBuffer,\n\t\t\t\toutBase,\n\t\t\t\t0,\n\t\t\t\toutSphericalHarmonicsDegree,\n\t\t\t);\n\t\t}\n\t}\n\n\tstatic parseToUncompressedSplatArraySection(\n\t\theader,\n\t\tfromSplat,\n\t\ttoSplat,\n\t\tsplatData,\n\t\tsplatDataOffset,\n\t\tsplatArray,\n\t\toutSphericalHarmonicsDegree = 0,\n\t) {\n\t\toutSphericalHarmonicsDegree = Math.min(outSphericalHarmonicsDegree, header.sphericalHarmonicsDegree);\n\t\tfor (let i = fromSplat; i <= toSplat; i++) {\n\t\t\tconst parsedSplat = INRIAV1PlyParser.parseToUncompressedSplat(\n\t\t\t\tsplatData,\n\t\t\t\ti,\n\t\t\t\theader,\n\t\t\t\tsplatDataOffset,\n\t\t\t\toutSphericalHarmonicsDegree,\n\t\t\t);\n\t\t\tsplatArray.addSplat(parsedSplat);\n\t\t}\n\t}\n\n\tstatic decodeSectionSplatData(\n\t\tsectionSplatData,\n\t\tsplatCount,\n\t\tsectionHeader,\n\t\toutSphericalHarmonicsDegree,\n\t\ttoSplatArray = true,\n\t) {\n\t\toutSphericalHarmonicsDegree = Math.min(\n\t\t\toutSphericalHarmonicsDegree,\n\t\t\tsectionHeader.sphericalHarmonicsDegree,\n\t\t);\n\t\tif (toSplatArray) {\n\t\t\tconst splatArray = new UncompressedSplatArray(outSphericalHarmonicsDegree);\n\t\t\tfor (let row = 0; row < splatCount; row++) {\n\t\t\t\tconst newSplat = INRIAV1PlyParser.parseToUncompressedSplat(\n\t\t\t\t\tsectionSplatData,\n\t\t\t\t\trow,\n\t\t\t\t\tsectionHeader,\n\t\t\t\t\t0,\n\t\t\t\t\toutSphericalHarmonicsDegree,\n\t\t\t\t);\n\t\t\t\tsplatArray.addSplat(newSplat);\n\t\t\t}\n\t\t\treturn splatArray;\n\t\t} else {\n\t\t\tconst { splatBuffer, splatBufferDataOffsetBytes } = SplatBuffer.preallocateUncompressed(\n\t\t\t\tsplatCount,\n\t\t\t\toutSphericalHarmonicsDegree,\n\t\t\t);\n\t\t\tINRIAV1PlyParser.parseToUncompressedSplatBufferSection(\n\t\t\t\tsectionHeader,\n\t\t\t\t0,\n\t\t\t\tsplatCount - 1,\n\t\t\t\tsectionSplatData,\n\t\t\t\t0,\n\t\t\t\tsplatBuffer.bufferData,\n\t\t\t\tsplatBufferDataOffsetBytes,\n\t\t\t\toutSphericalHarmonicsDegree,\n\t\t\t);\n\t\t\treturn splatBuffer;\n\t\t}\n\t}\n\n\tstatic parseToUncompressedSplat = (function() {\n\t\tlet rawSplat = [];\n\t\tconst tempRotation = new THREE.Quaternion();\n\n\t\tconst OFFSET_X = UncompressedSplatArray.OFFSET.X;\n\t\tconst OFFSET_Y = UncompressedSplatArray.OFFSET.Y;\n\t\tconst OFFSET_Z = UncompressedSplatArray.OFFSET.Z;\n\n\t\tconst OFFSET_SCALE0 = UncompressedSplatArray.OFFSET.SCALE0;\n\t\tconst OFFSET_SCALE1 = UncompressedSplatArray.OFFSET.SCALE1;\n\t\tconst OFFSET_SCALE2 = UncompressedSplatArray.OFFSET.SCALE2;\n\n\t\tconst OFFSET_ROTATION0 = UncompressedSplatArray.OFFSET.ROTATION0;\n\t\tconst OFFSET_ROTATION1 = UncompressedSplatArray.OFFSET.ROTATION1;\n\t\tconst OFFSET_ROTATION2 = UncompressedSplatArray.OFFSET.ROTATION2;\n\t\tconst OFFSET_ROTATION3 = UncompressedSplatArray.OFFSET.ROTATION3;\n\n\t\tconst OFFSET_FDC0 = UncompressedSplatArray.OFFSET.FDC0;\n\t\tconst OFFSET_FDC1 = UncompressedSplatArray.OFFSET.FDC1;\n\t\tconst OFFSET_FDC2 = UncompressedSplatArray.OFFSET.FDC2;\n\t\tconst OFFSET_OPACITY = UncompressedSplatArray.OFFSET.OPACITY;\n\n\t\tconst OFFSET_FRC = [];\n\n\t\tfor (let i = 0; i < 45; i++) {\n\t\t\tOFFSET_FRC[i] = UncompressedSplatArray.OFFSET.FRC0 + i;\n\t\t}\n\n\t\treturn function(splatData, row, header, splatDataOffset = 0, outSphericalHarmonicsDegree = 0) {\n\t\t\toutSphericalHarmonicsDegree = Math.min(outSphericalHarmonicsDegree, header.sphericalHarmonicsDegree);\n\t\t\tINRIAV1PlyParser.readSplat(splatData, header, row, splatDataOffset, rawSplat);\n\t\t\tconst newSplat = UncompressedSplatArray.createSplat(outSphericalHarmonicsDegree);\n\t\t\tif (rawSplat[SCALE_0] !== undefined) {\n\t\t\t\tnewSplat[OFFSET_SCALE0] = Math.exp(rawSplat[SCALE_0]);\n\t\t\t\tnewSplat[OFFSET_SCALE1] = Math.exp(rawSplat[SCALE_1]);\n\t\t\t\tnewSplat[OFFSET_SCALE2] = Math.exp(rawSplat[SCALE_2]);\n\t\t\t} else {\n\t\t\t\tnewSplat[OFFSET_SCALE0] = 0.01;\n\t\t\t\tnewSplat[OFFSET_SCALE1] = 0.01;\n\t\t\t\tnewSplat[OFFSET_SCALE2] = 0.01;\n\t\t\t}\n\n\t\t\tif (rawSplat[F_DC_0] !== undefined) {\n\t\t\t\tconst SH_C0 = 0.28209479177387814;\n\t\t\t\tnewSplat[OFFSET_FDC0] = (0.5 + SH_C0 * rawSplat[F_DC_0]) * 255;\n\t\t\t\tnewSplat[OFFSET_FDC1] = (0.5 + SH_C0 * rawSplat[F_DC_1]) * 255;\n\t\t\t\tnewSplat[OFFSET_FDC2] = (0.5 + SH_C0 * rawSplat[F_DC_2]) * 255;\n\t\t\t} else if (rawSplat[RED] !== undefined) {\n\t\t\t\tnewSplat[OFFSET_FDC0] = rawSplat[RED] * 255;\n\t\t\t\tnewSplat[OFFSET_FDC1] = rawSplat[GREEN] * 255;\n\t\t\t\tnewSplat[OFFSET_FDC2] = rawSplat[BLUE] * 255;\n\t\t\t} else {\n\t\t\t\tnewSplat[OFFSET_FDC0] = 0;\n\t\t\t\tnewSplat[OFFSET_FDC1] = 0;\n\t\t\t\tnewSplat[OFFSET_FDC2] = 0;\n\t\t\t}\n\n\t\t\tif (rawSplat[OPACITY] !== undefined) {\n\t\t\t\tnewSplat[OFFSET_OPACITY] = (1 / (1 + Math.exp(-rawSplat[OPACITY]))) * 255;\n\t\t\t}\n\n\t\t\tnewSplat[OFFSET_FDC0] = clamp(Math.floor(newSplat[OFFSET_FDC0]), 0, 255);\n\t\t\tnewSplat[OFFSET_FDC1] = clamp(Math.floor(newSplat[OFFSET_FDC1]), 0, 255);\n\t\t\tnewSplat[OFFSET_FDC2] = clamp(Math.floor(newSplat[OFFSET_FDC2]), 0, 255);\n\t\t\tnewSplat[OFFSET_OPACITY] = clamp(Math.floor(newSplat[OFFSET_OPACITY]), 0, 255);\n\n\t\t\tif (outSphericalHarmonicsDegree >= 1) {\n\t\t\t\tif (rawSplat[F_REST_0] !== undefined) {\n\t\t\t\t\tfor (let i = 0; i < 9; i++) {\n\t\t\t\t\t\tnewSplat[OFFSET_FRC[i]] = rawSplat[header.sphericalHarmonicsDegree1Fields[i]];\n\t\t\t\t\t}\n\t\t\t\t\tif (outSphericalHarmonicsDegree >= 2) {\n\t\t\t\t\t\tfor (let i = 0; i < 15; i++) {\n\t\t\t\t\t\t\tnewSplat[OFFSET_FRC[9 + i]] = rawSplat[header.sphericalHarmonicsDegree2Fields[i]];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ttempRotation.set(rawSplat[ROT_0], rawSplat[ROT_1], rawSplat[ROT_2], rawSplat[ROT_3]);\n\t\t\ttempRotation.normalize();\n\n\t\t\tnewSplat[OFFSET_ROTATION0] = tempRotation.x;\n\t\t\tnewSplat[OFFSET_ROTATION1] = tempRotation.y;\n\t\t\tnewSplat[OFFSET_ROTATION2] = tempRotation.z;\n\t\t\tnewSplat[OFFSET_ROTATION3] = tempRotation.w;\n\n\t\t\tnewSplat[OFFSET_X] = rawSplat[X];\n\t\t\tnewSplat[OFFSET_Y] = rawSplat[Y];\n\t\t\tnewSplat[OFFSET_Z] = rawSplat[Z];\n\n\t\t\treturn newSplat;\n\t\t};\n\t})();\n\n\tstatic readSplat(splatData, header, row, dataOffset, rawSplat) {\n\t\treturn PlyParserUtils.readVertex(\n\t\t\tsplatData,\n\t\t\theader,\n\t\t\trow,\n\t\t\tdataOffset,\n\t\t\theader.fieldsToReadIndexes,\n\t\t\trawSplat,\n\t\t\ttrue,\n\t\t);\n\t}\n\n\tstatic parseToUncompressedSplatArray(plyBuffer, outSphericalHarmonicsDegree = 0) {\n\t\tconst { header, splatCount, splatData } = separatePlyHeaderAndData(plyBuffer);\n\t\treturn INRIAV1PlyParser.decodeSectionSplatData(\n\t\t\tsplatData,\n\t\t\tsplatCount,\n\t\t\theader,\n\t\t\toutSphericalHarmonicsDegree,\n\t\t\ttrue,\n\t\t);\n\t}\n\n\tstatic parseToUncompressedSplatBuffer(plyBuffer, outSphericalHarmonicsDegree = 0) {\n\t\tconst { header, splatCount, splatData } = separatePlyHeaderAndData(plyBuffer);\n\t\treturn INRIAV1PlyParser.decodeSectionSplatData(\n\t\t\tsplatData,\n\t\t\tsplatCount,\n\t\t\theader,\n\t\t\toutSphericalHarmonicsDegree,\n\t\t\tfalse,\n\t\t);\n\t}\n}\n\nfunction separatePlyHeaderAndData(plyBuffer) {\n\tconst header = INRIAV1PlyParser.decodeHeaderFromBuffer(plyBuffer);\n\tconst splatCount = header.splatCount;\n\tconst splatData = INRIAV1PlyParser.findSplatData(plyBuffer, header);\n\treturn {\n\t\theader,\n\t\tsplatCount,\n\t\tsplatData,\n\t};\n}\n","import * as THREE from \"three\";\nimport { PlyParserUtils } from \"./PlyParserUtils.js\";\nimport { UncompressedSplatArray } from \"../UncompressedSplatArray.js\";\nimport { clamp } from \"../../Util.js\";\n\nconst CodeBookEntryNamesToRead = [\n\t\"features_dc\",\n\t\"features_rest_0\",\n\t\"features_rest_1\",\n\t\"features_rest_2\",\n\t\"features_rest_3\",\n\t\"features_rest_4\",\n\t\"features_rest_5\",\n\t\"features_rest_6\",\n\t\"features_rest_7\",\n\t\"features_rest_8\",\n\t\"features_rest_9\",\n\t\"features_rest_10\",\n\t\"features_rest_11\",\n\t\"features_rest_12\",\n\t\"features_rest_13\",\n\t\"features_rest_14\",\n\t\"opacity\",\n\t\"scaling\",\n\t\"rotation_re\",\n\t\"rotation_im\",\n];\nconst CodeBookEntriesToReadIndexes = CodeBookEntryNamesToRead.map((e, i) => i);\n\nconst [\n\tCB_FEATURES_DC,\n\tCB_FEATURES_REST_0,\n\tCB_FEATURES_REST_3,\n\tCB_OPACITY,\n\tCB_SCALING,\n\tCB_ROTATION_RE,\n\tCB_ROTATION_IM,\n] = [0, 1, 4, 16, 17, 18, 19];\n\nconst FieldNamesToRead = [\n\t\"scale_0\",\n\t\"scale_1\",\n\t\"scale_2\",\n\t\"rot_0\",\n\t\"rot_1\",\n\t\"rot_2\",\n\t\"rot_3\",\n\t\"x\",\n\t\"y\",\n\t\"z\",\n\t\"f_dc_0\",\n\t\"f_dc_1\",\n\t\"f_dc_2\",\n\t\"opacity\",\n\t\"red\",\n\t\"green\",\n\t\"blue\",\n\t\"f_rest_0\",\n\t\"f_rest_1\",\n\t\"f_rest_2\",\n\t\"f_rest_3\",\n\t\"f_rest_4\",\n\t\"f_rest_5\",\n\t\"f_rest_6\",\n\t\"f_rest_7\",\n\t\"f_rest_8\",\n\t\"f_rest_9\",\n\t\"f_rest_10\",\n\t\"f_rest_11\",\n\t\"f_rest_12\",\n\t\"f_rest_13\",\n\t\"f_rest_14\",\n\t\"f_rest_15\",\n\t\"f_rest_16\",\n\t\"f_rest_17\",\n\t\"f_rest_18\",\n\t\"f_rest_19\",\n\t\"f_rest_20\",\n\t\"f_rest_21\",\n\t\"f_rest_22\",\n\t\"f_rest_23\",\n\t\"f_rest_24\",\n\t\"f_rest_25\",\n\t\"f_rest_26\",\n\t\"f_rest_27\",\n\t\"f_rest_28\",\n\t\"f_rest_29\",\n\t\"f_rest_30\",\n\t\"f_rest_31\",\n\t\"f_rest_32\",\n\t\"f_rest_33\",\n\t\"f_rest_34\",\n\t\"f_rest_35\",\n\t\"f_rest_36\",\n\t\"f_rest_37\",\n\t\"f_rest_38\",\n\t\"f_rest_39\",\n\t\"f_rest_40\",\n\t\"f_rest_41\",\n\t\"f_rest_42\",\n\t\"f_rest_43\",\n\t\"f_rest_44\",\n\t\"f_rest_45\",\n];\nconst FieldsToReadIndexes = FieldNamesToRead.map((e, i) => i);\n\nconst [\n\tPLY_SCALE_0,\n\tPLY_SCALE_1,\n\tPLY_SCALE_2,\n\tPLY_ROT_0,\n\tPLY_ROT_1,\n\tPLY_ROT_2,\n\tPLY_ROT_3,\n\tPLY_X,\n\tPLY_Y,\n\tPLY_Z,\n\tPLY_F_DC_0,\n\tPLY_F_DC_1,\n\tPLY_F_DC_2,\n\tPLY_OPACITY,\n] = FieldsToReadIndexes;\n\nconst PLY_RED = PLY_F_DC_0;\nconst PLY_GREEN = PLY_F_DC_1;\nconst PLY_BLUE = PLY_F_DC_2;\n\nconst fromHalfFloat = (hf) => {\n\tconst t = (31744 & hf) >> 10;\n\tconst a = 1023 & hf;\n\treturn (\n\t\t(hf >> 15 ? -1 : 1) *\n\t\t(t ? (t === 31 ? (a ? NaN : 1 / 0) : Math.pow(2, t - 15) * (1 + a / 1024)) : (a / 1024) * 6103515625e-14)\n\t);\n};\n\nexport class INRIAV2PlyParser {\n\tstatic decodeSectionHeadersFromHeaderLines(headerLines) {\n\t\tconst fieldNameIdMap = FieldsToReadIndexes.reduce((acc, element) => {\n\t\t\tacc[FieldNamesToRead[element]] = element;\n\t\t\treturn acc;\n\t\t}, {});\n\n\t\tconst codeBookEntriesToReadIdMap = CodeBookEntriesToReadIndexes.reduce((acc, element) => {\n\t\t\tacc[CodeBookEntryNamesToRead[element]] = element;\n\t\t\treturn acc;\n\t\t}, {});\n\n\t\tconst sectionNames = PlyParserUtils.getHeaderSectionNames(headerLines);\n\t\tlet codeBookSectionIndex;\n\t\tfor (let s = 0; s < sectionNames.length; s++) {\n\t\t\tconst sectionName = sectionNames[s];\n\t\t\tif (sectionName === \"codebook_centers\") {\n\t\t\t\tcodeBookSectionIndex = s;\n\t\t\t}\n\t\t}\n\n\t\tlet currentStartLine = 0;\n\t\tlet lastSectionFound = false;\n\t\tconst sectionHeaders = [];\n\t\tlet sectionIndex = 0;\n\t\twhile (!lastSectionFound) {\n\t\t\tlet sectionHeader;\n\t\t\tif (sectionIndex === codeBookSectionIndex) {\n\t\t\t\tsectionHeader = PlyParserUtils.decodeSectionHeader(\n\t\t\t\t\theaderLines,\n\t\t\t\t\tcodeBookEntriesToReadIdMap,\n\t\t\t\t\tcurrentStartLine,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tsectionHeader = PlyParserUtils.decodeSectionHeader(headerLines, fieldNameIdMap, currentStartLine);\n\t\t\t}\n\t\t\tlastSectionFound = sectionHeader.endOfHeader;\n\t\t\tcurrentStartLine = sectionHeader.headerEndLine + 1;\n\t\t\tif (!lastSectionFound) {\n\t\t\t\tsectionHeader.splatCount = sectionHeader.vertexCount;\n\t\t\t\tsectionHeader.bytesPerSplat = sectionHeader.bytesPerVertex;\n\t\t\t}\n\t\t\tsectionHeaders.push(sectionHeader);\n\t\t\tsectionIndex++;\n\t\t}\n\t\treturn sectionHeaders;\n\t}\n\n\tstatic decodeSectionHeadersFromHeaderText(headerText) {\n\t\tconst headerLines = PlyParserUtils.convertHeaderTextToLines(headerText);\n\t\treturn INRIAV2PlyParser.decodeSectionHeadersFromHeaderLines(headerLines);\n\t}\n\n\tstatic getSplatCountFromSectionHeaders(sectionHeaders) {\n\t\tlet splatCount = 0;\n\t\tfor (let sectionHeader of sectionHeaders) {\n\t\t\tif (sectionHeader.sectionName !== \"codebook_centers\") {\n\t\t\t\tsplatCount += sectionHeader.vertexCount;\n\t\t\t}\n\t\t}\n\t\treturn splatCount;\n\t}\n\n\tstatic decodeHeaderFromHeaderText(headerText) {\n\t\tconst headerSizeBytes =\n\t\t\theaderText.indexOf(PlyParserUtils.HeaderEndToken) + PlyParserUtils.HeaderEndToken.length + 1;\n\t\tconst sectionHeaders = INRIAV2PlyParser.decodeSectionHeadersFromHeaderText(headerText);\n\t\tconst splatCount = INRIAV2PlyParser.getSplatCountFromSectionHeaders(sectionHeaders);\n\t\treturn {\n\t\t\theaderSizeBytes: headerSizeBytes,\n\t\t\tsectionHeaders: sectionHeaders,\n\t\t\tsplatCount: splatCount,\n\t\t};\n\t}\n\n\tstatic decodeHeaderFromBuffer(plyBuffer) {\n\t\tconst headerText = PlyParserUtils.readHeaderFromBuffer(plyBuffer);\n\t\treturn INRIAV2PlyParser.decodeHeaderFromHeaderText(headerText);\n\t}\n\n\tstatic findVertexData(plyBuffer, header, targetSection) {\n\t\tlet byteOffset = header.headerSizeBytes;\n\t\tfor (let s = 0; s < targetSection && s < header.sectionHeaders.length; s++) {\n\t\t\tconst sectionHeader = header.sectionHeaders[s];\n\t\t\tbyteOffset += sectionHeader.dataSizeBytes;\n\t\t}\n\t\treturn new DataView(plyBuffer, byteOffset, header.sectionHeaders[targetSection].dataSizeBytes);\n\t}\n\n\tstatic decodeCodeBook(codeBookData, sectionHeader) {\n\t\tconst rawVertex = [];\n\t\tconst codeBook = [];\n\t\tfor (let row = 0; row < sectionHeader.vertexCount; row++) {\n\t\t\tPlyParserUtils.readVertex(codeBookData, sectionHeader, row, 0, CodeBookEntriesToReadIndexes, rawVertex);\n\t\t\tfor (let index of CodeBookEntriesToReadIndexes) {\n\t\t\t\tconst codeBookElementOffset = CodeBookEntriesToReadIndexes[index];\n\t\t\t\tlet codeBookPage = codeBook[codeBookElementOffset];\n\t\t\t\tif (!codeBookPage) {\n\t\t\t\t\tcodeBook[codeBookElementOffset] = codeBookPage = [];\n\t\t\t\t}\n\t\t\t\tcodeBookPage.push(rawVertex[index]);\n\t\t\t}\n\t\t}\n\t\tfor (let page = 0; page < codeBook.length; page++) {\n\t\t\tconst codeBookPage = codeBook[page];\n\t\t\tconst SH_C0 = 0.28209479177387814;\n\t\t\tfor (let i = 0; i < codeBookPage.length; i++) {\n\t\t\t\tconst baseValue = fromHalfFloat(codeBookPage[i]);\n\t\t\t\tif (page === CB_OPACITY) {\n\t\t\t\t\tcodeBookPage[i] = Math.round((1 / (1 + Math.exp(-baseValue))) * 255);\n\t\t\t\t} else if (page === CB_FEATURES_DC) {\n\t\t\t\t\tcodeBookPage[i] = Math.round((0.5 + SH_C0 * baseValue) * 255);\n\t\t\t\t} else if (page === CB_SCALING) {\n\t\t\t\t\tcodeBookPage[i] = Math.exp(baseValue);\n\t\t\t\t} else {\n\t\t\t\t\tcodeBookPage[i] = baseValue;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn codeBook;\n\t}\n\n\tstatic decodeSectionSplatData(\n\t\tsectionSplatData,\n\t\tsplatCount,\n\t\tsectionHeader,\n\t\tcodeBook,\n\t\toutSphericalHarmonicsDegree,\n\t) {\n\t\toutSphericalHarmonicsDegree = Math.min(\n\t\t\toutSphericalHarmonicsDegree,\n\t\t\tsectionHeader.sphericalHarmonicsDegree,\n\t\t);\n\t\tconst splatArray = new UncompressedSplatArray(outSphericalHarmonicsDegree);\n\t\tfor (let row = 0; row < splatCount; row++) {\n\t\t\tconst newSplat = INRIAV2PlyParser.parseToUncompressedSplat(\n\t\t\t\tsectionSplatData,\n\t\t\t\trow,\n\t\t\t\tsectionHeader,\n\t\t\t\tcodeBook,\n\t\t\t\t0,\n\t\t\t\toutSphericalHarmonicsDegree,\n\t\t\t);\n\t\t\tsplatArray.addSplat(newSplat);\n\t\t}\n\t\treturn splatArray;\n\t}\n\n\tstatic parseToUncompressedSplat = (function() {\n\t\tlet rawSplat = [];\n\t\tconst tempRotation = new THREE.Quaternion();\n\n\t\tconst OFFSET_X = UncompressedSplatArray.OFFSET.X;\n\t\tconst OFFSET_Y = UncompressedSplatArray.OFFSET.Y;\n\t\tconst OFFSET_Z = UncompressedSplatArray.OFFSET.Z;\n\n\t\tconst OFFSET_SCALE0 = UncompressedSplatArray.OFFSET.SCALE0;\n\t\tconst OFFSET_SCALE1 = UncompressedSplatArray.OFFSET.SCALE1;\n\t\tconst OFFSET_SCALE2 = UncompressedSplatArray.OFFSET.SCALE2;\n\n\t\tconst OFFSET_ROTATION0 = UncompressedSplatArray.OFFSET.ROTATION0;\n\t\tconst OFFSET_ROTATION1 = UncompressedSplatArray.OFFSET.ROTATION1;\n\t\tconst OFFSET_ROTATION2 = UncompressedSplatArray.OFFSET.ROTATION2;\n\t\tconst OFFSET_ROTATION3 = UncompressedSplatArray.OFFSET.ROTATION3;\n\n\t\tconst OFFSET_FDC0 = UncompressedSplatArray.OFFSET.FDC0;\n\t\tconst OFFSET_FDC1 = UncompressedSplatArray.OFFSET.FDC1;\n\t\tconst OFFSET_FDC2 = UncompressedSplatArray.OFFSET.FDC2;\n\t\tconst OFFSET_OPACITY = UncompressedSplatArray.OFFSET.OPACITY;\n\n\t\tconst OFFSET_FRC = [];\n\n\t\tfor (let i = 0; i < 45; i++) {\n\t\t\tOFFSET_FRC[i] = UncompressedSplatArray.OFFSET.FRC0 + i;\n\t\t}\n\n\t\treturn function(splatData, row, header, codeBook, splatDataOffset = 0, outSphericalHarmonicsDegree = 0) {\n\t\t\toutSphericalHarmonicsDegree = Math.min(outSphericalHarmonicsDegree, header.sphericalHarmonicsDegree);\n\t\t\tINRIAV2PlyParser.readSplat(splatData, header, row, splatDataOffset, rawSplat);\n\t\t\tconst newSplat = UncompressedSplatArray.createSplat(outSphericalHarmonicsDegree);\n\t\t\tif (rawSplat[PLY_SCALE_0] !== undefined) {\n\t\t\t\tnewSplat[OFFSET_SCALE0] = codeBook[CB_SCALING][rawSplat[PLY_SCALE_0]];\n\t\t\t\tnewSplat[OFFSET_SCALE1] = codeBook[CB_SCALING][rawSplat[PLY_SCALE_1]];\n\t\t\t\tnewSplat[OFFSET_SCALE2] = codeBook[CB_SCALING][rawSplat[PLY_SCALE_2]];\n\t\t\t} else {\n\t\t\t\tnewSplat[OFFSET_SCALE0] = 0.01;\n\t\t\t\tnewSplat[OFFSET_SCALE1] = 0.01;\n\t\t\t\tnewSplat[OFFSET_SCALE2] = 0.01;\n\t\t\t}\n\n\t\t\tif (rawSplat[PLY_F_DC_0] !== undefined) {\n\t\t\t\tnewSplat[OFFSET_FDC0] = codeBook[CB_FEATURES_DC][rawSplat[PLY_F_DC_0]];\n\t\t\t\tnewSplat[OFFSET_FDC1] = codeBook[CB_FEATURES_DC][rawSplat[PLY_F_DC_1]];\n\t\t\t\tnewSplat[OFFSET_FDC2] = codeBook[CB_FEATURES_DC][rawSplat[PLY_F_DC_2]];\n\t\t\t} else if (rawSplat[PLY_RED] !== undefined) {\n\t\t\t\tnewSplat[OFFSET_FDC0] = rawSplat[PLY_RED] * 255;\n\t\t\t\tnewSplat[OFFSET_FDC1] = rawSplat[PLY_GREEN] * 255;\n\t\t\t\tnewSplat[OFFSET_FDC2] = rawSplat[PLY_BLUE] * 255;\n\t\t\t} else {\n\t\t\t\tnewSplat[OFFSET_FDC0] = 0;\n\t\t\t\tnewSplat[OFFSET_FDC1] = 0;\n\t\t\t\tnewSplat[OFFSET_FDC2] = 0;\n\t\t\t}\n\n\t\t\tif (rawSplat[PLY_OPACITY] !== undefined) {\n\t\t\t\tnewSplat[OFFSET_OPACITY] = codeBook[CB_OPACITY][rawSplat[PLY_OPACITY]];\n\t\t\t}\n\n\t\t\tnewSplat[OFFSET_FDC0] = clamp(Math.floor(newSplat[OFFSET_FDC0]), 0, 255);\n\t\t\tnewSplat[OFFSET_FDC1] = clamp(Math.floor(newSplat[OFFSET_FDC1]), 0, 255);\n\t\t\tnewSplat[OFFSET_FDC2] = clamp(Math.floor(newSplat[OFFSET_FDC2]), 0, 255);\n\t\t\tnewSplat[OFFSET_OPACITY] = clamp(Math.floor(newSplat[OFFSET_OPACITY]), 0, 255);\n\n\t\t\tif (outSphericalHarmonicsDegree >= 1 && header.sphericalHarmonicsDegree >= 1) {\n\t\t\t\tfor (let i = 0; i < 9; i++) {\n\t\t\t\t\tconst codeBookPage = codeBook[CB_FEATURES_REST_0 + (i % 3)];\n\t\t\t\t\tnewSplat[OFFSET_FRC[i]] = codeBookPage[rawSplat[header.sphericalHarmonicsDegree1Fields[i]]];\n\t\t\t\t}\n\t\t\t\tif (outSphericalHarmonicsDegree >= 2 && header.sphericalHarmonicsDegree >= 2) {\n\t\t\t\t\tfor (let i = 0; i < 15; i++) {\n\t\t\t\t\t\tconst codeBookPage = codeBook[CB_FEATURES_REST_3 + (i % 5)];\n\t\t\t\t\t\tnewSplat[OFFSET_FRC[9 + i]] = codeBookPage[rawSplat[header.sphericalHarmonicsDegree2Fields[i]]];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst rot0 = codeBook[CB_ROTATION_RE][rawSplat[PLY_ROT_0]];\n\t\t\tconst rot1 = codeBook[CB_ROTATION_IM][rawSplat[PLY_ROT_1]];\n\t\t\tconst rot2 = codeBook[CB_ROTATION_IM][rawSplat[PLY_ROT_2]];\n\t\t\tconst rot3 = codeBook[CB_ROTATION_IM][rawSplat[PLY_ROT_3]];\n\t\t\ttempRotation.set(rot0, rot1, rot2, rot3);\n\t\t\ttempRotation.normalize();\n\n\t\t\tnewSplat[OFFSET_ROTATION0] = tempRotation.x;\n\t\t\tnewSplat[OFFSET_ROTATION1] = tempRotation.y;\n\t\t\tnewSplat[OFFSET_ROTATION2] = tempRotation.z;\n\t\t\tnewSplat[OFFSET_ROTATION3] = tempRotation.w;\n\n\t\t\tnewSplat[OFFSET_X] = fromHalfFloat(rawSplat[PLY_X]);\n\t\t\tnewSplat[OFFSET_Y] = fromHalfFloat(rawSplat[PLY_Y]);\n\t\t\tnewSplat[OFFSET_Z] = fromHalfFloat(rawSplat[PLY_Z]);\n\n\t\t\treturn newSplat;\n\t\t};\n\t})();\n\n\tstatic readSplat(splatData, header, row, dataOffset, rawSplat) {\n\t\treturn PlyParserUtils.readVertex(\n\t\t\tsplatData,\n\t\t\theader,\n\t\t\trow,\n\t\t\tdataOffset,\n\t\t\tFieldsToReadIndexes,\n\t\t\trawSplat,\n\t\t\tfalse,\n\t\t);\n\t}\n\n\tstatic parseToUncompressedSplatArray(plyBuffer, outSphericalHarmonicsDegree = 0) {\n\t\tconst splatArrays = [];\n\t\tconst header = INRIAV2PlyParser.decodeHeaderFromBuffer(plyBuffer, outSphericalHarmonicsDegree);\n\t\tlet codeBook;\n\n\t\tfor (let s = 0; s < header.sectionHeaders.length; s++) {\n\t\t\tconst sectionHeader = header.sectionHeaders[s];\n\t\t\tif (sectionHeader.sectionName === \"codebook_centers\") {\n\t\t\t\tconst codeBookData = INRIAV2PlyParser.findVertexData(plyBuffer, header, s);\n\t\t\t\tcodeBook = INRIAV2PlyParser.decodeCodeBook(codeBookData, sectionHeader);\n\t\t\t}\n\t\t}\n\t\tfor (let s = 0; s < header.sectionHeaders.length; s++) {\n\t\t\tconst sectionHeader = header.sectionHeaders[s];\n\t\t\tif (sectionHeader.sectionName !== \"codebook_centers\") {\n\t\t\t\tconst splatCount = sectionHeader.vertexCount;\n\t\t\t\tconst vertexData = INRIAV2PlyParser.findVertexData(plyBuffer, header, s);\n\t\t\t\tconst splatArray = INRIAV2PlyParser.decodeSectionSplatData(\n\t\t\t\t\tvertexData,\n\t\t\t\t\tsplatCount,\n\t\t\t\t\tsectionHeader,\n\t\t\t\t\tcodeBook,\n\t\t\t\t\toutSphericalHarmonicsDegree,\n\t\t\t\t);\n\t\t\t\tsplatArrays.push(splatArray);\n\t\t\t}\n\t\t}\n\n\t\tconst unified = new UncompressedSplatArray(outSphericalHarmonicsDegree);\n\t\tfor (let splatArray of splatArrays) {\n\t\t\tfor (let splat of splatArray.splats) {\n\t\t\t\tunified.addSplat(splat);\n\t\t\t}\n\t\t}\n\n\t\treturn unified;\n\t}\n}\n","import { PlayCanvasCompressedPlyParser } from \"./PlayCanvasCompressedPlyParser.js\";\nimport { INRIAV1PlyParser } from \"./INRIAV1PlyParser.js\";\nimport { INRIAV2PlyParser } from \"./INRIAV2PlyParser.js\";\nimport { PlyParserUtils } from \"./PlyParserUtils.js\";\nimport { PlyFormat } from \"./PlyFormat.js\";\n\nexport class PlyParser {\n\tstatic parseToUncompressedSplatArray(plyBuffer, outSphericalHarmonicsDegree = 0) {\n\t\tconst plyFormat = PlyParserUtils.determineHeaderFormatFromPlyBuffer(plyBuffer);\n\t\tif (plyFormat === PlyFormat.PlayCanvasCompressed) {\n\t\t\treturn PlayCanvasCompressedPlyParser.parseToUncompressedSplatArray(\n\t\t\t\tplyBuffer,\n\t\t\t\toutSphericalHarmonicsDegree,\n\t\t\t);\n\t\t} else if (plyFormat === PlyFormat.INRIAV1) {\n\t\t\treturn INRIAV1PlyParser.parseToUncompressedSplatArray(plyBuffer, outSphericalHarmonicsDegree);\n\t\t} else if (plyFormat === PlyFormat.INRIAV2) {\n\t\t\treturn INRIAV2PlyParser.parseToUncompressedSplatArray(plyBuffer, outSphericalHarmonicsDegree);\n\t\t}\n\t}\n\n\tstatic parseToUncompressedSplatBuffer(plyBuffer, outSphericalHarmonicsDegree = 0) {\n\t\tconst plyFormat = PlyParserUtils.determineHeaderFormatFromPlyBuffer(plyBuffer);\n\t\tif (plyFormat === PlyFormat.PlayCanvasCompressed) {\n\t\t\treturn PlayCanvasCompressedPlyParser.parseToUncompressedSplatBuffer(\n\t\t\t\tplyBuffer,\n\t\t\t\toutSphericalHarmonicsDegree,\n\t\t\t);\n\t\t} else if (plyFormat === PlyFormat.INRIAV1) {\n\t\t\treturn INRIAV1PlyParser.parseToUncompressedSplatBuffer(plyBuffer, outSphericalHarmonicsDegree);\n\t\t} else if (plyFormat === PlyFormat.INRIAV2) {\n\t\t\t// TODO: Implement!\n\t\t\tthrow new Error(\"parseToUncompressedSplatBuffer() is not implemented for INRIA V2 PLY files\");\n\t\t}\n\t}\n}\n","import * as THREE from \"three\";\nimport { UncompressedSplatArray } from \"./UncompressedSplatArray.js\";\nimport { SplatBuffer } from \"./SplatBuffer.js\";\n\nexport class SplatPartitioner {\n\tconstructor(sectionCount, sectionFilters, groupingParameters, partitionGenerator) {\n\t\tthis.sectionCount = sectionCount;\n\t\tthis.sectionFilters = sectionFilters;\n\t\tthis.groupingParameters = groupingParameters;\n\t\tthis.partitionGenerator = partitionGenerator;\n\t}\n\n\tpartitionUncompressedSplatArray(splatArray) {\n\t\tlet groupingParameters;\n\t\tlet sectionCount;\n\t\tlet sectionFilters;\n\t\tif (this.partitionGenerator) {\n\t\t\tconst results = this.partitionGenerator(splatArray);\n\t\t\tgroupingParameters = results.groupingParameters;\n\t\t\tsectionCount = results.sectionCount;\n\t\t\tsectionFilters = results.sectionFilters;\n\t\t} else {\n\t\t\tgroupingParameters = this.groupingParameters;\n\t\t\tsectionCount = this.sectionCount;\n\t\t\tsectionFilters = this.sectionFilters;\n\t\t}\n\n\t\tconst newArrays = [];\n\t\tfor (let s = 0; s < sectionCount; s++) {\n\t\t\tconst sectionSplats = new UncompressedSplatArray(splatArray.sphericalHarmonicsDegree);\n\t\t\tconst sectionFilter = sectionFilters[s];\n\t\t\tfor (let i = 0; i < splatArray.splatCount; i++) {\n\t\t\t\tif (sectionFilter(i)) {\n\t\t\t\t\tsectionSplats.addSplat(splatArray.splats[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tnewArrays.push(sectionSplats);\n\t\t}\n\t\treturn {\n\t\t\tsplatArrays: newArrays,\n\t\t\tparameters: groupingParameters,\n\t\t};\n\t}\n\n\tstatic getStandardPartitioner(\n\t\tpartitionSize = 0,\n\t\tsceneCenter = new THREE.Vector3(),\n\t\tblockSize = SplatBuffer.BucketBlockSize,\n\t\tbucketSize = SplatBuffer.BucketSize,\n\t) {\n\t\tconst partitionGenerator = (splatArray) => {\n\t\t\tconst OFFSET_X = UncompressedSplatArray.OFFSET.X;\n\t\t\tconst OFFSET_Y = UncompressedSplatArray.OFFSET.Y;\n\t\t\tconst OFFSET_Z = UncompressedSplatArray.OFFSET.Z;\n\n\t\t\tif (partitionSize <= 0) partitionSize = splatArray.splatCount;\n\n\t\t\tconst center = new THREE.Vector3();\n\t\t\tconst clampDistance = 0.5;\n\t\t\tconst clampPoint = (point) => {\n\t\t\t\tpoint.x = Math.floor(point.x / clampDistance) * clampDistance;\n\t\t\t\tpoint.y = Math.floor(point.y / clampDistance) * clampDistance;\n\t\t\t\tpoint.z = Math.floor(point.z / clampDistance) * clampDistance;\n\t\t\t};\n\t\t\tsplatArray.splats.forEach((splat) => {\n\t\t\t\tcenter.set(splat[OFFSET_X], splat[OFFSET_Y], splat[OFFSET_Z]).sub(sceneCenter);\n\t\t\t\tclampPoint(center);\n\t\t\t\tsplat.centerDist = center.lengthSq();\n\t\t\t});\n\t\t\tsplatArray.splats.sort((a, b) => {\n\t\t\t\tlet centerADist = a.centerDist;\n\t\t\t\tlet centerBDist = b.centerDist;\n\t\t\t\tif (centerADist > centerBDist) return 1;\n\t\t\t\telse return -1;\n\t\t\t});\n\n\t\t\tconst sectionFilters = [];\n\t\t\tconst groupingParameters = [];\n\t\t\tpartitionSize = Math.min(splatArray.splatCount, partitionSize);\n\t\t\tconst patitionCount = Math.ceil(splatArray.splatCount / partitionSize);\n\t\t\tlet currentStartSplat = 0;\n\t\t\tfor (let i = 0; i < patitionCount; i++) {\n\t\t\t\tlet startSplat = currentStartSplat;\n\t\t\t\tsectionFilters.push((splatIndex) => {\n\t\t\t\t\treturn splatIndex >= startSplat && splatIndex < startSplat + partitionSize;\n\t\t\t\t});\n\t\t\t\tgroupingParameters.push({\n\t\t\t\t\tblocksSize: blockSize,\n\t\t\t\t\tbucketSize: bucketSize,\n\t\t\t\t});\n\t\t\t\tcurrentStartSplat += partitionSize;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tsectionCount: sectionFilters.length,\n\t\t\t\tsectionFilters,\n\t\t\t\tgroupingParameters,\n\t\t\t};\n\t\t};\n\t\treturn new SplatPartitioner(undefined, undefined, undefined, partitionGenerator);\n\t}\n}\n","import * as THREE from \"three\";\nimport { SplatPartitioner } from \"./SplatPartitioner.js\";\nimport { SplatBuffer } from \"./SplatBuffer.js\";\n\nexport class SplatBufferGenerator {\n\tconstructor(\n\t\tsplatPartitioner,\n\t\talphaRemovalThreshold,\n\t\tcompressionLevel,\n\t\tsectionSize,\n\t\tsceneCenter,\n\t\tblockSize,\n\t\tbucketSize,\n\t) {\n\t\tthis.splatPartitioner = splatPartitioner;\n\t\tthis.alphaRemovalThreshold = alphaRemovalThreshold;\n\t\tthis.compressionLevel = compressionLevel;\n\t\tthis.sectionSize = sectionSize;\n\t\tthis.sceneCenter = sceneCenter ? new THREE.Vector3().copy(sceneCenter) : undefined;\n\t\tthis.blockSize = blockSize;\n\t\tthis.bucketSize = bucketSize;\n\t}\n\n\tgenerateFromUncompressedSplatArray(splatArray) {\n\t\tconst partitionResults = this.splatPartitioner.partitionUncompressedSplatArray(splatArray);\n\t\treturn SplatBuffer.generateFromUncompressedSplatArrays(\n\t\t\tpartitionResults.splatArrays,\n\t\t\tthis.alphaRemovalThreshold,\n\t\t\tthis.compressionLevel,\n\t\t\tthis.sceneCenter,\n\t\t\tthis.blockSize,\n\t\t\tthis.bucketSize,\n\t\t\tpartitionResults.parameters,\n\t\t);\n\t}\n\n\tstatic getStandardGenerator(\n\t\talphaRemovalThreshold = 1,\n\t\tcompressionLevel = 1,\n\t\tsectionSize = 0,\n\t\tsceneCenter = new THREE.Vector3(),\n\t\tblockSize = SplatBuffer.BucketBlockSize,\n\t\tbucketSize = SplatBuffer.BucketSize,\n\t) {\n\t\tconst splatPartitioner = SplatPartitioner.getStandardPartitioner(\n\t\t\tsectionSize,\n\t\t\tsceneCenter,\n\t\t\tblockSize,\n\t\t\tbucketSize,\n\t\t);\n\t\treturn new SplatBufferGenerator(\n\t\t\tsplatPartitioner,\n\t\t\talphaRemovalThreshold,\n\t\t\tcompressionLevel,\n\t\t\tsectionSize,\n\t\t\tsceneCenter,\n\t\t\tblockSize,\n\t\t\tbucketSize,\n\t\t);\n\t}\n}\n","export const LoaderStatus = {\n\tDownloading: 0,\n\tProcessing: 1,\n\tDone: 2,\n};\n","export class DirectLoadError extends Error {\n\tconstructor(msg) {\n\t\tsuper(msg);\n\t}\n}\n","export const InternalLoadType = {\n\tProgressiveToSplatBuffer: 0,\n\tProgressiveToSplatArray: 1,\n\tDownloadBeforeProcessing: 2,\n};\n","import * as THREE from \"three\";\nimport { PlyParser } from \"./PlyParser.js\";\nimport { PlyParserUtils } from \"./PlyParserUtils.js\";\nimport { INRIAV1PlyParser } from \"./INRIAV1PlyParser.js\";\nimport { PlayCanvasCompressedPlyParser } from \"./PlayCanvasCompressedPlyParser.js\";\nimport { PlyFormat } from \"./PlyFormat.js\";\nimport { fetchWithProgress, delayedExecute, nativePromiseWithExtractedComponents } from \"../../Util.js\";\nimport { SplatBuffer } from \"../SplatBuffer.js\";\nimport { SplatBufferGenerator } from \"../SplatBufferGenerator.js\";\nimport { LoaderStatus } from \"../LoaderStatus.js\";\nimport { DirectLoadError } from \"../DirectLoadError.js\";\nimport { Constants } from \"../../Constants.js\";\nimport { UncompressedSplatArray } from \"../UncompressedSplatArray.js\";\nimport { InternalLoadType } from \"../InternalLoadType.js\";\n\nfunction storeChunksInBuffer(chunks, buffer) {\n\tlet inBytes = 0;\n\tfor (let chunk of chunks) inBytes += chunk.sizeBytes;\n\n\tif (!buffer || buffer.byteLength < inBytes) {\n\t\tbuffer = new ArrayBuffer(inBytes);\n\t}\n\n\tlet offset = 0;\n\tfor (let chunk of chunks) {\n\t\tnew Uint8Array(buffer, offset, chunk.sizeBytes).set(chunk.data);\n\t\toffset += chunk.sizeBytes;\n\t}\n\n\treturn buffer;\n}\n\nfunction finalize(\n\tsplatData,\n\toptimizeSplatData,\n\tminimumAlpha,\n\tcompressionLevel,\n\tsectionSize,\n\tsceneCenter,\n\tblockSize,\n\tbucketSize,\n) {\n\tif (optimizeSplatData) {\n\t\tconst splatBufferGenerator = SplatBufferGenerator.getStandardGenerator(\n\t\t\tminimumAlpha,\n\t\t\tcompressionLevel,\n\t\t\tsectionSize,\n\t\t\tsceneCenter,\n\t\t\tblockSize,\n\t\t\tbucketSize,\n\t\t);\n\t\treturn splatBufferGenerator.generateFromUncompressedSplatArray(splatData);\n\t} else {\n\t\treturn SplatBuffer.generateFromUncompressedSplatArrays([splatData], minimumAlpha, 0, new THREE.Vector3());\n\t}\n}\n\nexport class PlyLoader {\n\tstatic loadFromURL(\n\t\tfileName,\n\t\tonProgress,\n\t\tprogressiveLoadToSplatBuffer,\n\t\tonProgressiveLoadSectionProgress,\n\t\tminimumAlpha,\n\t\tcompressionLevel,\n\t\toptimizeSplatData = true,\n\t\toutSphericalHarmonicsDegree = 0,\n\t\theaders,\n\t\tsectionSize,\n\t\tsceneCenter,\n\t\tblockSize,\n\t\tbucketSize,\n\t) {\n\t\tlet internalLoadType;\n\t\tif (!progressiveLoadToSplatBuffer && !optimizeSplatData) {\n\t\t\tinternalLoadType = InternalLoadType.DownloadBeforeProcessing;\n\t\t} else {\n\t\t\tif (optimizeSplatData) internalLoadType = InternalLoadType.ProgressiveToSplatArray;\n\t\t\telse internalLoadType = InternalLoadType.ProgressiveToSplatBuffer;\n\t\t}\n\n\t\tconst directLoadSectionSizeBytes = Constants.ProgressiveLoadSectionSize;\n\t\tconst splatBufferDataOffsetBytes = SplatBuffer.HeaderSizeBytes + SplatBuffer.SectionHeaderSizeBytes;\n\t\tconst sectionCount = 1;\n\n\t\tlet plyFormat;\n\t\tlet directLoadBufferIn;\n\t\tlet directLoadBufferOut;\n\t\tlet directLoadSplatBuffer;\n\t\tlet compressedPlyHeaderChunksBuffer;\n\t\tlet maxSplatCount = 0;\n\t\tlet processedBaseSplatCount = 0;\n\t\tlet processedSphericalHarmonicsSplatCount = 0;\n\n\t\tlet headerLoaded = false;\n\t\tlet readyToLoadSplatData = false;\n\t\tlet baseSplatDataLoaded = false;\n\n\t\tconst loadPromise = nativePromiseWithExtractedComponents();\n\n\t\tlet numBytesStreamed = 0;\n\t\tlet numBytesParsed = 0;\n\t\tlet numBytesDownloaded = 0;\n\t\tlet endOfBaseSplatDataBytes = 0;\n\t\tlet headerText = \"\";\n\t\tlet header = null;\n\t\tlet chunks = [];\n\n\t\tlet standardLoadUncompressedSplatArray;\n\n\t\tconst textDecoder = new TextDecoder();\n\n\t\tconst localOnProgress = (percent, percentLabel, chunkData) => {\n\t\t\tconst loadComplete = percent >= 100;\n\n\t\t\tif (chunkData) {\n\t\t\t\tchunks.push({\n\t\t\t\t\tdata: chunkData,\n\t\t\t\t\tsizeBytes: chunkData.byteLength,\n\t\t\t\t\tstartBytes: numBytesDownloaded,\n\t\t\t\t\tendBytes: numBytesDownloaded + chunkData.byteLength,\n\t\t\t\t});\n\t\t\t\tnumBytesDownloaded += chunkData.byteLength;\n\t\t\t}\n\n\t\t\tif (internalLoadType === InternalLoadType.DownloadBeforeProcessing) {\n\t\t\t\tif (loadComplete) {\n\t\t\t\t\tloadPromise.resolve(chunks);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!headerLoaded) {\n\t\t\t\t\theaderText += textDecoder.decode(chunkData);\n\t\t\t\t\tif (PlyParserUtils.checkTextForEndHeader(headerText)) {\n\t\t\t\t\t\tplyFormat = PlyParserUtils.determineHeaderFormatFromHeaderText(headerText);\n\t\t\t\t\t\tif (plyFormat === PlyFormat.INRIAV1) {\n\t\t\t\t\t\t\theader = INRIAV1PlyParser.decodeHeaderText(headerText);\n\t\t\t\t\t\t\toutSphericalHarmonicsDegree = Math.min(\n\t\t\t\t\t\t\t\toutSphericalHarmonicsDegree,\n\t\t\t\t\t\t\t\theader.sphericalHarmonicsDegree,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tmaxSplatCount = header.splatCount;\n\t\t\t\t\t\t\treadyToLoadSplatData = true;\n\t\t\t\t\t\t\tendOfBaseSplatDataBytes = header.headerSizeBytes + header.bytesPerSplat * maxSplatCount;\n\t\t\t\t\t\t} else if (plyFormat === PlyFormat.PlayCanvasCompressed) {\n\t\t\t\t\t\t\theader = PlayCanvasCompressedPlyParser.decodeHeaderText(headerText);\n\t\t\t\t\t\t\toutSphericalHarmonicsDegree = Math.min(\n\t\t\t\t\t\t\t\toutSphericalHarmonicsDegree,\n\t\t\t\t\t\t\t\theader.sphericalHarmonicsDegree,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tinternalLoadType === InternalLoadType.ProgressiveToSplatBuffer &&\n\t\t\t\t\t\t\t\toutSphericalHarmonicsDegree > 0\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tthrow new DirectLoadError(\n\t\t\t\t\t\t\t\t\t\"PlyLoader.loadFromURL() -> Selected PLY format has spherical \" +\n\t\t\t\t\t\t\t\t\t\t\"harmonics data that cannot be progressively loaded.\",\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmaxSplatCount = header.vertexElement.count;\n\t\t\t\t\t\t\tendOfBaseSplatDataBytes =\n\t\t\t\t\t\t\t\theader.headerSizeBytes +\n\t\t\t\t\t\t\t\theader.bytesPerSplat * maxSplatCount +\n\t\t\t\t\t\t\t\theader.chunkElement.storageSizeBytes;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (internalLoadType === InternalLoadType.ProgressiveToSplatBuffer) {\n\t\t\t\t\t\t\t\tthrow new DirectLoadError(\n\t\t\t\t\t\t\t\t\t\"PlyLoader.loadFromURL() -> Selected PLY format cannot be progressively loaded.\",\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tinternalLoadType = InternalLoadType.DownloadBeforeProcessing;\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (internalLoadType === InternalLoadType.ProgressiveToSplatBuffer) {\n\t\t\t\t\t\t\tconst shDescriptor =\n\t\t\t\t\t\t\t\tSplatBuffer.CompressionLevels[0].SphericalHarmonicsDegrees[outSphericalHarmonicsDegree];\n\t\t\t\t\t\t\tconst splatBufferSizeBytes =\n\t\t\t\t\t\t\t\tsplatBufferDataOffsetBytes + shDescriptor.BytesPerSplat * maxSplatCount;\n\t\t\t\t\t\t\tdirectLoadBufferOut = new ArrayBuffer(splatBufferSizeBytes);\n\t\t\t\t\t\t\tSplatBuffer.writeHeaderToBuffer(\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tversionMajor: SplatBuffer.CurrentMajorVersion,\n\t\t\t\t\t\t\t\t\tversionMinor: SplatBuffer.CurrentMinorVersion,\n\t\t\t\t\t\t\t\t\tmaxSectionCount: sectionCount,\n\t\t\t\t\t\t\t\t\tsectionCount: sectionCount,\n\t\t\t\t\t\t\t\t\tmaxSplatCount: maxSplatCount,\n\t\t\t\t\t\t\t\t\tsplatCount: 0,\n\t\t\t\t\t\t\t\t\tcompressionLevel: 0,\n\t\t\t\t\t\t\t\t\tsceneCenter: new THREE.Vector3(),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdirectLoadBufferOut,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstandardLoadUncompressedSplatArray = new UncompressedSplatArray(outSphericalHarmonicsDegree);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tnumBytesStreamed = header.headerSizeBytes;\n\t\t\t\t\t\tnumBytesParsed = header.headerSizeBytes;\n\t\t\t\t\t\theaderLoaded = true;\n\t\t\t\t\t}\n\t\t\t\t} else if (plyFormat === PlyFormat.PlayCanvasCompressed && !readyToLoadSplatData) {\n\t\t\t\t\tconst sizeRequiredForHeaderAndChunks =\n\t\t\t\t\t\theader.headerSizeBytes + header.chunkElement.storageSizeBytes;\n\t\t\t\t\tcompressedPlyHeaderChunksBuffer = storeChunksInBuffer(chunks, compressedPlyHeaderChunksBuffer);\n\t\t\t\t\tif (compressedPlyHeaderChunksBuffer.byteLength >= sizeRequiredForHeaderAndChunks) {\n\t\t\t\t\t\tPlayCanvasCompressedPlyParser.readElementData(\n\t\t\t\t\t\t\theader.chunkElement,\n\t\t\t\t\t\t\tcompressedPlyHeaderChunksBuffer,\n\t\t\t\t\t\t\theader.headerSizeBytes,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tnumBytesStreamed = sizeRequiredForHeaderAndChunks;\n\t\t\t\t\t\tnumBytesParsed = sizeRequiredForHeaderAndChunks;\n\t\t\t\t\t\treadyToLoadSplatData = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (headerLoaded && readyToLoadSplatData && chunks.length > 0) {\n\t\t\t\t\tdirectLoadBufferIn = storeChunksInBuffer(chunks, directLoadBufferIn);\n\n\t\t\t\t\tconst bytesLoadedSinceLastStreamedSection = numBytesDownloaded - numBytesStreamed;\n\t\t\t\t\tif (\n\t\t\t\t\t\tbytesLoadedSinceLastStreamedSection > directLoadSectionSizeBytes ||\n\t\t\t\t\t\t(numBytesDownloaded >= endOfBaseSplatDataBytes && !baseSplatDataLoaded) ||\n\t\t\t\t\t\tloadComplete\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst bytesPerSplat = baseSplatDataLoaded ?\n\t\t\t\t\t\t\theader.sphericalHarmonicsPerSplat :\n\t\t\t\t\t\t\theader.bytesPerSplat;\n\t\t\t\t\t\tconst endOfBytesToProcess = baseSplatDataLoaded ?\n\t\t\t\t\t\t\tnumBytesDownloaded :\n\t\t\t\t\t\t\tMath.min(endOfBaseSplatDataBytes, numBytesDownloaded);\n\t\t\t\t\t\tconst numBytesToProcess = endOfBytesToProcess - numBytesParsed;\n\t\t\t\t\t\tconst addedSplatCount = Math.floor(numBytesToProcess / bytesPerSplat);\n\t\t\t\t\t\tconst numBytesToParse = addedSplatCount * bytesPerSplat;\n\t\t\t\t\t\tconst numBytesLeftOver = numBytesDownloaded - numBytesParsed - numBytesToParse;\n\t\t\t\t\t\tconst parsedDataViewOffset = numBytesParsed - chunks[0].startBytes;\n\t\t\t\t\t\tconst dataToParse = new DataView(directLoadBufferIn, parsedDataViewOffset, numBytesToParse);\n\n\t\t\t\t\t\tif (!baseSplatDataLoaded) {\n\t\t\t\t\t\t\tif (internalLoadType === InternalLoadType.ProgressiveToSplatBuffer) {\n\t\t\t\t\t\t\t\tconst shDesc =\n\t\t\t\t\t\t\t\t\tSplatBuffer.CompressionLevels[0].SphericalHarmonicsDegrees[outSphericalHarmonicsDegree];\n\t\t\t\t\t\t\t\tconst outOffset = processedBaseSplatCount * shDesc.BytesPerSplat + splatBufferDataOffsetBytes;\n\t\t\t\t\t\t\t\tif (plyFormat === PlyFormat.PlayCanvasCompressed) {\n\t\t\t\t\t\t\t\t\tPlayCanvasCompressedPlyParser.parseToUncompressedSplatBufferSection(\n\t\t\t\t\t\t\t\t\t\theader.chunkElement,\n\t\t\t\t\t\t\t\t\t\theader.vertexElement,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\taddedSplatCount - 1,\n\t\t\t\t\t\t\t\t\t\tprocessedBaseSplatCount,\n\t\t\t\t\t\t\t\t\t\tdataToParse,\n\t\t\t\t\t\t\t\t\t\tdirectLoadBufferOut,\n\t\t\t\t\t\t\t\t\t\toutOffset,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tINRIAV1PlyParser.parseToUncompressedSplatBufferSection(\n\t\t\t\t\t\t\t\t\t\theader,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\taddedSplatCount - 1,\n\t\t\t\t\t\t\t\t\t\tdataToParse,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\tdirectLoadBufferOut,\n\t\t\t\t\t\t\t\t\t\toutOffset,\n\t\t\t\t\t\t\t\t\t\toutSphericalHarmonicsDegree,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (plyFormat === PlyFormat.PlayCanvasCompressed) {\n\t\t\t\t\t\t\t\t\tPlayCanvasCompressedPlyParser.parseToUncompressedSplatArraySection(\n\t\t\t\t\t\t\t\t\t\theader.chunkElement,\n\t\t\t\t\t\t\t\t\t\theader.vertexElement,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\taddedSplatCount - 1,\n\t\t\t\t\t\t\t\t\t\tprocessedBaseSplatCount,\n\t\t\t\t\t\t\t\t\t\tdataToParse,\n\t\t\t\t\t\t\t\t\t\tstandardLoadUncompressedSplatArray,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tINRIAV1PlyParser.parseToUncompressedSplatArraySection(\n\t\t\t\t\t\t\t\t\t\theader,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\taddedSplatCount - 1,\n\t\t\t\t\t\t\t\t\t\tdataToParse,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\tstandardLoadUncompressedSplatArray,\n\t\t\t\t\t\t\t\t\t\toutSphericalHarmonicsDegree,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tprocessedBaseSplatCount += addedSplatCount;\n\n\t\t\t\t\t\t\tif (internalLoadType === InternalLoadType.ProgressiveToSplatBuffer) {\n\t\t\t\t\t\t\t\tif (!directLoadSplatBuffer) {\n\t\t\t\t\t\t\t\t\tSplatBuffer.writeSectionHeaderToBuffer(\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tmaxSplatCount: maxSplatCount,\n\t\t\t\t\t\t\t\t\t\t\tsplatCount: processedBaseSplatCount,\n\t\t\t\t\t\t\t\t\t\t\tbucketSize: 0,\n\t\t\t\t\t\t\t\t\t\t\tbucketCount: 0,\n\t\t\t\t\t\t\t\t\t\t\tbucketBlockSize: 0,\n\t\t\t\t\t\t\t\t\t\t\tcompressionScaleRange: 0,\n\t\t\t\t\t\t\t\t\t\t\tstorageSizeBytes: 0,\n\t\t\t\t\t\t\t\t\t\t\tfullBucketCount: 0,\n\t\t\t\t\t\t\t\t\t\t\tpartiallyFilledBucketCount: 0,\n\t\t\t\t\t\t\t\t\t\t\tsphericalHarmonicsDegree: outSphericalHarmonicsDegree,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\tdirectLoadBufferOut,\n\t\t\t\t\t\t\t\t\t\tSplatBuffer.HeaderSizeBytes,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\tdirectLoadSplatBuffer = new SplatBuffer(directLoadBufferOut, false);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdirectLoadSplatBuffer.updateLoadedCounts(1, processedBaseSplatCount);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (numBytesDownloaded >= endOfBaseSplatDataBytes) {\n\t\t\t\t\t\t\t\tbaseSplatDataLoaded = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (plyFormat === PlyFormat.PlayCanvasCompressed) {\n\t\t\t\t\t\t\t\tif (internalLoadType === InternalLoadType.ProgressiveToSplatArray) {\n\t\t\t\t\t\t\t\t\tPlayCanvasCompressedPlyParser.parseSphericalHarmonicsToUncompressedSplatArraySection(\n\t\t\t\t\t\t\t\t\t\theader.chunkElement,\n\t\t\t\t\t\t\t\t\t\theader.shElement,\n\t\t\t\t\t\t\t\t\t\tprocessedSphericalHarmonicsSplatCount,\n\t\t\t\t\t\t\t\t\t\tprocessedSphericalHarmonicsSplatCount + addedSplatCount - 1,\n\t\t\t\t\t\t\t\t\t\tdataToParse,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\toutSphericalHarmonicsDegree,\n\t\t\t\t\t\t\t\t\t\theader.sphericalHarmonicsDegree,\n\t\t\t\t\t\t\t\t\t\tstandardLoadUncompressedSplatArray,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\tprocessedSphericalHarmonicsSplatCount += addedSplatCount;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (numBytesLeftOver === 0) {\n\t\t\t\t\t\t\tchunks = [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlet keepChunks = [];\n\t\t\t\t\t\t\tlet keepSize = 0;\n\t\t\t\t\t\t\tfor (let i = chunks.length - 1; i >= 0; i--) {\n\t\t\t\t\t\t\t\tconst chunk = chunks[i];\n\t\t\t\t\t\t\t\tkeepSize += chunk.sizeBytes;\n\t\t\t\t\t\t\t\tkeepChunks.unshift(chunk);\n\t\t\t\t\t\t\t\tif (keepSize >= numBytesLeftOver) break;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tchunks = keepChunks;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tnumBytesStreamed += directLoadSectionSizeBytes;\n\t\t\t\t\t\tnumBytesParsed += numBytesToParse;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (onProgressiveLoadSectionProgress && directLoadSplatBuffer) {\n\t\t\t\t\tonProgressiveLoadSectionProgress(directLoadSplatBuffer, loadComplete);\n\t\t\t\t}\n\n\t\t\t\tif (loadComplete) {\n\t\t\t\t\tif (internalLoadType === InternalLoadType.ProgressiveToSplatBuffer) {\n\t\t\t\t\t\tloadPromise.resolve(directLoadSplatBuffer);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tloadPromise.resolve(standardLoadUncompressedSplatArray);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (onProgress) onProgress(percent, percentLabel, LoaderStatus.Downloading);\n\t\t};\n\n\t\tif (onProgress) onProgress(0, \"0%\", LoaderStatus.Downloading);\n\t\treturn fetchWithProgress(fileName, localOnProgress, false, headers).then(() => {\n\t\t\tif (onProgress) onProgress(0, \"0%\", LoaderStatus.Processing);\n\t\t\treturn loadPromise.promise.then((splatData) => {\n\t\t\t\tif (onProgress) onProgress(100, \"100%\", LoaderStatus.Done);\n\t\t\t\tif (internalLoadType === InternalLoadType.DownloadBeforeProcessing) {\n\t\t\t\t\tconst chunkDatas = chunks.map((chunk) => chunk.data);\n\t\t\t\t\treturn new Blob(chunkDatas).arrayBuffer().then((plyFileData) => {\n\t\t\t\t\t\treturn PlyLoader.loadFromFileData(\n\t\t\t\t\t\t\tplyFileData,\n\t\t\t\t\t\t\tminimumAlpha,\n\t\t\t\t\t\t\tcompressionLevel,\n\t\t\t\t\t\t\toptimizeSplatData,\n\t\t\t\t\t\t\toutSphericalHarmonicsDegree,\n\t\t\t\t\t\t\tsectionSize,\n\t\t\t\t\t\t\tsceneCenter,\n\t\t\t\t\t\t\tblockSize,\n\t\t\t\t\t\t\tbucketSize,\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t} else if (internalLoadType === InternalLoadType.ProgressiveToSplatBuffer) {\n\t\t\t\t\treturn splatData;\n\t\t\t\t} else {\n\t\t\t\t\treturn delayedExecute(() => {\n\t\t\t\t\t\treturn finalize(\n\t\t\t\t\t\t\tsplatData,\n\t\t\t\t\t\t\toptimizeSplatData,\n\t\t\t\t\t\t\tminimumAlpha,\n\t\t\t\t\t\t\tcompressionLevel,\n\t\t\t\t\t\t\tsectionSize,\n\t\t\t\t\t\t\tsceneCenter,\n\t\t\t\t\t\t\tblockSize,\n\t\t\t\t\t\t\tbucketSize,\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\tstatic loadFromFileData(\n\t\tplyFileData,\n\t\tminimumAlpha,\n\t\tcompressionLevel,\n\t\toptimizeSplatData,\n\t\toutSphericalHarmonicsDegree = 0,\n\t\tsectionSize,\n\t\tsceneCenter,\n\t\tblockSize,\n\t\tbucketSize,\n\t) {\n\t\tif (optimizeSplatData) {\n\t\t\treturn delayedExecute(() => {\n\t\t\t\treturn PlyParser.parseToUncompressedSplatArray(plyFileData, outSphericalHarmonicsDegree);\n\t\t\t}).then((splatArray) => {\n\t\t\t\treturn finalize(\n\t\t\t\t\tsplatArray,\n\t\t\t\t\toptimizeSplatData,\n\t\t\t\t\tminimumAlpha,\n\t\t\t\t\tcompressionLevel,\n\t\t\t\t\tsectionSize,\n\t\t\t\t\tsceneCenter,\n\t\t\t\t\tblockSize,\n\t\t\t\t\tbucketSize,\n\t\t\t\t);\n\t\t\t});\n\t\t} else {\n\t\t\treturn delayedExecute(() => {\n\t\t\t\treturn PlyParser.parseToUncompressedSplatBuffer(plyFileData, outSphericalHarmonicsDegree);\n\t\t\t});\n\t\t}\n\t}\n}\n","const createStream = (data) => {\n\treturn new ReadableStream({\n\t\tasync start(controller) {\n\t\t\tcontroller.enqueue(data);\n\t\t\tcontroller.close();\n\t\t},\n\t});\n};\n\nexport async function decompressGzipped(data) {\n\ttry {\n\t\tconst stream = createStream(data);\n\t\tif (!stream) throw new Error(\"Failed to create stream from data\");\n\n\t\treturn await decompressGzipStream(stream);\n\t} catch (error) {\n\t\tconsole.error(\"Error decompressing gzipped data:\", error);\n\t\tthrow error;\n\t}\n}\n\nexport async function decompressGzipStream(stream) {\n\tconst decompressedStream = stream.pipeThrough(new DecompressionStream(\"gzip\"));\n\tconst response = new Response(decompressedStream);\n\tconst buffer = await response.arrayBuffer();\n\n\treturn new Uint8Array(buffer);\n}\n\nexport async function compressGzipped(data) {\n\ttry {\n\t\tconst stream = createStream(data);\n\t\tconst compressedStream = stream.pipeThrough(new CompressionStream(\"gzip\"));\n\t\tconst response = new Response(compressedStream);\n\t\tconst buffer = await response.arrayBuffer();\n\n\t\treturn new Uint8Array(buffer);\n\t} catch (error) {\n\t\tconsole.error(\"Error compressing gzipped data:\", error);\n\t\tthrow error;\n\t}\n}\n","import * as THREE from \"three\";\nimport { fetchWithProgress, delayedExecute } from \"../../Util.js\";\nimport { SplatBuffer } from \"../SplatBuffer.js\";\nimport { SplatBufferGenerator } from \"../SplatBufferGenerator.js\";\nimport { LoaderStatus } from \"../LoaderStatus.js\";\nimport { UncompressedSplatArray } from \"../UncompressedSplatArray.js\";\nimport { decompressGzipped } from \"../Compression.js\";\nimport { clamp } from \"../../Util.js\";\n\nconst SPZ_MAGIC = 1347635022;\nconst FLAG_ANTIALIASED = 1;\nconst COLOR_SCALE = 0.15;\n\nfunction halfToFloat(h) {\n\tconst sgn = (h >> 15) & 0x1;\n\tconst exponent = (h >> 10) & 0x1f;\n\tconst mantissa = h & 0x3ff;\n\n\tconst signMul = sgn === 1 ? -1.0 : 1.0;\n\tif (exponent === 0) {\n\t\treturn (signMul * Math.pow(2, -14) * mantissa) / 1024;\n\t}\n\n\tif (exponent === 31) {\n\t\treturn mantissa !== 0 ? NaN : signMul * Infinity;\n\t}\n\n\treturn signMul * Math.pow(2, exponent - 15) * (1 + mantissa / 1024);\n}\n\nfunction unquantizeSH(x) {\n\treturn (x - 128.0) / 128.0;\n}\n\nfunction dimForDegree(degree) {\n\tswitch (degree) {\n\t\tcase 0:\n\t\t\treturn 0;\n\t\tcase 1:\n\t\t\treturn 3;\n\t\tcase 2:\n\t\t\treturn 8;\n\t\tcase 3:\n\t\t\treturn 15;\n\t\tdefault:\n\t\t\tconsole.error(`[SPZ: ERROR] Unsupported SH degree: ${degree}`);\n\t\t\treturn 0;\n\t}\n}\n\nconst unpackedSplatToUncompressedSplat = (function() {\n\tlet rawSplat = [];\n\tconst tempRotation = new THREE.Quaternion();\n\n\tconst OFFSET_X = UncompressedSplatArray.OFFSET.X;\n\tconst OFFSET_Y = UncompressedSplatArray.OFFSET.Y;\n\tconst OFFSET_Z = UncompressedSplatArray.OFFSET.Z;\n\n\tconst OFFSET_SCALE0 = UncompressedSplatArray.OFFSET.SCALE0;\n\tconst OFFSET_SCALE1 = UncompressedSplatArray.OFFSET.SCALE1;\n\tconst OFFSET_SCALE2 = UncompressedSplatArray.OFFSET.SCALE2;\n\n\tconst OFFSET_ROTATION0 = UncompressedSplatArray.OFFSET.ROTATION0;\n\tconst OFFSET_ROTATION1 = UncompressedSplatArray.OFFSET.ROTATION1;\n\tconst OFFSET_ROTATION2 = UncompressedSplatArray.OFFSET.ROTATION2;\n\tconst OFFSET_ROTATION3 = UncompressedSplatArray.OFFSET.ROTATION3;\n\n\tconst OFFSET_FDC0 = UncompressedSplatArray.OFFSET.FDC0;\n\tconst OFFSET_FDC1 = UncompressedSplatArray.OFFSET.FDC1;\n\tconst OFFSET_FDC2 = UncompressedSplatArray.OFFSET.FDC2;\n\tconst OFFSET_OPACITY = UncompressedSplatArray.OFFSET.OPACITY;\n\n\tconst OFFSET_FRC = [];\n\n\tfor (let i = 0; i < 45; i++) {\n\t\tOFFSET_FRC[i] = UncompressedSplatArray.OFFSET.FRC0 + i;\n\t}\n\n\tconst shCoeffMap = [dimForDegree(0), dimForDegree(1), dimForDegree(2), dimForDegree(3)];\n\n\tconst shIndexMap = [\n\t\t0, 1, 2, 9, 10, 11, 12, 13, 24, 25, 26, 27, 28, 29, 30, 3, 4, 5, 14, 15, 16, 17, 18, 31, 32, 33, 34, 35,\n\t\t36, 37, 6, 7, 8, 19, 20, 21, 22, 23, 38, 39, 40, 41, 42, 43, 44,\n\t];\n\n\treturn function(unpackedSplat, unpackedSphericalHarmonicsDegree, outSphericalHarmonicsDegree) {\n\t\toutSphericalHarmonicsDegree = Math.min(unpackedSphericalHarmonicsDegree, outSphericalHarmonicsDegree);\n\n\t\tconst newSplat = UncompressedSplatArray.createSplat(outSphericalHarmonicsDegree);\n\t\tif (unpackedSplat.scale[0] !== undefined) {\n\t\t\tnewSplat[OFFSET_SCALE0] = unpackedSplat.scale[0];\n\t\t\tnewSplat[OFFSET_SCALE1] = unpackedSplat.scale[1];\n\t\t\tnewSplat[OFFSET_SCALE2] = unpackedSplat.scale[2];\n\t\t} else {\n\t\t\tnewSplat[OFFSET_SCALE0] = 0.01;\n\t\t\tnewSplat[OFFSET_SCALE1] = 0.01;\n\t\t\tnewSplat[OFFSET_SCALE2] = 0.01;\n\t\t}\n\n\t\tif (unpackedSplat.color[0] !== undefined) {\n\t\t\tnewSplat[OFFSET_FDC0] = unpackedSplat.color[0];\n\t\t\tnewSplat[OFFSET_FDC1] = unpackedSplat.color[1];\n\t\t\tnewSplat[OFFSET_FDC2] = unpackedSplat.color[2];\n\t\t} else if (rawSplat[RED] !== undefined) {\n\t\t\tnewSplat[OFFSET_FDC0] = rawSplat[RED] * 255;\n\t\t\tnewSplat[OFFSET_FDC1] = rawSplat[GREEN] * 255;\n\t\t\tnewSplat[OFFSET_FDC2] = rawSplat[BLUE] * 255;\n\t\t} else {\n\t\t\tnewSplat[OFFSET_FDC0] = 0;\n\t\t\tnewSplat[OFFSET_FDC1] = 0;\n\t\t\tnewSplat[OFFSET_FDC2] = 0;\n\t\t}\n\n\t\tif (unpackedSplat.alpha !== undefined) {\n\t\t\tnewSplat[OFFSET_OPACITY] = unpackedSplat.alpha;\n\t\t}\n\n\t\tnewSplat[OFFSET_FDC0] = clamp(Math.floor(newSplat[OFFSET_FDC0]), 0, 255);\n\t\tnewSplat[OFFSET_FDC1] = clamp(Math.floor(newSplat[OFFSET_FDC1]), 0, 255);\n\t\tnewSplat[OFFSET_FDC2] = clamp(Math.floor(newSplat[OFFSET_FDC2]), 0, 255);\n\t\tnewSplat[OFFSET_OPACITY] = clamp(Math.floor(newSplat[OFFSET_OPACITY]), 0, 255);\n\n\t\tlet outSHCoeff = shCoeffMap[outSphericalHarmonicsDegree];\n\t\tlet readSHCoeff = shCoeffMap[unpackedSphericalHarmonicsDegree];\n\t\tfor (let j = 0; j < 3; ++j) {\n\t\t\tfor (let k = 0; k < 15; ++k) {\n\t\t\t\tconst outIndex = shIndexMap[j * 15 + k];\n\t\t\t\tif (k < outSHCoeff && k < readSHCoeff) {\n\t\t\t\t\tnewSplat[UncompressedSplatArray.OFFSET.FRC0 + outIndex] = unpackedSplat.sh[j * readSHCoeff + k];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ttempRotation.set(\n\t\t\tunpackedSplat.rotation[3],\n\t\t\tunpackedSplat.rotation[0],\n\t\t\tunpackedSplat.rotation[1],\n\t\t\tunpackedSplat.rotation[2],\n\t\t);\n\t\ttempRotation.normalize();\n\n\t\tnewSplat[OFFSET_ROTATION0] = tempRotation.x;\n\t\tnewSplat[OFFSET_ROTATION1] = tempRotation.y;\n\t\tnewSplat[OFFSET_ROTATION2] = tempRotation.z;\n\t\tnewSplat[OFFSET_ROTATION3] = tempRotation.w;\n\n\t\tnewSplat[OFFSET_X] = unpackedSplat.position[0];\n\t\tnewSplat[OFFSET_Y] = unpackedSplat.position[1];\n\t\tnewSplat[OFFSET_Z] = unpackedSplat.position[2];\n\n\t\treturn newSplat;\n\t};\n})();\n\n// Helper function to check sizes (matching C++ checkSizes function)\nfunction checkSizes2(packed, numPoints, shDim, usesFloat16) {\n\tif (packed.positions.length !== numPoints * 3 * (usesFloat16 ? 2 : 3)) return false;\n\tif (packed.scales.length !== numPoints * 3) return false;\n\tif (packed.rotations.length !== numPoints * 3) return false;\n\tif (packed.alphas.length !== numPoints) return false;\n\tif (packed.colors.length !== numPoints * 3) return false;\n\tif (packed.sh.length !== numPoints * shDim * 3) return false;\n\treturn true;\n}\n\nfunction unpackGaussians(\n\tpacked,\n\toutSphericalHarmonicsDegree,\n\tdirectToSplatBuffer,\n\toutTarget,\n\toutTargetOffset,\n) {\n\toutSphericalHarmonicsDegree = Math.min(outSphericalHarmonicsDegree, packed.shDegree);\n\tconst numPoints = packed.numPoints;\n\tconst shDim = dimForDegree(packed.shDegree);\n\tconst usesFloat16 = packed.positions.length === numPoints * 3 * 2;\n\n\t// Validate sizes\n\tif (!checkSizes2(packed, numPoints, shDim, usesFloat16)) {\n\t\treturn null;\n\t}\n\n\tconst splat = {\n\t\tposition: [],\n\t\tscale: [],\n\t\trotation: [],\n\t\talpha: undefined,\n\t\tcolor: [],\n\t\tsh: [],\n\t};\n\n\tlet halfData;\n\tif (usesFloat16) {\n\t\thalfData = new Uint16Array(packed.positions.buffer, packed.positions.byteOffset, numPoints * 3);\n\t}\n\tconst fullPrecisionPositionScale = 1.0 / (1 << packed.fractionalBits);\n\tconst shCoeffPerChannelPerSplat = dimForDegree(packed.shDegree);\n\tconst SH_C0 = 0.28209479177387814;\n\n\tfor (let i = 0; i < numPoints; i++) {\n\t\t// Splat position\n\t\tif (usesFloat16) {\n\t\t\t// Decode legacy float16 format\n\t\t\tfor (let j = 0; j < 3; j++) {\n\t\t\t\tsplat.position[j] = halfToFloat(halfData[i * 3 + j]);\n\t\t\t}\n\t\t} else {\n\t\t\t// Decode 24-bit fixed point coordinates\n\t\t\tfor (let j = 0; j < 3; j++) {\n\t\t\t\tconst base = i * 9 + j * 3;\n\t\t\t\tlet fixed32 = packed.positions[base];\n\t\t\t\tfixed32 |= packed.positions[base + 1] << 8;\n\t\t\t\tfixed32 |= packed.positions[base + 2] << 16;\n\t\t\t\tfixed32 |= fixed32 & 0x800000 ? 0xff000000 : 0;\n\t\t\t\tsplat.position[j] = fixed32 * fullPrecisionPositionScale;\n\t\t\t}\n\t\t}\n\n\t\t// Splat scale\n\t\tfor (let j = 0; j < 3; j++) {\n\t\t\tsplat.scale[j] = Math.exp(packed.scales[i * 3 + j] / 16.0 - 10.0);\n\t\t}\n\n\t\t// Splat rotation\n\t\tconst r = packed.rotations.subarray(i * 3, i * 3 + 3);\n\t\tconst xyz = [r[0] / 127.5 - 1.0, r[1] / 127.5 - 1.0, r[2] / 127.5 - 1.0];\n\t\tsplat.rotation[0] = xyz[0];\n\t\tsplat.rotation[1] = xyz[1];\n\t\tsplat.rotation[2] = xyz[2];\n\t\tconst squaredNorm = xyz[0] * xyz[0] + xyz[1] * xyz[1] + xyz[2] * xyz[2];\n\t\tsplat.rotation[3] = Math.sqrt(Math.max(0.0, 1.0 - squaredNorm));\n\n\t\t// Splat alpha\n\t\t// splat.alpha = invSigmoid(packed.alphas[i] / 255.0);\n\t\tsplat.alpha = Math.floor(packed.alphas[i]);\n\n\t\t// Splat color\n\t\tfor (let j = 0; j < 3; j++) {\n\t\t\tsplat.color[j] = Math.floor(\n\t\t\t\t(((packed.colors[i * 3 + j] / 255.0 - 0.5) / COLOR_SCALE) * SH_C0 + 0.5) * 255,\n\t\t\t);\n\t\t}\n\n\t\t// Splat spherical harmonics\n\t\tfor (let j = 0; j < 3; j++) {\n\t\t\tfor (let k = 0; k < shCoeffPerChannelPerSplat; k++) {\n\t\t\t\tsplat.sh[j * shCoeffPerChannelPerSplat + k] = unquantizeSH(\n\t\t\t\t\tpacked.sh[shCoeffPerChannelPerSplat * 3 * i + k * 3 + j],\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst uncompressedSplat = unpackedSplatToUncompressedSplat(\n\t\t\tsplat,\n\t\t\tpacked.shDegree,\n\t\t\toutSphericalHarmonicsDegree,\n\t\t);\n\t\tif (directToSplatBuffer) {\n\t\t\tconst outBytesPerSplat =\n\t\t\t\tSplatBuffer.CompressionLevels[0].SphericalHarmonicsDegrees[outSphericalHarmonicsDegree].BytesPerSplat;\n\t\t\tconst outBase = i * outBytesPerSplat + outTargetOffset;\n\t\t\tSplatBuffer.writeSplatDataToSectionBuffer(\n\t\t\t\tuncompressedSplat,\n\t\t\t\toutTarget,\n\t\t\t\toutBase,\n\t\t\t\t0,\n\t\t\t\toutSphericalHarmonicsDegree,\n\t\t\t);\n\t\t} else {\n\t\t\toutTarget.addSplat(uncompressedSplat);\n\t\t}\n\t}\n}\n\nconst HEADER_SIZE = 16; // 4 + 4 + 4 + 1 + 1 + 1 + 1 bytes\nconst MAX_POINTS_TO_READ = 10000000;\n\nfunction deserializePackedGaussians(buffer) {\n\tconst view = new DataView(buffer);\n\tlet offset = 0;\n\n\t// Read and validate header\n\tconst header = {\n\t\tmagic: view.getUint32(offset, true),\n\t\tversion: view.getUint32(offset + 4, true),\n\t\tnumPoints: view.getUint32(offset + 8, true),\n\t\tshDegree: view.getUint8(offset + 12),\n\t\tfractionalBits: view.getUint8(offset + 13),\n\t\tflags: view.getUint8(offset + 14),\n\t\treserved: view.getUint8(offset + 15),\n\t};\n\n\toffset += HEADER_SIZE;\n\n\t// Validate header\n\tif (header.magic !== SPZ_MAGIC) {\n\t\tconsole.error(\"[SPZ ERROR] deserializePackedGaussians: header not found\");\n\t\treturn null;\n\t}\n\tif (header.version < 1 || header.version > 2) {\n\t\tconsole.error(`[SPZ ERROR] deserializePackedGaussians: version not supported: ${header.version}`);\n\t\treturn null;\n\t}\n\tif (header.numPoints > MAX_POINTS_TO_READ) {\n\t\tconsole.error(`[SPZ ERROR] deserializePackedGaussians: Too many points: ${header.numPoints}`);\n\t\treturn null;\n\t}\n\tif (header.shDegree > 3) {\n\t\tconsole.error(`[SPZ ERROR] deserializePackedGaussians: Unsupported SH degree: ${header.shDegree}`);\n\t\treturn null;\n\t}\n\n\tconst numPoints = header.numPoints;\n\tconst shDim = dimForDegree(header.shDegree);\n\tconst usesFloat16 = header.version === 1;\n\n\t// Initialize result object\n\tconst result = {\n\t\tnumPoints,\n\t\tshDegree: header.shDegree,\n\t\tfractionalBits: header.fractionalBits,\n\t\tantialiased: (header.flags & FLAG_ANTIALIASED) !== 0,\n\t\tpositions: new Uint8Array(numPoints * 3 * (usesFloat16 ? 2 : 3)),\n\t\tscales: new Uint8Array(numPoints * 3),\n\t\trotations: new Uint8Array(numPoints * 3),\n\t\talphas: new Uint8Array(numPoints),\n\t\tcolors: new Uint8Array(numPoints * 3),\n\t\tsh: new Uint8Array(numPoints * shDim * 3),\n\t};\n\n\t// Read data sections\n\ttry {\n\t\tconst uint8View = new Uint8Array(buffer);\n\t\tlet positionsSize = result.positions.length;\n\t\tlet currentOffset = offset;\n\n\t\tresult.positions.set(uint8View.slice(currentOffset, currentOffset + positionsSize));\n\t\tcurrentOffset += positionsSize;\n\n\t\tresult.alphas.set(uint8View.slice(currentOffset, currentOffset + result.alphas.length));\n\t\tcurrentOffset += result.alphas.length;\n\n\t\tresult.colors.set(uint8View.slice(currentOffset, currentOffset + result.colors.length));\n\t\tcurrentOffset += result.colors.length;\n\n\t\tresult.scales.set(uint8View.slice(currentOffset, currentOffset + result.scales.length));\n\t\tcurrentOffset += result.scales.length;\n\n\t\tresult.rotations.set(uint8View.slice(currentOffset, currentOffset + result.rotations.length));\n\t\tcurrentOffset += result.rotations.length;\n\n\t\tresult.sh.set(uint8View.slice(currentOffset, currentOffset + result.sh.length));\n\n\t\t// Verify we read the expected amount of data\n\t\tif (currentOffset + result.sh.length !== buffer.byteLength) {\n\t\t\tconsole.error(\"[SPZ ERROR] deserializePackedGaussians: incorrect buffer size\");\n\t\t\treturn null;\n\t\t}\n\t} catch (error) {\n\t\tconsole.error(\"[SPZ ERROR] deserializePackedGaussians: read error\", error);\n\t\treturn null;\n\t}\n\n\treturn result;\n}\n\nasync function loadSpzPacked(compressedData) {\n\ttry {\n\t\tconst decompressed = await decompressGzipped(compressedData);\n\t\treturn deserializePackedGaussians(decompressed.buffer);\n\t} catch (error) {\n\t\tconsole.error(\"[SPZ ERROR] loadSpzPacked: decompression error\", error);\n\t\treturn null;\n\t}\n}\n\nexport class SpzLoader {\n\tstatic loadFromURL(\n\t\tfileName,\n\t\tonProgress,\n\t\tminimumAlpha,\n\t\tcompressionLevel,\n\t\toptimizeSplatData = true,\n\t\toutSphericalHarmonicsDegree = 0,\n\t\theaders,\n\t\tsectionSize,\n\t\tsceneCenter,\n\t\tblockSize,\n\t\tbucketSize,\n\t) {\n\t\tif (onProgress) onProgress(0, \"0%\", LoaderStatus.Downloading);\n\t\treturn fetchWithProgress(fileName, onProgress, true, headers).then((fileData) => {\n\t\t\tif (onProgress) onProgress(0, \"0%\", LoaderStatus.Processing);\n\t\t\treturn SpzLoader.loadFromFileData(\n\t\t\t\tfileData,\n\t\t\t\tminimumAlpha,\n\t\t\t\tcompressionLevel,\n\t\t\t\toptimizeSplatData,\n\t\t\t\toutSphericalHarmonicsDegree,\n\t\t\t\tsectionSize,\n\t\t\t\tsceneCenter,\n\t\t\t\tblockSize,\n\t\t\t\tbucketSize,\n\t\t\t);\n\t\t});\n\t}\n\n\tstatic async loadFromFileData(\n\t\tspzFileData,\n\t\tminimumAlpha,\n\t\tcompressionLevel,\n\t\toptimizeSplatData,\n\t\toutSphericalHarmonicsDegree = 0,\n\t\tsectionSize,\n\t\tsceneCenter,\n\t\tblockSize,\n\t\tbucketSize,\n\t) {\n\t\tawait delayedExecute();\n\t\tconst packed = await loadSpzPacked(spzFileData);\n\t\toutSphericalHarmonicsDegree = Math.min(packed.shDegree, outSphericalHarmonicsDegree);\n\n\t\tconst splatArray = new UncompressedSplatArray(outSphericalHarmonicsDegree);\n\n\t\tif (optimizeSplatData) {\n\t\t\tunpackGaussians(packed, outSphericalHarmonicsDegree, false, splatArray, 0);\n\t\t\tconst splatBufferGenerator = SplatBufferGenerator.getStandardGenerator(\n\t\t\t\tminimumAlpha,\n\t\t\t\tcompressionLevel,\n\t\t\t\tsectionSize,\n\t\t\t\tsceneCenter,\n\t\t\t\tblockSize,\n\t\t\t\tbucketSize,\n\t\t\t);\n\t\t\treturn splatBufferGenerator.generateFromUncompressedSplatArray(splatArray);\n\t\t} else {\n\t\t\tconst { splatBuffer, splatBufferDataOffsetBytes } = SplatBuffer.preallocateUncompressed(\n\t\t\t\tpacked.numPoints,\n\t\t\t\toutSphericalHarmonicsDegree,\n\t\t\t);\n\t\t\tunpackGaussians(\n\t\t\t\tpacked,\n\t\t\t\toutSphericalHarmonicsDegree,\n\t\t\t\ttrue,\n\t\t\t\tsplatBuffer.bufferData,\n\t\t\t\tsplatBufferDataOffsetBytes,\n\t\t\t);\n\t\t\treturn splatBuffer;\n\t\t}\n\t}\n}\n","import * as THREE from \"three\";\nimport { SplatBuffer } from \"../SplatBuffer.js\";\nimport { UncompressedSplatArray } from \"../UncompressedSplatArray.js\";\n\nexport class SplatParser {\n\tstatic RowSizeBytes = 32;\n\tstatic CenterSizeBytes = 12;\n\tstatic ScaleSizeBytes = 12;\n\tstatic RotationSizeBytes = 4;\n\tstatic ColorSizeBytes = 4;\n\n\tstatic parseToUncompressedSplatBufferSection(\n\t\tfromSplat,\n\t\ttoSplat,\n\t\tfromBuffer,\n\t\tfromOffset,\n\t\ttoBuffer,\n\t\ttoOffset,\n\t) {\n\t\tconst outBytesPerCenter = SplatBuffer.CompressionLevels[0].BytesPerCenter;\n\t\tconst outBytesPerScale = SplatBuffer.CompressionLevels[0].BytesPerScale;\n\t\tconst outBytesPerRotation = SplatBuffer.CompressionLevels[0].BytesPerRotation;\n\t\tconst outBytesPerSplat = SplatBuffer.CompressionLevels[0].SphericalHarmonicsDegrees[0].BytesPerSplat;\n\n\t\tfor (let i = fromSplat; i <= toSplat; i++) {\n\t\t\tconst inBase = i * SplatParser.RowSizeBytes + fromOffset;\n\t\t\tconst inCenter = new Float32Array(fromBuffer, inBase, 3);\n\t\t\tconst inScale = new Float32Array(fromBuffer, inBase + SplatParser.CenterSizeBytes, 3);\n\t\t\tconst inColor = new Uint8Array(\n\t\t\t\tfromBuffer,\n\t\t\t\tinBase + SplatParser.CenterSizeBytes + SplatParser.ScaleSizeBytes,\n\t\t\t\t4,\n\t\t\t);\n\t\t\tconst inRotation = new Uint8Array(\n\t\t\t\tfromBuffer,\n\t\t\t\tinBase + SplatParser.CenterSizeBytes + SplatParser.ScaleSizeBytes + SplatParser.RotationSizeBytes,\n\t\t\t\t4,\n\t\t\t);\n\n\t\t\tconst quat = new THREE.Quaternion(\n\t\t\t\t(inRotation[1] - 128) / 128,\n\t\t\t\t(inRotation[2] - 128) / 128,\n\t\t\t\t(inRotation[3] - 128) / 128,\n\t\t\t\t(inRotation[0] - 128) / 128,\n\t\t\t);\n\t\t\tquat.normalize();\n\n\t\t\tconst outBase = i * outBytesPerSplat + toOffset;\n\t\t\tconst outCenter = new Float32Array(toBuffer, outBase, 3);\n\t\t\tconst outScale = new Float32Array(toBuffer, outBase + outBytesPerCenter, 3);\n\t\t\tconst outRotation = new Float32Array(toBuffer, outBase + outBytesPerCenter + outBytesPerScale, 4);\n\t\t\tconst outColor = new Uint8Array(\n\t\t\t\ttoBuffer,\n\t\t\t\toutBase + outBytesPerCenter + outBytesPerScale + outBytesPerRotation,\n\t\t\t\t4,\n\t\t\t);\n\n\t\t\toutCenter[0] = inCenter[0];\n\t\t\toutCenter[1] = inCenter[1];\n\t\t\toutCenter[2] = inCenter[2];\n\n\t\t\toutScale[0] = inScale[0];\n\t\t\toutScale[1] = inScale[1];\n\t\t\toutScale[2] = inScale[2];\n\n\t\t\toutRotation[0] = quat.w;\n\t\t\toutRotation[1] = quat.x;\n\t\t\toutRotation[2] = quat.y;\n\t\t\toutRotation[3] = quat.z;\n\n\t\t\toutColor[0] = inColor[0];\n\t\t\toutColor[1] = inColor[1];\n\t\t\toutColor[2] = inColor[2];\n\t\t\toutColor[3] = inColor[3];\n\t\t}\n\t}\n\n\tstatic parseToUncompressedSplatArraySection(fromSplat, toSplat, fromBuffer, fromOffset, splatArray) {\n\t\tfor (let i = fromSplat; i <= toSplat; i++) {\n\t\t\tconst inBase = i * SplatParser.RowSizeBytes + fromOffset;\n\t\t\tconst inCenter = new Float32Array(fromBuffer, inBase, 3);\n\t\t\tconst inScale = new Float32Array(fromBuffer, inBase + SplatParser.CenterSizeBytes, 3);\n\t\t\tconst inColor = new Uint8Array(\n\t\t\t\tfromBuffer,\n\t\t\t\tinBase + SplatParser.CenterSizeBytes + SplatParser.ScaleSizeBytes,\n\t\t\t\t4,\n\t\t\t);\n\t\t\tconst inRotation = new Uint8Array(\n\t\t\t\tfromBuffer,\n\t\t\t\tinBase + SplatParser.CenterSizeBytes + SplatParser.ScaleSizeBytes + SplatParser.RotationSizeBytes,\n\t\t\t\t4,\n\t\t\t);\n\n\t\t\tconst quat = new THREE.Quaternion(\n\t\t\t\t(inRotation[1] - 128) / 128,\n\t\t\t\t(inRotation[2] - 128) / 128,\n\t\t\t\t(inRotation[3] - 128) / 128,\n\t\t\t\t(inRotation[0] - 128) / 128,\n\t\t\t);\n\t\t\tquat.normalize();\n\n\t\t\tsplatArray.addSplatFromComonents(\n\t\t\t\tinCenter[0],\n\t\t\t\tinCenter[1],\n\t\t\t\tinCenter[2],\n\t\t\t\tinScale[0],\n\t\t\t\tinScale[1],\n\t\t\t\tinScale[2],\n\t\t\t\tquat.w,\n\t\t\t\tquat.x,\n\t\t\t\tquat.y,\n\t\t\t\tquat.z,\n\t\t\t\tinColor[0],\n\t\t\t\tinColor[1],\n\t\t\t\tinColor[2],\n\t\t\t\tinColor[3],\n\t\t\t);\n\t\t}\n\t}\n\n\tstatic parseStandardSplatToUncompressedSplatArray(inBuffer) {\n\t\t// Standard .splat row layout:\n\t\t// XYZ - Position (Float32)\n\t\t// XYZ - Scale (Float32)\n\t\t// RGBA - colors (uint8)\n\t\t// IJKL - quaternion/rot (uint8)\n\n\t\tconst splatCount = inBuffer.byteLength / SplatParser.RowSizeBytes;\n\n\t\tconst splatArray = new UncompressedSplatArray();\n\n\t\tfor (let i = 0; i < splatCount; i++) {\n\t\t\tconst inBase = i * SplatParser.RowSizeBytes;\n\t\t\tconst inCenter = new Float32Array(inBuffer, inBase, 3);\n\t\t\tconst inScale = new Float32Array(inBuffer, inBase + SplatParser.CenterSizeBytes, 3);\n\t\t\tconst inColor = new Uint8Array(\n\t\t\t\tinBuffer,\n\t\t\t\tinBase + SplatParser.CenterSizeBytes + SplatParser.ScaleSizeBytes,\n\t\t\t\t4,\n\t\t\t);\n\t\t\tconst inRotation = new Uint8Array(\n\t\t\t\tinBuffer,\n\t\t\t\tinBase + SplatParser.CenterSizeBytes + SplatParser.ScaleSizeBytes + SplatParser.ColorSizeBytes,\n\t\t\t\t4,\n\t\t\t);\n\n\t\t\tconst quat = new THREE.Quaternion(\n\t\t\t\t(inRotation[1] - 128) / 128,\n\t\t\t\t(inRotation[2] - 128) / 128,\n\t\t\t\t(inRotation[3] - 128) / 128,\n\t\t\t\t(inRotation[0] - 128) / 128,\n\t\t\t);\n\t\t\tquat.normalize();\n\n\t\t\tsplatArray.addSplatFromComonents(\n\t\t\t\tinCenter[0],\n\t\t\t\tinCenter[1],\n\t\t\t\tinCenter[2],\n\t\t\t\tinScale[0],\n\t\t\t\tinScale[1],\n\t\t\t\tinScale[2],\n\t\t\t\tquat.w,\n\t\t\t\tquat.x,\n\t\t\t\tquat.y,\n\t\t\t\tquat.z,\n\t\t\t\tinColor[0],\n\t\t\t\tinColor[1],\n\t\t\t\tinColor[2],\n\t\t\t\tinColor[3],\n\t\t\t);\n\t\t}\n\n\t\treturn splatArray;\n\t}\n}\n","import * as THREE from \"three\";\nimport { SplatBuffer } from \"../SplatBuffer.js\";\nimport { SplatBufferGenerator } from \"../SplatBufferGenerator.js\";\nimport { SplatParser } from \"./SplatParser.js\";\nimport { fetchWithProgress, delayedExecute, nativePromiseWithExtractedComponents } from \"../../Util.js\";\nimport { UncompressedSplatArray } from \"../UncompressedSplatArray.js\";\nimport { LoaderStatus } from \"../LoaderStatus.js\";\nimport { DirectLoadError } from \"../DirectLoadError.js\";\nimport { Constants } from \"../../Constants.js\";\nimport { InternalLoadType } from \"../InternalLoadType.js\";\n\nfunction finalize(\n\tsplatData,\n\toptimizeSplatData,\n\tminimumAlpha,\n\tcompressionLevel,\n\tsectionSize,\n\tsceneCenter,\n\tblockSize,\n\tbucketSize,\n) {\n\tif (optimizeSplatData) {\n\t\tconst splatBufferGenerator = SplatBufferGenerator.getStandardGenerator(\n\t\t\tminimumAlpha,\n\t\t\tcompressionLevel,\n\t\t\tsectionSize,\n\t\t\tsceneCenter,\n\t\t\tblockSize,\n\t\t\tbucketSize,\n\t\t);\n\t\treturn splatBufferGenerator.generateFromUncompressedSplatArray(splatData);\n\t} else {\n\t\t// TODO: Implement direct-to-SplatBuffer when not optimizing splat data\n\t\treturn SplatBuffer.generateFromUncompressedSplatArrays([splatData], minimumAlpha, 0, new THREE.Vector3());\n\t}\n}\n\nexport class SplatLoader {\n\tstatic loadFromURL(\n\t\tfileName,\n\t\tonProgress,\n\t\tprogressiveLoadToSplatBuffer,\n\t\tonProgressiveLoadSectionProgress,\n\t\tminimumAlpha,\n\t\tcompressionLevel,\n\t\toptimizeSplatData = true,\n\t\theaders,\n\t\tsectionSize,\n\t\tsceneCenter,\n\t\tblockSize,\n\t\tbucketSize,\n\t) {\n\t\tlet internalLoadType = progressiveLoadToSplatBuffer ?\n\t\t\tInternalLoadType.ProgressiveToSplatBuffer :\n\t\t\tInternalLoadType.ProgressiveToSplatArray;\n\t\tif (optimizeSplatData) internalLoadType = InternalLoadType.ProgressiveToSplatArray;\n\n\t\tconst splatDataOffsetBytes = SplatBuffer.HeaderSizeBytes + SplatBuffer.SectionHeaderSizeBytes;\n\t\tconst directLoadSectionSizeBytes = Constants.ProgressiveLoadSectionSize;\n\t\tconst sectionCount = 1;\n\n\t\tlet directLoadBufferIn;\n\t\tlet directLoadBufferOut;\n\t\tlet directLoadSplatBuffer;\n\t\tlet maxSplatCount = 0;\n\t\tlet splatCount = 0;\n\n\t\tlet standardLoadUncompressedSplatArray;\n\n\t\tconst loadPromise = nativePromiseWithExtractedComponents();\n\n\t\tlet numBytesStreamed = 0;\n\t\tlet numBytesLoaded = 0;\n\t\tlet chunks = [];\n\n\t\tconst localOnProgress = (percent, percentStr, chunk, fileSize) => {\n\t\t\tconst loadComplete = percent >= 100;\n\n\t\t\tif (chunk) {\n\t\t\t\tchunks.push(chunk);\n\t\t\t}\n\n\t\t\tif (internalLoadType === InternalLoadType.DownloadBeforeProcessing) {\n\t\t\t\tif (loadComplete) {\n\t\t\t\t\tloadPromise.resolve(chunks);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!fileSize) {\n\t\t\t\tif (progressiveLoadToSplatBuffer) {\n\t\t\t\t\tthrow new DirectLoadError(\"Cannon directly load .splat because no file size info is available.\");\n\t\t\t\t} else {\n\t\t\t\t\tinternalLoadType = InternalLoadType.DownloadBeforeProcessing;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!directLoadBufferIn) {\n\t\t\t\tmaxSplatCount = fileSize / SplatParser.RowSizeBytes;\n\t\t\t\tdirectLoadBufferIn = new ArrayBuffer(fileSize);\n\t\t\t\tconst bytesPerSplat = SplatBuffer.CompressionLevels[0].SphericalHarmonicsDegrees[0].BytesPerSplat;\n\t\t\t\tconst splatBufferSizeBytes = splatDataOffsetBytes + bytesPerSplat * maxSplatCount;\n\n\t\t\t\tif (internalLoadType === InternalLoadType.ProgressiveToSplatBuffer) {\n\t\t\t\t\tdirectLoadBufferOut = new ArrayBuffer(splatBufferSizeBytes);\n\t\t\t\t\tSplatBuffer.writeHeaderToBuffer(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tversionMajor: SplatBuffer.CurrentMajorVersion,\n\t\t\t\t\t\t\tversionMinor: SplatBuffer.CurrentMinorVersion,\n\t\t\t\t\t\t\tmaxSectionCount: sectionCount,\n\t\t\t\t\t\t\tsectionCount: sectionCount,\n\t\t\t\t\t\t\tmaxSplatCount: maxSplatCount,\n\t\t\t\t\t\t\tsplatCount: splatCount,\n\t\t\t\t\t\t\tcompressionLevel: 0,\n\t\t\t\t\t\t\tsceneCenter: new THREE.Vector3(),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdirectLoadBufferOut,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tstandardLoadUncompressedSplatArray = new UncompressedSplatArray(0);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (chunk) {\n\t\t\t\tnew Uint8Array(directLoadBufferIn, numBytesLoaded, chunk.byteLength).set(new Uint8Array(chunk));\n\t\t\t\tnumBytesLoaded += chunk.byteLength;\n\n\t\t\t\tconst bytesLoadedSinceLastSection = numBytesLoaded - numBytesStreamed;\n\t\t\t\tif (bytesLoadedSinceLastSection > directLoadSectionSizeBytes || loadComplete) {\n\t\t\t\t\tconst bytesToUpdate = loadComplete ? bytesLoadedSinceLastSection : directLoadSectionSizeBytes;\n\t\t\t\t\tconst addedSplatCount = bytesToUpdate / SplatParser.RowSizeBytes;\n\t\t\t\t\tconst newSplatCount = splatCount + addedSplatCount;\n\n\t\t\t\t\tif (internalLoadType === InternalLoadType.ProgressiveToSplatBuffer) {\n\t\t\t\t\t\tSplatParser.parseToUncompressedSplatBufferSection(\n\t\t\t\t\t\t\tsplatCount,\n\t\t\t\t\t\t\tnewSplatCount - 1,\n\t\t\t\t\t\t\tdirectLoadBufferIn,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\tdirectLoadBufferOut,\n\t\t\t\t\t\t\tsplatDataOffsetBytes,\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tSplatParser.parseToUncompressedSplatArraySection(\n\t\t\t\t\t\t\tsplatCount,\n\t\t\t\t\t\t\tnewSplatCount - 1,\n\t\t\t\t\t\t\tdirectLoadBufferIn,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\tstandardLoadUncompressedSplatArray,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tsplatCount = newSplatCount;\n\n\t\t\t\t\tif (internalLoadType === InternalLoadType.ProgressiveToSplatBuffer) {\n\t\t\t\t\t\tif (!directLoadSplatBuffer) {\n\t\t\t\t\t\t\tSplatBuffer.writeSectionHeaderToBuffer(\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tmaxSplatCount: maxSplatCount,\n\t\t\t\t\t\t\t\t\tsplatCount: splatCount,\n\t\t\t\t\t\t\t\t\tbucketSize: 0,\n\t\t\t\t\t\t\t\t\tbucketCount: 0,\n\t\t\t\t\t\t\t\t\tbucketBlockSize: 0,\n\t\t\t\t\t\t\t\t\tcompressionScaleRange: 0,\n\t\t\t\t\t\t\t\t\tstorageSizeBytes: 0,\n\t\t\t\t\t\t\t\t\tfullBucketCount: 0,\n\t\t\t\t\t\t\t\t\tpartiallyFilledBucketCount: 0,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tdirectLoadBufferOut,\n\t\t\t\t\t\t\t\tSplatBuffer.HeaderSizeBytes,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tdirectLoadSplatBuffer = new SplatBuffer(directLoadBufferOut, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdirectLoadSplatBuffer.updateLoadedCounts(1, splatCount);\n\t\t\t\t\t\tif (onProgressiveLoadSectionProgress) {\n\t\t\t\t\t\t\tonProgressiveLoadSectionProgress(directLoadSplatBuffer, loadComplete);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tnumBytesStreamed += directLoadSectionSizeBytes;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (loadComplete) {\n\t\t\t\tif (internalLoadType === InternalLoadType.ProgressiveToSplatBuffer) {\n\t\t\t\t\tloadPromise.resolve(directLoadSplatBuffer);\n\t\t\t\t} else {\n\t\t\t\t\tloadPromise.resolve(standardLoadUncompressedSplatArray);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (onProgress) onProgress(percent, percentStr, LoaderStatus.Downloading);\n\t\t};\n\n\t\tif (onProgress) onProgress(0, \"0%\", LoaderStatus.Downloading);\n\t\treturn fetchWithProgress(fileName, localOnProgress, false, headers).then(() => {\n\t\t\tif (onProgress) onProgress(0, \"0%\", LoaderStatus.Processing);\n\t\t\treturn loadPromise.promise.then((splatData) => {\n\t\t\t\tif (onProgress) onProgress(100, \"100%\", LoaderStatus.Done);\n\t\t\t\tif (internalLoadType === InternalLoadType.DownloadBeforeProcessing) {\n\t\t\t\t\treturn new Blob(chunks).arrayBuffer().then((splatData) => {\n\t\t\t\t\t\treturn SplatLoader.loadFromFileData(\n\t\t\t\t\t\t\tsplatData,\n\t\t\t\t\t\t\tminimumAlpha,\n\t\t\t\t\t\t\tcompressionLevel,\n\t\t\t\t\t\t\toptimizeSplatData,\n\t\t\t\t\t\t\tsectionSize,\n\t\t\t\t\t\t\tsceneCenter,\n\t\t\t\t\t\t\tblockSize,\n\t\t\t\t\t\t\tbucketSize,\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t} else if (internalLoadType === InternalLoadType.ProgressiveToSplatBuffer) {\n\t\t\t\t\treturn splatData;\n\t\t\t\t} else {\n\t\t\t\t\treturn delayedExecute(() => {\n\t\t\t\t\t\treturn finalize(\n\t\t\t\t\t\t\tsplatData,\n\t\t\t\t\t\t\toptimizeSplatData,\n\t\t\t\t\t\t\tminimumAlpha,\n\t\t\t\t\t\t\tcompressionLevel,\n\t\t\t\t\t\t\tsectionSize,\n\t\t\t\t\t\t\tsceneCenter,\n\t\t\t\t\t\t\tblockSize,\n\t\t\t\t\t\t\tbucketSize,\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\tstatic loadFromFileData(\n\t\tsplatFileData,\n\t\tminimumAlpha,\n\t\tcompressionLevel,\n\t\toptimizeSplatData,\n\t\tsectionSize,\n\t\tsceneCenter,\n\t\tblockSize,\n\t\tbucketSize,\n\t) {\n\t\treturn delayedExecute(() => {\n\t\t\tconst splatArray = SplatParser.parseStandardSplatToUncompressedSplatArray(splatFileData);\n\t\t\treturn finalize(\n\t\t\t\tsplatArray,\n\t\t\t\toptimizeSplatData,\n\t\t\t\tminimumAlpha,\n\t\t\t\tcompressionLevel,\n\t\t\t\tsectionSize,\n\t\t\t\tsceneCenter,\n\t\t\t\tblockSize,\n\t\t\t\tbucketSize,\n\t\t\t);\n\t\t});\n\t}\n}\n","import { SplatBuffer } from \"../SplatBuffer.js\";\nimport { fetchWithProgress, delayedExecute, nativePromiseWithExtractedComponents } from \"../../Util.js\";\nimport { LoaderStatus } from \"../LoaderStatus.js\";\nimport { Constants } from \"../../Constants.js\";\n\nexport class KSplatLoader {\n\tstatic checkVersion(buffer) {\n\t\tconst minVersionMajor = SplatBuffer.CurrentMajorVersion;\n\t\tconst minVersionMinor = SplatBuffer.CurrentMinorVersion;\n\t\tconst header = SplatBuffer.parseHeader(buffer);\n\t\tif (\n\t\t\t(header.versionMajor === minVersionMajor && header.versionMinor >= minVersionMinor) ||\n\t\t\theader.versionMajor > minVersionMajor\n\t\t) {\n\t\t\treturn true;\n\t\t} else {\n\t\t\tthrow new Error(\n\t\t\t\t`KSplat version not supported: v${header.versionMajor}.${header.versionMinor}. ` +\n\t\t\t\t\t`Minimum required: v${minVersionMajor}.${minVersionMinor}`,\n\t\t\t);\n\t\t}\n\t}\n\n\tstatic loadFromURL(fileName, externalOnProgress, progressiveLoadToSplatBuffer, onSectionBuilt, headers) {\n\t\tlet directLoadBuffer;\n\t\tlet directLoadSplatBuffer;\n\n\t\tlet headerBuffer;\n\t\tlet header;\n\t\tlet headerLoaded = false;\n\t\tlet headerLoading = false;\n\n\t\tlet sectionHeadersBuffer;\n\t\tlet sectionHeaders = [];\n\t\tlet sectionHeadersLoaded = false;\n\t\tlet sectionHeadersLoading = false;\n\n\t\tlet numBytesLoaded = 0;\n\t\tlet numBytesProgressivelyLoaded = 0;\n\t\tlet totalBytesToDownload = 0;\n\n\t\tlet downloadComplete = false;\n\t\tlet loadComplete = false;\n\t\tlet loadSectionQueued = false;\n\n\t\tlet chunks = [];\n\n\t\tconst directLoadPromise = nativePromiseWithExtractedComponents();\n\n\t\tconst checkAndLoadHeader = () => {\n\t\t\tif (!headerLoaded && !headerLoading && numBytesLoaded >= SplatBuffer.HeaderSizeBytes) {\n\t\t\t\theaderLoading = true;\n\t\t\t\tconst headerAssemblyPromise = new Blob(chunks).arrayBuffer();\n\t\t\t\theaderAssemblyPromise.then((bufferData) => {\n\t\t\t\t\theaderBuffer = new ArrayBuffer(SplatBuffer.HeaderSizeBytes);\n\t\t\t\t\tnew Uint8Array(headerBuffer).set(new Uint8Array(bufferData, 0, SplatBuffer.HeaderSizeBytes));\n\t\t\t\t\tKSplatLoader.checkVersion(headerBuffer);\n\t\t\t\t\theaderLoading = false;\n\t\t\t\t\theaderLoaded = true;\n\t\t\t\t\theader = SplatBuffer.parseHeader(headerBuffer);\n\t\t\t\t\twindow.setTimeout(() => {\n\t\t\t\t\t\tcheckAndLoadSectionHeaders();\n\t\t\t\t\t}, 1);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tlet queuedCheckAndLoadSectionsCount = 0;\n\t\tconst queueCheckAndLoadSections = () => {\n\t\t\tif (queuedCheckAndLoadSectionsCount === 0) {\n\t\t\t\tqueuedCheckAndLoadSectionsCount++;\n\t\t\t\twindow.setTimeout(() => {\n\t\t\t\t\tqueuedCheckAndLoadSectionsCount--;\n\t\t\t\t\tcheckAndLoadSections();\n\t\t\t\t}, 1);\n\t\t\t}\n\t\t};\n\n\t\tconst checkAndLoadSectionHeaders = () => {\n\t\t\tconst performLoad = () => {\n\t\t\t\tsectionHeadersLoading = true;\n\t\t\t\tconst sectionHeadersAssemblyPromise = new Blob(chunks).arrayBuffer();\n\t\t\t\tsectionHeadersAssemblyPromise.then((bufferData) => {\n\t\t\t\t\tsectionHeadersLoading = false;\n\t\t\t\t\tsectionHeadersLoaded = true;\n\t\t\t\t\tsectionHeadersBuffer = new ArrayBuffer(header.maxSectionCount * SplatBuffer.SectionHeaderSizeBytes);\n\t\t\t\t\tnew Uint8Array(sectionHeadersBuffer).set(\n\t\t\t\t\t\tnew Uint8Array(\n\t\t\t\t\t\t\tbufferData,\n\t\t\t\t\t\t\tSplatBuffer.HeaderSizeBytes,\n\t\t\t\t\t\t\theader.maxSectionCount * SplatBuffer.SectionHeaderSizeBytes,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t\tsectionHeaders = SplatBuffer.parseSectionHeaders(header, sectionHeadersBuffer, 0, false);\n\t\t\t\t\tlet totalSectionStorageStorageByes = 0;\n\t\t\t\t\tfor (let i = 0; i < header.maxSectionCount; i++) {\n\t\t\t\t\t\ttotalSectionStorageStorageByes += sectionHeaders[i].storageSizeBytes;\n\t\t\t\t\t}\n\t\t\t\t\tconst totalStorageSizeBytes =\n\t\t\t\t\t\tSplatBuffer.HeaderSizeBytes +\n\t\t\t\t\t\theader.maxSectionCount * SplatBuffer.SectionHeaderSizeBytes +\n\t\t\t\t\t\ttotalSectionStorageStorageByes;\n\t\t\t\t\tif (!directLoadBuffer) {\n\t\t\t\t\t\tdirectLoadBuffer = new ArrayBuffer(totalStorageSizeBytes);\n\t\t\t\t\t\tlet offset = 0;\n\t\t\t\t\t\tfor (let i = 0; i < chunks.length; i++) {\n\t\t\t\t\t\t\tconst chunk = chunks[i];\n\t\t\t\t\t\t\tnew Uint8Array(directLoadBuffer, offset, chunk.byteLength).set(new Uint8Array(chunk));\n\t\t\t\t\t\t\toffset += chunk.byteLength;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\ttotalBytesToDownload =\n\t\t\t\t\t\tSplatBuffer.HeaderSizeBytes + SplatBuffer.SectionHeaderSizeBytes * header.maxSectionCount;\n\t\t\t\t\tfor (let i = 0; i <= sectionHeaders.length && i < header.maxSectionCount; i++) {\n\t\t\t\t\t\ttotalBytesToDownload += sectionHeaders[i].storageSizeBytes;\n\t\t\t\t\t}\n\n\t\t\t\t\tqueueCheckAndLoadSections();\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tif (\n\t\t\t\t!sectionHeadersLoading &&\n\t\t\t\t!sectionHeadersLoaded &&\n\t\t\t\theaderLoaded &&\n\t\t\t\tnumBytesLoaded >=\n\t\t\t\t\tSplatBuffer.HeaderSizeBytes + SplatBuffer.SectionHeaderSizeBytes * header.maxSectionCount\n\t\t\t) {\n\t\t\t\tperformLoad();\n\t\t\t}\n\t\t};\n\n\t\tconst checkAndLoadSections = () => {\n\t\t\tif (loadSectionQueued) return;\n\t\t\tloadSectionQueued = true;\n\t\t\tconst checkAndLoadFunc = () => {\n\t\t\t\tloadSectionQueued = false;\n\t\t\t\tif (sectionHeadersLoaded) {\n\t\t\t\t\tif (loadComplete) return;\n\n\t\t\t\t\tdownloadComplete = numBytesLoaded >= totalBytesToDownload;\n\n\t\t\t\t\tlet bytesLoadedSinceLastSection = numBytesLoaded - numBytesProgressivelyLoaded;\n\t\t\t\t\tif (bytesLoadedSinceLastSection > Constants.ProgressiveLoadSectionSize || downloadComplete) {\n\t\t\t\t\t\tnumBytesProgressivelyLoaded += Constants.ProgressiveLoadSectionSize;\n\t\t\t\t\t\tloadComplete = numBytesProgressivelyLoaded >= totalBytesToDownload;\n\n\t\t\t\t\t\tif (!directLoadSplatBuffer) directLoadSplatBuffer = new SplatBuffer(directLoadBuffer, false);\n\n\t\t\t\t\t\tconst baseDataOffset =\n\t\t\t\t\t\t\tSplatBuffer.HeaderSizeBytes + SplatBuffer.SectionHeaderSizeBytes * header.maxSectionCount;\n\t\t\t\t\t\tlet sectionBase = 0;\n\t\t\t\t\t\tlet reachedSections = 0;\n\t\t\t\t\t\tlet loadedSplatCount = 0;\n\t\t\t\t\t\tfor (let i = 0; i < header.maxSectionCount; i++) {\n\t\t\t\t\t\t\tconst sectionHeader = sectionHeaders[i];\n\t\t\t\t\t\t\tconst bucketsDataOffset =\n\t\t\t\t\t\t\t\tsectionBase +\n\t\t\t\t\t\t\t\tsectionHeader.partiallyFilledBucketCount * 4 +\n\t\t\t\t\t\t\t\tsectionHeader.bucketStorageSizeBytes * sectionHeader.bucketCount;\n\t\t\t\t\t\t\tconst bytesRequiredToReachSectionSplatData = baseDataOffset + bucketsDataOffset;\n\t\t\t\t\t\t\tif (numBytesProgressivelyLoaded >= bytesRequiredToReachSectionSplatData) {\n\t\t\t\t\t\t\t\treachedSections++;\n\t\t\t\t\t\t\t\tconst bytesPastSSectionSplatDataStart =\n\t\t\t\t\t\t\t\t\tnumBytesProgressivelyLoaded - bytesRequiredToReachSectionSplatData;\n\t\t\t\t\t\t\t\tconst baseDescriptor = SplatBuffer.CompressionLevels[header.compressionLevel];\n\t\t\t\t\t\t\t\tconst shDesc =\n\t\t\t\t\t\t\t\t\tbaseDescriptor.SphericalHarmonicsDegrees[sectionHeader.sphericalHarmonicsDegree];\n\t\t\t\t\t\t\t\tconst bytesPerSplat = shDesc.BytesPerSplat;\n\t\t\t\t\t\t\t\tlet loadedSplatsForSection = Math.floor(bytesPastSSectionSplatDataStart / bytesPerSplat);\n\t\t\t\t\t\t\t\tloadedSplatsForSection = Math.min(loadedSplatsForSection, sectionHeader.maxSplatCount);\n\t\t\t\t\t\t\t\tloadedSplatCount += loadedSplatsForSection;\n\t\t\t\t\t\t\t\tdirectLoadSplatBuffer.updateLoadedCounts(reachedSections, loadedSplatCount);\n\t\t\t\t\t\t\t\tdirectLoadSplatBuffer.updateSectionLoadedCounts(i, loadedSplatsForSection);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsectionBase += sectionHeader.storageSizeBytes;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tonSectionBuilt(directLoadSplatBuffer, loadComplete);\n\n\t\t\t\t\t\tconst percentComplete = (numBytesProgressivelyLoaded / totalBytesToDownload) * 100;\n\t\t\t\t\t\tconst percentLabel = percentComplete.toFixed(2) + \"%\";\n\n\t\t\t\t\t\tif (externalOnProgress) {\nexternalOnProgress(percentComplete, percentLabel, LoaderStatus.Downloading);\n}\n\n\t\t\t\t\t\tif (loadComplete) {\n\t\t\t\t\t\t\tdirectLoadPromise.resolve(directLoadSplatBuffer);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcheckAndLoadSections();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\twindow.setTimeout(checkAndLoadFunc, Constants.ProgressiveLoadSectionDelayDuration);\n\t\t};\n\n\t\tconst localOnProgress = (percent, percentStr, chunk) => {\n\t\t\tif (chunk) {\n\t\t\t\tchunks.push(chunk);\n\t\t\t\tif (directLoadBuffer) {\n\t\t\t\t\tnew Uint8Array(directLoadBuffer, numBytesLoaded, chunk.byteLength).set(new Uint8Array(chunk));\n\t\t\t\t}\n\t\t\t\tnumBytesLoaded += chunk.byteLength;\n\t\t\t}\n\t\t\tif (progressiveLoadToSplatBuffer) {\n\t\t\t\tcheckAndLoadHeader();\n\t\t\t\tcheckAndLoadSectionHeaders();\n\t\t\t\tcheckAndLoadSections();\n\t\t\t} else {\n\t\t\t\tif (externalOnProgress) externalOnProgress(percent, percentStr, LoaderStatus.Downloading);\n\t\t\t}\n\t\t};\n\n\t\treturn fetchWithProgress(fileName, localOnProgress, !progressiveLoadToSplatBuffer, headers).then(\n\t\t\t(fullBuffer) => {\n\t\t\t\tif (externalOnProgress) externalOnProgress(0, \"0%\", LoaderStatus.Processing);\n\t\t\t\tconst loadPromise = progressiveLoadToSplatBuffer ?\n\t\t\t\t\tdirectLoadPromise.promise :\n\t\t\t\t\tKSplatLoader.loadFromFileData(fullBuffer);\n\t\t\t\treturn loadPromise.then((splatBuffer) => {\n\t\t\t\t\tif (externalOnProgress) externalOnProgress(100, \"100%\", LoaderStatus.Done);\n\t\t\t\t\treturn splatBuffer;\n\t\t\t\t});\n\t\t\t},\n\t\t);\n\t}\n\n\tstatic loadFromFileData(fileData) {\n\t\treturn delayedExecute(() => {\n\t\t\tKSplatLoader.checkVersion(fileData);\n\t\t\treturn new SplatBuffer(fileData);\n\t\t});\n\t}\n\n\tstatic downloadFile = (function() {\n\t\tlet downLoadLink;\n\n\t\treturn function(splatBuffer, fileName) {\n\t\t\tconst blob = new Blob([splatBuffer.bufferData], {\n\t\t\t\ttype: \"application/octet-stream\",\n\t\t\t});\n\n\t\t\tif (!downLoadLink) {\n\t\t\t\tdownLoadLink = document.createElement(\"a\");\n\t\t\t\tdocument.body.appendChild(downLoadLink);\n\t\t\t}\n\t\t\tdownLoadLink.download = fileName;\n\t\t\tdownLoadLink.href = URL.createObjectURL(blob);\n\t\t\tdownLoadLink.click();\n\t\t};\n\t})();\n}\n","export const SceneFormat = {\n\tSplat: 0,\n\tKSplat: 1,\n\tPly: 2,\n\tSpz: 3,\n};\n","import { SceneFormat } from \"./SceneFormat.js\";\n\nexport const sceneFormatFromPath = (path) => {\n\tif (path.endsWith(\".ply\")) return SceneFormat.Ply;\n\telse if (path.endsWith(\".splat\")) return SceneFormat.Splat;\n\telse if (path.endsWith(\".ksplat\")) return SceneFormat.KSplat;\n\telse if (path.endsWith(\".spz\")) return SceneFormat.Spz;\n\treturn null;\n};\n","/*\nCopyright © 2010-2024 three.js authors & Mark Kellogg\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n*/\n\nimport {\n\tEventDispatcher,\n\tMOUSE,\n\tQuaternion,\n\tSpherical,\n\tTOUCH,\n\tVector2,\n\tVector3,\n\tPlane,\n\tRay,\n\tMathUtils,\n} from \"three\";\n\n// OrbitControls performs orbiting, dollying (zooming), and panning.\n// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\n//\n//    Orbit - left mouse / touch: one-finger move\n//    Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish\n//    Pan - right mouse, or left mouse + ctrl/meta/shiftKey, or arrow keys / touch: two-finger move\n\nconst _changeEvent = { type: \"change\" };\nconst _startEvent = { type: \"start\" };\nconst _endEvent = { type: \"end\" };\nconst _ray = new Ray();\nconst _plane = new Plane();\nconst TILT_LIMIT = Math.cos(70 * MathUtils.DEG2RAD);\n\nclass OrbitControls extends EventDispatcher {\n\tconstructor(object, domElement) {\n\t\tsuper();\n\n\t\tthis.object = object;\n\t\tthis.domElement = domElement;\n\t\tthis.domElement.style.touchAction = \"none\"; // disable touch scroll\n\n\t\t// Set to false to disable this control\n\t\tthis.enabled = true;\n\n\t\t// \"target\" sets the location of focus, where the object orbits around\n\t\tthis.target = new Vector3();\n\n\t\t// How far you can dolly in and out ( PerspectiveCamera only )\n\t\tthis.minDistance = 0;\n\t\tthis.maxDistance = Infinity;\n\n\t\t// How far you can zoom in and out ( OrthographicCamera only )\n\t\tthis.minZoom = 0;\n\t\tthis.maxZoom = Infinity;\n\n\t\t// How far you can orbit vertically, upper and lower limits.\n\t\t// Range is 0 to Math.PI radians.\n\t\tthis.minPolarAngle = 0; // radians\n\t\tthis.maxPolarAngle = Math.PI; // radians\n\n\t\t// How far you can orbit horizontally, upper and lower limits.\n\t\t// If set, the interval [min, max] must be a sub-interval of [- 2 PI, 2 PI], with ( max - min < 2 PI )\n\t\tthis.minAzimuthAngle = -Infinity; // radians\n\t\tthis.maxAzimuthAngle = Infinity; // radians\n\n\t\t// Set to true to enable damping (inertia)\n\t\t// If damping is enabled, you must call controls.update() in your animation loop\n\t\tthis.enableDamping = false;\n\t\tthis.dampingFactor = 0.05;\n\n\t\t// This option actually enables dollying in and out; left as \"zoom\" for backwards compatibility.\n\t\t// Set to false to disable zooming\n\t\tthis.enableZoom = true;\n\t\tthis.zoomSpeed = 1.0;\n\n\t\t// Set to false to disable rotating\n\t\tthis.enableRotate = true;\n\t\tthis.rotateSpeed = 1.0;\n\n\t\t// Set to false to disable panning\n\t\tthis.enablePan = true;\n\t\tthis.panSpeed = 1.0;\n\t\tthis.screenSpacePanning = true; // if false, pan orthogonal to world-space direction camera.up\n\t\tthis.keyPanSpeed = 7.0; // pixels moved per arrow key push\n\t\tthis.zoomToCursor = false;\n\n\t\t// Set to true to automatically rotate around the target\n\t\t// If auto-rotate is enabled, you must call controls.update() in your animation loop\n\t\tthis.autoRotate = false;\n\t\tthis.autoRotateSpeed = 2.0; // 30 seconds per orbit when fps is 60\n\n\t\t// The four arrow keys\n\t\tthis.keys = {\n\t\t\tLEFT: \"KeyA\",\n\t\t\tUP: \"KeyQ\",\n\t\t\tRIGHT: \"KeyD\",\n\t\t\tBOTTOM: \"KeyE\",\n\t\t\tFORWARD: \"KeyW\",\n\t\t\tBACKWARD: \"KeyS\",\n\t\t};\n\n\t\t// Mouse buttons\n\t\tthis.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.PAN };\n\n\t\t// Touch fingers\n\t\tthis.touches = { ONE: TOUCH.ROTATE, TWO: TOUCH.DOLLY_PAN };\n\n\t\t// for reset\n\t\tthis.target0 = this.target.clone();\n\t\tthis.position0 = this.object.position.clone();\n\t\tthis.zoom0 = this.object.zoom;\n\n\t\t// the target DOM element for key events\n\t\tthis._domElementKeyEvents = null;\n\n\t\t//\n\t\t// public methods\n\t\t//\n\n\t\tthis.getPolarAngle = function () {\n\t\t\treturn spherical.phi;\n\t\t};\n\n\t\tthis.getAzimuthalAngle = function () {\n\t\t\treturn spherical.theta;\n\t\t};\n\n\t\tthis.getDistance = function () {\n\t\t\treturn this.object.position.distanceTo(this.target);\n\t\t};\n\n\t\tthis.listenToKeyEvents = function (domElement) {\n\t\t\tdomElement.addEventListener(\"keydown\", onKeyDown);\n\t\t\tdomElement.addEventListener(\"keyup\", onKeyUp);\n\t\t\tthis._domElementKeyEvents = domElement;\n\t\t};\n\n\t\tthis.stopListenToKeyEvents = function () {\n\t\t\tthis._domElementKeyEvents.removeEventListener(\"keydown\", onKeyDown);\n\t\t\tthis._domElementKeyEvents.removeEventListener(\"keyup\", onKeyUp);\n\t\t\tthis._domElementKeyEvents = null;\n\t\t};\n\n\t\tthis.saveState = function () {\n\t\t\tscope.target0.copy(scope.target);\n\t\t\tscope.position0.copy(scope.object.position);\n\t\t\tscope.zoom0 = scope.object.zoom;\n\t\t};\n\n\t\tthis.reset = function () {\n\t\t\tscope.target.copy(scope.target0);\n\t\t\tscope.object.position.copy(scope.position0);\n\t\t\tscope.object.zoom = scope.zoom0;\n\t\t\tthis.clearDampedRotation();\n\t\t\tthis.clearDampedPan();\n\n\t\t\tscope.object.updateProjectionMatrix();\n\t\t\tscope.dispatchEvent(_changeEvent);\n\n\t\t\tscope.update();\n\n\t\t\tstate = STATE.NONE;\n\t\t};\n\n\t\tthis.clearDampedRotation = function () {\n\t\t\tsphericalDelta.theta = 0.0;\n\t\t\tsphericalDelta.phi = 0.0;\n\t\t};\n\n\t\tthis.clearDampedPan = function () {\n\t\t\tpanOffset.set(0, 0, 0);\n\t\t};\n\n\t\tthis.enableFocalPointOrbit = true;\n\n\t\t// this method is exposed, but perhaps it would be better if we can make it private...\n\t\tthis.update = (function () {\n\t\t\tconst offset = new Vector3();\n\n\t\t\t// so camera.up is the orbit axis\n\t\t\tconst quat = new Quaternion().setFromUnitVectors(object.up, new Vector3(0, 1, 0));\n\t\t\tconst quatInverse = quat.clone().invert();\n\n\t\t\tconst lastPosition = new Vector3();\n\t\t\tconst lastQuaternion = new Quaternion();\n\t\t\tconst lastTargetPosition = new Vector3();\n\n\t\t\tconst twoPI = 2 * Math.PI;\n\n\t\t\treturn function update() {\n\t\t\t\tquat.setFromUnitVectors(object.up, new Vector3(0, 1, 0));\n\t\t\t\tquatInverse.copy(quat).invert();\n\n\t\t\t\tconst position = scope.object.position;\n\n\t\t\t\toffset.copy(position).sub(scope.target);\n\n\t\t\t\t// rotate offset to \"y-axis-is-up\" space\n\t\t\t\toffset.applyQuaternion(quat);\n\n\t\t\t\t// angle from z-axis around y-axis\n\t\t\t\tspherical.setFromVector3(offset);\n\n\t\t\t\tif (scope.autoRotate && state === STATE.NONE) {\n\t\t\t\t\trotateLeft(getAutoRotationAngle());\n\t\t\t\t}\n\n\t\t\t\tif (scope.enableDamping) {\n\t\t\t\t\tspherical.theta += sphericalDelta.theta * scope.dampingFactor;\n\t\t\t\t\tspherical.phi += sphericalDelta.phi * scope.dampingFactor;\n\t\t\t\t} else {\n\t\t\t\t\tspherical.theta += sphericalDelta.theta;\n\t\t\t\t\tspherical.phi += sphericalDelta.phi;\n\t\t\t\t}\n\n\t\t\t\t// restrict theta to be between desired limits\n\n\t\t\t\tlet min = scope.minAzimuthAngle;\n\t\t\t\tlet max = scope.maxAzimuthAngle;\n\n\t\t\t\tif (isFinite(min) && isFinite(max)) {\n\t\t\t\t\tif (min < -Math.PI) min += twoPI;\n\t\t\t\t\telse if (min > Math.PI) min -= twoPI;\n\n\t\t\t\t\tif (max < -Math.PI) max += twoPI;\n\t\t\t\t\telse if (max > Math.PI) max -= twoPI;\n\n\t\t\t\t\tif (min <= max) {\n\t\t\t\t\t\tspherical.theta = Math.max(min, Math.min(max, spherical.theta));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tspherical.theta =\n\t\t\t\t\t\t\tspherical.theta > (min + max) / 2\n\t\t\t\t\t\t\t\t? Math.max(min, spherical.theta)\n\t\t\t\t\t\t\t\t: Math.min(max, spherical.theta);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// restrict phi to be between desired limits\n\t\t\t\tspherical.phi = Math.max(scope.minPolarAngle, Math.min(scope.maxPolarAngle, spherical.phi));\n\n\t\t\t\tspherical.makeSafe();\n\n\t\t\t\t// move target to panned location\n\n\t\t\t\tif (scope.enableFocalPointOrbit) {\n\t\t\t\t\t// Use original behavior - apply pan to target\n\t\t\t\t\tif (scope.enableDamping === true) {\n\t\t\t\t\t\tscope.target.addScaledVector(panOffset, scope.dampingFactor);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tscope.target.add(panOffset);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// In free mode, don't move the target with panning\n\t\t\t\t\t// Instead, maintain a fixed distance from camera to target\n\t\t\t\t\t// First, apply the pan to the camera position\n\t\t\t\t\tif (scope.enableDamping === true) {\n\t\t\t\t\t\tposition.addScaledVector(panOffset, scope.dampingFactor);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tposition.add(panOffset);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Then update the target to keep it at a fixed distance in front of camera\n\t\t\t\t\tscope.target\n\t\t\t\t\t\t.copy(position)\n\t\t\t\t\t\t.add(new Vector3(0, 0, -offset.length()).applyQuaternion(scope.object.quaternion));\n\t\t\t\t}\n\n\t\t\t\t// adjust the camera position based on zoom only if we're not zooming to the cursor or if it's an ortho camera\n\t\t\t\t// we adjust zoom later in these cases\n\t\t\t\tif ((scope.zoomToCursor && performCursorZoom) || scope.object.isOrthographicCamera) {\n\t\t\t\t\tspherical.radius = clampDistance(spherical.radius);\n\t\t\t\t} else {\n\t\t\t\t\tspherical.radius = clampDistance(spherical.radius * scale);\n\t\t\t\t}\n\n\t\t\t\toffset.setFromSpherical(spherical);\n\n\t\t\t\t// rotate offset back to \"camera-up-vector-is-up\" space\n\t\t\t\toffset.applyQuaternion(quatInverse);\n\n\t\t\t\tposition.copy(scope.target).add(offset);\n\n\t\t\t\tscope.object.lookAt(scope.target);\n\n\t\t\t\tif (scope.enableDamping === true) {\n\t\t\t\t\tsphericalDelta.theta *= 1 - scope.dampingFactor;\n\t\t\t\t\tsphericalDelta.phi *= 1 - scope.dampingFactor;\n\n\t\t\t\t\tpanOffset.multiplyScalar(1 - scope.dampingFactor);\n\t\t\t\t} else {\n\t\t\t\t\tsphericalDelta.set(0, 0, 0);\n\n\t\t\t\t\tpanOffset.set(0, 0, 0);\n\t\t\t\t}\n\n\t\t\t\t// adjust camera position\n\t\t\t\tlet zoomChanged = false;\n\t\t\t\tif (scope.zoomToCursor && performCursorZoom) {\n\t\t\t\t\tlet newRadius = null;\n\t\t\t\t\tif (scope.object.isPerspectiveCamera) {\n\t\t\t\t\t\t// move the camera down the pointer ray\n\t\t\t\t\t\t// this method avoids floating point error\n\t\t\t\t\t\tconst prevRadius = offset.length();\n\t\t\t\t\t\tnewRadius = clampDistance(prevRadius * scale);\n\n\t\t\t\t\t\tconst radiusDelta = prevRadius - newRadius;\n\t\t\t\t\t\tscope.object.position.addScaledVector(dollyDirection, radiusDelta);\n\t\t\t\t\t\tscope.object.updateMatrixWorld();\n\t\t\t\t\t} else if (scope.object.isOrthographicCamera) {\n\t\t\t\t\t\t// adjust the ortho camera position based on zoom changes\n\t\t\t\t\t\tconst mouseBefore = new Vector3(mouse.x, mouse.y, 0);\n\t\t\t\t\t\tmouseBefore.unproject(scope.object);\n\n\t\t\t\t\t\tscope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom / scale));\n\t\t\t\t\t\tscope.object.updateProjectionMatrix();\n\t\t\t\t\t\tzoomChanged = true;\n\n\t\t\t\t\t\tconst mouseAfter = new Vector3(mouse.x, mouse.y, 0);\n\t\t\t\t\t\tmouseAfter.unproject(scope.object);\n\n\t\t\t\t\t\tscope.object.position.sub(mouseAfter).add(mouseBefore);\n\t\t\t\t\t\tscope.object.updateMatrixWorld();\n\n\t\t\t\t\t\tnewRadius = offset.length();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\t\"WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled.\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\tscope.zoomToCursor = false;\n\t\t\t\t\t}\n\n\t\t\t\t\t// handle the placement of the target\n\t\t\t\t\tif (newRadius !== null) {\n\t\t\t\t\t\tif (this.screenSpacePanning) {\n\t\t\t\t\t\t\t// position the orbit target in front of the new camera position\n\t\t\t\t\t\t\tscope.target\n\t\t\t\t\t\t\t\t.set(0, 0, -1)\n\t\t\t\t\t\t\t\t.transformDirection(scope.object.matrix)\n\t\t\t\t\t\t\t\t.multiplyScalar(newRadius)\n\t\t\t\t\t\t\t\t.add(scope.object.position);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// get the ray and translation plane to compute target\n\t\t\t\t\t\t\t_ray.origin.copy(scope.object.position);\n\t\t\t\t\t\t\t_ray.direction.set(0, 0, -1).transformDirection(scope.object.matrix);\n\n\t\t\t\t\t\t\t// if the camera is 20 degrees above the horizon then don't adjust the focus target to avoid\n\t\t\t\t\t\t\t// extremely large values\n\t\t\t\t\t\t\tif (Math.abs(scope.object.up.dot(_ray.direction)) < TILT_LIMIT) {\n\t\t\t\t\t\t\t\tobject.lookAt(scope.target);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t_plane.setFromNormalAndCoplanarPoint(scope.object.up, scope.target);\n\t\t\t\t\t\t\t\t_ray.intersectPlane(_plane, scope.target);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (scope.object.isOrthographicCamera) {\n\t\t\t\t\tscope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom / scale));\n\t\t\t\t\tscope.object.updateProjectionMatrix();\n\t\t\t\t\tzoomChanged = true;\n\t\t\t\t}\n\n\t\t\t\tscale = 1;\n\t\t\t\tperformCursorZoom = false;\n\n\t\t\t\t// update condition is:\n\t\t\t\t// min(camera displacement, camera rotation in radians)^2 > EPS\n\t\t\t\t// using small-angle approximation cos(x/2) = 1 - x^2 / 8\n\n\t\t\t\tif (\n\t\t\t\t\tzoomChanged ||\n\t\t\t\t\tlastPosition.distanceToSquared(scope.object.position) > EPS ||\n\t\t\t\t\t8 * (1 - lastQuaternion.dot(scope.object.quaternion)) > EPS ||\n\t\t\t\t\tlastTargetPosition.distanceToSquared(scope.target) > 0\n\t\t\t\t) {\n\t\t\t\t\tscope.dispatchEvent(_changeEvent);\n\n\t\t\t\t\tlastPosition.copy(scope.object.position);\n\t\t\t\t\tlastQuaternion.copy(scope.object.quaternion);\n\t\t\t\t\tlastTargetPosition.copy(scope.target);\n\n\t\t\t\t\tzoomChanged = false;\n\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t})();\n\n\t\tthis.dispose = function () {\n\t\t\tif (animationFrameId !== null) {\n\t\t\t\tcancelAnimationFrame(animationFrameId);\n\t\t\t\tanimationFrameId = null;\n\t\t\t}\n\n\t\t\tscope.domElement.removeEventListener(\"contextmenu\", onContextMenu);\n\n\t\t\tscope.domElement.removeEventListener(\"pointerdown\", onPointerDown);\n\t\t\tscope.domElement.removeEventListener(\"pointercancel\", onPointerUp);\n\t\t\tscope.domElement.removeEventListener(\"wheel\", onMouseWheel);\n\n\t\t\tscope.domElement.removeEventListener(\"pointermove\", onPointerMove);\n\t\t\tscope.domElement.removeEventListener(\"pointerup\", onPointerUp);\n\n\t\t\tif (scope._domElementKeyEvents !== null) {\n\t\t\t\tscope._domElementKeyEvents.removeEventListener(\"keydown\", onKeyDown);\n\t\t\t\tscope._domElementKeyEvents.removeEventListener(\"keyup\", onKeyUp);\n\t\t\t\tscope._domElementKeyEvents = null;\n\t\t\t}\n\t\t};\n\n\t\tthis.setFocalPointOrbitMode = function (enabled) {\n\t\t\tthis.enableFocalPointOrbit = enabled;\n\t\t};\n\n\t\t//\n\t\t// internals\n\t\t//\n\n\t\tconst scope = this;\n\n\t\tconst STATE = {\n\t\t\tNONE: -1,\n\t\t\tROTATE: 0,\n\t\t\tDOLLY: 1,\n\t\t\tPAN: 2,\n\t\t\tTOUCH_ROTATE: 3,\n\t\t\tTOUCH_PAN: 4,\n\t\t\tTOUCH_DOLLY_PAN: 5,\n\t\t\tTOUCH_DOLLY_ROTATE: 6,\n\t\t};\n\n\t\tlet state = STATE.NONE;\n\n\t\tconst EPS = 0.000001;\n\n\t\t// current position in spherical coordinates\n\t\tconst spherical = new Spherical();\n\t\tconst sphericalDelta = new Spherical();\n\n\t\tlet scale = 1;\n\t\tconst panOffset = new Vector3();\n\n\t\tconst rotateStart = new Vector2();\n\t\tconst rotateEnd = new Vector2();\n\t\tconst rotateDelta = new Vector2();\n\n\t\tconst panStart = new Vector2();\n\t\tconst panEnd = new Vector2();\n\t\tconst panDelta = new Vector2();\n\n\t\tconst dollyStart = new Vector2();\n\t\tconst dollyEnd = new Vector2();\n\t\tconst dollyDelta = new Vector2();\n\n\t\tconst dollyDirection = new Vector3();\n\t\tconst mouse = new Vector2();\n\t\tlet performCursorZoom = false;\n\n\t\tconst pointers = [];\n\t\tconst pointerPositions = {};\n\n\t\tfunction getAutoRotationAngle() {\n\t\t\treturn ((2 * Math.PI) / 60 / 60) * scope.autoRotateSpeed;\n\t\t}\n\n\t\tfunction getZoomScale() {\n\t\t\treturn Math.pow(0.95, scope.zoomSpeed);\n\t\t}\n\n\t\tfunction rotateLeft(angle) {\n\t\t\tsphericalDelta.theta -= angle;\n\t\t}\n\n\t\tfunction rotateUp(angle) {\n\t\t\tsphericalDelta.phi -= angle;\n\t\t}\n\n\t\tconst panLeft = (function () {\n\t\t\tconst v = new Vector3();\n\n\t\t\treturn function panLeft(distance, objectMatrix) {\n\t\t\t\tv.setFromMatrixColumn(objectMatrix, 0); // get X column of objectMatrix\n\t\t\t\tv.multiplyScalar(-distance);\n\n\t\t\t\tpanOffset.add(v);\n\t\t\t};\n\t\t})();\n\n\t\tconst panForward = (function () {\n\t\t\tconst v = new Vector3();\n\n\t\t\treturn function panForward(distance, objectMatrix) {\n\t\t\t\tv.setFromMatrixColumn(objectMatrix, 2); // get Z column of objectMatrix\n\t\t\t\tv.multiplyScalar(distance);\n\t\t\t\tpanOffset.add(v);\n\t\t\t};\n\t\t})();\n\n\t\tconst panUp = (function () {\n\t\t\tconst v = new Vector3();\n\n\t\t\treturn function panUp(distance, objectMatrix) {\n\t\t\t\tif (scope.screenSpacePanning === true) {\n\t\t\t\t\tv.setFromMatrixColumn(objectMatrix, 1);\n\t\t\t\t} else {\n\t\t\t\t\tv.setFromMatrixColumn(objectMatrix, 0);\n\t\t\t\t\tv.crossVectors(scope.object.up, v);\n\t\t\t\t}\n\n\t\t\t\tv.multiplyScalar(distance);\n\n\t\t\t\tpanOffset.add(v);\n\t\t\t};\n\t\t})();\n\n\t\t// deltaX and deltaY are in pixels; right and down are positive\n\t\tconst pan = (function () {\n\t\t\tconst offset = new Vector3();\n\n\t\t\treturn function pan(deltaX, deltaY, deltaZ = 0) {\n\t\t\t\tconst element = scope.domElement;\n\n\t\t\t\tif (scope.object.isPerspectiveCamera) {\n\t\t\t\t\t// perspective\n\t\t\t\t\tconst position = scope.object.position;\n\t\t\t\t\toffset.copy(position).sub(scope.target);\n\t\t\t\t\tlet targetDistance = offset.length();\n\n\t\t\t\t\t// half of the fov is center to top of screen\n\t\t\t\t\ttargetDistance *= Math.tan(((scope.object.fov / 2) * Math.PI) / 180.0);\n\n\t\t\t\t\t// we use only clientHeight here so aspect ratio does not distort speed\n\t\t\t\t\tconst panSpeed = (targetDistance / element.clientHeight) * 1.5;\n\n\t\t\t\t\t// Use the same divisor for all directions to maintain consistent speed\n\t\t\t\t\tpanLeft(2 * deltaX * panSpeed, scope.object.matrix);\n\t\t\t\t\tpanUp(2 * deltaY * panSpeed, scope.object.matrix);\n\n\t\t\t\t\t// Add forward/backward movement if requested\n\t\t\t\t\tif (deltaZ !== 0) {\n\t\t\t\t\t\tpanForward(2 * deltaZ * panSpeed, scope.object.matrix);\n\t\t\t\t\t}\n\t\t\t\t} else if (scope.object.isOrthographicCamera) {\n\t\t\t\t\t// orthographic\n\t\t\t\t\tpanLeft(\n\t\t\t\t\t\t(deltaX * (scope.object.right - scope.object.left)) / scope.object.zoom / element.clientWidth,\n\t\t\t\t\t\tscope.object.matrix,\n\t\t\t\t\t);\n\t\t\t\t\tpanUp(\n\t\t\t\t\t\t(deltaY * (scope.object.top - scope.object.bottom)) / scope.object.zoom / element.clientHeight,\n\t\t\t\t\t\tscope.object.matrix,\n\t\t\t\t\t);\n\n\t\t\t\t\tif (deltaZ !== 0) {\n\t\t\t\t\t\t// Approximate forward/backward for orthographic camera\n\t\t\t\t\t\t// Scale is based on the average of width and height scaling\n\t\t\t\t\t\tconst avgScale =\n\t\t\t\t\t\t\t((scope.object.right - scope.object.left) / element.clientWidth +\n\t\t\t\t\t\t\t\t(scope.object.top - scope.object.bottom) / element.clientHeight) /\n\t\t\t\t\t\t\t2;\n\t\t\t\t\t\tpanForward((deltaZ * avgScale) / scope.object.zoom, scope.object.matrix);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// camera neither orthographic nor perspective\n\t\t\t\t\tconsole.warn(\"WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.\");\n\t\t\t\t\tscope.enablePan = false;\n\t\t\t\t}\n\t\t\t};\n\t\t})();\n\n\t\tfunction dollyOut(dollyScale) {\n\t\t\tif (scope.object.isPerspectiveCamera || scope.object.isOrthographicCamera) {\n\t\t\t\tscale /= dollyScale;\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.\");\n\t\t\t\tscope.enableZoom = false;\n\t\t\t}\n\t\t}\n\n\t\tfunction dollyIn(dollyScale) {\n\t\t\tif (scope.object.isPerspectiveCamera || scope.object.isOrthographicCamera) {\n\t\t\t\tscale *= dollyScale;\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.\");\n\t\t\t\tscope.enableZoom = false;\n\t\t\t}\n\t\t}\n\n\t\tfunction updateMouseParameters(event) {\n\t\t\tif (!scope.zoomToCursor) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tperformCursorZoom = true;\n\n\t\t\tconst rect = scope.domElement.getBoundingClientRect();\n\t\t\tconst x = event.clientX - rect.left;\n\t\t\tconst y = event.clientY - rect.top;\n\t\t\tconst w = rect.width;\n\t\t\tconst h = rect.height;\n\n\t\t\tmouse.x = (x / w) * 2 - 1;\n\t\t\tmouse.y = -(y / h) * 2 + 1;\n\n\t\t\tdollyDirection.set(mouse.x, mouse.y, 1).unproject(object).sub(object.position).normalize();\n\t\t}\n\n\t\tfunction clampDistance(dist) {\n\t\t\treturn Math.max(scope.minDistance, Math.min(scope.maxDistance, dist));\n\t\t}\n\n\t\t//\n\t\t// event callbacks - update the object state\n\t\t//\n\n\t\tfunction handleMouseDownRotate(event) {\n\t\t\trotateStart.set(event.clientX, event.clientY);\n\t\t}\n\n\t\tfunction handleMouseDownDolly(event) {\n\t\t\tupdateMouseParameters(event);\n\t\t\tdollyStart.set(event.clientX, event.clientY);\n\t\t}\n\n\t\tfunction handleMouseDownPan(event) {\n\t\t\tpanStart.set(event.clientX, event.clientY);\n\t\t}\n\n\t\tfunction handleMouseMoveRotate(event) {\n\t\t\trotateEnd.set(event.clientX, event.clientY);\n\n\t\t\trotateDelta.subVectors(rotateEnd, rotateStart).multiplyScalar(scope.rotateSpeed);\n\n\t\t\tconst element = scope.domElement;\n\n\t\t\trotateLeft((2 * Math.PI * rotateDelta.x) / element.clientHeight); // yes, height\n\n\t\t\trotateUp((2 * Math.PI * rotateDelta.y) / element.clientHeight);\n\n\t\t\trotateStart.copy(rotateEnd);\n\n\t\t\tscope.update();\n\t\t}\n\n\t\tfunction handleMouseMoveDolly(event) {\n\t\t\tdollyEnd.set(event.clientX, event.clientY);\n\n\t\t\tdollyDelta.subVectors(dollyEnd, dollyStart);\n\n\t\t\tif (dollyDelta.y > 0) {\n\t\t\t\tdollyOut(getZoomScale());\n\t\t\t} else if (dollyDelta.y < 0) {\n\t\t\t\tdollyIn(getZoomScale());\n\t\t\t}\n\n\t\t\tdollyStart.copy(dollyEnd);\n\n\t\t\tscope.update();\n\t\t}\n\n\t\tfunction handleMouseMovePan(event) {\n\t\t\tpanEnd.set(event.clientX, event.clientY);\n\n\t\t\tpanDelta.subVectors(panEnd, panStart).multiplyScalar(scope.panSpeed);\n\n\t\t\tpan(panDelta.x, panDelta.y);\n\n\t\t\tpanStart.copy(panEnd);\n\n\t\t\tscope.update();\n\t\t}\n\n\t\tfunction handleMouseWheel(event) {\n\t\t\tupdateMouseParameters(event);\n\n\t\t\tif (event.deltaY < 0) {\n\t\t\t\tdollyIn(getZoomScale());\n\t\t\t} else if (event.deltaY > 0) {\n\t\t\t\tdollyOut(getZoomScale());\n\t\t\t}\n\n\t\t\tscope.update();\n\t\t}\n\n\t\t// Add this to track pressed keys\n\t\tconst keysPressed = {};\n\t\tlet animationFrameId = null;\n\n\t\tfunction handleKeyDown(event) {\n\t\t\tconst target = event.target;\n\t\t\tif (\n\t\t\t\ttarget instanceof HTMLInputElement ||\n\t\t\t\ttarget instanceof HTMLTextAreaElement ||\n\t\t\t\ttarget instanceof HTMLSelectElement ||\n\t\t\t\ttarget.isContentEditable\n\t\t\t) {\n\t\t\t\t// Check for contentEditable divs too\n\t\t\t\t// If it is an input, do nothing. Let the browser handle typing.\n\t\t\t\t// Don't process keys for movement, and don't prevent default.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tkeysPressed[event.code] = true;\n\n\t\t\t// Start animation loop if not already running\n\t\t\tif (animationFrameId === null) {\n\t\t\t\tanimationFrameId = requestAnimationFrame(updateMovement);\n\t\t\t}\n\n\t\t\tevent.preventDefault();\n\t\t}\n\n\t\tfunction handleKeyUp(event) {\n\t\t\tkeysPressed[event.code] = false;\n\n\t\t\t// Check if any movement keys are still pressed\n\t\t\tconst anyKeysPressed = [\n\t\t\t\tscope.keys.UP,\n\t\t\t\tscope.keys.BOTTOM,\n\t\t\t\tscope.keys.LEFT,\n\t\t\t\tscope.keys.RIGHT,\n\t\t\t\tscope.keys.FORWARD,\n\t\t\t\tscope.keys.BACKWARD,\n\t\t\t].some((key) => keysPressed[key]);\n\n\t\t\t// If no movement keys are pressed, stop the animation loop\n\t\t\tif (!anyKeysPressed && animationFrameId !== null) {\n\t\t\t\tcancelAnimationFrame(animationFrameId);\n\t\t\t\tanimationFrameId = null;\n\t\t\t}\n\t\t}\n\n\t\tfunction updateMovement() {\n\t\t\tlet needsUpdate = false;\n\n\t\t\t// Check each key and apply movement\n\t\t\tif (keysPressed[scope.keys.UP]) {\n\t\t\t\tpan(0, scope.keyPanSpeed);\n\t\t\t\tneedsUpdate = true;\n\t\t\t}\n\n\t\t\tif (keysPressed[scope.keys.BOTTOM]) {\n\t\t\t\tpan(0, -scope.keyPanSpeed);\n\t\t\t\tneedsUpdate = true;\n\t\t\t}\n\n\t\t\tif (keysPressed[scope.keys.LEFT]) {\n\t\t\t\tpan(scope.keyPanSpeed, 0);\n\t\t\t\tneedsUpdate = true;\n\t\t\t}\n\n\t\t\tif (keysPressed[scope.keys.RIGHT]) {\n\t\t\t\tpan(-scope.keyPanSpeed, 0);\n\t\t\t\tneedsUpdate = true;\n\t\t\t}\n\n\t\t\tif (keysPressed[scope.keys.FORWARD]) {\n\t\t\t\tpan(0, 0, -1.5 * scope.keyPanSpeed);\n\t\t\t\tneedsUpdate = true;\n\t\t\t}\n\n\t\t\tif (keysPressed[scope.keys.BACKWARD]) {\n\t\t\t\tpan(0, 0, 1.5 * scope.keyPanSpeed);\n\t\t\t\tneedsUpdate = true;\n\t\t\t}\n\n\t\t\tif (needsUpdate) {\n\t\t\t\tscope.update();\n\t\t\t}\n\n\t\t\t// Continue the animation loop\n\t\t\tif (animationFrameId !== null) {\n\t\t\t\tanimationFrameId = requestAnimationFrame(updateMovement);\n\t\t\t}\n\t\t}\n\n\t\tfunction handleTouchStartRotate() {\n\t\t\tif (pointers.length === 1) {\n\t\t\t\trotateStart.set(pointers[0].pageX, pointers[0].pageY);\n\t\t\t} else {\n\t\t\t\tconst x = 0.5 * (pointers[0].pageX + pointers[1].pageX);\n\t\t\t\tconst y = 0.5 * (pointers[0].pageY + pointers[1].pageY);\n\n\t\t\t\trotateStart.set(x, y);\n\t\t\t}\n\t\t}\n\n\t\tfunction handleTouchStartPan() {\n\t\t\tif (pointers.length === 1) {\n\t\t\t\tpanStart.set(pointers[0].pageX, pointers[0].pageY);\n\t\t\t} else {\n\t\t\t\tconst x = 0.5 * (pointers[0].pageX + pointers[1].pageX);\n\t\t\t\tconst y = 0.5 * (pointers[0].pageY + pointers[1].pageY);\n\n\t\t\t\tpanStart.set(x, y);\n\t\t\t}\n\t\t}\n\n\t\tfunction handleTouchStartDolly() {\n\t\t\tconst dx = pointers[0].pageX - pointers[1].pageX;\n\t\t\tconst dy = pointers[0].pageY - pointers[1].pageY;\n\n\t\t\tconst distance = Math.sqrt(dx * dx + dy * dy);\n\n\t\t\tdollyStart.set(0, distance);\n\t\t}\n\n\t\tfunction handleTouchStartDollyPan() {\n\t\t\tif (scope.enableZoom) handleTouchStartDolly();\n\n\t\t\tif (scope.enablePan) handleTouchStartPan();\n\t\t}\n\n\t\tfunction handleTouchStartDollyRotate() {\n\t\t\tif (scope.enableZoom) handleTouchStartDolly();\n\n\t\t\tif (scope.enableRotate) handleTouchStartRotate();\n\t\t}\n\n\t\tfunction handleTouchMoveRotate(event) {\n\t\t\tif (pointers.length == 1) {\n\t\t\t\trotateEnd.set(event.pageX, event.pageY);\n\t\t\t} else {\n\t\t\t\tconst position = getSecondPointerPosition(event);\n\n\t\t\t\tconst x = 0.5 * (event.pageX + position.x);\n\t\t\t\tconst y = 0.5 * (event.pageY + position.y);\n\n\t\t\t\trotateEnd.set(x, y);\n\t\t\t}\n\n\t\t\trotateDelta.subVectors(rotateEnd, rotateStart).multiplyScalar(scope.rotateSpeed);\n\n\t\t\tconst element = scope.domElement;\n\n\t\t\trotateLeft((2 * Math.PI * rotateDelta.x) / element.clientHeight); // yes, height\n\n\t\t\trotateUp((2 * Math.PI * rotateDelta.y) / element.clientHeight);\n\n\t\t\trotateStart.copy(rotateEnd);\n\t\t}\n\n\t\tfunction handleTouchMovePan(event) {\n\t\t\tif (pointers.length === 1) {\n\t\t\t\tpanEnd.set(event.pageX, event.pageY);\n\t\t\t} else {\n\t\t\t\tconst position = getSecondPointerPosition(event);\n\n\t\t\t\tconst x = 0.5 * (event.pageX + position.x);\n\t\t\t\tconst y = 0.5 * (event.pageY + position.y);\n\n\t\t\t\tpanEnd.set(x, y);\n\t\t\t}\n\n\t\t\tpanDelta.subVectors(panEnd, panStart).multiplyScalar(scope.panSpeed);\n\n\t\t\tpan(panDelta.x, panDelta.y);\n\n\t\t\tpanStart.copy(panEnd);\n\t\t}\n\n\t\tfunction handleTouchMoveDolly(event) {\n\t\t\tconst position = getSecondPointerPosition(event);\n\n\t\t\tconst dx = event.pageX - position.x;\n\t\t\tconst dy = event.pageY - position.y;\n\n\t\t\tconst distance = Math.sqrt(dx * dx + dy * dy);\n\n\t\t\tdollyEnd.set(0, distance);\n\n\t\t\tdollyDelta.set(0, Math.pow(dollyEnd.y / dollyStart.y, scope.zoomSpeed));\n\n\t\t\tdollyOut(dollyDelta.y);\n\n\t\t\tdollyStart.copy(dollyEnd);\n\t\t}\n\n\t\tfunction handleTouchMoveDollyPan(event) {\n\t\t\tif (scope.enableZoom) handleTouchMoveDolly(event);\n\n\t\t\tif (scope.enablePan) handleTouchMovePan(event);\n\t\t}\n\n\t\tfunction handleTouchMoveDollyRotate(event) {\n\t\t\tif (scope.enableZoom) handleTouchMoveDolly(event);\n\n\t\t\tif (scope.enableRotate) handleTouchMoveRotate(event);\n\t\t}\n\n\t\t//\n\t\t// event handlers - FSM: listen for events and reset state\n\t\t//\n\n\t\tfunction onPointerDown(event) {\n\t\t\tif (scope.enabled === false) return;\n\n\t\t\tif (pointers.length === 0) {\n\t\t\t\tscope.domElement.setPointerCapture(event.pointerId);\n\n\t\t\t\tscope.domElement.addEventListener(\"pointermove\", onPointerMove);\n\t\t\t\tscope.domElement.addEventListener(\"pointerup\", onPointerUp);\n\t\t\t}\n\n\t\t\t//\n\n\t\t\taddPointer(event);\n\n\t\t\tif (event.pointerType === \"touch\") {\n\t\t\t\tonTouchStart(event);\n\t\t\t} else {\n\t\t\t\tonMouseDown(event);\n\t\t\t}\n\t\t}\n\n\t\tfunction onPointerMove(event) {\n\t\t\tif (scope.enabled === false) return;\n\n\t\t\tif (event.pointerType === \"touch\") {\n\t\t\t\tonTouchMove(event);\n\t\t\t} else {\n\t\t\t\tonMouseMove(event);\n\t\t\t}\n\t\t}\n\n\t\tfunction onPointerUp(event) {\n\t\t\tremovePointer(event);\n\n\t\t\tif (pointers.length === 0) {\n\t\t\t\tscope.domElement.releasePointerCapture(event.pointerId);\n\n\t\t\t\tscope.domElement.removeEventListener(\"pointermove\", onPointerMove);\n\t\t\t\tscope.domElement.removeEventListener(\"pointerup\", onPointerUp);\n\t\t\t}\n\n\t\t\tscope.dispatchEvent(_endEvent);\n\n\t\t\tstate = STATE.NONE;\n\t\t}\n\n\t\tfunction onMouseDown(event) {\n\t\t\tlet mouseAction;\n\n\t\t\tswitch (event.button) {\n\t\t\t\tcase 0:\n\t\t\t\t\tmouseAction = scope.mouseButtons.LEFT;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 1:\n\t\t\t\t\tmouseAction = scope.mouseButtons.MIDDLE;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 2:\n\t\t\t\t\tmouseAction = scope.mouseButtons.RIGHT;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tmouseAction = -1;\n\t\t\t}\n\n\t\t\tswitch (mouseAction) {\n\t\t\t\tcase MOUSE.DOLLY:\n\t\t\t\t\tif (scope.enableZoom === false) return;\n\n\t\t\t\t\thandleMouseDownDolly(event);\n\n\t\t\t\t\tstate = STATE.DOLLY;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MOUSE.ROTATE:\n\t\t\t\t\tif (event.ctrlKey || event.metaKey || event.shiftKey) {\n\t\t\t\t\t\tif (scope.enablePan === false) return;\n\n\t\t\t\t\t\thandleMouseDownPan(event);\n\n\t\t\t\t\t\tstate = STATE.PAN;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (scope.enableRotate === false) return;\n\n\t\t\t\t\t\thandleMouseDownRotate(event);\n\n\t\t\t\t\t\tstate = STATE.ROTATE;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MOUSE.PAN:\n\t\t\t\t\tif (event.ctrlKey || event.metaKey || event.shiftKey) {\n\t\t\t\t\t\tif (scope.enableRotate === false) return;\n\n\t\t\t\t\t\thandleMouseDownRotate(event);\n\n\t\t\t\t\t\tstate = STATE.ROTATE;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (scope.enablePan === false) return;\n\n\t\t\t\t\t\thandleMouseDownPan(event);\n\n\t\t\t\t\t\tstate = STATE.PAN;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tstate = STATE.NONE;\n\t\t\t}\n\n\t\t\tif (state !== STATE.NONE) {\n\t\t\t\tscope.dispatchEvent(_startEvent);\n\t\t\t}\n\t\t}\n\n\t\tfunction onMouseMove(event) {\n\t\t\tswitch (state) {\n\t\t\t\tcase STATE.ROTATE:\n\t\t\t\t\tif (scope.enableRotate === false) return;\n\n\t\t\t\t\thandleMouseMoveRotate(event);\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase STATE.DOLLY:\n\t\t\t\t\tif (scope.enableZoom === false) return;\n\n\t\t\t\t\thandleMouseMoveDolly(event);\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase STATE.PAN:\n\t\t\t\t\tif (scope.enablePan === false) return;\n\n\t\t\t\t\thandleMouseMovePan(event);\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tfunction onMouseWheel(event) {\n\t\t\tif (scope.enabled === false || scope.enableZoom === false || state !== STATE.NONE) return;\n\n\t\t\tevent.preventDefault();\n\n\t\t\tscope.dispatchEvent(_startEvent);\n\n\t\t\thandleMouseWheel(event);\n\n\t\t\tscope.dispatchEvent(_endEvent);\n\t\t}\n\n\t\tfunction onKeyDown(event) {\n\t\t\tif (scope.enabled === false || scope.enablePan === false) return;\n\n\t\t\thandleKeyDown(event);\n\t\t}\n\n\t\tfunction onKeyUp(event) {\n\t\t\tif (scope.enabled === false || scope.enablePan === false) return;\n\n\t\t\thandleKeyUp(event);\n\t\t}\n\n\t\tfunction onTouchStart(event) {\n\t\t\ttrackPointer(event);\n\n\t\t\tswitch (pointers.length) {\n\t\t\t\tcase 1:\n\t\t\t\t\tswitch (scope.touches.ONE) {\n\t\t\t\t\t\tcase TOUCH.ROTATE:\n\t\t\t\t\t\t\tif (scope.enableRotate === false) return;\n\n\t\t\t\t\t\t\thandleTouchStartRotate();\n\n\t\t\t\t\t\t\tstate = STATE.TOUCH_ROTATE;\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase TOUCH.PAN:\n\t\t\t\t\t\t\tif (scope.enablePan === false) return;\n\n\t\t\t\t\t\t\thandleTouchStartPan();\n\n\t\t\t\t\t\t\tstate = STATE.TOUCH_PAN;\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tstate = STATE.NONE;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 2:\n\t\t\t\t\tswitch (scope.touches.TWO) {\n\t\t\t\t\t\tcase TOUCH.DOLLY_PAN:\n\t\t\t\t\t\t\tif (scope.enableZoom === false && scope.enablePan === false) return;\n\n\t\t\t\t\t\t\thandleTouchStartDollyPan();\n\n\t\t\t\t\t\t\tstate = STATE.TOUCH_DOLLY_PAN;\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase TOUCH.DOLLY_ROTATE:\n\t\t\t\t\t\t\tif (scope.enableZoom === false && scope.enableRotate === false) return;\n\n\t\t\t\t\t\t\thandleTouchStartDollyRotate();\n\n\t\t\t\t\t\t\tstate = STATE.TOUCH_DOLLY_ROTATE;\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tstate = STATE.NONE;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tstate = STATE.NONE;\n\t\t\t}\n\n\t\t\tif (state !== STATE.NONE) {\n\t\t\t\tscope.dispatchEvent(_startEvent);\n\t\t\t}\n\t\t}\n\n\t\tfunction onTouchMove(event) {\n\t\t\ttrackPointer(event);\n\n\t\t\tswitch (state) {\n\t\t\t\tcase STATE.TOUCH_ROTATE:\n\t\t\t\t\tif (scope.enableRotate === false) return;\n\n\t\t\t\t\thandleTouchMoveRotate(event);\n\n\t\t\t\t\tscope.update();\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase STATE.TOUCH_PAN:\n\t\t\t\t\tif (scope.enablePan === false) return;\n\n\t\t\t\t\thandleTouchMovePan(event);\n\n\t\t\t\t\tscope.update();\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase STATE.TOUCH_DOLLY_PAN:\n\t\t\t\t\tif (scope.enableZoom === false && scope.enablePan === false) return;\n\n\t\t\t\t\thandleTouchMoveDollyPan(event);\n\n\t\t\t\t\tscope.update();\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase STATE.TOUCH_DOLLY_ROTATE:\n\t\t\t\t\tif (scope.enableZoom === false && scope.enableRotate === false) return;\n\n\t\t\t\t\thandleTouchMoveDollyRotate(event);\n\n\t\t\t\t\tscope.update();\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tstate = STATE.NONE;\n\t\t\t}\n\t\t}\n\n\t\tfunction onContextMenu(event) {\n\t\t\tif (scope.enabled === false) return;\n\n\t\t\tevent.preventDefault();\n\t\t}\n\n\t\tfunction addPointer(event) {\n\t\t\tpointers.push(event);\n\t\t}\n\n\t\tfunction removePointer(event) {\n\t\t\tdelete pointerPositions[event.pointerId];\n\n\t\t\tfor (let i = 0; i < pointers.length; i++) {\n\t\t\t\tif (pointers[i].pointerId == event.pointerId) {\n\t\t\t\t\tpointers.splice(i, 1);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction trackPointer(event) {\n\t\t\tlet position = pointerPositions[event.pointerId];\n\n\t\t\tif (position === undefined) {\n\t\t\t\tposition = new Vector2();\n\t\t\t\tpointerPositions[event.pointerId] = position;\n\t\t\t}\n\n\t\t\tposition.set(event.pageX, event.pageY);\n\t\t}\n\n\t\tfunction getSecondPointerPosition(event) {\n\t\t\tconst pointer = event.pointerId === pointers[0].pointerId ? pointers[1] : pointers[0];\n\n\t\t\treturn pointerPositions[pointer.pointerId];\n\t\t}\n\n\t\t//\n\n\t\tscope.domElement.addEventListener(\"contextmenu\", onContextMenu);\n\n\t\tscope.domElement.addEventListener(\"pointerdown\", onPointerDown);\n\t\tscope.domElement.addEventListener(\"pointercancel\", onPointerUp);\n\t\tscope.domElement.addEventListener(\"wheel\", onMouseWheel, { passive: false });\n\n\t\t// force an update at start\n\n\t\tthis.update();\n\t}\n}\n\nexport { OrbitControls };\n","export const fadeElement = (element, out, displayStyle, duration, onComplete) => {\n\tconst startTime = performance.now();\n\n\tlet startOpacity = element.style.display === \"none\" ? 0 : parseFloat(element.style.opacity);\n\tif (isNaN(startOpacity)) startOpacity = 1;\n\n\tconst interval = window.setInterval(() => {\n\t\tconst currentTime = performance.now();\n\t\tconst elapsed = currentTime - startTime;\n\n\t\tlet t = Math.min(elapsed / duration, 1.0);\n\t\tif (t > 0.999) t = 1;\n\n\t\tlet opacity;\n\t\tif (out) {\n\t\t\topacity = (1.0 - t) * startOpacity;\n\t\t\tif (opacity < 0.0001) opacity = 0;\n\t\t} else {\n\t\t\topacity = (1.0 - startOpacity) * t + startOpacity;\n\t\t}\n\n\t\tif (opacity > 0) {\n\t\t\telement.style.display = displayStyle;\n\t\t\telement.style.opacity = opacity;\n\t\t} else {\n\t\t\telement.style.display = \"none\";\n\t\t}\n\n\t\tif (t >= 1) {\n\t\t\tif (onComplete) onComplete();\n\t\t\twindow.clearInterval(interval);\n\t\t}\n\t}, 16);\n\treturn interval;\n};\n\nexport const cancelFade = (interval) => {\n\twindow.clearInterval(interval);\n};\n","import { fadeElement } from \"./Util.js\";\n\nconst STANDARD_FADE_DURATION = 500;\n\nexport class LoadingSpinner {\n\tstatic elementIDGen = 0;\n\n\tconstructor(message, container) {\n\t\tthis.taskIDGen = 0;\n\t\tthis.elementID = LoadingSpinner.elementIDGen++;\n\t\tthis.tasks = [];\n\t\tthis.message = message || \"Loading...\";\n\t\tthis.container = container || document.body;\n\n\t\tthis.spinnerContainerOuter = document.createElement(\"div\");\n\t\tthis.spinnerContainerOuter.className = `spinnerOuterContainer${this.elementID}`;\n\t\tthis.spinnerContainerOuter.style.display = \"none\";\n\n\t\t// Create the main spinner containers\n\t\tthis.spinnerContainerPrimary = document.createElement(\"div\");\n\t\tthis.spinnerContainerPrimary.className = `spinnerContainerPrimary${this.elementID}`;\n\n\t\t// Create the logo container\n\t\tthis.logoContainer = document.createElement(\"div\");\n\t\tthis.logoContainer.className = `logoContainer${this.elementID}`;\n\n\t\t// Add the SVG logo\n\t\tthis.logoContainer.innerHTML = `\n        <svg\n          width=\"100%\"\n          height=\"100%\"\n          viewBox=\"0 0 1255 219\"\n          fill=\"none\"\n          class=\"logo${this.elementID}\"\n          xmlns=\"http://www.w3.org/2000/svg\"\n        >\n          <path\n            d=\"M932.241 0.82733C932.502 0.795399 932.764 0.752843 933.027 0.731556C963.013 -1.60851 993.558 5.3478 1016.9 24.8985C1039.69 43.9916 1051.33 69.3887 1053.84 98.8546C1056.38 128.83 1049.27 158.568 1029.43 181.649C1011.04 203.054 985.034 215.031 957.046 217.175C956.577 217.231 956.107 217.292 955.637 217.343C927.135 220.479 893.395 212.642 870.876 194.49C847.985 176.039 836.461 150.087 833.64 121.203C830.82 92.3302 838.232 60.892 856.928 38.2319C876.18 14.8997 902.595 3.58249 932.241 0.82733ZM946.797 160.895C960.136 158.992 970.948 154.393 979.352 143.343C988.857 130.849 991.442 114.764 989.21 99.4765C987.326 86.5735 981.096 74.7424 970.51 66.9118C969.43 66.1099 968.316 65.3558 967.17 64.6492C966.023 63.9437 964.847 63.2894 963.644 62.6863C962.441 62.0831 961.214 61.5327 959.963 61.035C958.712 60.5383 957.442 60.0963 956.152 59.7091C954.862 59.3229 953.558 58.9929 952.24 58.7192C950.922 58.4456 949.595 58.2296 948.258 58.0715C946.921 57.9134 945.579 57.8135 944.233 57.772C942.888 57.7304 941.543 57.7471 940.199 57.8221C927.587 58.8394 917.141 63.7506 908.887 73.4226C899.191 84.7869 895.653 100.288 896.894 114.954C898.025 128.327 903.464 141.867 913.919 150.648C923.271 158.504 934.8 161.273 946.797 160.895Z\"\n            fill=\"currentColor\"\n          />\n          <path\n            d=\"M1189.75 4.31691C1211.43 4.3458 1233.18 4.03712 1254.85 4.72743L1254.74 143.311L1254.45 191.694C1254.4 197.828 1254.99 204.322 1254.56 210.392C1254.49 211.438 1254.19 212.116 1253.62 212.981L1251.32 213.294C1233.06 213.01 1214.76 213.206 1196.5 213.192C1175.59 181.85 1153.43 151.143 1131.7 120.352L1131.71 213.241C1110.47 213.086 1089.22 213.052 1067.97 213.141L1067.99 4.35946L1128.63 4.4416C1148.62 34.0779 1170.1 62.6908 1189.7 92.584C1190.49 63.2382 1189.71 33.684 1189.75 4.31691Z\"\n            fill=\"currentColor\"\n          />\n          <path\n            d=\"M110.273 0.0730967C116.166 -0.150418 122.432 0.159772 128.305 0.716279C160.819 3.79531 185.141 16.9416 205.91 41.8597C191.162 52.6812 177.245 64.5944 162.39 75.3444C155.992 69.6106 149.347 64.6096 141.288 61.4394C126.796 55.7375 108.719 56.3639 94.5584 62.7957C82.7121 68.1767 72.9383 77.9354 68.433 90.2241C63.4822 103.725 64.3261 120.238 70.51 133.204C70.8679 133.944 71.2439 134.675 71.6383 135.397C72.0316 136.119 72.4426 136.83 72.8714 137.532C73.3012 138.233 73.7477 138.924 74.211 139.603C74.6742 140.282 75.1537 140.949 75.6494 141.605C76.1461 142.26 76.6585 142.903 77.1866 143.533C77.7147 144.163 78.258 144.779 78.8166 145.382C79.3751 145.986 79.9483 146.576 80.5363 147.151C81.1242 147.725 81.7258 148.285 82.3411 148.831C82.9564 149.375 83.5849 149.904 84.2266 150.418C84.8682 150.932 85.5225 151.43 86.1895 151.911C86.8555 152.394 87.5332 152.859 88.2225 153.307C88.9118 153.755 89.6117 154.185 90.3223 154.598C91.0329 155.012 91.7536 155.407 92.4844 155.785C93.2143 156.164 93.9533 156.523 94.7014 156.864C95.4495 157.205 96.2056 157.528 96.9699 157.831C97.7332 158.135 98.5042 158.42 99.2827 158.685C112.719 163.204 132.03 162.682 144.685 156.02C153.253 151.51 157.048 143.977 159.799 135.126C143.951 134.847 128.063 134.993 112.212 134.939L112.38 89.841C138.034 90.1714 163.689 90.2307 189.344 90.0189L227.665 90.0599L227.939 93.0356C230.798 125.503 225.442 157.242 203.821 182.706C184.977 204.896 158.767 215.943 130.062 218.011C96.4271 220.433 61.0433 214.409 34.8799 191.673C13.5791 173.162 2.18775 146.218 0.309618 118.341C-1.63603 89.4609 5.47113 59.5403 24.951 37.4777C47.1155 12.3725 77.6382 2.08777 110.273 0.0730967Z\"\n            fill=\"currentColor\"\n          />\n          <path\n            d=\"M657.158 0.812101C662.115 -0.0302618 667.899 0.156743 672.939 0.252536C697.176 0.71325 717.279 7.73038 736.944 21.6613C728.769 38.0919 720.808 54.7826 711.813 70.7799C704.158 65.7789 696.215 61.1763 687.536 58.1931C678.591 55.1171 665.335 52.9154 656.662 57.5408C654.576 58.6523 653.572 59.8444 652.909 62.1555C653.22 67.1398 657.231 70.6734 661.239 73.1549C666.877 76.646 673.487 78.6333 679.677 80.9156C697.622 87.5328 718.932 94.1972 732.162 108.672C743.492 121.068 749.261 139.253 748.27 155.921C747.318 171.941 740.375 186.104 728.357 196.731C708.08 214.661 680.596 218.291 654.514 216.639C626.901 215.558 601.825 206.044 579.785 189.694C587.103 173.395 595.384 156.984 604.018 141.342C621.578 153.858 646.525 164.743 668.592 162.868C673.084 162.486 678.571 161.563 681.557 157.805C683.046 155.933 683.441 153.81 683.124 151.484C681.469 139.365 639.033 127.594 628.586 123.189C621.49 120.196 614.694 116.648 608.584 111.926C596.02 102.224 588.612 89.0822 586.64 73.3328C586.513 72.3688 586.41 71.4018 586.331 70.4317C586.252 69.4626 586.198 68.492 586.168 67.5199C586.138 66.5478 586.132 65.5751 586.151 64.602C586.17 63.6299 586.213 62.6588 586.281 61.6887C586.348 60.7187 586.439 59.7506 586.556 58.7846C586.672 57.8185 586.811 56.8565 586.976 55.8986C587.14 54.9397 587.328 53.9853 587.541 53.0355C587.753 52.0867 587.989 51.1435 588.248 50.2058C588.508 49.2682 588.791 48.3382 589.097 47.4157C589.403 46.4923 589.732 45.5769 590.084 44.6697C590.435 43.7635 590.81 42.8663 591.207 41.9784C591.605 41.0904 592.024 40.2131 592.465 39.3464C592.906 38.4797 593.368 37.6242 593.851 36.7798C594.335 35.9364 594.84 35.1052 595.366 34.2861C595.892 33.4681 596.438 32.6637 597.003 31.873C597.569 31.0814 598.154 30.3049 598.76 29.5437C612.718 11.9301 635.48 3.36352 657.158 0.812101Z\"\n            fill=\"currentColor\"\n          />\n          <path\n            d=\"M313.107 3.11569C325.604 2.61544 338.178 3.35895 350.656 4.0371C358.677 25.4459 365.605 47.3048 372.749 69.0161C371.259 68.3968 369.765 67.7891 368.265 67.193C353.951 61.5109 328.509 52.9748 313.384 60.0923C311.368 61.0411 309.464 62.5114 308.953 64.8165C306.44 76.1215 334.516 83.5993 342.184 86.6723C348.062 89.0275 353.757 91.6611 359.253 94.81C365.472 98.3741 370.771 103.342 375.264 108.902C384.933 120.872 397.225 151.638 395.402 166.672C393.669 180.964 385.113 192.778 373.853 201.288C349.017 220.058 315.343 219.773 285.974 215.505C266.733 211.613 250.411 203.765 234.158 192.932L259.111 140.926C273.573 151.289 289.155 162.19 307.462 163.491C315.251 164.045 325.282 163.498 331.273 157.808C332.859 156.304 333.713 154.616 333.716 152.401C333.735 138.835 297.118 128.43 286.238 123.529C278.387 119.991 270.562 115.916 263.942 110.344C252.015 100.304 245.921 87.3519 244.688 71.9127C243.38 55.514 245.918 40.093 256.908 27.3465C271.02 10.9828 292.26 4.6955 313.107 3.11569Z\"\n            fill=\"currentColor\"\n          />\n          <path\n            d=\"M759.319 4.47647C780.556 4.12523 801.836 4.37006 823.076 4.34269L823.036 145.46L823.179 187.587C823.217 196.021 823.698 204.804 822.822 213.192C801.602 212.986 780.381 212.925 759.161 213.011L759.319 4.47647Z\"\n            fill=\"currentColor\"\n          />\n          <path\n            d=\"M506.632 4.26819L568.111 4.44609C568.707 30.088 568.362 55.812 568.418 81.463C568.718 125.358 568.712 169.253 568.4 213.148C547.796 212.682 527.189 212.518 506.58 212.657L506.632 4.26819Z\"\n            fill=\"currentColor\"\n          />\n          <path\n            d=\"M434.4 3.82574C457.678 4.21094 480.957 4.41823 504.239 4.44763C499.321 18.2417 493.309 31.6876 488.145 45.4041L437.204 180.883C433.235 190.962 429.527 201.136 426.08 211.404C418.813 193.331 415.683 173.207 411.145 154.336C407.374 138.658 402.231 123.689 395.857 108.888C399.357 97.1774 404.162 85.5106 408.437 74.055C417.382 50.7527 426.036 27.343 434.4 3.82574Z\"\n            fill=\"currentColor\"\n          />\n        </svg>\n\n        <!-- Shine Effect -->\n        <div class=\"shineEffect${this.elementID}\"></div>\n        `;\n\n\t\t// Create message container\n\t\tthis.messageContainerPrimary = document.createElement(\"div\");\n\t\tthis.messageContainerPrimary.className = `messageContainer${this.elementID} messageContainerPrimary${this.elementID}`;\n\t\tthis.messageContainerPrimary.innerHTML = this.message;\n\n\t\t// Add logo and message to primary container\n\t\tthis.spinnerContainerPrimary.appendChild(this.logoContainer);\n\t\tthis.spinnerContainerPrimary.appendChild(this.messageContainerPrimary);\n\n\t\t// Create minimized version\n\t\tthis.spinnerContainerMin = document.createElement(\"div\");\n\t\tthis.spinnerContainerMin.className = `spinnerContainerMin${this.elementID}`;\n\n\t\t// Create smaller logo container for minimized version\n\t\tthis.logoContainerMin = document.createElement(\"div\");\n\t\tthis.logoContainerMin.className = `logoContainerMin${this.elementID}`;\n\t\tthis.logoContainerMin.innerHTML = this.logoContainer.innerHTML;\n\n\t\t// Create message container for minimized version\n\t\tthis.messageContainerMin = document.createElement(\"div\");\n\t\tthis.messageContainerMin.className = `messageContainer${this.elementID} messageContainerMin${this.elementID}`;\n\t\tthis.messageContainerMin.innerHTML = this.message;\n\n\t\t// Add logo and message to minimized container\n\t\tthis.spinnerContainerMin.appendChild(this.logoContainerMin);\n\t\tthis.spinnerContainerMin.appendChild(this.messageContainerMin);\n\n\t\t// Add both containers to the outer container\n\t\tthis.spinnerContainerOuter.appendChild(this.spinnerContainerPrimary);\n\t\tthis.spinnerContainerOuter.appendChild(this.spinnerContainerMin);\n\n\t\t// Create and append styles\n\t\tconst style = document.createElement(\"style\");\n\t\tstyle.innerHTML = `\n            .spinnerOuterContainer${this.elementID} {\n                width: 100%;\n                height: 100%;\n                margin: 0;\n                top: 0;\n                left: 0;\n                position: absolute;\n                pointer-events: none;\n            }\n\n            .messageContainer${this.elementID} {\n                height: 20px;\n                font-family: arial;\n                font-size: 12pt;\n                text-wrap: nowrap;\n                color: #000000;\n                text-align: center;\n                vertical-align: middle;\n                margin-top: 15px;\n            }\n\n            .spinnerContainerPrimary${this.elementID} {\n                z-index: 99999;\n                border-radius: 10px;\n                padding: 25px;\n                margin: 0;\n                position: absolute;\n                background: white;\n                top: 50%;\n                left: 50%;\n                transform: translate(-50%, -50%);\n                display: flex;\n                flex-direction: column;\n                align-items: center;\n                pointer-events: auto;\n            }\n\n            .logoContainer${this.elementID}, .logoContainerMin${this.elementID} {\n                position: relative;\n                width: 250px;\n                height: 50px;\n                overflow: hidden;\n            }\n\n            .logo${this.elementID} {\n                color: #000000;\n            }\n\n            .shineEffect${this.elementID} {\n                position: absolute;\n                top: 0;\n                background: linear-gradient(\n                    to right,\n                    rgba(255, 255, 255, 0) 0%,\n                    rgba(255, 255, 255, 0.8) 50%,\n                    rgba(255, 255, 255, 0) 100%\n                );\n                width: 100px;\n                height: 100%;\n                transform: skewX(-20deg);\n                animation: shine${this.elementID} 2.5s infinite;\n            }\n\n            @keyframes shine${this.elementID} {\n                0% {\n                    left: -100px;\n                    opacity: 0;\n                }\n                10% {\n                    opacity: 0.5;\n                }\n                20% {\n                    opacity: 0.8;\n                }\n                35% {\n                    opacity: 0.5;\n                }\n                50% {\n                    left: 100%;\n                    opacity: 0;\n                }\n                100% {\n                    left: 100%;\n                    opacity: 0;\n                }\n            }\n\n            .spinnerContainerMin${this.elementID} {\n                z-index: 99999;\n                background-color: white;\n                border-radius: 10px;\n                padding: 10px 20px;\n                margin: 0;\n                position: absolute;\n                bottom: 30px;\n                left: 50%;\n                transform: translate(-50%, 0);\n                display: flex;\n                flex-direction: column;\n                justify-content: center;\n                align-items: center;\n                pointer-events: auto;\n            }\n\n            .logoContainerMin${this.elementID} {\n                width: 100px;\n                height: 30px;\n                margin-right: 15px;\n            }\n\n            .messageContainerMin${this.elementID} {\n                margin: 0;\n                padding: 0 10px;\n            }\n\n            @media (min-width: 768px) {\n                .spinnerContainerMin${this.elementID} {\n                    flex-direction: row;\n                    justify-content: start;\n                }\n            }\n        `;\n\n\t\tthis.spinnerContainerOuter.appendChild(style);\n\t\tthis.container.appendChild(this.spinnerContainerOuter);\n\n\t\tthis.setMinimized(false, true);\n\t\tthis.fadeTransitions = [];\n\t}\n\n\taddTask(message) {\n\t\tconst newTask = {\n\t\t\tmessage: message,\n\t\t\tid: this.taskIDGen++,\n\t\t};\n\t\tthis.tasks.push(newTask);\n\t\tthis.update();\n\t\treturn newTask.id;\n\t}\n\n\tremoveTask(id) {\n\t\tlet index = 0;\n\t\tfor (let task of this.tasks) {\n\t\t\tif (task.id === id) {\n\t\t\t\tthis.tasks.splice(index, 1);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tindex++;\n\t\t}\n\t\tthis.update();\n\t}\n\n\tremoveAllTasks() {\n\t\tthis.tasks = [];\n\t\tthis.update();\n\t}\n\n\tsetMessageForTask(id, message) {\n\t\tfor (let task of this.tasks) {\n\t\t\tif (task.id === id) {\n\t\t\t\ttask.message = message;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tthis.update();\n\t}\n\n\tupdate() {\n\t\tif (this.tasks.length > 0) {\n\t\t\tthis.show();\n\t\t\tthis.setMessage(this.tasks[this.tasks.length - 1].message);\n\t\t} else {\n\t\t\tthis.hide();\n\t\t}\n\t}\n\n\tshow() {\n\t\tthis.spinnerContainerOuter.style.display = \"block\";\n\t\tthis.visible = true;\n\t}\n\n\thide() {\n\t\tthis.spinnerContainerOuter.style.display = \"none\";\n\t\tthis.visible = false;\n\t}\n\n\tsetContainer(container) {\n\t\tif (this.container && this.spinnerContainerOuter.parentElement === this.container) {\n\t\t\tthis.container.removeChild(this.spinnerContainerOuter);\n\t\t}\n\t\tif (container) {\n\t\t\tthis.container = container;\n\t\t\tthis.container.appendChild(this.spinnerContainerOuter);\n\t\t\tthis.spinnerContainerOuter.style.zIndex = this.container.style.zIndex + 1;\n\t\t}\n\t}\n\n\tsetMinimized(minimized, instant) {\n\t\tconst showHideSpinner = (element, show, instant, displayStyle, fadeTransitionsIndex) => {\n\t\t\tif (instant) {\n\t\t\t\telement.style.display = show ? displayStyle : \"none\";\n\t\t\t} else {\n\t\t\t\tthis.fadeTransitions[fadeTransitionsIndex] = fadeElement(\n\t\t\t\t\telement,\n\t\t\t\t\t!show,\n\t\t\t\t\tdisplayStyle,\n\t\t\t\t\tSTANDARD_FADE_DURATION,\n\t\t\t\t\t() => {\n\t\t\t\t\t\tthis.fadeTransitions[fadeTransitionsIndex] = null;\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\t\tshowHideSpinner(this.spinnerContainerPrimary, !minimized, instant, \"flex\", 0);\n\t\tshowHideSpinner(this.spinnerContainerMin, minimized, instant, \"flex\", 1);\n\t\tthis.minimized = minimized;\n\t}\n\n\tsetMessage(msg) {\n\t\tthis.messageContainerPrimary.innerHTML = msg;\n\t\tthis.messageContainerMin.innerHTML = msg;\n\t}\n}\n","export class LoadingProgressBar {\n\t/**\n\t * Creates a simple SVG loading progress bar that fills with color using CSS mask\n\t * @param {HTMLElement} [container=document.body] - The container element\n\t * @param {string} [barColor=\"black\"] - Fill color for the progress\n\t * @param {string} [backgroundColor=\"white\"] - Background color\n\t */\n\tconstructor(container, barColor, backgroundColor = \"white\") {\n\t\tthis.container = container || document.body;\n\t\tthis.barColor = barColor;\n\t\tthis.backgroundColor = backgroundColor;\n\n\t\t// Create the main container\n\t\tthis.progressBar = document.createElement(\"div\");\n\t\tthis.progressBar.className = \"progress-bar-container\";\n\t\tthis.progressBar.style.display = \"none\";\n\n\t\t// Create loading fill element\n\t\tthis.loadingFill = document.createElement(\"div\");\n\t\tthis.loadingFill.className = \"loading-fill\";\n\n\t\tthis.progressBarBorder = document.createElement(\"div\");\n\t\tthis.progressBarBorder.className = \"progress-bar-container progress-bar-container-border\";\n\n\t\t// Add to the container\n\t\tthis.progressBar.appendChild(this.loadingFill);\n\n\t\t// Create SVG mask as data URI\n\t\tconst svgMask = encodeURIComponent(`\n        <svg width=\"1255\" height=\"219\" viewBox=\"0 0 1255 219\" fill=\"white\" xmlns=\"http://www.w3.org/2000/svg\">\n            <path d=\"M932.241 0.82733C932.502 0.795399 932.764 0.752843 933.027 0.731556C963.013 -1.60851 993.558 5.3478 1016.9 24.8985C1039.69 43.9916 1051.33 69.3887 1053.84 98.8546C1056.38 128.83 1049.27 158.568 1029.43 181.649C1011.04 203.054 985.034 215.031 957.046 217.175C956.577 217.231 956.107 217.292 955.637 217.343C927.135 220.479 893.395 212.642 870.876 194.49C847.985 176.039 836.461 150.087 833.64 121.203C830.82 92.3302 838.232 60.892 856.928 38.2319C876.18 14.8997 902.595 3.58249 932.241 0.82733ZM946.797 160.895C960.136 158.992 970.948 154.393 979.352 143.343C988.857 130.849 991.442 114.764 989.21 99.4765C987.326 86.5735 981.096 74.7424 970.51 66.9118C969.43 66.1099 968.316 65.3558 967.17 64.6492C966.023 63.9437 964.847 63.2894 963.644 62.6863C962.441 62.0831 961.214 61.5327 959.963 61.035C958.712 60.5383 957.442 60.0963 956.152 59.7091C954.862 59.3229 953.558 58.9929 952.24 58.7192C950.922 58.4456 949.595 58.2296 948.258 58.0715C946.921 57.9134 945.579 57.8135 944.233 57.772C942.888 57.7304 941.543 57.7471 940.199 57.8221C927.587 58.8394 917.141 63.7506 908.887 73.4226C899.191 84.7869 895.653 100.288 896.894 114.954C898.025 128.327 903.464 141.867 913.919 150.648C923.271 158.504 934.8 161.273 946.797 160.895Z\" fill=\"black\"></path>\n            <path d=\"M1189.75 4.31691C1211.43 4.3458 1233.18 4.03712 1254.85 4.72743L1254.74 143.311L1254.45 191.694C1254.4 197.828 1254.99 204.322 1254.56 210.392C1254.49 211.438 1254.19 212.116 1253.62 212.981L1251.32 213.294C1233.06 213.01 1214.76 213.206 1196.5 213.192C1175.59 181.85 1153.43 151.143 1131.7 120.352L1131.71 213.241C1110.47 213.086 1089.22 213.052 1067.97 213.141L1067.99 4.35946L1128.63 4.4416C1148.62 34.0779 1170.1 62.6908 1189.7 92.584C1190.49 63.2382 1189.71 33.684 1189.75 4.31691Z\" fill=\"black\"></path>\n            <path d=\"M110.273 0.0730966C116.166 -0.150418 122.432 0.159772 128.305 0.716279C160.819 3.79531 185.141 16.9416 205.91 41.8597C191.162 52.6812 177.245 64.5944 162.39 75.3444C155.992 69.6106 149.347 64.6096 141.288 61.4394C126.796 55.7375 108.719 56.3639 94.5584 62.7957C82.7121 68.1767 72.9383 77.9354 68.433 90.2241C63.4822 103.725 64.3261 120.238 70.51 133.204C70.8679 133.944 71.2439 134.675 71.6383 135.397C72.0316 136.119 72.4426 136.83 72.8714 137.532C73.3012 138.233 73.7477 138.924 74.211 139.603C74.6742 140.282 75.1537 140.949 75.6494 141.605C76.1461 142.26 76.6585 142.903 77.1866 143.533C77.7147 144.163 78.258 144.779 78.8166 145.382C79.3751 145.986 79.9483 146.576 80.5363 147.151C81.1242 147.725 81.7258 148.285 82.3411 148.831C82.9564 149.375 83.5849 149.904 84.2266 150.418C84.8682 150.932 85.5225 151.43 86.1895 151.911C86.8555 152.394 87.5332 152.859 88.2225 153.307C88.9118 153.755 89.6117 154.185 90.3223 154.598C91.0329 155.012 91.7536 155.407 92.4844 155.785C93.2143 156.164 93.9533 156.523 94.7014 156.864C95.4495 157.205 96.2056 157.528 96.9699 157.831C97.7332 158.135 98.5042 158.42 99.2827 158.685C112.719 163.204 132.03 162.682 144.685 156.02C153.253 151.51 157.048 143.977 159.799 135.126C143.951 134.847 128.063 134.993 112.212 134.939L112.38 89.841C138.034 90.1714 163.689 90.2307 189.344 90.0189L227.665 90.0599L227.939 93.0356C230.798 125.503 225.442 157.242 203.821 182.706C184.977 204.896 158.767 215.943 130.062 218.011C96.4271 220.433 61.0433 214.409 34.8799 191.673C13.5791 173.162 2.18775 146.218 0.309619 118.341C-1.63603 89.4609 5.47113 59.5403 24.951 37.4777C47.1155 12.3725 77.6382 2.08777 110.273 0.0730966Z\" fill=\"black\"></path>\n            <path d=\"M657.158 0.812101C662.115 -0.0302618 667.899 0.156743 672.939 0.252536C697.176 0.71325 717.279 7.73038 736.944 21.6613C728.769 38.0919 720.808 54.7826 711.813 70.7799C704.158 65.7789 696.215 61.1763 687.536 58.1931C678.591 55.1171 665.335 52.9154 656.662 57.5408C654.576 58.6523 653.572 59.8444 652.909 62.1555C653.22 67.1398 657.231 70.6734 661.239 73.1549C666.877 76.646 673.487 78.6333 679.677 80.9156C697.622 87.5328 718.932 94.1972 732.162 108.672C743.492 121.068 749.261 139.253 748.27 155.921C747.318 171.941 740.375 186.104 728.357 196.731C708.08 214.661 680.596 218.291 654.514 216.639C626.901 215.558 601.825 206.044 579.785 189.694C587.103 173.395 595.384 156.984 604.018 141.342C621.578 153.858 646.525 164.743 668.592 162.868C673.084 162.486 678.571 161.563 681.557 157.805C683.046 155.933 683.441 153.81 683.124 151.484C681.469 139.365 639.033 127.594 628.586 123.189C621.49 120.196 614.694 116.648 608.584 111.926C596.02 102.224 588.612 89.0822 586.64 73.3328C586.513 72.3688 586.41 71.4018 586.331 70.4317C586.252 69.4626 586.198 68.492 586.168 67.5199C586.138 66.5478 586.132 65.5751 586.151 64.602C586.17 63.6299 586.213 62.6588 586.281 61.6887C586.348 60.7187 586.439 59.7506 586.556 58.7846C586.672 57.8185 586.811 56.8565 586.976 55.8986C587.14 54.9397 587.328 53.9853 587.541 53.0355C587.753 52.0867 587.989 51.1435 588.248 50.2058C588.508 49.2682 588.791 48.3382 589.097 47.4157C589.403 46.4923 589.732 45.5769 590.084 44.6697C590.435 43.7635 590.81 42.8663 591.207 41.9784C591.605 41.0904 592.024 40.2131 592.465 39.3464C592.906 38.4797 593.368 37.6242 593.851 36.7798C594.335 35.9364 594.84 35.1052 595.366 34.2861C595.892 33.4681 596.438 32.6637 597.003 31.873C597.569 31.0814 598.154 30.3049 598.76 29.5437C612.718 11.9301 635.48 3.36352 657.158 0.812101Z\" fill=\"black\"></path>\n            <path d=\"M313.107 3.11569C325.604 2.61544 338.178 3.35895 350.656 4.0371C358.677 25.4459 365.605 47.3048 372.749 69.0161C371.259 68.3968 369.765 67.7891 368.265 67.193C353.951 61.5109 328.509 52.9748 313.384 60.0923C311.368 61.0411 309.464 62.5114 308.953 64.8165C306.44 76.1215 334.516 83.5993 342.184 86.6723C348.062 89.0275 353.757 91.6611 359.253 94.81C365.472 98.3741 370.771 103.342 375.264 108.902C384.933 120.872 397.225 151.638 395.402 166.672C393.669 180.964 385.113 192.778 373.853 201.288C349.017 220.058 315.343 219.773 285.974 215.505C266.733 211.613 250.411 203.765 234.158 192.932L259.111 140.926C273.573 151.289 289.155 162.19 307.462 163.491C315.251 164.045 325.282 163.498 331.273 157.808C332.859 156.304 333.713 154.616 333.716 152.401C333.735 138.835 297.118 128.43 286.238 123.529C278.387 119.991 270.562 115.916 263.942 110.344C252.015 100.304 245.921 87.3519 244.688 71.9127C243.38 55.514 245.918 40.093 256.908 27.3465C271.02 10.9828 292.26 4.6955 313.107 3.11569Z\" fill=\"black\"></path>\n            <path d=\"M759.319 4.47647C780.556 4.12523 801.836 4.37006 823.076 4.34269L823.036 145.46L823.179 187.587C823.217 196.021 823.698 204.804 822.822 213.192C801.602 212.986 780.381 212.925 759.161 213.011L759.319 4.47647Z\" fill=\"black\"></path>\n            <path d=\"M506.632 4.26819L568.111 4.44609C568.707 30.088 568.362 55.812 568.418 81.463C568.718 125.358 568.712 169.253 568.4 213.148C547.796 212.682 527.189 212.518 506.58 212.657L506.632 4.26819Z\" fill=\"black\"></path>\n            <path d=\"M434.4 3.82574C457.678 4.21094 480.957 4.41823 504.239 4.44763C499.321 18.2417 493.309 31.6876 488.145 45.4041L437.204 180.883C433.235 190.962 429.527 201.136 426.08 211.404C418.813 193.331 415.683 173.207 411.145 154.336C407.374 138.658 402.231 123.689 395.857 108.888C399.357 97.1774 404.162 85.5106 408.437 74.055C417.382 50.7527 426.036 27.343 434.4 3.82574Z\" fill=\"black\"></path>\n        </svg>\n        `);\n\n\t\t// Apply styles\n\t\tconst style = document.createElement(\"style\");\n\t\tstyle.innerHTML = `\n            .progress-bar-container {\n                position: fixed;\n                bottom: 28px;\n                left: 50%;\n                transform: translateX(-50%);\n                width: 300px;\n                background-color: ${this.backgroundColor ?? \"white\"};\n                height: 60px;\n                z-index: 9999;\n                -webkit-mask: url(\"data:image/svg+xml;charset=utf8,${svgMask}\") no-repeat center;\n                mask: url(\"data:image/svg+xml;charset=utf8,${svgMask}\") no-repeat center;\n                -webkit-mask-size: contain;\n                mask-size: contain;\n                pointer-events: none;\n            }\n            \n            .loading-fill {\n                width: 100%;\n                height: 100%;\n                background-color: ${this.barColor ?? \"#8200DB\"};\n                transform: scaleX(0);\n                transform-origin: left;\n                transition: transform 0.3s ease-out;\n            }\n        `;\n\n\t\tthis.progressBar.appendChild(style);\n\t\tthis.container.appendChild(this.progressBar);\n\t}\n\n\t/**\n\t * Shows the loading progress bar\n\t */\n\tshow() {\n\t\tthis.progressBar.style.display = \"block\";\n\t}\n\n\t/**\n\t * Hides the loading progress bar\n\t */\n\thide() {\n\t\tthis.progressBar.style.display = \"none\";\n\t}\n\n\t/**\n\t * Updates the progress of the loading bar\n\t * @param {number} progress - Progress percentage (0-100)\n\t */\n\tsetProgress(progress) {\n\t\tconst clampedProgress = Math.min(Math.max(progress, 0), 100);\n\t\tif (this.loadingFill) {\n\t\t\tthis.loadingFill.style.transform = `scaleX(${clampedProgress / 100})`;\n\t\t}\n\t}\n\n\t/**\n\t * Sets a new container for the loading progress bar\n\t * @param {HTMLElement} container - New container element\n\t */\n\tsetContainer(container) {\n\t\tif (this.container && this.progressBar.parentElement === this.container) {\n\t\t\tthis.container.removeChild(this.progressBar);\n\t\t}\n\t\tif (container) {\n\t\t\tthis.container = container;\n\t\t\tthis.container.appendChild(this.progressBar);\n\t\t}\n\t}\n}\n","export class InfoPanel {\n\tconstructor(container, role) {\n\t\tthis.container = container || document.body;\n\n\t\tthis.infoCells = {};\n\n\t\tconst layout = [\n\t\t\t[\"Camera position\", \"cameraPosition\"],\n\t\t\t[\"Camera look-at\", \"cameraLookAt\"],\n\t\t\t[\"Camera up\", \"cameraUp\"],\n\t\t\t[\"Camera mode\", \"orthographicCamera\"],\n\t\t\t[\"Cursor position\", \"cursorPosition\"],\n\t\t\t[\"FPS\", \"fps\"],\n\t\t\t[\"Rendering:\", \"renderSplatCount\"],\n\t\t\t[\"Sort time\", \"sortTime\"],\n\t\t\t[\"Render window\", \"renderWindow\"],\n\t\t\t[\"Focal adjustment\", \"focalAdjustment\"],\n\t\t\t[\"Splat scale\", \"splatScale\"],\n\t\t\t[\"Point cloud mode\", \"pointCloudMode\"],\n\t\t];\n\n\t\tconst staticLayout = [\n\t\t\t[\"Toggle UI\", \"F1 Key\"],\n\t\t\t...(role === \"admin\"\n\t\t\t\t? [\n\t\t\t\t\t\t[\"Label Edit Mode\", \"L Key\"],\n\t\t\t\t\t\t[\"Create new label\", \"N Key\"],\n\t\t\t\t  ]\n\t\t\t\t: []),\n\t\t];\n\n\t\tthis.infoPanelContainer = document.createElement(\"div\");\n\t\tconst style = document.createElement(\"style\");\n\t\tstyle.innerHTML = `\n\n            .infoPanel {\n                width: 430px;\n                padding: 10px;\n                background-color: rgba(50, 50, 50, 0.85);\n                border: #555555 2px solid;\n                color: #dddddd;\n                border-radius: 10px;\n                z-index: 9999;\n                font-family: arial;\n                font-size: 11pt;\n                text-align: left;\n                margin: 0;\n                top: 10px;\n                left:10px;\n                position: absolute;\n                pointer-events: auto;\n            }\n\n            .info-panel-cell {\n                margin-bottom: 5px;\n                padding-bottom: 2px;\n            }\n\n            .label-cell {\n                font-weight: bold;\n                font-size: 12pt;\n                width: 140px;\n            }\n\n        `;\n\t\tthis.infoPanelContainer.append(style);\n\n\t\tthis.infoPanel = document.createElement(\"div\");\n\t\tthis.infoPanel.className = \"infoPanel\";\n\n\t\tconst infoTable = document.createElement(\"div\");\n\t\tinfoTable.style.display = \"table\";\n\n\t\tfor (let layoutEntry of layout) {\n\t\t\tconst row = document.createElement(\"div\");\n\t\t\trow.style.display = \"table-row\";\n\t\t\trow.className = \"info-panel-row\";\n\n\t\t\tconst labelCell = document.createElement(\"div\");\n\t\t\tlabelCell.style.display = \"table-cell\";\n\t\t\tlabelCell.innerHTML = `${layoutEntry[0]}: `;\n\t\t\tlabelCell.classList.add(\"info-panel-cell\", \"label-cell\");\n\n\t\t\tconst spacerCell = document.createElement(\"div\");\n\t\t\tspacerCell.style.display = \"table-cell\";\n\t\t\tspacerCell.style.width = \"10px\";\n\t\t\tspacerCell.innerHTML = \" \";\n\t\t\tspacerCell.className = \"info-panel-cell\";\n\n\t\t\tconst infoCell = document.createElement(\"div\");\n\t\t\tinfoCell.style.display = \"table-cell\";\n\t\t\tinfoCell.innerHTML = \"\";\n\t\t\tinfoCell.className = \"info-panel-cell\";\n\n\t\t\tthis.infoCells[layoutEntry[1]] = infoCell;\n\n\t\t\trow.appendChild(labelCell);\n\t\t\trow.appendChild(spacerCell);\n\t\t\trow.appendChild(infoCell);\n\n\t\t\tinfoTable.appendChild(row);\n\t\t}\n\n\t\tfor (let staticLayoutEntry of staticLayout) {\n\t\t\tconst row = document.createElement(\"div\");\n\t\t\trow.style.display = \"table-row\";\n\t\t\trow.className = \"info-panel-row\";\n\n\t\t\tconst labelCell = document.createElement(\"div\");\n\t\t\tlabelCell.style.display = \"table-cell\";\n\t\t\tlabelCell.innerHTML = `${staticLayoutEntry[0]}: `;\n\t\t\tlabelCell.classList.add(\"info-panel-cell\", \"label-cell\");\n\n\t\t\tconst spacerCell = document.createElement(\"div\");\n\t\t\tspacerCell.style.display = \"table-cell\";\n\t\t\tspacerCell.style.width = \"10px\";\n\t\t\tspacerCell.innerHTML = \" \";\n\t\t\tspacerCell.className = \"info-panel-cell\";\n\n\t\t\tconst infoCell = document.createElement(\"div\");\n\t\t\tinfoCell.style.display = \"table-cell\";\n\t\t\tinfoCell.innerHTML = `${staticLayoutEntry[1]}`;\n\t\t\tinfoCell.className = \"info-panel-cell\";\n\n\t\t\trow.appendChild(labelCell);\n\t\t\trow.appendChild(spacerCell);\n\t\t\trow.appendChild(infoCell);\n\n\t\t\tinfoTable.appendChild(row);\n\t\t}\n\n\t\tthis.infoPanel.appendChild(infoTable);\n\t\tthis.infoPanelContainer.append(this.infoPanel);\n\t\tthis.infoPanelContainer.style.display = \"none\";\n\t\tthis.container.appendChild(this.infoPanelContainer);\n\n\t\tthis.visible = false;\n\t}\n\n\tupdate = function (\n\t\trenderDimensions,\n\t\tcameraPosition,\n\t\tcameraLookAtPosition,\n\t\tcameraUp,\n\t\torthographicCamera,\n\t\tmeshCursorPosition,\n\t\tcurrentFPS,\n\t\tsplatCount,\n\t\tsplatRenderCount,\n\t\tsplatRenderCountPct,\n\t\tlastSortTime,\n\t\tfocalAdjustment,\n\t\tsplatScale,\n\t\tpointCloudMode,\n\t) {\n\t\tconst cameraPosString = `${cameraPosition.x.toFixed(5)}, ${cameraPosition.y.toFixed(\n\t\t\t5,\n\t\t)}, ${cameraPosition.z.toFixed(5)}`;\n\t\tif (this.infoCells.cameraPosition.innerHTML !== cameraPosString) {\n\t\t\tthis.infoCells.cameraPosition.innerHTML = cameraPosString;\n\t\t}\n\n\t\tif (cameraLookAtPosition) {\n\t\t\tconst cla = cameraLookAtPosition;\n\t\t\tconst cameraLookAtString = `${cla.x.toFixed(5)}, ${cla.y.toFixed(5)}, ${cla.z.toFixed(5)}`;\n\t\t\tif (this.infoCells.cameraLookAt.innerHTML !== cameraLookAtString) {\n\t\t\t\tthis.infoCells.cameraLookAt.innerHTML = cameraLookAtString;\n\t\t\t}\n\t\t}\n\n\t\tconst cameraUpString = `${cameraUp.x.toFixed(5)}, ${cameraUp.y.toFixed(5)}, ${cameraUp.z.toFixed(5)}`;\n\t\tif (this.infoCells.cameraUp.innerHTML !== cameraUpString) {\n\t\t\tthis.infoCells.cameraUp.innerHTML = cameraUpString;\n\t\t}\n\n\t\tthis.infoCells.orthographicCamera.innerHTML = orthographicCamera ? \"Orthographic\" : \"Perspective\";\n\n\t\tif (meshCursorPosition) {\n\t\t\tconst cursPos = meshCursorPosition;\n\t\t\tconst cursorPosString = `${cursPos.x.toFixed(5)}, ${cursPos.y.toFixed(5)}, ${cursPos.z.toFixed(5)}`;\n\t\t\tthis.infoCells.cursorPosition.innerHTML = cursorPosString;\n\t\t} else {\n\t\t\tthis.infoCells.cursorPosition.innerHTML = \"N/A\";\n\t\t}\n\n\t\tthis.infoCells.fps.innerHTML = currentFPS;\n\t\tthis.infoCells.renderWindow.innerHTML = `${renderDimensions.x} x ${renderDimensions.y}`;\n\n\t\tthis.infoCells.renderSplatCount.innerHTML = `${splatRenderCount} splats out of ${splatCount} (${splatRenderCountPct.toFixed(\n\t\t\t2,\n\t\t)}%)`;\n\n\t\tthis.infoCells.sortTime.innerHTML = `${lastSortTime.toFixed(3)} ms`;\n\t\tthis.infoCells.focalAdjustment.innerHTML = `${focalAdjustment.toFixed(3)}`;\n\t\tthis.infoCells.splatScale.innerHTML = `${splatScale.toFixed(3)}`;\n\t\tthis.infoCells.pointCloudMode.innerHTML = `${pointCloudMode}`;\n\t};\n\n\tsetContainer(container) {\n\t\tif (this.container && this.infoPanelContainer.parentElement === this.container) {\n\t\t\tthis.container.removeChild(this.infoPanelContainer);\n\t\t}\n\t\tif (container) {\n\t\t\tthis.container = container;\n\t\t\tthis.container.appendChild(this.infoPanelContainer);\n\t\t\tthis.infoPanelContainer.style.zIndex = this.container.style.zIndex + 1;\n\t\t}\n\t}\n\n\tshow() {\n\t\tthis.infoPanelContainer.style.display = \"block\";\n\t\tthis.visible = true;\n\t}\n\n\thide() {\n\t\tthis.infoPanelContainer.style.display = \"none\";\n\t\tthis.visible = false;\n\t}\n}\n","import * as THREE from \"three\";\n\nconst _axis = new THREE.Vector3();\n\nexport class ArrowHelper extends THREE.Object3D {\n\tconstructor(\n\t\tdir = new THREE.Vector3(0, 0, 1),\n\t\torigin = new THREE.Vector3(0, 0, 0),\n\t\tlength = 1,\n\t\tradius = 0.1,\n\t\tcolor = 0xffff00,\n\t\theadLength = length * 0.2,\n\t\theadRadius = headLength * 0.2,\n\t) {\n\t\tsuper();\n\n\t\tthis.type = \"ArrowHelper\";\n\n\t\tconst lineGeometry = new THREE.CylinderGeometry(radius, radius, length, 32);\n\t\tlineGeometry.translate(0, length / 2.0, 0);\n\t\tconst coneGeometry = new THREE.CylinderGeometry(0, headRadius, headLength, 32);\n\t\tconeGeometry.translate(0, length, 0);\n\n\t\tthis.position.copy(origin);\n\n\t\tthis.line = new THREE.Mesh(\n\t\t\tlineGeometry,\n\t\t\tnew THREE.MeshBasicMaterial({ color: color, toneMapped: false }),\n\t\t);\n\t\tthis.line.matrixAutoUpdate = false;\n\t\tthis.add(this.line);\n\n\t\tthis.cone = new THREE.Mesh(\n\t\t\tconeGeometry,\n\t\t\tnew THREE.MeshBasicMaterial({ color: color, toneMapped: false }),\n\t\t);\n\t\tthis.cone.matrixAutoUpdate = false;\n\t\tthis.add(this.cone);\n\n\t\tthis.setDirection(dir);\n\t}\n\n\tsetDirection(dir) {\n\t\tif (dir.y > 0.99999) {\n\t\t\tthis.quaternion.set(0, 0, 0, 1);\n\t\t} else if (dir.y < -0.99999) {\n\t\t\tthis.quaternion.set(1, 0, 0, 0);\n\t\t} else {\n\t\t\t_axis.set(dir.z, 0, -dir.x).normalize();\n\t\t\tconst radians = Math.acos(dir.y);\n\t\t\tthis.quaternion.setFromAxisAngle(_axis, radians);\n\t\t}\n\t}\n\n\tsetColor(color) {\n\t\tthis.line.material.color.set(color);\n\t\tthis.cone.material.color.set(color);\n\t}\n\n\tcopy(source) {\n\t\tsuper.copy(source, false);\n\t\tthis.line.copy(source.line);\n\t\tthis.cone.copy(source.cone);\n\t\treturn this;\n\t}\n\n\tdispose() {\n\t\tthis.line.geometry.dispose();\n\t\tthis.line.material.dispose();\n\t\tthis.cone.geometry.dispose();\n\t\tthis.cone.material.dispose();\n\t}\n}\n","import * as THREE from \"three\";\nimport { ArrowHelper } from \"./ArrowHelper.js\";\nimport { disposeAllMeshes } from \"./Util.js\";\n\nexport class SceneHelper {\n\tconstructor(threeScene) {\n\t\tthis.threeScene = threeScene;\n\t\tthis.splatRenderTarget = null;\n\t\tthis.renderTargetCopyQuad = null;\n\t\tthis.renderTargetCopyCamera = null;\n\t\tthis.meshCursor = null;\n\t\tthis.focusMarker = null;\n\t\tthis.controlPlane = null;\n\t\tthis.debugRoot = null;\n\t\tthis.secondaryDebugRoot = null;\n\t}\n\n\tupdateSplatRenderTargetForRenderDimensions(width, height) {\n\t\tthis.destroySplatRendertarget();\n\t\tthis.splatRenderTarget = new THREE.WebGLRenderTarget(width, height, {\n\t\t\tformat: THREE.RGBAFormat,\n\t\t\tstencilBuffer: false,\n\t\t\tdepthBuffer: true,\n\t\t});\n\t\tthis.splatRenderTarget.depthTexture = new THREE.DepthTexture(width, height);\n\t\tthis.splatRenderTarget.depthTexture.format = THREE.DepthFormat;\n\t\tthis.splatRenderTarget.depthTexture.type = THREE.UnsignedIntType;\n\t}\n\n\tdestroySplatRendertarget() {\n\t\tif (this.splatRenderTarget) {\n\t\t\tthis.splatRenderTarget = null;\n\t\t}\n\t}\n\n\tsetupRenderTargetCopyObjects() {\n\t\tconst uniforms = {\n\t\t\tsourceColorTexture: {\n\t\t\t\ttype: \"t\",\n\t\t\t\tvalue: null,\n\t\t\t},\n\t\t\tsourceDepthTexture: {\n\t\t\t\ttype: \"t\",\n\t\t\t\tvalue: null,\n\t\t\t},\n\t\t};\n\t\tconst renderTargetCopyMaterial = new THREE.ShaderMaterial({\n\t\t\tvertexShader: `\n                varying vec2 vUv;\n                void main() {\n                    vUv = uv;\n                    gl_Position = vec4( position.xy, 0.0, 1.0 );    \n                }\n            `,\n\t\t\tfragmentShader: `\n                #include <common>\n                #include <packing>\n                varying vec2 vUv;\n                uniform sampler2D sourceColorTexture;\n                uniform sampler2D sourceDepthTexture;\n                void main() {\n                    vec4 color = texture2D(sourceColorTexture, vUv);\n                    float fragDepth = texture2D(sourceDepthTexture, vUv).x;\n                    gl_FragDepth = fragDepth;\n                    gl_FragColor = vec4(color.rgb, color.a * 2.0);\n              }\n            `,\n\t\t\tuniforms: uniforms,\n\t\t\tdepthWrite: false,\n\t\t\tdepthTest: false,\n\t\t\ttransparent: true,\n\t\t\tblending: THREE.CustomBlending,\n\t\t\tblendSrc: THREE.SrcAlphaFactor,\n\t\t\tblendSrcAlpha: THREE.SrcAlphaFactor,\n\t\t\tblendDst: THREE.OneMinusSrcAlphaFactor,\n\t\t\tblendDstAlpha: THREE.OneMinusSrcAlphaFactor,\n\t\t});\n\t\trenderTargetCopyMaterial.extensions.fragDepth = true;\n\t\tthis.renderTargetCopyQuad = new THREE.Mesh(new THREE.PlaneGeometry(2, 2), renderTargetCopyMaterial);\n\t\tthis.renderTargetCopyCamera = new THREE.OrthographicCamera(-1, 1, 1, -1, 0, 1);\n\t}\n\n\tdestroyRenderTargetCopyObjects() {\n\t\tif (this.renderTargetCopyQuad) {\n\t\t\tdisposeAllMeshes(this.renderTargetCopyQuad);\n\t\t\tthis.renderTargetCopyQuad = null;\n\t\t}\n\t}\n\n\tsetupMeshCursor() {\n\t\tif (!this.meshCursor) {\n\t\t\tconst coneGeometry = new THREE.ConeGeometry(0.5, 1.5, 32);\n\t\t\tconst coneMaterial = new THREE.MeshBasicMaterial({ color: 0xffffff });\n\n\t\t\tconst downArrow = new THREE.Mesh(coneGeometry, coneMaterial);\n\t\t\tdownArrow.rotation.set(0, 0, Math.PI);\n\t\t\tdownArrow.position.set(0, 1, 0);\n\t\t\tconst upArrow = new THREE.Mesh(coneGeometry, coneMaterial);\n\t\t\tupArrow.position.set(0, -1, 0);\n\t\t\tconst leftArrow = new THREE.Mesh(coneGeometry, coneMaterial);\n\t\t\tleftArrow.rotation.set(0, 0, Math.PI / 2.0);\n\t\t\tleftArrow.position.set(1, 0, 0);\n\t\t\tconst rightArrow = new THREE.Mesh(coneGeometry, coneMaterial);\n\t\t\trightArrow.rotation.set(0, 0, -Math.PI / 2.0);\n\t\t\trightArrow.position.set(-1, 0, 0);\n\n\t\t\tthis.meshCursor = new THREE.Object3D();\n\t\t\tthis.meshCursor.add(downArrow);\n\t\t\tthis.meshCursor.add(upArrow);\n\t\t\tthis.meshCursor.add(leftArrow);\n\t\t\tthis.meshCursor.add(rightArrow);\n\t\t\tthis.meshCursor.scale.set(0.1, 0.1, 0.1);\n\t\t\tthis.threeScene.add(this.meshCursor);\n\t\t\tthis.meshCursor.visible = false;\n\t\t}\n\t}\n\n\tdestroyMeshCursor() {\n\t\tif (this.meshCursor) {\n\t\t\tdisposeAllMeshes(this.meshCursor);\n\t\t\tthis.threeScene.remove(this.meshCursor);\n\t\t\tthis.meshCursor = null;\n\t\t}\n\t}\n\n\tsetMeshCursorVisibility(visible) {\n\t\tthis.meshCursor.visible = visible;\n\t}\n\n\tgetMeschCursorVisibility() {\n\t\treturn this.meshCursor.visible;\n\t}\n\n\tsetMeshCursorPosition(position) {\n\t\tthis.meshCursor.position.copy(position);\n\t}\n\n\tpositionAndOrientMeshCursor(position, camera) {\n\t\tthis.meshCursor.position.copy(position);\n\t\tthis.meshCursor.up.copy(camera.up);\n\t\tthis.meshCursor.lookAt(camera.position);\n\t}\n\n\tsetupFocusMarker() {\n\t\tif (!this.focusMarker) {\n\t\t\tconst sphereGeometry = new THREE.SphereGeometry(0.5, 32, 32);\n\t\t\tconst focusMarkerMaterial = SceneHelper.buildFocusMarkerMaterial();\n\t\t\tfocusMarkerMaterial.depthTest = false;\n\t\t\tfocusMarkerMaterial.depthWrite = false;\n\t\t\tfocusMarkerMaterial.transparent = true;\n\t\t\tthis.focusMarker = new THREE.Mesh(sphereGeometry, focusMarkerMaterial);\n\t\t}\n\t}\n\n\tdestroyFocusMarker() {\n\t\tif (this.focusMarker) {\n\t\t\tdisposeAllMeshes(this.focusMarker);\n\t\t\tthis.focusMarker = null;\n\t\t}\n\t}\n\n\tupdateFocusMarker = (function() {\n\t\tconst tempPosition = new THREE.Vector3();\n\t\tconst tempMatrix = new THREE.Matrix4();\n\t\tconst toCamera = new THREE.Vector3();\n\n\t\treturn function(position, camera, viewport) {\n\t\t\ttempMatrix.copy(camera.matrixWorld).invert();\n\t\t\ttempPosition.copy(position).applyMatrix4(tempMatrix);\n\t\t\ttempPosition.normalize().multiplyScalar(10);\n\t\t\ttempPosition.applyMatrix4(camera.matrixWorld);\n\t\t\ttoCamera.copy(camera.position).sub(position);\n\t\t\tconst toCameraDistance = toCamera.length();\n\t\t\tthis.focusMarker.position.copy(position);\n\t\t\tthis.focusMarker.scale.set(toCameraDistance, toCameraDistance, toCameraDistance);\n\t\t\tthis.focusMarker.material.uniforms.realFocusPosition.value.copy(position);\n\t\t\tthis.focusMarker.material.uniforms.viewport.value.copy(viewport);\n\t\t\tthis.focusMarker.material.uniformsNeedUpdate = true;\n\t\t};\n\t})();\n\n\tsetFocusMarkerVisibility(visible) {\n\t\tthis.focusMarker.visible = visible;\n\t}\n\n\tsetFocusMarkerOpacity(opacity) {\n\t\tthis.focusMarker.material.uniforms.opacity.value = opacity;\n\t\tthis.focusMarker.material.uniformsNeedUpdate = true;\n\t}\n\n\tgetFocusMarkerOpacity() {\n\t\treturn this.focusMarker.material.uniforms.opacity.value;\n\t}\n\n\tsetupControlPlane() {\n\t\tif (!this.controlPlane) {\n\t\t\tconst planeGeometry = new THREE.PlaneGeometry(1, 1);\n\t\t\tplaneGeometry.rotateX(-Math.PI / 2);\n\t\t\tconst planeMaterial = new THREE.MeshBasicMaterial({ color: 0xffffff });\n\t\t\tplaneMaterial.transparent = true;\n\t\t\tplaneMaterial.opacity = 0.6;\n\t\t\tplaneMaterial.depthTest = false;\n\t\t\tplaneMaterial.depthWrite = false;\n\t\t\tplaneMaterial.side = THREE.DoubleSide;\n\t\t\tconst planeMesh = new THREE.Mesh(planeGeometry, planeMaterial);\n\n\t\t\tconst arrowDir = new THREE.Vector3(0, 1, 0);\n\t\t\tarrowDir.normalize();\n\t\t\tconst arrowOrigin = new THREE.Vector3(0, 0, 0);\n\t\t\tconst arrowLength = 0.5;\n\t\t\tconst arrowRadius = 0.01;\n\t\t\tconst arrowColor = 0x00dd00;\n\t\t\tconst arrowHelper = new ArrowHelper(\n\t\t\t\tarrowDir,\n\t\t\t\tarrowOrigin,\n\t\t\t\tarrowLength,\n\t\t\t\tarrowRadius,\n\t\t\t\tarrowColor,\n\t\t\t\t0.1,\n\t\t\t\t0.03,\n\t\t\t);\n\n\t\t\tthis.controlPlane = new THREE.Object3D();\n\t\t\tthis.controlPlane.add(planeMesh);\n\t\t\tthis.controlPlane.add(arrowHelper);\n\t\t}\n\t}\n\n\tdestroyControlPlane() {\n\t\tif (this.controlPlane) {\n\t\t\tdisposeAllMeshes(this.controlPlane);\n\t\t\tthis.controlPlane = null;\n\t\t}\n\t}\n\n\tsetControlPlaneVisibility(visible) {\n\t\tthis.controlPlane.visible = visible;\n\t}\n\n\tpositionAndOrientControlPlane = (function() {\n\t\tconst tempQuaternion = new THREE.Quaternion();\n\t\tconst defaultUp = new THREE.Vector3(0, 1, 0);\n\n\t\treturn function(position, up) {\n\t\t\ttempQuaternion.setFromUnitVectors(defaultUp, up);\n\t\t\tthis.controlPlane.position.copy(position);\n\t\t\tthis.controlPlane.quaternion.copy(tempQuaternion);\n\t\t};\n\t})();\n\n\taddDebugMeshes() {\n\t\tthis.debugRoot = this.createDebugMeshes();\n\t\tthis.secondaryDebugRoot = this.createSecondaryDebugMeshes();\n\t\tthis.threeScene.add(this.debugRoot);\n\t\tthis.threeScene.add(this.secondaryDebugRoot);\n\t}\n\n\tdestroyDebugMeshes() {\n\t\tfor (let debugRoot of [this.debugRoot, this.secondaryDebugRoot]) {\n\t\t\tif (debugRoot) {\n\t\t\t\tdisposeAllMeshes(debugRoot);\n\t\t\t\tthis.threeScene.remove(debugRoot);\n\t\t\t}\n\t\t}\n\t\tthis.debugRoot = null;\n\t\tthis.secondaryDebugRoot = null;\n\t}\n\n\tcreateDebugMeshes(renderOrder) {\n\t\tconst sphereGeometry = new THREE.SphereGeometry(1, 32, 32);\n\t\tconst debugMeshRoot = new THREE.Object3D();\n\n\t\tconst createMesh = (color, position) => {\n\t\t\tlet sphereMesh = new THREE.Mesh(sphereGeometry, SceneHelper.buildDebugMaterial(color));\n\t\t\tsphereMesh.renderOrder = renderOrder;\n\t\t\tdebugMeshRoot.add(sphereMesh);\n\t\t\tsphereMesh.position.fromArray(position);\n\t\t};\n\n\t\tcreateMesh(0xff0000, [-50, 0, 0]);\n\t\tcreateMesh(0xff0000, [50, 0, 0]);\n\t\tcreateMesh(0x00ff00, [0, 0, -50]);\n\t\tcreateMesh(0x00ff00, [0, 0, 50]);\n\t\tcreateMesh(0xffaa00, [5, 0, 5]);\n\n\t\treturn debugMeshRoot;\n\t}\n\n\tcreateSecondaryDebugMeshes(renderOrder) {\n\t\tconst boxGeometry = new THREE.BoxGeometry(3, 3, 3);\n\t\tconst debugMeshRoot = new THREE.Object3D();\n\n\t\tlet boxColor = 0xbbbbbb;\n\t\tconst createMesh = (position) => {\n\t\t\tlet boxMesh = new THREE.Mesh(boxGeometry, SceneHelper.buildDebugMaterial(boxColor));\n\t\t\tboxMesh.renderOrder = renderOrder;\n\t\t\tdebugMeshRoot.add(boxMesh);\n\t\t\tboxMesh.position.fromArray(position);\n\t\t};\n\n\t\tlet separation = 10;\n\t\tcreateMesh([-separation, 0, -separation]);\n\t\tcreateMesh([-separation, 0, separation]);\n\t\tcreateMesh([separation, 0, -separation]);\n\t\tcreateMesh([separation, 0, separation]);\n\n\t\treturn debugMeshRoot;\n\t}\n\n\tstatic buildDebugMaterial(color) {\n\t\tconst vertexShaderSource = `\n            #include <common>\n            varying float ndcDepth;\n\n            void main() {\n                gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(position.xyz, 1.0);\n                ndcDepth = gl_Position.z / gl_Position.w;\n                gl_Position.x = gl_Position.x / gl_Position.w;\n                gl_Position.y = gl_Position.y / gl_Position.w;\n                gl_Position.z = 0.0;\n                gl_Position.w = 1.0;\n    \n            }\n        `;\n\n\t\tconst fragmentShaderSource = `\n            #include <common>\n            uniform vec3 color;\n            varying float ndcDepth;\n            void main() {\n                gl_FragDepth = (ndcDepth + 1.0) / 2.0;\n                gl_FragColor = vec4(color.rgb, 0.0);\n            }\n        `;\n\n\t\tconst uniforms = {\n\t\t\tcolor: {\n\t\t\t\ttype: \"v3\",\n\t\t\t\tvalue: new THREE.Color(color),\n\t\t\t},\n\t\t};\n\n\t\tconst material = new THREE.ShaderMaterial({\n\t\t\tuniforms: uniforms,\n\t\t\tvertexShader: vertexShaderSource,\n\t\t\tfragmentShader: fragmentShaderSource,\n\t\t\ttransparent: false,\n\t\t\tdepthTest: true,\n\t\t\tdepthWrite: true,\n\t\t\tside: THREE.FrontSide,\n\t\t});\n\t\tmaterial.extensions.fragDepth = true;\n\n\t\treturn material;\n\t}\n\n\tstatic buildFocusMarkerMaterial(color) {\n\t\tconst vertexShaderSource = `\n            #include <common>\n\n            uniform vec2 viewport;\n            uniform vec3 realFocusPosition;\n\n            varying vec4 ndcPosition;\n            varying vec4 ndcCenter;\n            varying vec4 ndcFocusPosition;\n\n            void main() {\n                float radius = 0.01;\n\n                vec4 viewPosition = modelViewMatrix * vec4(position.xyz, 1.0);\n                vec4 viewCenter = modelViewMatrix * vec4(0.0, 0.0, 0.0, 1.0);\n\n                vec4 viewFocusPosition = modelViewMatrix * vec4(realFocusPosition, 1.0);\n\n                ndcPosition = projectionMatrix * viewPosition;\n                ndcPosition = ndcPosition * vec4(1.0 / ndcPosition.w);\n                ndcCenter = projectionMatrix * viewCenter;\n                ndcCenter = ndcCenter * vec4(1.0 / ndcCenter.w);\n\n                ndcFocusPosition = projectionMatrix * viewFocusPosition;\n                ndcFocusPosition = ndcFocusPosition * vec4(1.0 / ndcFocusPosition.w);\n\n                gl_Position = projectionMatrix * viewPosition;\n\n            }\n        `;\n\n\t\tconst fragmentShaderSource = `\n            #include <common>\n            uniform vec3 color;\n            uniform vec2 viewport;\n            uniform float opacity;\n\n            varying vec4 ndcPosition;\n            varying vec4 ndcCenter;\n            varying vec4 ndcFocusPosition;\n\n            void main() {\n                vec2 screenPosition = vec2(ndcPosition) * viewport;\n                vec2 screenCenter = vec2(ndcCenter) * viewport;\n\n                vec2 screenVec = screenPosition - screenCenter;\n\n                float projectedRadius = length(screenVec);\n\n                float lineWidth = 0.0005 * viewport.y;\n                float aaRange = 0.0025 * viewport.y;\n                float radius = 0.06 * viewport.y;\n                float radDiff = abs(projectedRadius - radius) - lineWidth;\n                float alpha = 1.0 - clamp(radDiff / 5.0, 0.0, 1.0); \n\n                gl_FragColor = vec4(color.rgb, alpha * opacity);\n            }\n        `;\n\n\t\tconst uniforms = {\n\t\t\tcolor: {\n\t\t\t\ttype: \"v3\",\n\t\t\t\tvalue: new THREE.Color(color),\n\t\t\t},\n\t\t\trealFocusPosition: {\n\t\t\t\ttype: \"v3\",\n\t\t\t\tvalue: new THREE.Vector3(),\n\t\t\t},\n\t\t\tviewport: {\n\t\t\t\ttype: \"v2\",\n\t\t\t\tvalue: new THREE.Vector2(),\n\t\t\t},\n\t\t\topacity: {\n\t\t\t\tvalue: 0.0,\n\t\t\t},\n\t\t};\n\n\t\tconst material = new THREE.ShaderMaterial({\n\t\t\tuniforms: uniforms,\n\t\t\tvertexShader: vertexShaderSource,\n\t\t\tfragmentShader: fragmentShaderSource,\n\t\t\ttransparent: true,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\tside: THREE.FrontSide,\n\t\t});\n\n\t\treturn material;\n\t}\n\n\tdispose() {\n\t\tthis.destroyMeshCursor();\n\t\tthis.destroyFocusMarker();\n\t\tthis.destroyDebugMeshes();\n\t\tthis.destroyControlPlane();\n\t\tthis.destroyRenderTargetCopyObjects();\n\t\tthis.destroySplatRendertarget();\n\t}\n}\n","import * as THREE from \"three\";\n\nconst VectorRight = new THREE.Vector3(1, 0, 0);\nconst VectorUp = new THREE.Vector3(0, 1, 0);\nconst VectorBackward = new THREE.Vector3(0, 0, 1);\n\nexport class Ray {\n\tconstructor(origin = new THREE.Vector3(), direction = new THREE.Vector3()) {\n\t\tthis.origin = new THREE.Vector3();\n\t\tthis.direction = new THREE.Vector3();\n\t\tthis.setParameters(origin, direction);\n\t}\n\n\tsetParameters(origin, direction) {\n\t\tthis.origin.copy(origin);\n\t\tthis.direction.copy(direction).normalize();\n\t}\n\n\tboxContainsPoint(box, point, epsilon) {\n\t\treturn point.x < box.min.x - epsilon ||\n\t\t\tpoint.x > box.max.x + epsilon ||\n\t\t\tpoint.y < box.min.y - epsilon ||\n\t\t\tpoint.y > box.max.y + epsilon ||\n\t\t\tpoint.z < box.min.z - epsilon ||\n\t\t\tpoint.z > box.max.z + epsilon ?\n\t\t\tfalse :\n\t\t\ttrue;\n\t}\n\n\tintersectBox = (function() {\n\t\tconst planeIntersectionPoint = new THREE.Vector3();\n\t\tconst planeIntersectionPointArray = [];\n\t\tconst originArray = [];\n\t\tconst directionArray = [];\n\n\t\treturn function(box, outHit) {\n\t\t\toriginArray[0] = this.origin.x;\n\t\t\toriginArray[1] = this.origin.y;\n\t\t\toriginArray[2] = this.origin.z;\n\t\t\tdirectionArray[0] = this.direction.x;\n\t\t\tdirectionArray[1] = this.direction.y;\n\t\t\tdirectionArray[2] = this.direction.z;\n\n\t\t\tif (this.boxContainsPoint(box, this.origin, 0.0001)) {\n\t\t\t\tif (outHit) {\n\t\t\t\t\toutHit.origin.copy(this.origin);\n\t\t\t\t\toutHit.normal.set(0, 0, 0);\n\t\t\t\t\toutHit.distance = -1;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tfor (let i = 0; i < 3; i++) {\n\t\t\t\tif (directionArray[i] == 0.0) continue;\n\n\t\t\t\tconst hitNormal = i == 0 ? VectorRight : i == 1 ? VectorUp : VectorBackward;\n\t\t\t\tconst extremeVec = directionArray[i] < 0 ? box.max : box.min;\n\t\t\t\tlet multiplier = -Math.sign(directionArray[i]);\n\t\t\t\tplaneIntersectionPointArray[0] = i == 0 ? extremeVec.x : i == 1 ? extremeVec.y : extremeVec.z;\n\t\t\t\tlet toSide = planeIntersectionPointArray[0] - originArray[i];\n\n\t\t\t\tif (toSide * multiplier < 0) {\n\t\t\t\t\tconst idx1 = (i + 1) % 3;\n\t\t\t\t\tconst idx2 = (i + 2) % 3;\n\t\t\t\t\tplaneIntersectionPointArray[2] =\n\t\t\t\t\t\t(directionArray[idx1] / directionArray[i]) * toSide + originArray[idx1];\n\t\t\t\t\tplaneIntersectionPointArray[1] =\n\t\t\t\t\t\t(directionArray[idx2] / directionArray[i]) * toSide + originArray[idx2];\n\t\t\t\t\tplaneIntersectionPoint.set(\n\t\t\t\t\t\tplaneIntersectionPointArray[i],\n\t\t\t\t\t\tplaneIntersectionPointArray[idx2],\n\t\t\t\t\t\tplaneIntersectionPointArray[idx1],\n\t\t\t\t\t);\n\t\t\t\t\tif (this.boxContainsPoint(box, planeIntersectionPoint, 0.0001)) {\n\t\t\t\t\t\tif (outHit) {\n\t\t\t\t\t\t\toutHit.origin.copy(planeIntersectionPoint);\n\t\t\t\t\t\t\toutHit.normal.copy(hitNormal).multiplyScalar(multiplier);\n\t\t\t\t\t\t\toutHit.distance = planeIntersectionPoint.sub(this.origin).length();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t};\n\t})();\n\n\tintersectSphere = (function() {\n\t\tconst toSphereCenterVec = new THREE.Vector3();\n\n\t\treturn function(center, radius, outHit) {\n\t\t\ttoSphereCenterVec.copy(center).sub(this.origin);\n\t\t\tconst toClosestApproach = toSphereCenterVec.dot(this.direction);\n\t\t\tconst toClosestApproachSq = toClosestApproach * toClosestApproach;\n\t\t\tconst toSphereCenterSq = toSphereCenterVec.dot(toSphereCenterVec);\n\t\t\tconst diffSq = toSphereCenterSq - toClosestApproachSq;\n\t\t\tconst radiusSq = radius * radius;\n\n\t\t\tif (diffSq > radiusSq) return false;\n\n\t\t\tconst thc = Math.sqrt(radiusSq - diffSq);\n\t\t\tconst t0 = toClosestApproach - thc;\n\t\t\tconst t1 = toClosestApproach + thc;\n\n\t\t\tif (t1 < 0) return false;\n\t\t\tlet t = t0 < 0 ? t1 : t0;\n\n\t\t\tif (outHit) {\n\t\t\t\toutHit.origin.copy(this.origin).addScaledVector(this.direction, t);\n\t\t\t\toutHit.normal.copy(outHit.origin).sub(center).normalize();\n\t\t\t\toutHit.distance = t;\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\t})();\n}\n","import * as THREE from \"three\";\n\nexport class Hit {\n\tconstructor() {\n\t\tthis.origin = new THREE.Vector3();\n\t\tthis.normal = new THREE.Vector3();\n\t\tthis.distance = 0;\n\t\tthis.splatIndex = 0;\n\t}\n\n\tset(origin, normal, distance, splatIndex) {\n\t\tthis.origin.copy(origin);\n\t\tthis.normal.copy(normal);\n\t\tthis.distance = distance;\n\t\tthis.splatIndex = splatIndex;\n\t}\n\n\tclone() {\n\t\tconst hitClone = new Hit();\n\t\thitClone.origin.copy(this.origin);\n\t\thitClone.normal.copy(this.normal);\n\t\thitClone.distance = this.distance;\n\t\thitClone.splatIndex = this.splatIndex;\n\t\treturn hitClone;\n\t}\n}\n","export const SplatRenderMode = {\n\tThreeD: 0,\n\tTwoD: 1,\n};\n","import * as THREE from \"three\";\nimport { Ray } from \"./Ray.js\";\nimport { Hit } from \"./Hit.js\";\nimport { SplatRenderMode } from \"../SplatRenderMode.js\";\n\nexport class Raycaster {\n\tconstructor(origin, direction, raycastAgainstTrueSplatEllipsoid = false) {\n\t\tthis.ray = new Ray(origin, direction);\n\t\tthis.raycastAgainstTrueSplatEllipsoid = raycastAgainstTrueSplatEllipsoid;\n\t}\n\n\tsetFromCameraAndScreenPosition = (function() {\n\t\tconst ndcCoords = new THREE.Vector2();\n\n\t\treturn function(camera, screenPosition, screenDimensions) {\n\t\t\tndcCoords.x = (screenPosition.x / screenDimensions.x) * 2.0 - 1.0;\n\t\t\tndcCoords.y = ((screenDimensions.y - screenPosition.y) / screenDimensions.y) * 2.0 - 1.0;\n\t\t\tif (camera.isPerspectiveCamera) {\n\t\t\t\tthis.ray.origin.setFromMatrixPosition(camera.matrixWorld);\n\t\t\t\tthis.ray.direction\n\t\t\t\t\t.set(ndcCoords.x, ndcCoords.y, 0.5)\n\t\t\t\t\t.unproject(camera)\n\t\t\t\t\t.sub(this.ray.origin)\n\t\t\t\t\t.normalize();\n\t\t\t\tthis.camera = camera;\n\t\t\t} else if (camera.isOrthographicCamera) {\n\t\t\t\tthis.ray.origin\n\t\t\t\t\t.set(ndcCoords.x, ndcCoords.y, (camera.near + camera.far) / (camera.near - camera.far))\n\t\t\t\t\t.unproject(camera);\n\t\t\t\tthis.ray.direction.set(0, 0, -1).transformDirection(camera.matrixWorld);\n\t\t\t\tthis.camera = camera;\n\t\t\t} else {\n\t\t\t\tthrow new Error(\"Raycaster::setFromCameraAndScreenPosition() -> Unsupported camera type\");\n\t\t\t}\n\t\t};\n\t})();\n\n\tintersectSplatMesh = (function() {\n\t\tconst toLocal = new THREE.Matrix4();\n\t\tconst fromLocal = new THREE.Matrix4();\n\t\tconst sceneTransform = new THREE.Matrix4();\n\t\tconst localRay = new Ray();\n\t\tconst tempPoint = new THREE.Vector3();\n\n\t\treturn function(splatMesh, outHits = []) {\n\t\t\tconst splatTree = splatMesh.getSplatTree();\n\n\t\t\tif (!splatTree) return;\n\n\t\t\tfor (let s = 0; s < splatTree.subTrees.length; s++) {\n\t\t\t\tconst subTree = splatTree.subTrees[s];\n\n\t\t\t\tfromLocal.copy(splatMesh.matrixWorld);\n\t\t\t\tif (splatMesh.dynamicMode) {\n\t\t\t\t\tsplatMesh.getSceneTransform(s, sceneTransform);\n\t\t\t\t\tfromLocal.multiply(sceneTransform);\n\t\t\t\t}\n\t\t\t\ttoLocal.copy(fromLocal).invert();\n\n\t\t\t\tlocalRay.origin.copy(this.ray.origin).applyMatrix4(toLocal);\n\t\t\t\tlocalRay.direction.copy(this.ray.origin).add(this.ray.direction);\n\t\t\t\tlocalRay.direction.applyMatrix4(toLocal).sub(localRay.origin).normalize();\n\n\t\t\t\tconst outHitsForSubTree = [];\n\t\t\t\tif (subTree.rootNode) {\n\t\t\t\t\tthis.castRayAtSplatTreeNode(localRay, splatTree, subTree.rootNode, outHitsForSubTree);\n\t\t\t\t}\n\n\t\t\t\toutHitsForSubTree.forEach((hit) => {\n\t\t\t\t\thit.origin.applyMatrix4(fromLocal);\n\t\t\t\t\thit.normal.applyMatrix4(fromLocal).normalize();\n\t\t\t\t\thit.distance = tempPoint.copy(hit.origin).sub(this.ray.origin).length();\n\t\t\t\t});\n\n\t\t\t\toutHits.push(...outHitsForSubTree);\n\t\t\t}\n\n\t\t\toutHits.sort((a, b) => {\n\t\t\t\tif (a.distance > b.distance) return 1;\n\t\t\t\telse return -1;\n\t\t\t});\n\n\t\t\treturn outHits;\n\t\t};\n\t})();\n\n\tcastRayAtSplatTreeNode = (function() {\n\t\tconst tempColor = new THREE.Vector4();\n\t\tconst tempCenter = new THREE.Vector3();\n\t\tconst tempScale = new THREE.Vector3();\n\t\tconst tempRotation = new THREE.Quaternion();\n\t\tconst tempHit = new Hit();\n\t\tconst scaleEpsilon = 0.0000001;\n\n\t\tconst origin = new THREE.Vector3(0, 0, 0);\n\t\tconst uniformScaleMatrix = new THREE.Matrix4();\n\t\tconst scaleMatrix = new THREE.Matrix4();\n\t\tconst rotationMatrix = new THREE.Matrix4();\n\t\tconst toSphereSpace = new THREE.Matrix4();\n\t\tconst fromSphereSpace = new THREE.Matrix4();\n\t\tconst tempRay = new Ray();\n\n\t\treturn function(ray, splatTree, node, outHits = []) {\n\t\t\tif (!ray.intersectBox(node.boundingBox)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (node.data && node.data.indexes && node.data.indexes.length > 0) {\n\t\t\t\tfor (let i = 0; i < node.data.indexes.length; i++) {\n\t\t\t\t\tconst splatGlobalIndex = node.data.indexes[i];\n\t\t\t\t\tconst splatSceneIndex = splatTree.splatMesh.getSceneIndexForSplat(splatGlobalIndex);\n\t\t\t\t\tconst splatScene = splatTree.splatMesh.getScene(splatSceneIndex);\n\t\t\t\t\tif (!splatScene.visible) continue;\n\n\t\t\t\t\tsplatTree.splatMesh.getSplatColor(splatGlobalIndex, tempColor);\n\t\t\t\t\tsplatTree.splatMesh.getSplatCenter(splatGlobalIndex, tempCenter);\n\t\t\t\t\tsplatTree.splatMesh.getSplatScaleAndRotation(splatGlobalIndex, tempScale, tempRotation);\n\n\t\t\t\t\tif (\n\t\t\t\t\t\ttempScale.x <= scaleEpsilon ||\n\t\t\t\t\t\ttempScale.y <= scaleEpsilon ||\n\t\t\t\t\t\t(splatTree.splatMesh.splatRenderMode === SplatRenderMode.ThreeD && tempScale.z <= scaleEpsilon)\n\t\t\t\t\t) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!this.raycastAgainstTrueSplatEllipsoid) {\n\t\t\t\t\t\tlet radius = tempScale.x + tempScale.y;\n\t\t\t\t\t\tlet componentCount = 2;\n\t\t\t\t\t\tif (splatTree.splatMesh.splatRenderMode === SplatRenderMode.ThreeD) {\n\t\t\t\t\t\t\tradius += tempScale.z;\n\t\t\t\t\t\t\tcomponentCount = 3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tradius = radius / componentCount;\n\t\t\t\t\t\tif (ray.intersectSphere(tempCenter, radius, tempHit)) {\n\t\t\t\t\t\t\tconst hitClone = tempHit.clone();\n\t\t\t\t\t\t\thitClone.splatIndex = splatGlobalIndex;\n\t\t\t\t\t\t\toutHits.push(hitClone);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tscaleMatrix.makeScale(tempScale.x, tempScale.y, tempScale.z);\n\t\t\t\t\t\trotationMatrix.makeRotationFromQuaternion(tempRotation);\n\t\t\t\t\t\tconst uniformScale = Math.log10(tempColor.w) * 2.0;\n\t\t\t\t\t\tuniformScaleMatrix.makeScale(uniformScale, uniformScale, uniformScale);\n\t\t\t\t\t\tfromSphereSpace.copy(uniformScaleMatrix).multiply(rotationMatrix).multiply(scaleMatrix);\n\t\t\t\t\t\ttoSphereSpace.copy(fromSphereSpace).invert();\n\t\t\t\t\t\ttempRay.origin.copy(ray.origin).sub(tempCenter).applyMatrix4(toSphereSpace);\n\t\t\t\t\t\ttempRay.direction.copy(ray.origin).add(ray.direction).sub(tempCenter);\n\t\t\t\t\t\ttempRay.direction.applyMatrix4(toSphereSpace).sub(tempRay.origin).normalize();\n\t\t\t\t\t\tif (tempRay.intersectSphere(origin, 1.0, tempHit)) {\n\t\t\t\t\t\t\tconst hitClone = tempHit.clone();\n\t\t\t\t\t\t\thitClone.splatIndex = splatGlobalIndex;\n\t\t\t\t\t\t\thitClone.origin.applyMatrix4(fromSphereSpace).add(tempCenter);\n\t\t\t\t\t\t\toutHits.push(hitClone);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (node.children && node.children.length > 0) {\n\t\t\t\tfor (let child of node.children) {\n\t\t\t\t\tthis.castRayAtSplatTreeNode(ray, splatTree, child, outHits);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn outHits;\n\t\t};\n\t})();\n}\n","import * as THREE from \"three\";\nimport { Constants } from \"../Constants.js\";\n\nexport class SplatMaterial {\n\tstatic buildVertexShaderBase(\n\t\tdynamicMode = false,\n\t\tenableOptionalEffects = false,\n\t\tmaxSphericalHarmonicsDegree = 0,\n\t\tcustomVars = \"\",\n\t) {\n\t\tlet vertexShaderSource = `\n        precision highp float;\n        #include <common>\n\n        attribute uint splatIndex;\n        uniform highp usampler2D centersColorsTexture;\n        uniform highp sampler2D sphericalHarmonicsTexture;\n        uniform highp sampler2D sphericalHarmonicsTextureR;\n        uniform highp sampler2D sphericalHarmonicsTextureG;\n        uniform highp sampler2D sphericalHarmonicsTextureB;\n\n        uniform highp usampler2D sceneIndexesTexture;\n        uniform vec2 sceneIndexesTextureSize;\n        uniform int sceneCount;\n    `;\n\n\t\tif (enableOptionalEffects) {\n\t\t\tvertexShaderSource += `\n            uniform float sceneOpacity[${Constants.MaxScenes}];\n            uniform int sceneVisibility[${Constants.MaxScenes}];\n        `;\n\t\t}\n\n\t\tif (dynamicMode) {\n\t\t\tvertexShaderSource += `\n            uniform highp mat4 transforms[${Constants.MaxScenes}];\n        `;\n\t\t}\n\n\t\tvertexShaderSource += `\n        ${customVars}\n        uniform vec2 focal;\n        uniform float orthoZoom;\n        uniform int orthographicMode;\n        uniform int pointCloudModeEnabled;\n        uniform float inverseFocalAdjustment;\n        uniform vec2 viewport;\n        uniform vec2 basisViewport;\n        uniform vec2 centersColorsTextureSize;\n        uniform int sphericalHarmonicsDegree;\n        uniform vec2 sphericalHarmonicsTextureSize;\n        uniform int sphericalHarmonics8BitMode;\n        uniform int sphericalHarmonicsMultiTextureMode;\n        uniform float visibleRegionRadius;\n        uniform float visibleRegionFadeStartRadius;\n        uniform float firstRenderTime;\n        uniform float currentTime;\n        uniform int fadeInComplete;\n        uniform vec3 sceneCenter;\n        uniform float splatScale;\n        uniform float sphericalHarmonics8BitCompressionRangeMin[${Constants.MaxScenes}];\n        uniform float sphericalHarmonics8BitCompressionRangeMax[${Constants.MaxScenes}];\n\n        varying vec4 vColor;\n        varying vec2 vUv;\n        varying vec2 vPosition;\n\n        mat3 quaternionToRotationMatrix(float x, float y, float z, float w) {\n            float s = 1.0 / sqrt(w * w + x * x + y * y + z * z);\n        \n            return mat3(\n                1. - 2. * (y * y + z * z),\n                2. * (x * y + w * z),\n                2. * (x * z - w * y),\n                2. * (x * y - w * z),\n                1. - 2. * (x * x + z * z),\n                2. * (y * z + w * x),\n                2. * (x * z + w * y),\n                2. * (y * z - w * x),\n                1. - 2. * (x * x + y * y)\n            );\n        }\n\n        const float sqrt8 = sqrt(8.0);\n        const float minAlpha = 1.0 / 255.0;\n\n        const vec4 encodeNorm4 = vec4(1.0 / 255.0, 1.0 / 255.0, 1.0 / 255.0, 1.0 / 255.0);\n        const uvec4 mask4 = uvec4(uint(0x000000FF), uint(0x0000FF00), uint(0x00FF0000), uint(0xFF000000));\n        const uvec4 shift4 = uvec4(0, 8, 16, 24);\n        vec4 uintToRGBAVec (uint u) {\n           uvec4 urgba = mask4 & u;\n           urgba = urgba >> shift4;\n           vec4 rgba = vec4(urgba) * encodeNorm4;\n           return rgba;\n        }\n\n        vec2 getDataUV(in int stride, in int offset, in vec2 dimensions) {\n            vec2 samplerUV = vec2(0.0, 0.0);\n            float d = float(splatIndex * uint(stride) + uint(offset)) / dimensions.x;\n            samplerUV.y = float(floor(d)) / dimensions.y;\n            samplerUV.x = fract(d);\n            return samplerUV;\n        }\n\n        vec2 getDataUVF(in uint sIndex, in float stride, in uint offset, in vec2 dimensions) {\n            vec2 samplerUV = vec2(0.0, 0.0);\n            float d = float(uint(float(sIndex) * stride) + offset) / dimensions.x;\n            samplerUV.y = float(floor(d)) / dimensions.y;\n            samplerUV.x = fract(d);\n            return samplerUV;\n        }\n\n        const float SH_C1 = 0.4886025119029199f;\n        const float[5] SH_C2 = float[](1.0925484, -1.0925484, 0.3153916, -1.0925484, 0.5462742);\n\n        void main () {\n\n            uint oddOffset = splatIndex & uint(0x00000001);\n            uint doubleOddOffset = oddOffset * uint(2);\n            bool isEven = oddOffset == uint(0);\n            uint nearestEvenIndex = splatIndex - oddOffset;\n            float fOddOffset = float(oddOffset);\n\n            uvec4 sampledCenterColor = texture(centersColorsTexture, getDataUV(1, 0, centersColorsTextureSize));\n            vec3 splatCenter = uintBitsToFloat(uvec3(sampledCenterColor.gba));\n\n            uint sceneIndex = uint(0);\n            if (sceneCount > 1) {\n                sceneIndex = texture(sceneIndexesTexture, getDataUV(1, 0, sceneIndexesTextureSize)).r;\n            }\n            `;\n\n\t\tif (enableOptionalEffects) {\n\t\t\tvertexShaderSource += `\n                float splatOpacityFromScene = sceneOpacity[sceneIndex];\n                int sceneVisible = sceneVisibility[sceneIndex];\n                if (splatOpacityFromScene <= 0.01 || sceneVisible == 0) {\n                    gl_Position = vec4(0.0, 0.0, 2.0, 1.0);\n                    return;\n                }\n            `;\n\t\t}\n\n\t\tif (dynamicMode) {\n\t\t\tvertexShaderSource += `\n                mat4 transform = transforms[sceneIndex];\n                mat4 transformModelViewMatrix = viewMatrix * transform;\n            `;\n\t\t} else {\n\t\t\tvertexShaderSource += \"mat4 transformModelViewMatrix = modelViewMatrix;\";\n\t\t}\n\n\t\tvertexShaderSource += `\n            float sh8BitCompressionRangeMinForScene = sphericalHarmonics8BitCompressionRangeMin[sceneIndex];\n            float sh8BitCompressionRangeMaxForScene = sphericalHarmonics8BitCompressionRangeMax[sceneIndex];\n            float sh8BitCompressionRangeForScene = sh8BitCompressionRangeMaxForScene - sh8BitCompressionRangeMinForScene;\n            float sh8BitCompressionHalfRangeForScene = sh8BitCompressionRangeForScene / 2.0;\n            vec3 vec8BitSHShift = vec3(sh8BitCompressionRangeMinForScene);\n\n            vec4 viewCenter = transformModelViewMatrix * vec4(splatCenter, 1.0);\n\n            vec4 clipCenter = projectionMatrix * viewCenter;\n\n            float clip = 1.2 * clipCenter.w;\n            if (clipCenter.z < -clip || clipCenter.x < -clip || clipCenter.x > clip || clipCenter.y < -clip || clipCenter.y > clip) {\n                gl_Position = vec4(0.0, 0.0, 2.0, 1.0);\n                return;\n            }\n\n            vec3 ndcCenter = clipCenter.xyz / clipCenter.w;\n\n            vPosition = position.xy;\n            vColor = uintToRGBAVec(sampledCenterColor.r);\n        `;\n\n\t\t// Proceed to sampling and rendering 1st degree spherical harmonics\n\t\tif (maxSphericalHarmonicsDegree >= 1) {\n\t\t\tvertexShaderSource += `   \n            if (sphericalHarmonicsDegree >= 1) {\n            `;\n\n\t\t\tif (dynamicMode) {\n\t\t\t\tvertexShaderSource += `\n                    vec3 worldViewDir = normalize(splatCenter - vec3(inverse(transform) * vec4(cameraPosition, 1.0)));\n                `;\n\t\t\t} else {\n\t\t\t\tvertexShaderSource += `\n                    vec3 worldViewDir = normalize(splatCenter - cameraPosition);\n                `;\n\t\t\t}\n\n\t\t\tvertexShaderSource += `\n                vec3 sh1;\n                vec3 sh2;\n                vec3 sh3;\n            `;\n\n\t\t\tif (maxSphericalHarmonicsDegree >= 2) {\n\t\t\t\tvertexShaderSource += `\n                    vec3 sh4;\n                    vec3 sh5;\n                    vec3 sh6;\n                    vec3 sh7;\n                    vec3 sh8;\n                `;\n\t\t\t}\n\n\t\t\t// Determining how to sample spherical harmonics textures to get the coefficients for calculations for a given degree\n\t\t\t// depends on how many total degrees (maxSphericalHarmonicsDegree) are present in the textures. This is because that\n\t\t\t// number affects how they are packed in the textures, and therefore the offset & stride required to access them.\n\n\t\t\t// Sample spherical harmonics textures with 1 degree worth of data for 1st degree calculations, and store in sh1, sh2, and sh3\n\t\t\tif (maxSphericalHarmonicsDegree === 1) {\n\t\t\t\tvertexShaderSource += `\n                    if (sphericalHarmonicsMultiTextureMode == 0) {\n                        vec2 shUV = getDataUVF(nearestEvenIndex, 2.5, doubleOddOffset, sphericalHarmonicsTextureSize);\n                        vec4 sampledSH0123 = texture(sphericalHarmonicsTexture, shUV);\n                        shUV = getDataUVF(nearestEvenIndex, 2.5, doubleOddOffset + uint(1), sphericalHarmonicsTextureSize);\n                        vec4 sampledSH4567 = texture(sphericalHarmonicsTexture, shUV);\n                        shUV = getDataUVF(nearestEvenIndex, 2.5, doubleOddOffset + uint(2), sphericalHarmonicsTextureSize);\n                        vec4 sampledSH891011 = texture(sphericalHarmonicsTexture, shUV);\n                        sh1 = vec3(sampledSH0123.rgb) * (1.0 - fOddOffset) + vec3(sampledSH0123.ba, sampledSH4567.r) * fOddOffset;\n                        sh2 = vec3(sampledSH0123.a, sampledSH4567.rg) * (1.0 - fOddOffset) + vec3(sampledSH4567.gba) * fOddOffset;\n                        sh3 = vec3(sampledSH4567.ba, sampledSH891011.r) * (1.0 - fOddOffset) + vec3(sampledSH891011.rgb) * fOddOffset;\n                    } else {\n                        vec2 sampledSH01R = texture(sphericalHarmonicsTextureR, getDataUV(2, 0, sphericalHarmonicsTextureSize)).rg;\n                        vec2 sampledSH23R = texture(sphericalHarmonicsTextureR, getDataUV(2, 1, sphericalHarmonicsTextureSize)).rg;\n                        vec2 sampledSH01G = texture(sphericalHarmonicsTextureG, getDataUV(2, 0, sphericalHarmonicsTextureSize)).rg;\n                        vec2 sampledSH23G = texture(sphericalHarmonicsTextureG, getDataUV(2, 1, sphericalHarmonicsTextureSize)).rg;\n                        vec2 sampledSH01B = texture(sphericalHarmonicsTextureB, getDataUV(2, 0, sphericalHarmonicsTextureSize)).rg;\n                        vec2 sampledSH23B = texture(sphericalHarmonicsTextureB, getDataUV(2, 1, sphericalHarmonicsTextureSize)).rg;\n                        sh1 = vec3(sampledSH01R.rg, sampledSH23R.r);\n                        sh2 = vec3(sampledSH01G.rg, sampledSH23G.r);\n                        sh3 = vec3(sampledSH01B.rg, sampledSH23B.r);\n                    }\n                `;\n\t\t\t\t// Sample spherical harmonics textures with 2 degrees worth of data for 1st degree calculations, and store in sh1, sh2, and sh3\n\t\t\t} else if (maxSphericalHarmonicsDegree === 2) {\n\t\t\t\tvertexShaderSource += `\n                    vec4 sampledSH0123;\n                    vec4 sampledSH4567;\n                    vec4 sampledSH891011;\n\n                    vec4 sampledSH0123R;\n                    vec4 sampledSH0123G;\n                    vec4 sampledSH0123B;\n\n                    if (sphericalHarmonicsMultiTextureMode == 0) {\n                        sampledSH0123 = texture(sphericalHarmonicsTexture, getDataUV(6, 0, sphericalHarmonicsTextureSize));\n                        sampledSH4567 = texture(sphericalHarmonicsTexture, getDataUV(6, 1, sphericalHarmonicsTextureSize));\n                        sampledSH891011 = texture(sphericalHarmonicsTexture, getDataUV(6, 2, sphericalHarmonicsTextureSize));\n                        sh1 = sampledSH0123.rgb;\n                        sh2 = vec3(sampledSH0123.a, sampledSH4567.rg);\n                        sh3 = vec3(sampledSH4567.ba, sampledSH891011.r);\n                    } else {\n                        sampledSH0123R = texture(sphericalHarmonicsTextureR, getDataUV(2, 0, sphericalHarmonicsTextureSize));\n                        sampledSH0123G = texture(sphericalHarmonicsTextureG, getDataUV(2, 0, sphericalHarmonicsTextureSize));\n                        sampledSH0123B = texture(sphericalHarmonicsTextureB, getDataUV(2, 0, sphericalHarmonicsTextureSize));\n                        sh1 = vec3(sampledSH0123R.rgb);\n                        sh2 = vec3(sampledSH0123G.rgb);\n                        sh3 = vec3(sampledSH0123B.rgb);\n                    }\n                `;\n\t\t\t}\n\n\t\t\t// Perform 1st degree spherical harmonics calculations\n\t\t\tvertexShaderSource += `\n                    if (sphericalHarmonics8BitMode == 1) {\n                        sh1 = sh1 * sh8BitCompressionRangeForScene + vec8BitSHShift;\n                        sh2 = sh2 * sh8BitCompressionRangeForScene + vec8BitSHShift;\n                        sh3 = sh3 * sh8BitCompressionRangeForScene + vec8BitSHShift;\n                    }\n                    float x = worldViewDir.x;\n                    float y = worldViewDir.y;\n                    float z = worldViewDir.z;\n                    vColor.rgb += SH_C1 * (-sh1 * y + sh2 * z - sh3 * x);\n            `;\n\n\t\t\t// Proceed to sampling and rendering 2nd degree spherical harmonics\n\t\t\tif (maxSphericalHarmonicsDegree >= 2) {\n\t\t\t\tvertexShaderSource += `\n                    if (sphericalHarmonicsDegree >= 2) {\n                        float xx = x * x;\n                        float yy = y * y;\n                        float zz = z * z;\n                        float xy = x * y;\n                        float yz = y * z;\n                        float xz = x * z;\n                `;\n\n\t\t\t\t// Sample spherical harmonics textures with 2 degrees worth of data for 2nd degree calculations,\n\t\t\t\t// and store in sh4, sh5, sh6, sh7, and sh8\n\t\t\t\tif (maxSphericalHarmonicsDegree === 2) {\n\t\t\t\t\tvertexShaderSource += `\n                        if (sphericalHarmonicsMultiTextureMode == 0) {\n                            vec4 sampledSH12131415 = texture(sphericalHarmonicsTexture, getDataUV(6, 3, sphericalHarmonicsTextureSize));\n                            vec4 sampledSH16171819 = texture(sphericalHarmonicsTexture, getDataUV(6, 4, sphericalHarmonicsTextureSize));\n                            vec4 sampledSH20212223 = texture(sphericalHarmonicsTexture, getDataUV(6, 5, sphericalHarmonicsTextureSize));\n                            sh4 = sampledSH891011.gba;\n                            sh5 = sampledSH12131415.rgb;\n                            sh6 = vec3(sampledSH12131415.a, sampledSH16171819.rg);\n                            sh7 = vec3(sampledSH16171819.ba, sampledSH20212223.r);\n                            sh8 = sampledSH20212223.gba;\n                        } else {\n                            vec4 sampledSH4567R = texture(sphericalHarmonicsTextureR, getDataUV(2, 1, sphericalHarmonicsTextureSize));\n                            vec4 sampledSH4567G = texture(sphericalHarmonicsTextureG, getDataUV(2, 1, sphericalHarmonicsTextureSize));\n                            vec4 sampledSH4567B = texture(sphericalHarmonicsTextureB, getDataUV(2, 1, sphericalHarmonicsTextureSize));\n                            sh4 = vec3(sampledSH0123R.a, sampledSH4567R.rg);\n                            sh5 = vec3(sampledSH4567R.ba, sampledSH0123G.a);\n                            sh6 = vec3(sampledSH4567G.rgb);\n                            sh7 = vec3(sampledSH4567G.a, sampledSH0123B.a, sampledSH4567B.r);\n                            sh8 = vec3(sampledSH4567B.gba);\n                        }\n                    `;\n\t\t\t\t}\n\n\t\t\t\t// Perform 2nd degree spherical harmonics calculations\n\t\t\t\tvertexShaderSource += `\n                        if (sphericalHarmonics8BitMode == 1) {\n                            sh4 = sh4 * sh8BitCompressionRangeForScene + vec8BitSHShift;\n                            sh5 = sh5 * sh8BitCompressionRangeForScene + vec8BitSHShift;\n                            sh6 = sh6 * sh8BitCompressionRangeForScene + vec8BitSHShift;\n                            sh7 = sh7 * sh8BitCompressionRangeForScene + vec8BitSHShift;\n                            sh8 = sh8 * sh8BitCompressionRangeForScene + vec8BitSHShift;\n                        }\n\n                        vColor.rgb +=\n                            (SH_C2[0] * xy) * sh4 +\n                            (SH_C2[1] * yz) * sh5 +\n                            (SH_C2[2] * (2.0 * zz - xx - yy)) * sh6 +\n                            (SH_C2[3] * xz) * sh7 +\n                            (SH_C2[4] * (xx - yy)) * sh8;\n                    }\n                `;\n\t\t\t}\n\n\t\t\tvertexShaderSource += `\n\n                vColor.rgb = clamp(vColor.rgb, vec3(0.), vec3(1.));\n\n            }\n\n            `;\n\t\t}\n\n\t\treturn vertexShaderSource;\n\t}\n\n\tstatic getVertexShaderFadeIn() {\n\t\treturn `\n            if (fadeInComplete == 0) {\n                float opacityAdjust = 1.0;\n                float centerDist = length(splatCenter - sceneCenter);\n                float renderTime = max(currentTime - firstRenderTime, 0.0);\n\n                float fadeDistance = 0.75;\n                float distanceLoadFadeInFactor = step(visibleRegionFadeStartRadius, centerDist);\n                distanceLoadFadeInFactor = (1.0 - distanceLoadFadeInFactor) +\n                                        (1.0 - clamp((centerDist - visibleRegionFadeStartRadius) / fadeDistance, 0.0, 1.0)) *\n                                        distanceLoadFadeInFactor;\n                opacityAdjust *= distanceLoadFadeInFactor;\n                vColor.a *= opacityAdjust;\n            }\n        `;\n\t}\n\n\tstatic getUniforms(\n\t\tdynamicMode = false,\n\t\tenableOptionalEffects = false,\n\t\tmaxSphericalHarmonicsDegree = 0,\n\t\tsplatScale = 1.0,\n\t\tpointCloudModeEnabled = false,\n\t) {\n\t\tconst uniforms = {\n\t\t\tsceneCenter: {\n\t\t\t\ttype: \"v3\",\n\t\t\t\tvalue: new THREE.Vector3(),\n\t\t\t},\n\t\t\tfadeInComplete: {\n\t\t\t\ttype: \"i\",\n\t\t\t\tvalue: 0,\n\t\t\t},\n\t\t\torthographicMode: {\n\t\t\t\ttype: \"i\",\n\t\t\t\tvalue: 0,\n\t\t\t},\n\t\t\tvisibleRegionFadeStartRadius: {\n\t\t\t\ttype: \"f\",\n\t\t\t\tvalue: 0.0,\n\t\t\t},\n\t\t\tvisibleRegionRadius: {\n\t\t\t\ttype: \"f\",\n\t\t\t\tvalue: 0.0,\n\t\t\t},\n\t\t\tcurrentTime: {\n\t\t\t\ttype: \"f\",\n\t\t\t\tvalue: 0.0,\n\t\t\t},\n\t\t\tfirstRenderTime: {\n\t\t\t\ttype: \"f\",\n\t\t\t\tvalue: 0.0,\n\t\t\t},\n\t\t\tcentersColorsTexture: {\n\t\t\t\ttype: \"t\",\n\t\t\t\tvalue: null,\n\t\t\t},\n\t\t\tsphericalHarmonicsTexture: {\n\t\t\t\ttype: \"t\",\n\t\t\t\tvalue: null,\n\t\t\t},\n\t\t\tsphericalHarmonicsTextureR: {\n\t\t\t\ttype: \"t\",\n\t\t\t\tvalue: null,\n\t\t\t},\n\t\t\tsphericalHarmonicsTextureG: {\n\t\t\t\ttype: \"t\",\n\t\t\t\tvalue: null,\n\t\t\t},\n\t\t\tsphericalHarmonicsTextureB: {\n\t\t\t\ttype: \"t\",\n\t\t\t\tvalue: null,\n\t\t\t},\n\t\t\tsphericalHarmonics8BitCompressionRangeMin: {\n\t\t\t\ttype: \"f\",\n\t\t\t\tvalue: [],\n\t\t\t},\n\t\t\tsphericalHarmonics8BitCompressionRangeMax: {\n\t\t\t\ttype: \"f\",\n\t\t\t\tvalue: [],\n\t\t\t},\n\t\t\tfocal: {\n\t\t\t\ttype: \"v2\",\n\t\t\t\tvalue: new THREE.Vector2(),\n\t\t\t},\n\t\t\torthoZoom: {\n\t\t\t\ttype: \"f\",\n\t\t\t\tvalue: 1.0,\n\t\t\t},\n\t\t\tinverseFocalAdjustment: {\n\t\t\t\ttype: \"f\",\n\t\t\t\tvalue: 1.0,\n\t\t\t},\n\t\t\tviewport: {\n\t\t\t\ttype: \"v2\",\n\t\t\t\tvalue: new THREE.Vector2(),\n\t\t\t},\n\t\t\tbasisViewport: {\n\t\t\t\ttype: \"v2\",\n\t\t\t\tvalue: new THREE.Vector2(),\n\t\t\t},\n\t\t\tdebugColor: {\n\t\t\t\ttype: \"v3\",\n\t\t\t\tvalue: new THREE.Color(),\n\t\t\t},\n\t\t\tcentersColorsTextureSize: {\n\t\t\t\ttype: \"v2\",\n\t\t\t\tvalue: new THREE.Vector2(1024, 1024),\n\t\t\t},\n\t\t\tsphericalHarmonicsDegree: {\n\t\t\t\ttype: \"i\",\n\t\t\t\tvalue: maxSphericalHarmonicsDegree,\n\t\t\t},\n\t\t\tsphericalHarmonicsTextureSize: {\n\t\t\t\ttype: \"v2\",\n\t\t\t\tvalue: new THREE.Vector2(1024, 1024),\n\t\t\t},\n\t\t\tsphericalHarmonics8BitMode: {\n\t\t\t\ttype: \"i\",\n\t\t\t\tvalue: 0,\n\t\t\t},\n\t\t\tsphericalHarmonicsMultiTextureMode: {\n\t\t\t\ttype: \"i\",\n\t\t\t\tvalue: 0,\n\t\t\t},\n\t\t\tsplatScale: {\n\t\t\t\ttype: \"f\",\n\t\t\t\tvalue: splatScale,\n\t\t\t},\n\t\t\tpointCloudModeEnabled: {\n\t\t\t\ttype: \"i\",\n\t\t\t\tvalue: pointCloudModeEnabled ? 1 : 0,\n\t\t\t},\n\t\t\tsceneIndexesTexture: {\n\t\t\t\ttype: \"t\",\n\t\t\t\tvalue: null,\n\t\t\t},\n\t\t\tsceneIndexesTextureSize: {\n\t\t\t\ttype: \"v2\",\n\t\t\t\tvalue: new THREE.Vector2(1024, 1024),\n\t\t\t},\n\t\t\tsceneCount: {\n\t\t\t\ttype: \"i\",\n\t\t\t\tvalue: 1,\n\t\t\t},\n\t\t};\n\t\tfor (let i = 0; i < Constants.MaxScenes; i++) {\n\t\t\tuniforms.sphericalHarmonics8BitCompressionRangeMin.value.push(\n\t\t\t\t-Constants.SphericalHarmonics8BitCompressionRange / 2.0,\n\t\t\t);\n\t\t\tuniforms.sphericalHarmonics8BitCompressionRangeMax.value.push(\n\t\t\t\tConstants.SphericalHarmonics8BitCompressionRange / 2.0,\n\t\t\t);\n\t\t}\n\n\t\tif (enableOptionalEffects) {\n\t\t\tconst sceneOpacity = [];\n\t\t\tfor (let i = 0; i < Constants.MaxScenes; i++) {\n\t\t\t\tsceneOpacity.push(1.0);\n\t\t\t}\n\t\t\tuniforms[\"sceneOpacity\"] = {\n\t\t\t\ttype: \"f\",\n\t\t\t\tvalue: sceneOpacity,\n\t\t\t};\n\n\t\t\tconst sceneVisibility = [];\n\t\t\tfor (let i = 0; i < Constants.MaxScenes; i++) {\n\t\t\t\tsceneVisibility.push(1);\n\t\t\t}\n\t\t\tuniforms[\"sceneVisibility\"] = {\n\t\t\t\ttype: \"i\",\n\t\t\t\tvalue: sceneVisibility,\n\t\t\t};\n\t\t}\n\n\t\tif (dynamicMode) {\n\t\t\tconst transformMatrices = [];\n\t\t\tfor (let i = 0; i < Constants.MaxScenes; i++) {\n\t\t\t\ttransformMatrices.push(new THREE.Matrix4());\n\t\t\t}\n\t\t\tuniforms[\"transforms\"] = {\n\t\t\t\ttype: \"mat4\",\n\t\t\t\tvalue: transformMatrices,\n\t\t\t};\n\t\t}\n\n\t\treturn uniforms;\n\t}\n}\n","import * as THREE from \"three\";\nimport { SplatMaterial } from \"./SplatMaterial.js\";\n\nexport class SplatMaterial3D {\n\t/**\n\t * Build the Three.js material that is used to render the splats.\n\t * @param {number} dynamicMode If true, it means the scene geometry represented by this splat mesh is not stationary or\n\t *                             that the splat count might change\n\t * @param {boolean} enableOptionalEffects When true, allows for usage of extra properties and attributes in the shader for effects\n\t *                                        such as opacity adjustment. Default is false for performance reasons.\n\t * @param {boolean} antialiased If true, calculate compensation factor to deal with gaussians being rendered at a significantly\n\t *                              different resolution than that of their training\n\t * @param {number} maxScreenSpaceSplatSize The maximum clip space splat size\n\t * @param {number} splatScale Value by which all splats are scaled in screen-space (default is 1.0)\n\t * @param {number} pointCloudModeEnabled Render all splats as screen-space circles\n\t * @param {number} maxSphericalHarmonicsDegree Degree of spherical harmonics to utilize in rendering splats\n\t * @return {THREE.ShaderMaterial}\n\t */\n\tstatic build(\n\t\tdynamicMode = false,\n\t\tenableOptionalEffects = false,\n\t\tantialiased = false,\n\t\tmaxScreenSpaceSplatSize = 2048,\n\t\tsplatScale = 1.0,\n\t\tpointCloudModeEnabled = false,\n\t\tmaxSphericalHarmonicsDegree = 0,\n\t\tkernel2DSize = 0.3,\n\t) {\n\t\tconst customVertexVars = `\n            uniform vec2 covariancesTextureSize;\n            uniform highp sampler2D covariancesTexture;\n            uniform highp usampler2D covariancesTextureHalfFloat;\n            uniform int covariancesAreHalfFloat;\n\n            void fromCovarianceHalfFloatV4(uvec4 val, out vec4 first, out vec4 second) {\n                vec2 r = unpackHalf2x16(val.r);\n                vec2 g = unpackHalf2x16(val.g);\n                vec2 b = unpackHalf2x16(val.b);\n\n                first = vec4(r.x, r.y, g.x, g.y);\n                second = vec4(b.x, b.y, 0.0, 0.0);\n            }\n        `;\n\n\t\tlet vertexShaderSource = SplatMaterial.buildVertexShaderBase(\n\t\t\tdynamicMode,\n\t\t\tenableOptionalEffects,\n\t\t\tmaxSphericalHarmonicsDegree,\n\t\t\tcustomVertexVars,\n\t\t);\n\t\tvertexShaderSource += SplatMaterial3D.buildVertexShaderProjection(\n\t\t\tantialiased,\n\t\t\tenableOptionalEffects,\n\t\t\tmaxScreenSpaceSplatSize,\n\t\t\tkernel2DSize,\n\t\t);\n\t\tconst fragmentShaderSource = SplatMaterial3D.buildFragmentShader();\n\n\t\tconst uniforms = SplatMaterial.getUniforms(\n\t\t\tdynamicMode,\n\t\t\tenableOptionalEffects,\n\t\t\tmaxSphericalHarmonicsDegree,\n\t\t\tsplatScale,\n\t\t\tpointCloudModeEnabled,\n\t\t);\n\n\t\tuniforms[\"covariancesTextureSize\"] = {\n\t\t\ttype: \"v2\",\n\t\t\tvalue: new THREE.Vector2(1024, 1024),\n\t\t};\n\t\tuniforms[\"covariancesTexture\"] = {\n\t\t\ttype: \"t\",\n\t\t\tvalue: null,\n\t\t};\n\t\tuniforms[\"covariancesTextureHalfFloat\"] = {\n\t\t\ttype: \"t\",\n\t\t\tvalue: null,\n\t\t};\n\t\tuniforms[\"covariancesAreHalfFloat\"] = {\n\t\t\ttype: \"i\",\n\t\t\tvalue: 0,\n\t\t};\n\n\t\tconst material = new THREE.ShaderMaterial({\n\t\t\tuniforms: uniforms,\n\t\t\tvertexShader: vertexShaderSource,\n\t\t\tfragmentShader: fragmentShaderSource,\n\t\t\ttransparent: true,\n\t\t\talphaTest: 1.0,\n\t\t\tblending: THREE.NormalBlending,\n\t\t\tdepthTest: true,\n\t\t\tdepthWrite: false,\n\t\t\tside: THREE.DoubleSide,\n\t\t});\n\n\t\treturn material;\n\t}\n\n\tstatic buildVertexShaderProjection(\n\t\tantialiased,\n\t\tenableOptionalEffects,\n\t\tmaxScreenSpaceSplatSize,\n\t\tkernel2DSize,\n\t) {\n\t\tlet vertexShaderSource = `\n\n            vec4 sampledCovarianceA;\n            vec4 sampledCovarianceB;\n            vec3 cov3D_M11_M12_M13;\n            vec3 cov3D_M22_M23_M33;\n            if (covariancesAreHalfFloat == 0) {\n                sampledCovarianceA = texture(covariancesTexture, getDataUVF(nearestEvenIndex, 1.5, oddOffset,\n                                                                            covariancesTextureSize));\n                sampledCovarianceB = texture(covariancesTexture, getDataUVF(nearestEvenIndex, 1.5, oddOffset + uint(1),\n                                                                            covariancesTextureSize));\n\n                cov3D_M11_M12_M13 = vec3(sampledCovarianceA.rgb) * (1.0 - fOddOffset) +\n                                    vec3(sampledCovarianceA.ba, sampledCovarianceB.r) * fOddOffset;\n                cov3D_M22_M23_M33 = vec3(sampledCovarianceA.a, sampledCovarianceB.rg) * (1.0 - fOddOffset) +\n                                    vec3(sampledCovarianceB.gba) * fOddOffset;\n            } else {\n                uvec4 sampledCovarianceU = texture(covariancesTextureHalfFloat, getDataUV(1, 0, covariancesTextureSize));\n                fromCovarianceHalfFloatV4(sampledCovarianceU, sampledCovarianceA, sampledCovarianceB);\n                cov3D_M11_M12_M13 = sampledCovarianceA.rgb;\n                cov3D_M22_M23_M33 = vec3(sampledCovarianceA.a, sampledCovarianceB.rg);\n            }\n        \n            // Construct the 3D covariance matrix\n            mat3 Vrk = mat3(\n                cov3D_M11_M12_M13.x, cov3D_M11_M12_M13.y, cov3D_M11_M12_M13.z,\n                cov3D_M11_M12_M13.y, cov3D_M22_M23_M33.x, cov3D_M22_M23_M33.y,\n                cov3D_M11_M12_M13.z, cov3D_M22_M23_M33.y, cov3D_M22_M23_M33.z\n            );\n\n            mat3 J;\n            if (orthographicMode == 1) {\n                // Since the projection is linear, we don't need an approximation\n                J = transpose(mat3(orthoZoom, 0.0, 0.0,\n                                0.0, orthoZoom, 0.0,\n                                0.0, 0.0, 0.0));\n            } else {\n                // Construct the Jacobian of the affine approximation of the projection matrix. It will be used to transform the\n                // 3D covariance matrix instead of using the actual projection matrix because that transformation would\n                // require a non-linear component (perspective division) which would yield a non-gaussian result.\n                float s = 1.0 / (viewCenter.z * viewCenter.z);\n                J = mat3(\n                    focal.x / viewCenter.z, 0., -(focal.x * viewCenter.x) * s,\n                    0., focal.y / viewCenter.z, -(focal.y * viewCenter.y) * s,\n                    0., 0., 0.\n                );\n            }\n\n            // Concatenate the projection approximation with the model-view transformation\n            mat3 W = transpose(mat3(transformModelViewMatrix));\n            mat3 T = W * J;\n\n            // Transform the 3D covariance matrix (Vrk) to compute the 2D covariance matrix\n            mat3 cov2Dm = transpose(T) * Vrk * T;\n            `;\n\n\t\tif (antialiased) {\n\t\t\tvertexShaderSource += `\n                float detOrig = cov2Dm[0][0] * cov2Dm[1][1] - cov2Dm[0][1] * cov2Dm[0][1];\n                cov2Dm[0][0] += ${kernel2DSize};\n                cov2Dm[1][1] += ${kernel2DSize};\n                float detBlur = cov2Dm[0][0] * cov2Dm[1][1] - cov2Dm[0][1] * cov2Dm[0][1];\n                vColor.a *= sqrt(max(detOrig / detBlur, 0.0));\n                if (vColor.a < minAlpha) return;\n            `;\n\t\t} else {\n\t\t\tvertexShaderSource += `\n                cov2Dm[0][0] += ${kernel2DSize};\n                cov2Dm[1][1] += ${kernel2DSize};\n            `;\n\t\t}\n\n\t\tvertexShaderSource += `\n\n            // We are interested in the upper-left 2x2 portion of the projected 3D covariance matrix because\n            // we only care about the X and Y values. We want the X-diagonal, cov2Dm[0][0],\n            // the Y-diagonal, cov2Dm[1][1], and the correlation between the two cov2Dm[0][1]. We don't\n            // need cov2Dm[1][0] because it is a symetric matrix.\n            vec3 cov2Dv = vec3(cov2Dm[0][0], cov2Dm[0][1], cov2Dm[1][1]);\n\n            // We now need to solve for the eigen-values and eigen vectors of the 2D covariance matrix\n            // so that we can determine the 2D basis for the splat. This is done using the method described\n            // here: https://people.math.harvard.edu/~knill/teaching/math21b2004/exhibits/2dmatrices/index.html\n            // After calculating the eigen-values and eigen-vectors, we calculate the basis for rendering the splat\n            // by normalizing the eigen-vectors and then multiplying them by (sqrt(8) * sqrt(eigen-value)), which is\n            // equal to scaling them by sqrt(8) standard deviations.\n            //\n            // This is a different approach than in the original work at INRIA. In that work they compute the\n            // max extents of the projected splat in screen space to form a screen-space aligned bounding rectangle\n            // which forms the geometry that is actually rasterized. The dimensions of that bounding box are 3.0\n            // times the square root of the maximum eigen-value, or 3 standard deviations. They then use the inverse\n            // 2D covariance matrix (called 'conic') in the CUDA rendering thread to determine fragment opacity by\n            // calculating the full gaussian: exp(-0.5 * (X - mean) * conic * (X - mean)) * splat opacity\n            float a = cov2Dv.x;\n            float d = cov2Dv.z;\n            float b = cov2Dv.y;\n            float D = a * d - b * b;\n            float trace = a + d;\n            float traceOver2 = 0.5 * trace;\n            float term2 = sqrt(max(0.1f, traceOver2 * traceOver2 - D));\n            float eigenValue1 = traceOver2 + term2;\n            float eigenValue2 = traceOver2 - term2;\n\n            if (pointCloudModeEnabled == 1) {\n                eigenValue1 = eigenValue2 = 0.2;\n            }\n\n            if (eigenValue2 <= 0.0) return;\n\n            vec2 eigenVector1 = normalize(vec2(b, eigenValue1 - a));\n            // since the eigen vectors are orthogonal, we derive the second one from the first\n            vec2 eigenVector2 = vec2(eigenVector1.y, -eigenVector1.x);\n\n            // We use sqrt(8) standard deviations instead of 3 to eliminate more of the splat with a very low opacity.\n            vec2 basisVector1 = eigenVector1 * splatScale * min(sqrt8 * sqrt(eigenValue1), ${parseInt(\n\t\t\t\t\t\t\tmaxScreenSpaceSplatSize,\n\t\t\t\t\t\t)}.0);\n            vec2 basisVector2 = eigenVector2 * splatScale * min(sqrt8 * sqrt(eigenValue2), ${parseInt(\n\t\t\t\t\t\t\tmaxScreenSpaceSplatSize,\n\t\t\t\t\t\t)}.0);\n            `;\n\n\t\tif (enableOptionalEffects) {\n\t\t\tvertexShaderSource += `\n                vColor.a *= splatOpacityFromScene;\n            `;\n\t\t}\n\n\t\tvertexShaderSource += `\n            vec2 ndcOffset = vec2(vPosition.x * basisVector1 + vPosition.y * basisVector2) *\n                             basisViewport * 2.0 * inverseFocalAdjustment;\n\n            vec4 quadPos = vec4(ndcCenter.xy + ndcOffset, ndcCenter.z, 1.0);\n            gl_Position = quadPos;\n\n            // Scale the position data we send to the fragment shader\n            vPosition *= sqrt8;\n        `;\n\n\t\tvertexShaderSource += SplatMaterial.getVertexShaderFadeIn();\n\t\tvertexShaderSource += \"}\";\n\n\t\treturn vertexShaderSource;\n\t}\n\n\tstatic buildFragmentShader() {\n\t\tlet fragmentShaderSource = `\n            precision highp float;\n            #include <common>\n \n            uniform vec3 debugColor;\n\n            varying vec4 vColor;\n            varying vec2 vUv;\n            varying vec2 vPosition;\n        `;\n\n\t\tfragmentShaderSource += `\n            void main () {\n                // Compute the positional squared distance from the center of the splat to the current fragment.\n                float A = dot(vPosition, vPosition);\n                // Since the positional data in vPosition has been scaled by sqrt(8), the squared result will be\n                // scaled by a factor of 8. If the squared result is larger than 8, it means it is outside the ellipse\n                // defined by the rectangle formed by vPosition. It also means it's farther\n                // away than sqrt(8) standard deviations from the mean.\n                if (A > 8.0) discard;\n                vec3 color = vColor.rgb;\n\n                // Since the rendered splat is scaled by sqrt(8), the inverse covariance matrix that is part of\n                // the gaussian formula becomes the identity matrix. We're then left with (X - mean) * (X - mean),\n                // and since 'mean' is zero, we have X * X, which is the same as A:\n                float opacity = exp(-0.5 * A) * vColor.a;\n\n                gl_FragColor = vec4(color.rgb, opacity);\n            }\n        `;\n\n\t\treturn fragmentShaderSource;\n\t}\n}\n","import * as THREE from \"three\";\nimport { SplatMaterial } from \"./SplatMaterial.js\";\n\nexport class SplatMaterial2D {\n\t/**\n\t * Build the Three.js material that is used to render the splats.\n\t * @param {number} dynamicMode If true, it means the scene geometry represented by this splat mesh is not stationary or\n\t *                             that the splat count might change\n\t * @param {boolean} enableOptionalEffects When true, allows for usage of extra properties and attributes in the shader for effects\n\t *                                        such as opacity adjustment. Default is false for performance reasons.\n\t * @param {number} splatScale Value by which all splats are scaled in screen-space (default is 1.0)\n\t * @param {number} pointCloudModeEnabled Render all splats as screen-space circles\n\t * @param {number} maxSphericalHarmonicsDegree Degree of spherical harmonics to utilize in rendering splats\n\t * @return {THREE.ShaderMaterial}\n\t */\n\tstatic build(\n\t\tdynamicMode = false,\n\t\tenableOptionalEffects = false,\n\t\tsplatScale = 1.0,\n\t\tpointCloudModeEnabled = false,\n\t\tmaxSphericalHarmonicsDegree = 0,\n\t) {\n\t\tconst customVertexVars = `\n            uniform vec2 scaleRotationsTextureSize;\n            uniform highp sampler2D scaleRotationsTexture;\n            varying mat3 vT;\n            varying vec2 vQuadCenter;\n            varying vec2 vFragCoord;\n        `;\n\n\t\tlet vertexShaderSource = SplatMaterial.buildVertexShaderBase(\n\t\t\tdynamicMode,\n\t\t\tenableOptionalEffects,\n\t\t\tmaxSphericalHarmonicsDegree,\n\t\t\tcustomVertexVars,\n\t\t);\n\t\tvertexShaderSource += SplatMaterial2D.buildVertexShaderProjection();\n\t\tconst fragmentShaderSource = SplatMaterial2D.buildFragmentShader();\n\n\t\tconst uniforms = SplatMaterial.getUniforms(\n\t\t\tdynamicMode,\n\t\t\tenableOptionalEffects,\n\t\t\tmaxSphericalHarmonicsDegree,\n\t\t\tsplatScale,\n\t\t\tpointCloudModeEnabled,\n\t\t);\n\n\t\tuniforms[\"scaleRotationsTexture\"] = {\n\t\t\ttype: \"t\",\n\t\t\tvalue: null,\n\t\t};\n\t\tuniforms[\"scaleRotationsTextureSize\"] = {\n\t\t\ttype: \"v2\",\n\t\t\tvalue: new THREE.Vector2(1024, 1024),\n\t\t};\n\n\t\tconst material = new THREE.ShaderMaterial({\n\t\t\tuniforms: uniforms,\n\t\t\tvertexShader: vertexShaderSource,\n\t\t\tfragmentShader: fragmentShaderSource,\n\t\t\ttransparent: true,\n\t\t\talphaTest: 1.0,\n\t\t\tblending: THREE.NormalBlending,\n\t\t\tdepthTest: true,\n\t\t\tdepthWrite: false,\n\t\t\tside: THREE.DoubleSide,\n\t\t});\n\n\t\treturn material;\n\t}\n\n\tstatic buildVertexShaderProjection() {\n\t\t// Original CUDA code for calculating splat-to-screen transformation, for reference\n\t\t/*\n            glm::mat3 R = quat_to_rotmat(rot);\n            glm::mat3 S = scale_to_mat(scale, mod);\n            glm::mat3 L = R * S;\n\n            // center of Gaussians in the camera coordinate\n            glm::mat3x4 splat2world = glm::mat3x4(\n                glm::vec4(L[0], 0.0),\n                glm::vec4(L[1], 0.0),\n                glm::vec4(p_orig.x, p_orig.y, p_orig.z, 1)\n            );\n\n            glm::mat4 world2ndc = glm::mat4(\n                projmatrix[0], projmatrix[4], projmatrix[8], projmatrix[12],\n                projmatrix[1], projmatrix[5], projmatrix[9], projmatrix[13],\n                projmatrix[2], projmatrix[6], projmatrix[10], projmatrix[14],\n                projmatrix[3], projmatrix[7], projmatrix[11], projmatrix[15]\n            );\n\n            glm::mat3x4 ndc2pix = glm::mat3x4(\n                glm::vec4(float(W) / 2.0, 0.0, 0.0, float(W-1) / 2.0),\n                glm::vec4(0.0, float(H) / 2.0, 0.0, float(H-1) / 2.0),\n                glm::vec4(0.0, 0.0, 0.0, 1.0)\n            );\n\n            T = glm::transpose(splat2world) * world2ndc * ndc2pix;\n            normal = transformVec4x3({L[2].x, L[2].y, L[2].z}, viewmatrix);\n        */\n\n\t\t// Compute a 2D-to-2D mapping matrix from a tangent plane into a image plane\n\t\t// given a 2D gaussian parameters. T = WH (from the paper: https://arxiv.org/pdf/2403.17888)\n\t\tlet vertexShaderSource = `\n\n            vec4 scaleRotationA = texture(scaleRotationsTexture, getDataUVF(nearestEvenIndex, 1.5,\n                                                                            oddOffset, scaleRotationsTextureSize));\n            vec4 scaleRotationB = texture(scaleRotationsTexture, getDataUVF(nearestEvenIndex, 1.5,\n                                                                            oddOffset + uint(1), scaleRotationsTextureSize));\n\n            vec3 scaleRotation123 = vec3(scaleRotationA.rgb) * (1.0 - fOddOffset) +\n                                    vec3(scaleRotationA.ba, scaleRotationB.r) * fOddOffset;\n            vec3 scaleRotation456 = vec3(scaleRotationA.a, scaleRotationB.rg) * (1.0 - fOddOffset) +\n                                    vec3(scaleRotationB.gba) * fOddOffset;\n\n            float missingW = sqrt(1.0 - scaleRotation456.x * scaleRotation456.x - scaleRotation456.y *\n                                    scaleRotation456.y - scaleRotation456.z * scaleRotation456.z);\n            mat3 R = quaternionToRotationMatrix(scaleRotation456.r, scaleRotation456.g, scaleRotation456.b, missingW);\n            mat3 S = mat3(scaleRotation123.r, 0.0, 0.0,\n                            0.0, scaleRotation123.g, 0.0,\n                            0.0, 0.0, scaleRotation123.b);\n            \n            mat3 L = R * S;\n\n            mat3x4 splat2World = mat3x4(vec4(L[0], 0.0),\n                                        vec4(L[1], 0.0),\n                                        vec4(splatCenter.x, splatCenter.y, splatCenter.z, 1.0));\n\n            mat4 world2ndc = transpose(projectionMatrix * transformModelViewMatrix);\n\n            mat3x4 ndc2pix = mat3x4(vec4(viewport.x / 2.0, 0.0, 0.0, (viewport.x - 1.0) / 2.0),\n                                    vec4(0.0, viewport.y / 2.0, 0.0, (viewport.y - 1.0) / 2.0),\n                                    vec4(0.0, 0.0, 0.0, 1.0));\n\n            mat3 T = transpose(splat2World) * world2ndc * ndc2pix;\n            vec3 normal = vec3(viewMatrix * vec4(L[0][2], L[1][2], L[2][2], 0.0));\n        `;\n\n\t\t// Original CUDA code for projection to 2D, for reference\n\t\t/*\n            float3 T0 = {T[0][0], T[0][1], T[0][2]};\n            float3 T1 = {T[1][0], T[1][1], T[1][2]};\n            float3 T3 = {T[2][0], T[2][1], T[2][2]};\n\n            // Compute AABB\n            float3 temp_point = {1.0f, 1.0f, -1.0f};\n            float distance = sumf3(T3 * T3 * temp_point);\n            float3 f = (1 / distance) * temp_point;\n            if (distance == 0.0) return false;\n\n            point_image = {\n                sumf3(f * T0 * T3),\n                sumf3(f * T1 * T3)\n            };\n\n            float2 temp = {\n                sumf3(f * T0 * T0),\n                sumf3(f * T1 * T1)\n            };\n            float2 half_extend = point_image * point_image - temp;\n            extent = sqrtf2(maxf2(1e-4, half_extend));\n            return true;\n        */\n\n\t\t// Computing the bounding box of the 2D Gaussian and its center\n\t\t// The center of the bounding box is used to create a low pass filter.\n\t\t// This code is based off the reference implementation and creates an AABB aligned\n\t\t// with the screen for the quad to be rendered.\n\t\tconst referenceQuadGeneration = `\n            vec3 T0 = vec3(T[0][0], T[0][1], T[0][2]);\n            vec3 T1 = vec3(T[1][0], T[1][1], T[1][2]);\n            vec3 T3 = vec3(T[2][0], T[2][1], T[2][2]);\n\n            vec3 tempPoint = vec3(1.0, 1.0, -1.0);\n            float distance = (T3.x * T3.x * tempPoint.x) + (T3.y * T3.y * tempPoint.y) + (T3.z * T3.z * tempPoint.z);\n            vec3 f = (1.0 / distance) * tempPoint;\n            if (abs(distance) < 0.00001) return;\n\n            float pointImageX = (T0.x * T3.x * f.x) + (T0.y * T3.y * f.y) + (T0.z * T3.z * f.z);\n            float pointImageY = (T1.x * T3.x * f.x) + (T1.y * T3.y * f.y) + (T1.z * T3.z * f.z);\n            vec2 pointImage = vec2(pointImageX, pointImageY);\n\n            float tempX = (T0.x * T0.x * f.x) + (T0.y * T0.y * f.y) + (T0.z * T0.z * f.z);\n            float tempY = (T1.x * T1.x * f.x) + (T1.y * T1.y * f.y) + (T1.z * T1.z * f.z);\n            vec2 temp = vec2(tempX, tempY);\n\n            vec2 halfExtend = pointImage * pointImage - temp;\n            vec2 extent = sqrt(max(vec2(0.0001), halfExtend));\n            float radius = max(extent.x, extent.y);\n\n            vec2 ndcOffset = ((position.xy * radius * 3.0) * basisViewport * 2.0);\n\n            vec4 quadPos = vec4(ndcCenter.xy + ndcOffset, ndcCenter.z, 1.0);\n            gl_Position = quadPos;\n\n            vT = T;\n            vQuadCenter = pointImage;\n            vFragCoord = (quadPos.xy * 0.5 + 0.5) * viewport;\n        `;\n\n\t\tconst useRefImplementation = false;\n\t\tif (useRefImplementation) {\n\t\t\tvertexShaderSource += referenceQuadGeneration;\n\t\t} else {\n\t\t\t// Create a quad that is aligned with the eigen vectors of the projected gaussian for rendering.\n\t\t\t// This is a different approach than the reference implementation, similar to how the rendering of\n\t\t\t// 3D gaussians in this viewer differs from the reference implementation. If the quad is too small\n\t\t\t// (smaller than a pixel), then revert to the reference implementation.\n\t\t\tvertexShaderSource += `\n\n                mat4 splat2World4 = mat4(vec4(L[0], 0.0),\n                                        vec4(L[1], 0.0),\n                                        vec4(L[2], 0.0),\n                                        vec4(splatCenter.x, splatCenter.y, splatCenter.z, 1.0));\n\n                mat4 Tt = transpose(transpose(splat2World4) * world2ndc);\n\n                vec4 tempPoint1 = Tt * vec4(1.0, 0.0, 0.0, 1.0);\n                tempPoint1 /= tempPoint1.w;\n\n                vec4 tempPoint2 = Tt * vec4(0.0, 1.0, 0.0, 1.0);\n                tempPoint2 /= tempPoint2.w;\n\n                vec4 center = Tt * vec4(0.0, 0.0, 0.0, 1.0);\n                center /= center.w;\n\n                vec2 basisVector1 = tempPoint1.xy - center.xy;\n                vec2 basisVector2 = tempPoint2.xy - center.xy;\n\n                vec2 basisVector1Screen = basisVector1 * 0.5 * viewport;\n                vec2 basisVector2Screen = basisVector2 * 0.5 * viewport;\n\n                const float minPix = 1.;\n                if (length(basisVector1Screen) < minPix || length(basisVector2Screen) < minPix) {\n                    ${referenceQuadGeneration}\n                } else {\n                    vec2 ndcOffset = vec2(position.x * basisVector1 + position.y * basisVector2) * 3.0 * inverseFocalAdjustment;\n                    vec4 quadPos = vec4(ndcCenter.xy + ndcOffset, ndcCenter.z, 1.0);\n                    gl_Position = quadPos;\n\n                    vT = T;\n                    vQuadCenter = center.xy;\n                    vFragCoord = (quadPos.xy * 0.5 + 0.5) * viewport;\n                }\n            `;\n\t\t}\n\n\t\tvertexShaderSource += SplatMaterial.getVertexShaderFadeIn();\n\t\tvertexShaderSource += \"}\";\n\n\t\treturn vertexShaderSource;\n\t}\n\n\tstatic buildFragmentShader() {\n\t\t// Original CUDA code for splat intersection, for reference\n\t\t/*\n            const float2 xy = collected_xy[j];\n            const float3 Tu = collected_Tu[j];\n            const float3 Tv = collected_Tv[j];\n            const float3 Tw = collected_Tw[j];\n            float3 k = pix.x * Tw - Tu;\n            float3 l = pix.y * Tw - Tv;\n            float3 p = cross(k, l);\n            if (p.z == 0.0) continue;\n            float2 s = {p.x / p.z, p.y / p.z};\n            float rho3d = (s.x * s.x + s.y * s.y);\n            float2 d = {xy.x - pixf.x, xy.y - pixf.y};\n            float rho2d = FilterInvSquare * (d.x * d.x + d.y * d.y);\n\n            // compute intersection and depth\n            float rho = min(rho3d, rho2d);\n            float depth = (rho3d <= rho2d) ? (s.x * Tw.x + s.y * Tw.y) + Tw.z : Tw.z;\n            if (depth < near_n) continue;\n            float4 nor_o = collected_normal_opacity[j];\n            float normal[3] = {nor_o.x, nor_o.y, nor_o.z};\n            float opa = nor_o.w;\n\n            float power = -0.5f * rho;\n            if (power > 0.0f)\n                continue;\n\n            // Eq. (2) from 3D Gaussian splatting paper.\n            // Obtain alpha by multiplying with Gaussian opacity\n            // and its exponential falloff from mean.\n            // Avoid numerical instabilities (see paper appendix).\n            float alpha = min(0.99f, opa * exp(power));\n            if (alpha < 1.0f / 255.0f)\n                continue;\n            float test_T = T * (1 - alpha);\n            if (test_T < 0.0001f)\n            {\n                done = true;\n                continue;\n            }\n\n            float w = alpha * T;\n        */\n\t\tlet fragmentShaderSource = `\n            precision highp float;\n            #include <common>\n\n            uniform vec3 debugColor;\n\n            varying vec4 vColor;\n            varying vec2 vUv;\n            varying vec2 vPosition;\n            varying mat3 vT;\n            varying vec2 vQuadCenter;\n            varying vec2 vFragCoord;\n\n            void main () {\n\n                const float FilterInvSquare = 2.0;\n                const float near_n = 0.2;\n                const float T = 1.0;\n\n                vec2 xy = vQuadCenter;\n                vec3 Tu = vT[0];\n                vec3 Tv = vT[1];\n                vec3 Tw = vT[2];\n                vec3 k = vFragCoord.x * Tw - Tu;\n                vec3 l = vFragCoord.y * Tw - Tv;\n                vec3 p = cross(k, l);\n                if (p.z == 0.0) discard;\n                vec2 s = vec2(p.x / p.z, p.y / p.z);\n                float rho3d = (s.x * s.x + s.y * s.y); \n                vec2 d = vec2(xy.x - vFragCoord.x, xy.y - vFragCoord.y);\n                float rho2d = FilterInvSquare * (d.x * d.x + d.y * d.y); \n\n                // compute intersection and depth\n                float rho = min(rho3d, rho2d);\n                float depth = (rho3d <= rho2d) ? (s.x * Tw.x + s.y * Tw.y) + Tw.z : Tw.z; \n                if (depth < near_n) discard;\n                //  vec4 nor_o = collected_normal_opacity[j];\n                //  float normal[3] = {nor_o.x, nor_o.y, nor_o.z};\n                float opa = vColor.a;\n\n                float power = -0.5f * rho;\n                if (power > 0.0f) discard;\n\n                // Eq. (2) from 3D Gaussian splatting paper.\n                // Obtain alpha by multiplying with Gaussian opacity\n                // and its exponential falloff from mean.\n                // Avoid numerical instabilities (see paper appendix). \n                float alpha = min(0.99f, opa * exp(power));\n                if (alpha < 1.0f / 255.0f) discard;\n                float test_T = T * (1.0 - alpha);\n                if (test_T < 0.0001)discard;\n\n                float w = alpha * T;\n                gl_FragColor = vec4(vColor.rgb, w);\n            }\n        `;\n\n\t\treturn fragmentShaderSource;\n\t}\n}\n","import * as THREE from \"three\";\n\nexport class SplatGeometry {\n\t/**\n\t * Build the Three.js geometry that will be used to render the splats. The geometry is instanced and is made up of\n\t * vertices for a single quad as well as an attribute buffer for the splat indexes.\n\t * @param {number} maxSplatCount The maximum number of splats that the geometry will need to accomodate\n\t * @return {THREE.InstancedBufferGeometry}\n\t */\n\tstatic build(maxSplatCount) {\n\t\tconst baseGeometry = new THREE.BufferGeometry();\n\t\tbaseGeometry.setIndex([0, 1, 2, 0, 2, 3]);\n\n\t\t// Vertices for the instanced quad\n\t\tconst positionsArray = new Float32Array(4 * 3);\n\t\tconst positions = new THREE.BufferAttribute(positionsArray, 3);\n\t\tbaseGeometry.setAttribute(\"position\", positions);\n\t\tpositions.setXYZ(0, -1.0, -1.0, 0.0);\n\t\tpositions.setXYZ(1, -1.0, 1.0, 0.0);\n\t\tpositions.setXYZ(2, 1.0, 1.0, 0.0);\n\t\tpositions.setXYZ(3, 1.0, -1.0, 0.0);\n\t\tpositions.needsUpdate = true;\n\n\t\tconst geometry = new THREE.InstancedBufferGeometry().copy(baseGeometry);\n\n\t\t// Splat index buffer\n\t\tconst splatIndexArray = new Uint32Array(maxSplatCount);\n\t\tconst splatIndexes = new THREE.InstancedBufferAttribute(splatIndexArray, 1, false);\n\t\tsplatIndexes.setUsage(THREE.DynamicDrawUsage);\n\t\tgeometry.setAttribute(\"splatIndex\", splatIndexes);\n\n\t\tgeometry.instanceCount = 0;\n\n\t\treturn geometry;\n\t}\n}\n","import * as THREE from \"three\";\n\n/**\n * SplatScene: Descriptor for a single splat scene managed by an instance of SplatMesh.\n */\nexport class SplatScene extends THREE.Object3D {\n\tconstructor(\n\t\tsplatBuffer,\n\t\tposition = new THREE.Vector3(),\n\t\tquaternion = new THREE.Quaternion(),\n\t\tscale = new THREE.Vector3(1, 1, 1),\n\t\tminimumAlpha = 1,\n\t\topacity = 1.0,\n\t\tvisible = true,\n\t) {\n\t\tsuper();\n\t\tthis.splatBuffer = splatBuffer;\n\t\tthis.position.copy(position);\n\t\tthis.quaternion.copy(quaternion);\n\t\tthis.scale.copy(scale);\n\t\tthis.transform = new THREE.Matrix4();\n\t\tthis.minimumAlpha = minimumAlpha;\n\t\tthis.opacity = opacity;\n\t\tthis.visible = visible;\n\t}\n\n\tcopyTransformData(otherScene) {\n\t\tthis.position.copy(otherScene.position);\n\t\tthis.quaternion.copy(otherScene.quaternion);\n\t\tthis.scale.copy(otherScene.scale);\n\t\tthis.transform.copy(otherScene.transform);\n\t}\n\n\tupdateTransform(dynamicMode) {\n\t\tif (dynamicMode) {\n\t\t\tif (this.matrixWorldAutoUpdate) this.updateWorldMatrix(true, false);\n\t\t\tthis.transform.copy(this.matrixWorld);\n\t\t} else {\n\t\t\tif (this.matrixAutoUpdate) this.updateMatrix();\n\t\t\tthis.transform.copy(this.matrix);\n\t\t}\n\t}\n}\n","import * as THREE from \"three\";\nimport { delayedExecute } from \"../Util.js\";\n\nclass SplatTreeNode {\n\tstatic idGen = 0;\n\n\tconstructor(min, max, depth, id) {\n\t\tthis.min = new THREE.Vector3().copy(min);\n\t\tthis.max = new THREE.Vector3().copy(max);\n\t\tthis.boundingBox = new THREE.Box3(this.min, this.max);\n\t\tthis.center = new THREE.Vector3().copy(this.max).sub(this.min).multiplyScalar(0.5).add(this.min);\n\t\tthis.depth = depth;\n\t\tthis.children = [];\n\t\tthis.data = null;\n\t\tthis.id = id || SplatTreeNode.idGen++;\n\t}\n}\n\nclass SplatSubTree {\n\tconstructor(maxDepth, maxCentersPerNode) {\n\t\tthis.maxDepth = maxDepth;\n\t\tthis.maxCentersPerNode = maxCentersPerNode;\n\t\tthis.sceneDimensions = new THREE.Vector3();\n\t\tthis.sceneMin = new THREE.Vector3();\n\t\tthis.sceneMax = new THREE.Vector3();\n\t\tthis.rootNode = null;\n\t\tthis.nodesWithIndexes = [];\n\t\tthis.splatMesh = null;\n\t}\n\n\tstatic convertWorkerSubTreeNode(workerSubTreeNode) {\n\t\tconst minVector = new THREE.Vector3().fromArray(workerSubTreeNode.min);\n\t\tconst maxVector = new THREE.Vector3().fromArray(workerSubTreeNode.max);\n\t\tconst convertedNode = new SplatTreeNode(\n\t\t\tminVector,\n\t\t\tmaxVector,\n\t\t\tworkerSubTreeNode.depth,\n\t\t\tworkerSubTreeNode.id,\n\t\t);\n\t\tif (workerSubTreeNode.data.indexes) {\n\t\t\tconvertedNode.data = {\n\t\t\t\tindexes: [],\n\t\t\t};\n\t\t\tfor (let index of workerSubTreeNode.data.indexes) {\n\t\t\t\tconvertedNode.data.indexes.push(index);\n\t\t\t}\n\t\t}\n\t\tif (workerSubTreeNode.children) {\n\t\t\tfor (let child of workerSubTreeNode.children) {\n\t\t\t\tconvertedNode.children.push(SplatSubTree.convertWorkerSubTreeNode(child));\n\t\t\t}\n\t\t}\n\t\treturn convertedNode;\n\t}\n\n\tstatic convertWorkerSubTree(workerSubTree, splatMesh) {\n\t\tconst convertedSubTree = new SplatSubTree(workerSubTree.maxDepth, workerSubTree.maxCentersPerNode);\n\t\tconvertedSubTree.sceneMin = new THREE.Vector3().fromArray(workerSubTree.sceneMin);\n\t\tconvertedSubTree.sceneMax = new THREE.Vector3().fromArray(workerSubTree.sceneMax);\n\n\t\tconvertedSubTree.splatMesh = splatMesh;\n\t\tconvertedSubTree.rootNode = SplatSubTree.convertWorkerSubTreeNode(workerSubTree.rootNode);\n\n\t\tconst visitLeavesFromNode = (node, visitFunc) => {\n\t\t\tif (node.children.length === 0) visitFunc(node);\n\t\t\tfor (let child of node.children) {\n\t\t\t\tvisitLeavesFromNode(child, visitFunc);\n\t\t\t}\n\t\t};\n\n\t\tconvertedSubTree.nodesWithIndexes = [];\n\t\tvisitLeavesFromNode(convertedSubTree.rootNode, (node) => {\n\t\t\tif (node.data && node.data.indexes && node.data.indexes.length > 0) {\n\t\t\t\tconvertedSubTree.nodesWithIndexes.push(node);\n\t\t\t}\n\t\t});\n\n\t\treturn convertedSubTree;\n\t}\n}\n\nfunction createSplatTreeWorker(self) {\n\tlet WorkerSplatTreeNodeIDGen = 0;\n\n\tclass WorkerBox3 {\n\t\tconstructor(min, max) {\n\t\t\tthis.min = [min[0], min[1], min[2]];\n\t\t\tthis.max = [max[0], max[1], max[2]];\n\t\t}\n\n\t\tcontainsPoint(point) {\n\t\t\treturn (\n\t\t\t\tpoint[0] >= this.min[0] &&\n\t\t\t\tpoint[0] <= this.max[0] &&\n\t\t\t\tpoint[1] >= this.min[1] &&\n\t\t\t\tpoint[1] <= this.max[1] &&\n\t\t\t\tpoint[2] >= this.min[2] &&\n\t\t\t\tpoint[2] <= this.max[2]\n\t\t\t);\n\t\t}\n\t}\n\n\tclass WorkerSplatSubTree {\n\t\tconstructor(maxDepth, maxCentersPerNode) {\n\t\t\tthis.maxDepth = maxDepth;\n\t\t\tthis.maxCentersPerNode = maxCentersPerNode;\n\t\t\tthis.sceneDimensions = [];\n\t\t\tthis.sceneMin = [];\n\t\t\tthis.sceneMax = [];\n\t\t\tthis.rootNode = null;\n\t\t\tthis.addedIndexes = {};\n\t\t\tthis.nodesWithIndexes = [];\n\t\t\tthis.splatMesh = null;\n\t\t\tthis.disposed = false;\n\t\t}\n\t}\n\n\tclass WorkerSplatTreeNode {\n\t\tconstructor(min, max, depth, id) {\n\t\t\tthis.min = [min[0], min[1], min[2]];\n\t\t\tthis.max = [max[0], max[1], max[2]];\n\t\t\tthis.center = [\n\t\t\t\t(max[0] - min[0]) * 0.5 + min[0],\n\t\t\t\t(max[1] - min[1]) * 0.5 + min[1],\n\t\t\t\t(max[2] - min[2]) * 0.5 + min[2],\n\t\t\t];\n\t\t\tthis.depth = depth;\n\t\t\tthis.children = [];\n\t\t\tthis.data = null;\n\t\t\tthis.id = id || WorkerSplatTreeNodeIDGen++;\n\t\t}\n\t}\n\n\tprocessSplatTreeNode = function(tree, node, indexToCenter, sceneCenters) {\n\t\tconst splatCount = node.data.indexes.length;\n\n\t\tif (splatCount < tree.maxCentersPerNode || node.depth > tree.maxDepth) {\n\t\t\tconst newIndexes = [];\n\t\t\tfor (let i = 0; i < node.data.indexes.length; i++) {\n\t\t\t\tif (!tree.addedIndexes[node.data.indexes[i]]) {\n\t\t\t\t\tnewIndexes.push(node.data.indexes[i]);\n\t\t\t\t\ttree.addedIndexes[node.data.indexes[i]] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tnode.data.indexes = newIndexes;\n\t\t\tnode.data.indexes.sort((a, b) => {\n\t\t\t\tif (a > b) return 1;\n\t\t\t\telse return -1;\n\t\t\t});\n\t\t\ttree.nodesWithIndexes.push(node);\n\t\t\treturn;\n\t\t}\n\n\t\tconst nodeDimensions = [node.max[0] - node.min[0], node.max[1] - node.min[1], node.max[2] - node.min[2]];\n\t\tconst halfDimensions = [nodeDimensions[0] * 0.5, nodeDimensions[1] * 0.5, nodeDimensions[2] * 0.5];\n\t\tconst nodeCenter = [\n\t\t\tnode.min[0] + halfDimensions[0],\n\t\t\tnode.min[1] + halfDimensions[1],\n\t\t\tnode.min[2] + halfDimensions[2],\n\t\t];\n\n\t\tconst childrenBounds = [\n\t\t\t// top section, clockwise from upper-left (looking from above, +Y)\n\t\t\tnew WorkerBox3(\n\t\t\t\t[nodeCenter[0] - halfDimensions[0], nodeCenter[1], nodeCenter[2] - halfDimensions[2]],\n\t\t\t\t[nodeCenter[0], nodeCenter[1] + halfDimensions[1], nodeCenter[2]],\n\t\t\t),\n\t\t\tnew WorkerBox3(\n\t\t\t\t[nodeCenter[0], nodeCenter[1], nodeCenter[2] - halfDimensions[2]],\n\t\t\t\t[nodeCenter[0] + halfDimensions[0], nodeCenter[1] + halfDimensions[1], nodeCenter[2]],\n\t\t\t),\n\t\t\tnew WorkerBox3(\n\t\t\t\t[nodeCenter[0], nodeCenter[1], nodeCenter[2]],\n\t\t\t\t[\n\t\t\t\t\tnodeCenter[0] + halfDimensions[0],\n\t\t\t\t\tnodeCenter[1] + halfDimensions[1],\n\t\t\t\t\tnodeCenter[2] + halfDimensions[2],\n\t\t\t\t],\n\t\t\t),\n\t\t\tnew WorkerBox3(\n\t\t\t\t[nodeCenter[0] - halfDimensions[0], nodeCenter[1], nodeCenter[2]],\n\t\t\t\t[nodeCenter[0], nodeCenter[1] + halfDimensions[1], nodeCenter[2] + halfDimensions[2]],\n\t\t\t),\n\n\t\t\t// bottom section, clockwise from lower-left (looking from above, +Y)\n\t\t\tnew WorkerBox3(\n\t\t\t\t[\n\t\t\t\t\tnodeCenter[0] - halfDimensions[0],\n\t\t\t\t\tnodeCenter[1] - halfDimensions[1],\n\t\t\t\t\tnodeCenter[2] - halfDimensions[2],\n\t\t\t\t],\n\t\t\t\t[nodeCenter[0], nodeCenter[1], nodeCenter[2]],\n\t\t\t),\n\t\t\tnew WorkerBox3(\n\t\t\t\t[nodeCenter[0], nodeCenter[1] - halfDimensions[1], nodeCenter[2] - halfDimensions[2]],\n\t\t\t\t[nodeCenter[0] + halfDimensions[0], nodeCenter[1], nodeCenter[2]],\n\t\t\t),\n\t\t\tnew WorkerBox3(\n\t\t\t\t[nodeCenter[0], nodeCenter[1] - halfDimensions[1], nodeCenter[2]],\n\t\t\t\t[nodeCenter[0] + halfDimensions[0], nodeCenter[1], nodeCenter[2] + halfDimensions[2]],\n\t\t\t),\n\t\t\tnew WorkerBox3(\n\t\t\t\t[nodeCenter[0] - halfDimensions[0], nodeCenter[1] - halfDimensions[1], nodeCenter[2]],\n\t\t\t\t[nodeCenter[0], nodeCenter[1], nodeCenter[2] + halfDimensions[2]],\n\t\t\t),\n\t\t];\n\n\t\tconst splatCounts = [];\n\t\tconst baseIndexes = [];\n\t\tfor (let i = 0; i < childrenBounds.length; i++) {\n\t\t\tsplatCounts[i] = 0;\n\t\t\tbaseIndexes[i] = [];\n\t\t}\n\n\t\tconst center = [0, 0, 0];\n\t\tfor (let i = 0; i < splatCount; i++) {\n\t\t\tconst splatGlobalIndex = node.data.indexes[i];\n\t\t\tconst centerBase = indexToCenter[splatGlobalIndex];\n\t\t\tcenter[0] = sceneCenters[centerBase];\n\t\t\tcenter[1] = sceneCenters[centerBase + 1];\n\t\t\tcenter[2] = sceneCenters[centerBase + 2];\n\t\t\tfor (let j = 0; j < childrenBounds.length; j++) {\n\t\t\t\tif (childrenBounds[j].containsPoint(center)) {\n\t\t\t\t\tsplatCounts[j]++;\n\t\t\t\t\tbaseIndexes[j].push(splatGlobalIndex);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (let i = 0; i < childrenBounds.length; i++) {\n\t\t\tconst childNode = new WorkerSplatTreeNode(childrenBounds[i].min, childrenBounds[i].max, node.depth + 1);\n\t\t\tchildNode.data = {\n\t\t\t\tindexes: baseIndexes[i],\n\t\t\t};\n\t\t\tnode.children.push(childNode);\n\t\t}\n\n\t\tnode.data = {};\n\t\tfor (let child of node.children) {\n\t\t\tprocessSplatTreeNode(tree, child, indexToCenter, sceneCenters);\n\t\t}\n\t\treturn;\n\t};\n\n\tconst buildSubTree = (sceneCenters, maxDepth, maxCentersPerNode) => {\n\t\tconst sceneMin = [0, 0, 0];\n\t\tconst sceneMax = [0, 0, 0];\n\t\tconst indexes = [];\n\t\tconst centerCount = Math.floor(sceneCenters.length / 4);\n\t\tfor (let i = 0; i < centerCount; i++) {\n\t\t\tconst base = i * 4;\n\t\t\tconst x = sceneCenters[base];\n\t\t\tconst y = sceneCenters[base + 1];\n\t\t\tconst z = sceneCenters[base + 2];\n\t\t\tconst index = Math.round(sceneCenters[base + 3]);\n\t\t\tif (i === 0 || x < sceneMin[0]) sceneMin[0] = x;\n\t\t\tif (i === 0 || x > sceneMax[0]) sceneMax[0] = x;\n\t\t\tif (i === 0 || y < sceneMin[1]) sceneMin[1] = y;\n\t\t\tif (i === 0 || y > sceneMax[1]) sceneMax[1] = y;\n\t\t\tif (i === 0 || z < sceneMin[2]) sceneMin[2] = z;\n\t\t\tif (i === 0 || z > sceneMax[2]) sceneMax[2] = z;\n\t\t\tindexes.push(index);\n\t\t}\n\t\tconst subTree = new WorkerSplatSubTree(maxDepth, maxCentersPerNode);\n\t\tsubTree.sceneMin = sceneMin;\n\t\tsubTree.sceneMax = sceneMax;\n\t\tsubTree.rootNode = new WorkerSplatTreeNode(subTree.sceneMin, subTree.sceneMax, 0);\n\t\tsubTree.rootNode.data = {\n\t\t\tindexes: indexes,\n\t\t};\n\n\t\treturn subTree;\n\t};\n\n\tfunction createSplatTree(allCenters, maxDepth, maxCentersPerNode) {\n\t\tconst indexToCenter = [];\n\t\tfor (let sceneCenters of allCenters) {\n\t\t\tconst centerCount = Math.floor(sceneCenters.length / 4);\n\t\t\tfor (let i = 0; i < centerCount; i++) {\n\t\t\t\tconst base = i * 4;\n\t\t\t\tconst index = Math.round(sceneCenters[base + 3]);\n\t\t\t\tindexToCenter[index] = base;\n\t\t\t}\n\t\t}\n\t\tconst subTrees = [];\n\t\tfor (let sceneCenters of allCenters) {\n\t\t\tconst subTree = buildSubTree(sceneCenters, maxDepth, maxCentersPerNode);\n\t\t\tsubTrees.push(subTree);\n\t\t\tprocessSplatTreeNode(subTree, subTree.rootNode, indexToCenter, sceneCenters);\n\t\t}\n\t\tself.postMessage({\n\t\t\tsubTrees: subTrees,\n\t\t});\n\t}\n\n\tself.onmessage = (e) => {\n\t\tif (e.data.process) {\n\t\t\tcreateSplatTree(e.data.process.centers, e.data.process.maxDepth, e.data.process.maxCentersPerNode);\n\t\t}\n\t};\n}\n\nfunction workerProcessCenters(splatTreeWorker, centers, transferBuffers, maxDepth, maxCentersPerNode) {\n\tsplatTreeWorker.postMessage(\n\t\t{\n\t\t\tprocess: {\n\t\t\t\tcenters: centers,\n\t\t\t\tmaxDepth: maxDepth,\n\t\t\t\tmaxCentersPerNode: maxCentersPerNode,\n\t\t\t},\n\t\t},\n\t\ttransferBuffers,\n\t);\n}\n\nfunction checkAndCreateWorker() {\n\tconst splatTreeWorker = new Worker(\n\t\tURL.createObjectURL(\n\t\t\tnew Blob([\"(\", createSplatTreeWorker.toString(), \")(self)\"], {\n\t\t\t\ttype: \"application/javascript\",\n\t\t\t}),\n\t\t),\n\t);\n\treturn splatTreeWorker;\n}\n\n/**\n * SplatTree: Octree tailored to splat data from a SplatMesh instance\n */\nexport class SplatTree {\n\tconstructor(maxDepth, maxCentersPerNode) {\n\t\tthis.maxDepth = maxDepth;\n\t\tthis.maxCentersPerNode = maxCentersPerNode;\n\t\tthis.subTrees = [];\n\t\tthis.splatMesh = null;\n\t}\n\n\tdispose() {\n\t\tthis.diposeSplatTreeWorker();\n\t\tthis.disposed = true;\n\t}\n\n\tdiposeSplatTreeWorker() {\n\t\tif (this.splatTreeWorker) this.splatTreeWorker.terminate();\n\t\tthis.splatTreeWorker = null;\n\t}\n\n\t/**\n\t * Construct this instance of SplatTree from an instance of SplatMesh.\n\t *\n\t * @param {SplatMesh} splatMesh The instance of SplatMesh from which to construct this splat tree.\n\t * @param {function} filterFunc Optional function to filter out unwanted splats.\n\t * @param {function} onIndexesUpload Function to be called when the upload of splat centers to the splat tree\n\t *                                   builder worker starts and finishes.\n\t * @param {function} onSplatTreeConstruction Function to be called when the conversion of the local splat tree from\n\t *                                           the format produced by the splat tree builder worker starts and ends.\n\t * @return {undefined}\n\t */\n\tprocessSplatMesh = function(splatMesh, filterFunc = () => true, onIndexesUpload, onSplatTreeConstruction) {\n\t\tif (!this.splatTreeWorker) this.splatTreeWorker = checkAndCreateWorker();\n\n\t\tthis.splatMesh = splatMesh;\n\t\tthis.subTrees = [];\n\t\tconst center = new THREE.Vector3();\n\n\t\tconst addCentersForScene = (splatOffset, splatCount) => {\n\t\t\tconst sceneCenters = new Float32Array(splatCount * 4);\n\t\t\tlet addedCount = 0;\n\t\t\tfor (let i = 0; i < splatCount; i++) {\n\t\t\t\tconst globalSplatIndex = i + splatOffset;\n\t\t\t\tif (filterFunc(globalSplatIndex)) {\n\t\t\t\t\tsplatMesh.getSplatCenter(globalSplatIndex, center);\n\t\t\t\t\tconst addBase = addedCount * 4;\n\t\t\t\t\tsceneCenters[addBase] = center.x;\n\t\t\t\t\tsceneCenters[addBase + 1] = center.y;\n\t\t\t\t\tsceneCenters[addBase + 2] = center.z;\n\t\t\t\t\tsceneCenters[addBase + 3] = globalSplatIndex;\n\t\t\t\t\taddedCount++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn sceneCenters;\n\t\t};\n\n\t\treturn new Promise((resolve) => {\n\t\t\tconst checkForEarlyExit = () => {\n\t\t\t\tif (this.disposed) {\n\t\t\t\t\tthis.diposeSplatTreeWorker();\n\t\t\t\t\tresolve();\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t};\n\n\t\t\tif (onIndexesUpload) onIndexesUpload(false);\n\n\t\t\tdelayedExecute(() => {\n\t\t\t\tif (checkForEarlyExit()) return;\n\n\t\t\t\tconst allCenters = [];\n\t\t\t\tif (splatMesh.dynamicMode) {\n\t\t\t\t\tlet splatOffset = 0;\n\t\t\t\t\tfor (let s = 0; s < splatMesh.scenes.length; s++) {\n\t\t\t\t\t\tconst scene = splatMesh.getScene(s);\n\t\t\t\t\t\tconst splatCount = scene.splatBuffer.getSplatCount();\n\t\t\t\t\t\tconst sceneCenters = addCentersForScene(splatOffset, splatCount);\n\t\t\t\t\t\tallCenters.push(sceneCenters);\n\t\t\t\t\t\tsplatOffset += splatCount;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst sceneCenters = addCentersForScene(0, splatMesh.getSplatCount());\n\t\t\t\t\tallCenters.push(sceneCenters);\n\t\t\t\t}\n\n\t\t\t\tthis.splatTreeWorker.onmessage = (e) => {\n\t\t\t\t\tif (checkForEarlyExit()) return;\n\n\t\t\t\t\tif (e.data.subTrees) {\n\t\t\t\t\t\tif (onSplatTreeConstruction) onSplatTreeConstruction(false);\n\n\t\t\t\t\t\tdelayedExecute(() => {\n\t\t\t\t\t\t\tif (checkForEarlyExit()) return;\n\n\t\t\t\t\t\t\tfor (let workerSubTree of e.data.subTrees) {\n\t\t\t\t\t\t\t\tconst convertedSubTree = SplatSubTree.convertWorkerSubTree(workerSubTree, splatMesh);\n\t\t\t\t\t\t\t\tthis.subTrees.push(convertedSubTree);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis.diposeSplatTreeWorker();\n\n\t\t\t\t\t\t\tif (onSplatTreeConstruction) onSplatTreeConstruction(true);\n\n\t\t\t\t\t\t\tdelayedExecute(() => {\n\t\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tdelayedExecute(() => {\n\t\t\t\t\tif (checkForEarlyExit()) return;\n\t\t\t\t\tif (onIndexesUpload) onIndexesUpload(true);\n\t\t\t\t\tconst transferBuffers = allCenters.map((array) => array.buffer);\n\t\t\t\t\tworkerProcessCenters(\n\t\t\t\t\t\tthis.splatTreeWorker,\n\t\t\t\t\t\tallCenters,\n\t\t\t\t\t\ttransferBuffers,\n\t\t\t\t\t\tthis.maxDepth,\n\t\t\t\t\t\tthis.maxCentersPerNode,\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t};\n\n\tcountLeaves() {\n\t\tlet leafCount = 0;\n\t\tthis.visitLeaves(() => {\n\t\t\tleafCount++;\n\t\t});\n\n\t\treturn leafCount;\n\t}\n\n\tvisitLeaves(visitFunc) {\n\t\tconst visitLeavesFromNode = (node, visitFunc) => {\n\t\t\tif (node.children.length === 0) visitFunc(node);\n\t\t\tfor (let child of node.children) {\n\t\t\t\tvisitLeavesFromNode(child, visitFunc);\n\t\t\t}\n\t\t};\n\n\t\tfor (let subTree of this.subTrees) {\n\t\t\tvisitLeavesFromNode(subTree.rootNode, visitFunc);\n\t\t}\n\t}\n}\n","function WebGLExtensions(gl) {\n\tconst extensions = {};\n\n\tfunction getExtension(name) {\n\t\tif (extensions[name] !== undefined) {\n\t\t\treturn extensions[name];\n\t\t}\n\n\t\tlet extension;\n\n\t\tswitch (name) {\n\t\t\tcase \"WEBGL_depth_texture\":\n\t\t\t\textension =\n\t\t\t\t\tgl.getExtension(\"WEBGL_depth_texture\") ||\n\t\t\t\t\tgl.getExtension(\"MOZ_WEBGL_depth_texture\") ||\n\t\t\t\t\tgl.getExtension(\"WEBKIT_WEBGL_depth_texture\");\n\t\t\t\tbreak;\n\n\t\t\tcase \"EXT_texture_filter_anisotropic\":\n\t\t\t\textension =\n\t\t\t\t\tgl.getExtension(\"EXT_texture_filter_anisotropic\") ||\n\t\t\t\t\tgl.getExtension(\"MOZ_EXT_texture_filter_anisotropic\") ||\n\t\t\t\t\tgl.getExtension(\"WEBKIT_EXT_texture_filter_anisotropic\");\n\t\t\t\tbreak;\n\n\t\t\tcase \"WEBGL_compressed_texture_s3tc\":\n\t\t\t\textension =\n\t\t\t\t\tgl.getExtension(\"WEBGL_compressed_texture_s3tc\") ||\n\t\t\t\t\tgl.getExtension(\"MOZ_WEBGL_compressed_texture_s3tc\") ||\n\t\t\t\t\tgl.getExtension(\"WEBKIT_WEBGL_compressed_texture_s3tc\");\n\t\t\t\tbreak;\n\n\t\t\tcase \"WEBGL_compressed_texture_pvrtc\":\n\t\t\t\textension =\n\t\t\t\t\tgl.getExtension(\"WEBGL_compressed_texture_pvrtc\") ||\n\t\t\t\t\tgl.getExtension(\"WEBKIT_WEBGL_compressed_texture_pvrtc\");\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\textension = gl.getExtension(name);\n\t\t}\n\n\t\textensions[name] = extension;\n\n\t\treturn extension;\n\t}\n\n\treturn {\n\t\thas: function(name) {\n\t\t\treturn getExtension(name) !== null;\n\t\t},\n\n\t\tinit: function(capabilities) {\n\t\t\tif (capabilities.isWebGL2) {\n\t\t\t\tgetExtension(\"EXT_color_buffer_float\");\n\t\t\t\tgetExtension(\"WEBGL_clip_cull_distance\");\n\t\t\t} else {\n\t\t\t\tgetExtension(\"WEBGL_depth_texture\");\n\t\t\t\tgetExtension(\"OES_texture_float\");\n\t\t\t\tgetExtension(\"OES_texture_half_float\");\n\t\t\t\tgetExtension(\"OES_texture_half_float_linear\");\n\t\t\t\tgetExtension(\"OES_standard_derivatives\");\n\t\t\t\tgetExtension(\"OES_element_index_uint\");\n\t\t\t\tgetExtension(\"OES_vertex_array_object\");\n\t\t\t\tgetExtension(\"ANGLE_instanced_arrays\");\n\t\t\t}\n\n\t\t\tgetExtension(\"OES_texture_float_linear\");\n\t\t\tgetExtension(\"EXT_color_buffer_half_float\");\n\t\t\tgetExtension(\"WEBGL_multisampled_render_to_texture\");\n\t\t},\n\n\t\tget: function(name) {\n\t\t\tconst extension = getExtension(name);\n\n\t\t\tif (extension === null) {\n\t\t\t\tconsole.warn(\"THREE.WebGLRenderer: \" + name + \" extension not supported.\");\n\t\t\t}\n\n\t\t\treturn extension;\n\t\t},\n\t};\n}\n\nexport { WebGLExtensions };\n","function WebGLCapabilities(gl, extensions, parameters) {\n\tlet maxAnisotropy;\n\n\tfunction getMaxAnisotropy() {\n\t\tif (maxAnisotropy !== undefined) return maxAnisotropy;\n\n\t\tif (extensions.has(\"EXT_texture_filter_anisotropic\") === true) {\n\t\t\tconst extension = extensions.get(\"EXT_texture_filter_anisotropic\");\n\n\t\t\tmaxAnisotropy = gl.getParameter(extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT);\n\t\t} else {\n\t\t\tmaxAnisotropy = 0;\n\t\t}\n\n\t\treturn maxAnisotropy;\n\t}\n\n\tfunction getMaxPrecision(precision) {\n\t\tif (precision === \"highp\") {\n\t\t\tif (\n\t\t\t\tgl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.HIGH_FLOAT).precision > 0 &&\n\t\t\t\tgl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT).precision > 0\n\t\t\t) {\n\t\t\t\treturn \"highp\";\n\t\t\t}\n\n\t\t\tprecision = \"mediump\";\n\t\t}\n\n\t\tif (precision === \"mediump\") {\n\t\t\tif (\n\t\t\t\tgl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.MEDIUM_FLOAT).precision > 0 &&\n\t\t\t\tgl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT).precision > 0\n\t\t\t) {\n\t\t\t\treturn \"mediump\";\n\t\t\t}\n\t\t}\n\n\t\treturn \"lowp\";\n\t}\n\n\tconst isWebGL2 =\n\t\ttypeof WebGL2RenderingContext !== \"undefined\" && gl.constructor.name === \"WebGL2RenderingContext\";\n\n\tlet precision = parameters.precision !== undefined ? parameters.precision : \"highp\";\n\tconst maxPrecision = getMaxPrecision(precision);\n\n\tif (maxPrecision !== precision) {\n\t\tconsole.warn(\"THREE.WebGLRenderer:\", precision, \"not supported, using\", maxPrecision, \"instead.\");\n\t\tprecision = maxPrecision;\n\t}\n\n\tconst drawBuffers = isWebGL2 || extensions.has(\"WEBGL_draw_buffers\");\n\n\tconst logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;\n\n\tconst maxTextures = gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS);\n\tconst maxVertexTextures = gl.getParameter(gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS);\n\tconst maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE);\n\tconst maxCubemapSize = gl.getParameter(gl.MAX_CUBE_MAP_TEXTURE_SIZE);\n\n\tconst maxAttributes = gl.getParameter(gl.MAX_VERTEX_ATTRIBS);\n\tconst maxVertexUniforms = gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS);\n\tconst maxVaryings = gl.getParameter(gl.MAX_VARYING_VECTORS);\n\tconst maxFragmentUniforms = gl.getParameter(gl.MAX_FRAGMENT_UNIFORM_VECTORS);\n\n\tconst vertexTextures = maxVertexTextures > 0;\n\tconst floatFragmentTextures = isWebGL2 || extensions.has(\"OES_texture_float\");\n\tconst floatVertexTextures = vertexTextures && floatFragmentTextures;\n\n\tconst maxSamples = isWebGL2 ? gl.getParameter(gl.MAX_SAMPLES) : 0;\n\n\treturn {\n\t\tisWebGL2: isWebGL2,\n\n\t\tdrawBuffers: drawBuffers,\n\n\t\tgetMaxAnisotropy: getMaxAnisotropy,\n\t\tgetMaxPrecision: getMaxPrecision,\n\n\t\tprecision: precision,\n\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\n\t\tmaxTextures: maxTextures,\n\t\tmaxVertexTextures: maxVertexTextures,\n\t\tmaxTextureSize: maxTextureSize,\n\t\tmaxCubemapSize: maxCubemapSize,\n\n\t\tmaxAttributes: maxAttributes,\n\t\tmaxVertexUniforms: maxVertexUniforms,\n\t\tmaxVaryings: maxVaryings,\n\t\tmaxFragmentUniforms: maxFragmentUniforms,\n\n\t\tvertexTextures: vertexTextures,\n\t\tfloatFragmentTextures: floatFragmentTextures,\n\t\tfloatVertexTextures: floatVertexTextures,\n\n\t\tmaxSamples: maxSamples,\n\t};\n}\n\nexport { WebGLCapabilities };\n","export const SceneRevealMode = {\n\tDefault: 0,\n\tGradual: 1,\n\tInstant: 2,\n};\n","export const LogLevel = {\n\tNone: 0,\n\tError: 1,\n\tWarning: 2,\n\tInfo: 3,\n\tDebug: 4,\n};\n","import * as THREE from \"three\";\nimport { SplatMaterial3D } from \"./SplatMaterial3D.js\";\nimport { SplatMaterial2D } from \"./SplatMaterial2D.js\";\nimport { SplatGeometry } from \"./SplatGeometry.js\";\nimport { SplatScene } from \"./SplatScene.js\";\nimport { SplatTree } from \"../splattree/SplatTree.js\";\nimport { WebGLExtensions } from \"../three-shim/WebGLExtensions.js\";\nimport { WebGLCapabilities } from \"../three-shim/WebGLCapabilities.js\";\nimport { uintEncodedFloat, rgbaArrayToInteger } from \"../Util.js\";\nimport { Constants } from \"../Constants.js\";\nimport { SceneRevealMode } from \"../SceneRevealMode.js\";\nimport { SplatRenderMode } from \"../SplatRenderMode.js\";\nimport { LogLevel } from \"../LogLevel.js\";\nimport { clamp, getSphericalHarmonicsComponentCountForDegree } from \"../Util.js\";\n\nconst dummyGeometry = new THREE.BufferGeometry();\nconst dummyMaterial = new THREE.MeshBasicMaterial();\n\nconst COVARIANCES_ELEMENTS_PER_SPLAT = 6;\nconst CENTER_COLORS_ELEMENTS_PER_SPLAT = 4;\n\nconst COVARIANCES_ELEMENTS_PER_TEXEL_STORED = 4;\nconst COVARIANCES_ELEMENTS_PER_TEXEL_ALLOCATED = 4;\nconst COVARIANCES_ELEMENTS_PER_TEXEL_COMPRESSED_STORED = 6;\nconst COVARIANCES_ELEMENTS_PER_TEXEL_COMPRESSED_ALLOCATED = 8;\nconst SCALES_ROTATIONS_ELEMENTS_PER_TEXEL = 4;\nconst CENTER_COLORS_ELEMENTS_PER_TEXEL = 4;\nconst SCENE_INDEXES_ELEMENTS_PER_TEXEL = 1;\n\nconst SCENE_FADEIN_RATE_FAST = 0.012;\nconst SCENE_FADEIN_RATE_GRADUAL = 0.003;\n\nconst VISIBLE_REGION_EXPANSION_DELTA = 1;\n\n// Based on my own observations across multiple devices, OSes and browsers, using textures that have one dimension\n// greater than 4096 while the other is greater than or equal to 4096 causes issues (Essentially any texture larger\n// than 4096 x 4096 (16777216) texels). Specifically it seems all texture data beyond the 4096 x 4096 texel boundary\n// is corrupted, while data below that boundary is usable. In these cases the texture has been valid in the eyes of\n// both Three.js and WebGL, and the texel format (RG, RGBA, etc.) has not mattered. More investigation will be needed,\n// but for now the work-around is to split the spherical harmonics into three textures (one for each color channel).\nconst MAX_TEXTURE_TEXELS = 16777216;\n\n/**\n * SplatMesh: Container for one or more splat scenes, abstracting them into a single unified container for\n * splat data. Additionally contains data structures and code to make the splat data renderable as a Three.js mesh.\n */\nexport class SplatMesh extends THREE.Mesh {\n\tconstructor(\n\t\tsplatRenderMode = SplatRenderMode.ThreeD,\n\t\tdynamicMode = false,\n\t\tenableOptionalEffects = false,\n\t\thalfPrecisionCovariancesOnGPU = false,\n\t\tdevicePixelRatio = 1,\n\t\tenableDistancesComputationOnGPU = true,\n\t\tintegerBasedDistancesComputation = false,\n\t\tantialiased = false,\n\t\tmaxScreenSpaceSplatSize = 1024,\n\t\tlogLevel = LogLevel.None,\n\t\tsphericalHarmonicsDegree = 0,\n\t\tsceneFadeInRateMultiplier = 1.0,\n\t\tkernel2DSize = 0.3,\n\t) {\n\t\tsuper(dummyGeometry, dummyMaterial);\n\n\t\t// Reference to a Three.js renderer\n\t\tthis.renderer = undefined;\n\n\t\t// Determine how the splats are rendered\n\t\tthis.splatRenderMode = splatRenderMode;\n\n\t\t// When 'dynamicMode' is true, scenes are assumed to be non-static. Dynamic scenes are handled differently\n\t\t// and certain optimizations cannot be made for them. Additionally, by default, all splat data retrieved from\n\t\t// this splat mesh will not have their scene transform applied to them if the splat mesh is dynamic. That\n\t\t// can be overriden via parameters to the individual functions that are used to retrieve splat data.\n\t\tthis.dynamicMode = dynamicMode;\n\n\t\t// When true, allows for usage of extra properties and attributes during rendering for effects such as opacity adjustment.\n\t\t// Default is false for performance reasons. These properties are separate from transform properties (scale, rotation, position)\n\t\t// that are enabled by the 'dynamicScene' parameter.\n\t\tthis.enableOptionalEffects = enableOptionalEffects;\n\n\t\t// Use 16-bit floating point values when storing splat covariance data in textures, instead of 32-bit\n\t\tthis.halfPrecisionCovariancesOnGPU = halfPrecisionCovariancesOnGPU;\n\n\t\t// Ratio of the resolution in physical pixels to the resolution in CSS pixels for the current display device\n\t\tthis.devicePixelRatio = devicePixelRatio;\n\n\t\t// Use a transform feedback to calculate splat distances from the camera\n\t\tthis.enableDistancesComputationOnGPU = enableDistancesComputationOnGPU;\n\n\t\t// Use a faster integer-based approach for calculating splat distances from the camera\n\t\tthis.integerBasedDistancesComputation = integerBasedDistancesComputation;\n\n\t\t// When true, will perform additional steps during rendering to address artifacts caused by the rendering of gaussians at a\n\t\t// substantially different resolution than that at which they were rendered during training. This will only work correctly\n\t\t// for models that were trained using a process that utilizes this compensation calculation. For more details:\n\t\t// https://github.com/nerfstudio-project/gsplat/pull/117\n\t\t// https://github.com/graphdeco-inria/gaussian-splatting/issues/294#issuecomment-1772688093\n\t\tthis.antialiased = antialiased;\n\n\t\t// The size of the 2D kernel used for splat rendering\n\t\t// This will adjust the 2D kernel size after the projection\n\t\tthis.kernel2DSize = kernel2DSize;\n\n\t\t// Specify the maximum clip space splat size, can help deal with large splats that get too unwieldy\n\t\tthis.maxScreenSpaceSplatSize = maxScreenSpaceSplatSize;\n\n\t\t// The verbosity of console logging\n\t\tthis.logLevel = logLevel;\n\n\t\t// Degree 0 means no spherical harmonics\n\t\tthis.sphericalHarmonicsDegree = sphericalHarmonicsDegree;\n\t\tthis.minSphericalHarmonicsDegree = 0;\n\n\t\tthis.sceneFadeInRateMultiplier = sceneFadeInRateMultiplier;\n\n\t\t// The individual splat scenes stored in this splat mesh, each containing their own transform\n\t\tthis.scenes = [];\n\n\t\t// Special octree tailored to SplatMesh instances\n\t\tthis.splatTree = null;\n\t\tthis.baseSplatTree = null;\n\n\t\t// Cache textures and the intermediate data used to populate them\n\t\tthis.splatDataTextures = {};\n\n\t\tthis.distancesTransformFeedback = {\n\t\t\tid: null,\n\t\t\tvertexShader: null,\n\t\t\tfragmentShader: null,\n\t\t\tprogram: null,\n\t\t\tcentersBuffer: null,\n\t\t\tsceneIndexesBuffer: null,\n\t\t\toutDistancesBuffer: null,\n\t\t\tcentersLoc: -1,\n\t\t\tmodelViewProjLoc: -1,\n\t\t\tsceneIndexesLoc: -1,\n\t\t\ttransformsLocs: [],\n\t\t};\n\n\t\tthis.globalSplatIndexToLocalSplatIndexMap = [];\n\t\tthis.globalSplatIndexToSceneIndexMap = [];\n\n\t\tthis.lastBuildSplatCount = 0;\n\t\tthis.lastBuildScenes = [];\n\t\tthis.lastBuildMaxSplatCount = 0;\n\t\tthis.lastBuildSceneCount = 0;\n\t\tthis.firstRenderTime = -1;\n\t\tthis.finalBuild = false;\n\n\t\tthis.webGLUtils = null;\n\n\t\tthis.boundingBox = new THREE.Box3();\n\t\tthis.calculatedSceneCenter = new THREE.Vector3();\n\t\tthis.maxSplatDistanceFromSceneCenter = 0;\n\t\tthis.visibleRegionBufferRadius = 0;\n\t\tthis.visibleRegionRadius = 0;\n\t\tthis.visibleRegionFadeStartRadius = 0;\n\t\tthis.visibleRegionChanging = false;\n\n\t\tthis.splatScale = 1.0;\n\t\tthis.pointCloudModeEnabled = false;\n\n\t\tthis.disposed = false;\n\t\tthis.lastRenderer = null;\n\t\tthis.visible = false;\n\t}\n\n\t/**\n\t * Build a container for each scene managed by this splat mesh based on an instance of SplatBuffer, along with optional\n\t * transform data (position, scale, rotation) passed to the splat mesh during the build process.\n\t * @param {Array<THREE.Matrix4>} splatBuffers SplatBuffer instances containing splats for each scene\n\t * @param {Array<object>} sceneOptions Array of options objects: {\n\t *\n\t *         position (Array<number>):   Position of the scene, acts as an offset from its default position, defaults to [0, 0, 0]\n\t *\n\t *         rotation (Array<number>):   Rotation of the scene represented as a quaternion, defaults to [0, 0, 0, 1]\n\t *\n\t *         scale (Array<number>):      Scene's scale, defaults to [1, 1, 1]\n\t * }\n\t * @return {Array<THREE.Matrix4>}\n\t */\n\tstatic buildScenes(parentObject, splatBuffers, sceneOptions) {\n\t\tconst scenes = [];\n\t\tscenes.length = splatBuffers.length;\n\t\tfor (let i = 0; i < splatBuffers.length; i++) {\n\t\t\tconst splatBuffer = splatBuffers[i];\n\t\t\tconst options = sceneOptions[i] || {};\n\t\t\tlet positionArray = options[\"position\"] || [0, 0, 0];\n\t\t\tlet rotationArray = options[\"rotation\"] || [0, 0, 0, 1];\n\t\t\tlet scaleArray = options[\"scale\"] || [1, 1, 1];\n\t\t\tconst position = new THREE.Vector3().fromArray(positionArray);\n\t\t\tconst rotation = new THREE.Quaternion().fromArray(rotationArray);\n\t\t\tconst scale = new THREE.Vector3().fromArray(scaleArray);\n\t\t\tconst scene = SplatMesh.createScene(\n\t\t\t\tsplatBuffer,\n\t\t\t\tposition,\n\t\t\t\trotation,\n\t\t\t\tscale,\n\t\t\t\toptions.splatAlphaRemovalThreshold || 1,\n\t\t\t\toptions.opacity,\n\t\t\t\toptions.visible,\n\t\t\t);\n\t\t\tparentObject.add(scene);\n\t\t\tscenes[i] = scene;\n\t\t}\n\t\treturn scenes;\n\t}\n\n\tstatic createScene(splatBuffer, position, rotation, scale, minimumAlpha, opacity = 1.0, visible = true) {\n\t\treturn new SplatScene(splatBuffer, position, rotation, scale, minimumAlpha, opacity, visible);\n\t}\n\n\t/**\n\t * Build data structures that map global splat indexes (based on a unified index across all splat buffers) to\n\t * local data within a single scene.\n\t * @param {Array<SplatBuffer>} splatBuffers Instances of SplatBuffer off which to build the maps\n\t * @return {object}\n\t */\n\tstatic buildSplatIndexMaps(splatBuffers) {\n\t\tconst localSplatIndexMap = [];\n\t\tconst sceneIndexMap = [];\n\t\tlet totalSplatCount = 0;\n\t\tfor (let s = 0; s < splatBuffers.length; s++) {\n\t\t\tconst splatBuffer = splatBuffers[s];\n\t\t\tconst maxSplatCount = splatBuffer.getMaxSplatCount();\n\t\t\tfor (let i = 0; i < maxSplatCount; i++) {\n\t\t\t\tlocalSplatIndexMap[totalSplatCount] = i;\n\t\t\t\tsceneIndexMap[totalSplatCount] = s;\n\t\t\t\ttotalSplatCount++;\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tlocalSplatIndexMap,\n\t\t\tsceneIndexMap,\n\t\t};\n\t}\n\n\t/**\n\t * Build an instance of SplatTree (a specialized octree) for the given splat mesh.\n\t * @param {Array<number>} minAlphas Array of minimum splat slphas for each scene\n\t * @param {function} onSplatTreeIndexesUpload Function to be called when the upload of splat centers to the splat tree\n\t *                                            builder worker starts and finishes.\n\t * @param {function} onSplatTreeConstruction Function to be called when the conversion of the local splat tree from\n\t *                                           the format produced by the splat tree builder worker starts and ends.\n\t * @return {SplatTree}\n\t */\n\tbuildSplatTree = function(minAlphas = [], onSplatTreeIndexesUpload, onSplatTreeConstruction) {\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.disposeSplatTree();\n\t\t\t// TODO: expose SplatTree constructor parameters (maximumDepth and maxCentersPerNode) so that they can\n\t\t\t// be configured on a per-scene basis\n\t\t\tthis.baseSplatTree = new SplatTree(8, 1000);\n\t\t\tconst buildStartTime = performance.now();\n\t\t\tconst splatColor = new THREE.Vector4();\n\t\t\tthis.baseSplatTree\n\t\t\t\t.processSplatMesh(\n\t\t\t\t\tthis,\n\t\t\t\t\t(splatIndex) => {\n\t\t\t\t\t\tthis.getSplatColor(splatIndex, splatColor);\n\t\t\t\t\t\tconst sceneIndex = this.getSceneIndexForSplat(splatIndex);\n\t\t\t\t\t\tconst minAlpha = minAlphas[sceneIndex] || 1;\n\t\t\t\t\t\treturn splatColor.w >= minAlpha;\n\t\t\t\t\t},\n\t\t\t\t\tonSplatTreeIndexesUpload,\n\t\t\t\t\tonSplatTreeConstruction,\n\t\t\t\t)\n\t\t\t\t.then(() => {\n\t\t\t\t\tconst buildTime = performance.now() - buildStartTime;\n\t\t\t\t\tif (this.logLevel >= LogLevel.Info) console.log(\"SplatTree build: \" + buildTime + \" ms\");\n\t\t\t\t\tif (this.disposed) {\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.splatTree = this.baseSplatTree;\n\t\t\t\t\t\tthis.baseSplatTree = null;\n\n\t\t\t\t\t\tlet leavesWithVertices = 0;\n\t\t\t\t\t\tlet avgSplatCount = 0;\n\t\t\t\t\t\tlet maxSplatCount = 0;\n\t\t\t\t\t\tlet nodeCount = 0;\n\n\t\t\t\t\t\tthis.splatTree.visitLeaves((node) => {\n\t\t\t\t\t\t\tconst nodeSplatCount = node.data.indexes.length;\n\t\t\t\t\t\t\tif (nodeSplatCount > 0) {\n\t\t\t\t\t\t\t\tavgSplatCount += nodeSplatCount;\n\t\t\t\t\t\t\t\tmaxSplatCount = Math.max(maxSplatCount, nodeSplatCount);\n\t\t\t\t\t\t\t\tnodeCount++;\n\t\t\t\t\t\t\t\tleavesWithVertices++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (this.logLevel >= LogLevel.Info) {\n\t\t\t\t\t\t\tconsole.log(`SplatTree leaves: ${this.splatTree.countLeaves()}`);\n\t\t\t\t\t\t\tconsole.log(`SplatTree leaves with splats:${leavesWithVertices}`);\n\t\t\t\t\t\t\tavgSplatCount = avgSplatCount / nodeCount;\n\t\t\t\t\t\t\tconsole.log(`Avg splat count per node: ${avgSplatCount}`);\n\t\t\t\t\t\t\tconsole.log(`Total splat count: ${this.getSplatCount()}`);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t});\n\t};\n\n\t/**\n\t * Construct this instance of SplatMesh.\n\t * @param {Array<SplatBuffer>} splatBuffers The base splat data, instances of SplatBuffer\n\t * @param {Array<object>} sceneOptions Dynamic options for each scene {\n\t *\n\t *         splatAlphaRemovalThreshold: Ignore any splats with an alpha less than the specified\n\t *                                     value (valid range: 0 - 255), defaults to 1\n\t *\n\t *         position (Array<number>):   Position of the scene, acts as an offset from its default position, defaults to [0, 0, 0]\n\t *\n\t *         rotation (Array<number>):   Rotation of the scene represented as a quaternion, defaults to [0, 0, 0, 1]\n\t *\n\t *         scale (Array<number>):      Scene's scale, defaults to [1, 1, 1]\n\t *\n\t * }\n\t * @param {boolean} keepSceneTransforms For a scene that already exists and is being overwritten, this flag\n\t *                                      says to keep the transform from the existing scene.\n\t * @param {boolean} finalBuild Will the splat mesh be in its final state after this build?\n\t * @param {function} onSplatTreeIndexesUpload Function to be called when the upload of splat centers to the splat tree\n\t *                                            builder worker starts and finishes.\n\t * @param {function} onSplatTreeConstruction Function to be called when the conversion of the local splat tree from\n\t *                                           the format produced by the splat tree builder worker starts and ends.\n\t * @return {object} Object containing info about the splats that are updated\n\t */\n\tbuild(\n\t\tsplatBuffers,\n\t\tsceneOptions,\n\t\tkeepSceneTransforms = true,\n\t\tfinalBuild = false,\n\t\tonSplatTreeIndexesUpload,\n\t\tonSplatTreeConstruction,\n\t\tpreserveVisibleRegion = true,\n\t) {\n\t\tthis.sceneOptions = sceneOptions;\n\t\tthis.finalBuild = finalBuild;\n\n\t\tconst maxSplatCount = SplatMesh.getTotalMaxSplatCountForSplatBuffers(splatBuffers);\n\n\t\tconst newScenes = SplatMesh.buildScenes(this, splatBuffers, sceneOptions);\n\t\tif (keepSceneTransforms) {\n\t\t\tfor (let i = 0; i < this.scenes.length && i < newScenes.length; i++) {\n\t\t\t\tconst newScene = newScenes[i];\n\t\t\t\tconst existingScene = this.getScene(i);\n\t\t\t\tnewScene.copyTransformData(existingScene);\n\t\t\t}\n\t\t}\n\t\tthis.scenes = newScenes;\n\n\t\tlet minSphericalHarmonicsDegree = 3;\n\t\tfor (let splatBuffer of splatBuffers) {\n\t\t\tconst splatBufferSphericalHarmonicsDegree = splatBuffer.getMinSphericalHarmonicsDegree();\n\t\t\tif (splatBufferSphericalHarmonicsDegree < minSphericalHarmonicsDegree) {\n\t\t\t\tminSphericalHarmonicsDegree = splatBufferSphericalHarmonicsDegree;\n\t\t\t}\n\t\t}\n\t\tthis.minSphericalHarmonicsDegree = Math.min(minSphericalHarmonicsDegree, this.sphericalHarmonicsDegree);\n\n\t\tlet splatBuffersChanged = false;\n\t\tif (splatBuffers.length !== this.lastBuildScenes.length) {\n\t\t\tsplatBuffersChanged = true;\n\t\t} else {\n\t\t\tfor (let i = 0; i < splatBuffers.length; i++) {\n\t\t\t\tconst splatBuffer = splatBuffers[i];\n\t\t\t\tif (splatBuffer !== this.lastBuildScenes[i].splatBuffer) {\n\t\t\t\t\tsplatBuffersChanged = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet isUpdateBuild = true;\n\t\tif (\n\t\t\tthis.scenes.length !== 1 ||\n\t\t\tthis.lastBuildSceneCount !== this.scenes.length ||\n\t\t\tthis.lastBuildMaxSplatCount !== maxSplatCount ||\n\t\t\tsplatBuffersChanged\n\t\t) {\n\t\t\tisUpdateBuild = false;\n\t\t}\n\n\t\tif (!isUpdateBuild) {\n\t\t\tthis.boundingBox = new THREE.Box3();\n\t\t\tif (!preserveVisibleRegion) {\n\t\t\t\tthis.maxSplatDistanceFromSceneCenter = 0;\n\t\t\t\tthis.visibleRegionBufferRadius = 0;\n\t\t\t\tthis.visibleRegionRadius = 0;\n\t\t\t\tthis.visibleRegionFadeStartRadius = 0;\n\t\t\t\tthis.firstRenderTime = -1;\n\t\t\t}\n\t\t\tthis.lastBuildScenes = [];\n\t\t\tthis.lastBuildSplatCount = 0;\n\t\t\tthis.lastBuildMaxSplatCount = 0;\n\t\t\tthis.disposeMeshData();\n\t\t\tthis.geometry = SplatGeometry.build(maxSplatCount);\n\t\t\tif (this.splatRenderMode === SplatRenderMode.ThreeD) {\n\t\t\t\tthis.material = SplatMaterial3D.build(\n\t\t\t\t\tthis.dynamicMode,\n\t\t\t\t\tthis.enableOptionalEffects,\n\t\t\t\t\tthis.antialiased,\n\t\t\t\t\tthis.maxScreenSpaceSplatSize,\n\t\t\t\t\tthis.splatScale,\n\t\t\t\t\tthis.pointCloudModeEnabled,\n\t\t\t\t\tthis.minSphericalHarmonicsDegree,\n\t\t\t\t\tthis.kernel2DSize,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.material = SplatMaterial2D.build(\n\t\t\t\t\tthis.dynamicMode,\n\t\t\t\t\tthis.enableOptionalEffects,\n\t\t\t\t\tthis.splatScale,\n\t\t\t\t\tthis.pointCloudModeEnabled,\n\t\t\t\t\tthis.minSphericalHarmonicsDegree,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst indexMaps = SplatMesh.buildSplatIndexMaps(splatBuffers);\n\t\t\tthis.globalSplatIndexToLocalSplatIndexMap = indexMaps.localSplatIndexMap;\n\t\t\tthis.globalSplatIndexToSceneIndexMap = indexMaps.sceneIndexMap;\n\t\t}\n\n\t\tconst splatBufferSplatCount = this.getSplatCount(true);\n\t\tif (this.enableDistancesComputationOnGPU) this.setupDistancesComputationTransformFeedback();\n\t\tconst dataUpdateResults = this.refreshGPUDataFromSplatBuffers(isUpdateBuild);\n\n\t\tfor (let i = 0; i < this.scenes.length; i++) {\n\t\t\tthis.lastBuildScenes[i] = this.scenes[i];\n\t\t}\n\t\tthis.lastBuildSplatCount = splatBufferSplatCount;\n\t\tthis.lastBuildMaxSplatCount = this.getMaxSplatCount();\n\t\tthis.lastBuildSceneCount = this.scenes.length;\n\n\t\tif (finalBuild && this.scenes.length > 0) {\n\t\t\tthis.buildSplatTree(\n\t\t\t\tsceneOptions.map((options) => options.splatAlphaRemovalThreshold || 1),\n\t\t\t\tonSplatTreeIndexesUpload,\n\t\t\t\tonSplatTreeConstruction,\n\t\t\t).then(() => {\n\t\t\t\tif (this.onSplatTreeReadyCallback) this.onSplatTreeReadyCallback(this.splatTree);\n\t\t\t\tthis.onSplatTreeReadyCallback = null;\n\t\t\t});\n\t\t}\n\n\t\tthis.visible = this.scenes.length > 0;\n\n\t\treturn dataUpdateResults;\n\t}\n\n\tfreeIntermediateSplatData() {\n\t\tconst deleteTextureData = (texture) => {\n\t\t\tdelete texture.source.data;\n\t\t\tdelete texture.image;\n\t\t\ttexture.onUpdate = null;\n\t\t};\n\n\t\tdelete this.splatDataTextures.baseData.covariances;\n\t\tdelete this.splatDataTextures.baseData.centers;\n\t\tdelete this.splatDataTextures.baseData.colors;\n\t\tdelete this.splatDataTextures.baseData.sphericalHarmonics;\n\n\t\tdelete this.splatDataTextures.centerColors.data;\n\t\tdelete this.splatDataTextures.covariances.data;\n\t\tif (this.splatDataTextures.sphericalHarmonics) {\n\t\t\tdelete this.splatDataTextures.sphericalHarmonics.data;\n\t\t}\n\t\tif (this.splatDataTextures.sceneIndexes) {\n\t\t\tdelete this.splatDataTextures.sceneIndexes.data;\n\t\t}\n\n\t\tthis.splatDataTextures.centerColors.texture.needsUpdate = true;\n\t\tthis.splatDataTextures.centerColors.texture.onUpdate = () => {\n\t\t\tdeleteTextureData(this.splatDataTextures.centerColors.texture);\n\t\t};\n\n\t\tthis.splatDataTextures.covariances.texture.needsUpdate = true;\n\t\tthis.splatDataTextures.covariances.texture.onUpdate = () => {\n\t\t\tdeleteTextureData(this.splatDataTextures.covariances.texture);\n\t\t};\n\n\t\tif (this.splatDataTextures.sphericalHarmonics) {\n\t\t\tif (this.splatDataTextures.sphericalHarmonics.texture) {\n\t\t\t\tthis.splatDataTextures.sphericalHarmonics.texture.needsUpdate = true;\n\t\t\t\tthis.splatDataTextures.sphericalHarmonics.texture.onUpdate = () => {\n\t\t\t\t\tdeleteTextureData(this.splatDataTextures.sphericalHarmonics.texture);\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tthis.splatDataTextures.sphericalHarmonics.textures.forEach((texture) => {\n\t\t\t\t\ttexture.needsUpdate = true;\n\t\t\t\t\ttexture.onUpdate = () => {\n\t\t\t\t\t\tdeleteTextureData(texture);\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tif (this.splatDataTextures.sceneIndexes) {\n\t\t\tthis.splatDataTextures.sceneIndexes.texture.needsUpdate = true;\n\t\t\tthis.splatDataTextures.sceneIndexes.texture.onUpdate = () => {\n\t\t\t\tdeleteTextureData(this.splatDataTextures.sceneIndexes.texture);\n\t\t\t};\n\t\t}\n\t}\n\t/**\n\t * Dispose all resources held by the splat mesh\n\t */\n\tdispose() {\n\t\tthis.disposeMeshData();\n\t\tthis.disposeTextures();\n\t\tthis.disposeSplatTree();\n\t\tif (this.enableDistancesComputationOnGPU) {\n\t\t\tif (this.computeDistancesOnGPUSyncTimeout) {\n\t\t\t\tclearTimeout(this.computeDistancesOnGPUSyncTimeout);\n\t\t\t\tthis.computeDistancesOnGPUSyncTimeout = null;\n\t\t\t}\n\t\t\tthis.disposeDistancesComputationGPUResources();\n\t\t}\n\t\tthis.scenes = [];\n\t\tthis.distancesTransformFeedback = {\n\t\t\tid: null,\n\t\t\tvertexShader: null,\n\t\t\tfragmentShader: null,\n\t\t\tprogram: null,\n\t\t\tcentersBuffer: null,\n\t\t\tsceneIndexesBuffer: null,\n\t\t\toutDistancesBuffer: null,\n\t\t\tcentersLoc: -1,\n\t\t\tmodelViewProjLoc: -1,\n\t\t\tsceneIndexesLoc: -1,\n\t\t\ttransformsLocs: [],\n\t\t};\n\t\tthis.renderer = null;\n\n\t\tthis.globalSplatIndexToLocalSplatIndexMap = [];\n\t\tthis.globalSplatIndexToSceneIndexMap = [];\n\n\t\tthis.lastBuildSplatCount = 0;\n\t\tthis.lastBuildScenes = [];\n\t\tthis.lastBuildMaxSplatCount = 0;\n\t\tthis.lastBuildSceneCount = 0;\n\t\tthis.firstRenderTime = -1;\n\t\tthis.finalBuild = false;\n\n\t\tthis.webGLUtils = null;\n\n\t\tthis.boundingBox = new THREE.Box3();\n\t\tthis.calculatedSceneCenter = new THREE.Vector3();\n\t\tthis.maxSplatDistanceFromSceneCenter = 0;\n\t\tthis.visibleRegionBufferRadius = 0;\n\t\tthis.visibleRegionRadius = 0;\n\t\tthis.visibleRegionFadeStartRadius = 0;\n\t\tthis.visibleRegionChanging = false;\n\n\t\tthis.splatScale = 1.0;\n\t\tthis.pointCloudModeEnabled = false;\n\n\t\tthis.disposed = true;\n\t\tthis.lastRenderer = null;\n\t\tthis.visible = false;\n\t}\n\n\t/**\n\t * Dispose of only the Three.js mesh resources (geometry, material, and texture)\n\t */\n\tdisposeMeshData() {\n\t\tif (this.geometry && this.geometry !== dummyGeometry) {\n\t\t\tthis.geometry.dispose();\n\t\t\tthis.geometry = null;\n\t\t}\n\t\tif (this.material) {\n\t\t\tthis.material.dispose();\n\t\t\tthis.material = null;\n\t\t}\n\t}\n\n\tdisposeTextures() {\n\t\tfor (let textureKey in this.splatDataTextures) {\n\t\t\tif (this.splatDataTextures.hasOwnProperty(textureKey)) {\n\t\t\t\tconst textureContainer = this.splatDataTextures[textureKey];\n\t\t\t\tif (textureContainer.texture) {\n\t\t\t\t\ttextureContainer.texture.dispose();\n\t\t\t\t\ttextureContainer.texture = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.splatDataTextures = null;\n\t}\n\n\tdisposeSplatTree() {\n\t\tif (this.splatTree) {\n\t\t\tthis.splatTree.dispose();\n\t\t\tthis.splatTree = null;\n\t\t}\n\t\tif (this.baseSplatTree) {\n\t\t\tthis.baseSplatTree.dispose();\n\t\t\tthis.baseSplatTree = null;\n\t\t}\n\t}\n\n\tgetSplatTree() {\n\t\treturn this.splatTree;\n\t}\n\n\tonSplatTreeReady(callback) {\n\t\tthis.onSplatTreeReadyCallback = callback;\n\t}\n\n\t/**\n\t * Get copies of data that are necessary for splat distance computation: splat center positions and splat\n\t * scene indexes (necessary for applying dynamic scene transformations during distance computation)\n\t * @param {*} start The index at which to start copying data\n\t * @param {*} end  The index at which to stop copying data\n\t * @return {object}\n\t */\n\tgetDataForDistancesComputation(start, end) {\n\t\tconst centers = this.integerBasedDistancesComputation ?\n\t\t\tthis.getIntegerCenters(start, end, true) :\n\t\t\tthis.getFloatCenters(start, end, true);\n\t\tconst sceneIndexes = this.getSceneIndexes(start, end);\n\t\treturn {\n\t\t\tcenters,\n\t\t\tsceneIndexes,\n\t\t};\n\t}\n\n\t/**\n\t * Refresh data textures and GPU buffers with splat data from the splat buffers belonging to this mesh.\n\t * @param {boolean} sinceLastBuildOnly Specify whether or not to only update for splats that have been added since the last build.\n\t * @return {object}\n\t */\n\trefreshGPUDataFromSplatBuffers(sinceLastBuildOnly) {\n\t\tconst splatCount = this.getSplatCount(true);\n\t\tthis.refreshDataTexturesFromSplatBuffers(sinceLastBuildOnly);\n\t\tconst updateStart = sinceLastBuildOnly ? this.lastBuildSplatCount : 0;\n\t\tconst { centers, sceneIndexes } = this.getDataForDistancesComputation(updateStart, splatCount - 1);\n\t\tif (this.enableDistancesComputationOnGPU) {\n\t\t\tthis.refreshGPUBuffersForDistancesComputation(centers, sceneIndexes, sinceLastBuildOnly);\n\t\t}\n\t\treturn {\n\t\t\tfrom: updateStart,\n\t\t\tto: splatCount - 1,\n\t\t\tcount: splatCount - updateStart,\n\t\t\tcenters: centers,\n\t\t\tsceneIndexes: sceneIndexes,\n\t\t};\n\t}\n\n\t/**\n\t * Update the GPU buffers that are used for computing splat distances on the GPU.\n\t * @param {Array<number>} centers Splat center positions\n\t * @param {Array<number>} sceneIndexes Indexes of the scene to which each splat belongs\n\t * @param {boolean} sinceLastBuildOnly Specify whether or not to only update for splats that have been added since the last build.\n\t */\n\trefreshGPUBuffersForDistancesComputation(centers, sceneIndexes, sinceLastBuildOnly = false) {\n\t\tconst offset = sinceLastBuildOnly ? this.lastBuildSplatCount : 0;\n\t\tthis.updateGPUCentersBufferForDistancesComputation(sinceLastBuildOnly, centers, offset);\n\t\tthis.updateGPUTransformIndexesBufferForDistancesComputation(sinceLastBuildOnly, sceneIndexes, offset);\n\t}\n\n\t/**\n\t * Refresh data textures with data from the splat buffers for this mesh.\n\t * @param {boolean} sinceLastBuildOnly Specify whether or not to only update for splats that have been added since the last build.\n\t */\n\trefreshDataTexturesFromSplatBuffers(sinceLastBuildOnly) {\n\t\tconst splatCount = this.getSplatCount(true);\n\t\tconst fromSplat = this.lastBuildSplatCount;\n\t\tconst toSplat = splatCount - 1;\n\n\t\tif (!sinceLastBuildOnly) {\n\t\t\tthis.setupDataTextures();\n\t\t\tthis.updateBaseDataFromSplatBuffers();\n\t\t} else {\n\t\t\tthis.updateBaseDataFromSplatBuffers(fromSplat, toSplat);\n\t\t}\n\n\t\tthis.updateDataTexturesFromBaseData(fromSplat, toSplat);\n\t\tthis.updateVisibleRegion(sinceLastBuildOnly);\n\t}\n\n\tsetupDataTextures() {\n\t\tconst maxSplatCount = this.getMaxSplatCount();\n\t\tconst splatCount = this.getSplatCount(true);\n\n\t\tthis.disposeTextures();\n\n\t\tconst computeDataTextureSize = (elementsPerTexel, elementsPerSplat) => {\n\t\t\tconst texSize = new THREE.Vector2(4096, 1024);\n\t\t\twhile (texSize.x * texSize.y * elementsPerTexel < maxSplatCount * elementsPerSplat) texSize.y *= 2;\n\t\t\treturn texSize;\n\t\t};\n\n\t\tconst getCovariancesElementsPertexelStored = (compressionLevel) => {\n\t\t\treturn compressionLevel >= 1 ?\n\t\t\t\tCOVARIANCES_ELEMENTS_PER_TEXEL_COMPRESSED_STORED :\n\t\t\t\tCOVARIANCES_ELEMENTS_PER_TEXEL_STORED;\n\t\t};\n\n\t\tconst getCovariancesInitialTextureSpecs = (compressionLevel) => {\n\t\t\tconst elementsPerTexelStored = getCovariancesElementsPertexelStored(compressionLevel);\n\t\t\tconst texSize = computeDataTextureSize(elementsPerTexelStored, 6);\n\t\t\treturn { elementsPerTexelStored, texSize };\n\t\t};\n\n\t\tlet covarianceCompressionLevel = this.getTargetCovarianceCompressionLevel();\n\t\tconst scaleRotationCompressionLevel = 0;\n\t\tconst shCompressionLevel = this.getTargetSphericalHarmonicsCompressionLevel();\n\n\t\tlet covariances;\n\t\tlet scales;\n\t\tlet rotations;\n\t\tif (this.splatRenderMode === SplatRenderMode.ThreeD) {\n\t\t\tconst initialCovTexSpecs = getCovariancesInitialTextureSpecs(covarianceCompressionLevel);\n\t\t\tif (\n\t\t\t\tinitialCovTexSpecs.texSize.x * initialCovTexSpecs.texSize.y > MAX_TEXTURE_TEXELS &&\n\t\t\t\tcovarianceCompressionLevel === 0\n\t\t\t) {\n\t\t\t\tcovarianceCompressionLevel = 1;\n\t\t\t}\n\t\t\tcovariances = new Float32Array(maxSplatCount * COVARIANCES_ELEMENTS_PER_SPLAT);\n\t\t} else {\n\t\t\tscales = new Float32Array(maxSplatCount * 3);\n\t\t\trotations = new Float32Array(maxSplatCount * 4);\n\t\t}\n\n\t\tconst centers = new Float32Array(maxSplatCount * 3);\n\t\tconst colors = new Uint8Array(maxSplatCount * 4);\n\n\t\tlet SphericalHarmonicsArrayType = Float32Array;\n\t\tif (shCompressionLevel === 1) SphericalHarmonicsArrayType = Uint16Array;\n\t\telse if (shCompressionLevel === 2) SphericalHarmonicsArrayType = Uint8Array;\n\t\tconst shComponentCount = getSphericalHarmonicsComponentCountForDegree(this.minSphericalHarmonicsDegree);\n\t\tconst shData = this.minSphericalHarmonicsDegree ?\n\t\t\tnew SphericalHarmonicsArrayType(maxSplatCount * shComponentCount) :\n\t\t\tundefined;\n\n\t\t// set up centers/colors data texture\n\t\tconst centersColsTexSize = computeDataTextureSize(CENTER_COLORS_ELEMENTS_PER_TEXEL, 4);\n\t\tconst paddedCentersCols = new Uint32Array(\n\t\t\tcentersColsTexSize.x * centersColsTexSize.y * CENTER_COLORS_ELEMENTS_PER_TEXEL,\n\t\t);\n\t\tSplatMesh.updateCenterColorsPaddedData(0, splatCount - 1, centers, colors, paddedCentersCols);\n\n\t\tconst centersColsTex = new THREE.DataTexture(\n\t\t\tpaddedCentersCols,\n\t\t\tcentersColsTexSize.x,\n\t\t\tcentersColsTexSize.y,\n\t\t\tTHREE.RGBAIntegerFormat,\n\t\t\tTHREE.UnsignedIntType,\n\t\t);\n\t\tcentersColsTex.internalFormat = \"RGBA32UI\";\n\t\tcentersColsTex.needsUpdate = true;\n\t\tthis.material.uniforms.centersColorsTexture.value = centersColsTex;\n\t\tthis.material.uniforms.centersColorsTextureSize.value.copy(centersColsTexSize);\n\t\tthis.material.uniformsNeedUpdate = true;\n\n\t\tthis.splatDataTextures = {\n\t\t\tbaseData: {\n\t\t\t\tcovariances: covariances,\n\t\t\t\tscales: scales,\n\t\t\t\trotations: rotations,\n\t\t\t\tcenters: centers,\n\t\t\t\tcolors: colors,\n\t\t\t\tsphericalHarmonics: shData,\n\t\t\t},\n\t\t\tcenterColors: {\n\t\t\t\tdata: paddedCentersCols,\n\t\t\t\ttexture: centersColsTex,\n\t\t\t\tsize: centersColsTexSize,\n\t\t\t},\n\t\t};\n\n\t\tif (this.splatRenderMode === SplatRenderMode.ThreeD) {\n\t\t\t// set up covariances data texture\n\n\t\t\tconst covTexSpecs = getCovariancesInitialTextureSpecs(covarianceCompressionLevel);\n\t\t\tconst covariancesElementsPerTexelStored = covTexSpecs.elementsPerTexelStored;\n\t\t\tconst covTexSize = covTexSpecs.texSize;\n\n\t\t\tlet CovariancesDataType = covarianceCompressionLevel >= 1 ? Uint32Array : Float32Array;\n\t\t\tconst covariancesElementsPerTexelAllocated =\n\t\t\t\tcovarianceCompressionLevel >= 1 ?\n\t\t\t\t\tCOVARIANCES_ELEMENTS_PER_TEXEL_COMPRESSED_ALLOCATED :\n\t\t\t\t\tCOVARIANCES_ELEMENTS_PER_TEXEL_ALLOCATED;\n\t\t\tconst covariancesTextureData = new CovariancesDataType(\n\t\t\t\tcovTexSize.x * covTexSize.y * covariancesElementsPerTexelAllocated,\n\t\t\t);\n\n\t\t\tif (covarianceCompressionLevel === 0) {\n\t\t\t\tcovariancesTextureData.set(covariances);\n\t\t\t} else {\n\t\t\t\tSplatMesh.updatePaddedCompressedCovariancesTextureData(\n\t\t\t\t\tcovariances,\n\t\t\t\t\tcovariancesTextureData,\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\tcovariances.length,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tlet covTex;\n\t\t\tif (covarianceCompressionLevel >= 1) {\n\t\t\t\tcovTex = new THREE.DataTexture(\n\t\t\t\t\tcovariancesTextureData,\n\t\t\t\t\tcovTexSize.x,\n\t\t\t\t\tcovTexSize.y,\n\t\t\t\t\tTHREE.RGBAIntegerFormat,\n\t\t\t\t\tTHREE.UnsignedIntType,\n\t\t\t\t);\n\t\t\t\tcovTex.internalFormat = \"RGBA32UI\";\n\t\t\t\tthis.material.uniforms.covariancesTextureHalfFloat.value = covTex;\n\t\t\t} else {\n\t\t\t\tcovTex = new THREE.DataTexture(\n\t\t\t\t\tcovariancesTextureData,\n\t\t\t\t\tcovTexSize.x,\n\t\t\t\t\tcovTexSize.y,\n\t\t\t\t\tTHREE.RGBAFormat,\n\t\t\t\t\tTHREE.FloatType,\n\t\t\t\t);\n\t\t\t\tthis.material.uniforms.covariancesTexture.value = covTex;\n\n\t\t\t\t// For some reason a usampler2D needs to have a valid texture attached or WebGL complains\n\t\t\t\tconst dummyTex = new THREE.DataTexture(\n\t\t\t\t\tnew Uint32Array(32),\n\t\t\t\t\t2,\n\t\t\t\t\t2,\n\t\t\t\t\tTHREE.RGBAIntegerFormat,\n\t\t\t\t\tTHREE.UnsignedIntType,\n\t\t\t\t);\n\t\t\t\tdummyTex.internalFormat = \"RGBA32UI\";\n\t\t\t\tthis.material.uniforms.covariancesTextureHalfFloat.value = dummyTex;\n\t\t\t\tdummyTex.needsUpdate = true;\n\t\t\t}\n\t\t\tcovTex.needsUpdate = true;\n\n\t\t\tthis.material.uniforms.covariancesAreHalfFloat.value = covarianceCompressionLevel >= 1 ? 1 : 0;\n\t\t\tthis.material.uniforms.covariancesTextureSize.value.copy(covTexSize);\n\n\t\t\tthis.splatDataTextures[\"covariances\"] = {\n\t\t\t\tdata: covariancesTextureData,\n\t\t\t\ttexture: covTex,\n\t\t\t\tsize: covTexSize,\n\t\t\t\tcompressionLevel: covarianceCompressionLevel,\n\t\t\t\telementsPerTexelStored: covariancesElementsPerTexelStored,\n\t\t\t\telementsPerTexelAllocated: covariancesElementsPerTexelAllocated,\n\t\t\t};\n\t\t} else {\n\t\t\t// set up scale & rotations data texture\n\t\t\tconst elementsPerSplat = 6;\n\t\t\tconst scaleRotationsTexSize = computeDataTextureSize(\n\t\t\t\tSCALES_ROTATIONS_ELEMENTS_PER_TEXEL,\n\t\t\t\telementsPerSplat,\n\t\t\t);\n\t\t\tlet ScaleRotationsDataType = scaleRotationCompressionLevel >= 1 ? Uint16Array : Float32Array;\n\t\t\tlet scaleRotationsTextureType =\n\t\t\t\tscaleRotationCompressionLevel >= 1 ? THREE.HalfFloatType : THREE.FloatType;\n\t\t\tconst paddedScaleRotations = new ScaleRotationsDataType(\n\t\t\t\tscaleRotationsTexSize.x * scaleRotationsTexSize.y * SCALES_ROTATIONS_ELEMENTS_PER_TEXEL,\n\t\t\t);\n\n\t\t\tSplatMesh.updateScaleRotationsPaddedData(0, splatCount - 1, scales, rotations, paddedScaleRotations);\n\n\t\t\tconst scaleRotationsTex = new THREE.DataTexture(\n\t\t\t\tpaddedScaleRotations,\n\t\t\t\tscaleRotationsTexSize.x,\n\t\t\t\tscaleRotationsTexSize.y,\n\t\t\t\tTHREE.RGBAFormat,\n\t\t\t\tscaleRotationsTextureType,\n\t\t\t);\n\t\t\tscaleRotationsTex.needsUpdate = true;\n\t\t\tthis.material.uniforms.scaleRotationsTexture.value = scaleRotationsTex;\n\t\t\tthis.material.uniforms.scaleRotationsTextureSize.value.copy(scaleRotationsTexSize);\n\n\t\t\tthis.splatDataTextures[\"scaleRotations\"] = {\n\t\t\t\tdata: paddedScaleRotations,\n\t\t\t\ttexture: scaleRotationsTex,\n\t\t\t\tsize: scaleRotationsTexSize,\n\t\t\t\tcompressionLevel: scaleRotationCompressionLevel,\n\t\t\t};\n\t\t}\n\n\t\tif (shData) {\n\t\t\tconst shTextureType = shCompressionLevel === 2 ? THREE.UnsignedByteType : THREE.HalfFloatType;\n\n\t\t\tlet paddedSHComponentCount = shComponentCount;\n\t\t\tif (paddedSHComponentCount % 2 !== 0) paddedSHComponentCount++;\n\t\t\tconst shElementsPerTexel = 4;\n\t\t\tconst texelFormat = shElementsPerTexel === 4 ? THREE.RGBAFormat : THREE.RGFormat;\n\t\t\tlet shTexSize = computeDataTextureSize(shElementsPerTexel, paddedSHComponentCount);\n\n\t\t\t// Use one texture for all spherical harmonics data\n\t\t\tif (shTexSize.x * shTexSize.y <= MAX_TEXTURE_TEXELS) {\n\t\t\t\tconst paddedSHArraySize = shTexSize.x * shTexSize.y * shElementsPerTexel;\n\t\t\t\tconst paddedSHArray = new SphericalHarmonicsArrayType(paddedSHArraySize);\n\t\t\t\tfor (let c = 0; c < splatCount; c++) {\n\t\t\t\t\tconst srcBase = shComponentCount * c;\n\t\t\t\t\tconst destBase = paddedSHComponentCount * c;\n\t\t\t\t\tfor (let i = 0; i < shComponentCount; i++) {\n\t\t\t\t\t\tpaddedSHArray[destBase + i] = shData[srcBase + i];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst shTexture = new THREE.DataTexture(\n\t\t\t\t\tpaddedSHArray,\n\t\t\t\t\tshTexSize.x,\n\t\t\t\t\tshTexSize.y,\n\t\t\t\t\ttexelFormat,\n\t\t\t\t\tshTextureType,\n\t\t\t\t);\n\t\t\t\tshTexture.needsUpdate = true;\n\t\t\t\tthis.material.uniforms.sphericalHarmonicsTexture.value = shTexture;\n\t\t\t\tthis.splatDataTextures[\"sphericalHarmonics\"] = {\n\t\t\t\t\tcomponentCount: shComponentCount,\n\t\t\t\t\tpaddedComponentCount: paddedSHComponentCount,\n\t\t\t\t\tdata: paddedSHArray,\n\t\t\t\t\ttextureCount: 1,\n\t\t\t\t\ttexture: shTexture,\n\t\t\t\t\tsize: shTexSize,\n\t\t\t\t\tcompressionLevel: shCompressionLevel,\n\t\t\t\t\telementsPerTexel: shElementsPerTexel,\n\t\t\t\t};\n\t\t\t\t// Use three textures for spherical harmonics data, one per color channel\n\t\t\t} else {\n\t\t\t\tconst shComponentCountPerChannel = shComponentCount / 3;\n\t\t\t\tpaddedSHComponentCount = shComponentCountPerChannel;\n\t\t\t\tif (paddedSHComponentCount % 2 !== 0) paddedSHComponentCount++;\n\t\t\t\tshTexSize = computeDataTextureSize(shElementsPerTexel, paddedSHComponentCount);\n\n\t\t\t\tconst paddedSHArraySize = shTexSize.x * shTexSize.y * shElementsPerTexel;\n\t\t\t\tconst textureUniforms = [\n\t\t\t\t\tthis.material.uniforms.sphericalHarmonicsTextureR,\n\t\t\t\t\tthis.material.uniforms.sphericalHarmonicsTextureG,\n\t\t\t\t\tthis.material.uniforms.sphericalHarmonicsTextureB,\n\t\t\t\t];\n\t\t\t\tconst paddedSHArrays = [];\n\t\t\t\tconst shTextures = [];\n\t\t\t\tfor (let t = 0; t < 3; t++) {\n\t\t\t\t\tconst paddedSHArray = new SphericalHarmonicsArrayType(paddedSHArraySize);\n\t\t\t\t\tpaddedSHArrays.push(paddedSHArray);\n\t\t\t\t\tfor (let c = 0; c < splatCount; c++) {\n\t\t\t\t\t\tconst srcBase = shComponentCount * c;\n\t\t\t\t\t\tconst destBase = paddedSHComponentCount * c;\n\t\t\t\t\t\tif (shComponentCountPerChannel >= 3) {\n\t\t\t\t\t\t\tfor (let i = 0; i < 3; i++) paddedSHArray[destBase + i] = shData[srcBase + t * 3 + i];\n\t\t\t\t\t\t\tif (shComponentCountPerChannel >= 8) {\n\t\t\t\t\t\t\t\tfor (let i = 0; i < 5; i++) paddedSHArray[destBase + 3 + i] = shData[srcBase + 9 + t * 5 + i];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst shTexture = new THREE.DataTexture(\n\t\t\t\t\t\tpaddedSHArray,\n\t\t\t\t\t\tshTexSize.x,\n\t\t\t\t\t\tshTexSize.y,\n\t\t\t\t\t\ttexelFormat,\n\t\t\t\t\t\tshTextureType,\n\t\t\t\t\t);\n\t\t\t\t\tshTextures.push(shTexture);\n\t\t\t\t\tshTexture.needsUpdate = true;\n\t\t\t\t\ttextureUniforms[t].value = shTexture;\n\t\t\t\t}\n\n\t\t\t\tthis.material.uniforms.sphericalHarmonicsMultiTextureMode.value = 1;\n\t\t\t\tthis.splatDataTextures[\"sphericalHarmonics\"] = {\n\t\t\t\t\tcomponentCount: shComponentCount,\n\t\t\t\t\tcomponentCountPerChannel: shComponentCountPerChannel,\n\t\t\t\t\tpaddedComponentCount: paddedSHComponentCount,\n\t\t\t\t\tdata: paddedSHArrays,\n\t\t\t\t\ttextureCount: 3,\n\t\t\t\t\ttextures: shTextures,\n\t\t\t\t\tsize: shTexSize,\n\t\t\t\t\tcompressionLevel: shCompressionLevel,\n\t\t\t\t\telementsPerTexel: shElementsPerTexel,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthis.material.uniforms.sphericalHarmonicsTextureSize.value.copy(shTexSize);\n\t\t\tthis.material.uniforms.sphericalHarmonics8BitMode.value = shCompressionLevel === 2 ? 1 : 0;\n\t\t\tfor (let s = 0; s < this.scenes.length; s++) {\n\t\t\t\tconst splatBuffer = this.scenes[s].splatBuffer;\n\t\t\t\tthis.material.uniforms.sphericalHarmonics8BitCompressionRangeMin.value[s] =\n\t\t\t\t\tsplatBuffer.minSphericalHarmonicsCoeff;\n\t\t\t\tthis.material.uniforms.sphericalHarmonics8BitCompressionRangeMax.value[s] =\n\t\t\t\t\tsplatBuffer.maxSphericalHarmonicsCoeff;\n\t\t\t}\n\t\t\tthis.material.uniformsNeedUpdate = true;\n\t\t}\n\n\t\tconst sceneIndexesTexSize = computeDataTextureSize(SCENE_INDEXES_ELEMENTS_PER_TEXEL, 4);\n\t\tconst paddedTransformIndexes = new Uint32Array(\n\t\t\tsceneIndexesTexSize.x * sceneIndexesTexSize.y * SCENE_INDEXES_ELEMENTS_PER_TEXEL,\n\t\t);\n\t\tfor (let c = 0; c < splatCount; c++) paddedTransformIndexes[c] = this.globalSplatIndexToSceneIndexMap[c];\n\t\tconst sceneIndexesTexture = new THREE.DataTexture(\n\t\t\tpaddedTransformIndexes,\n\t\t\tsceneIndexesTexSize.x,\n\t\t\tsceneIndexesTexSize.y,\n\t\t\tTHREE.RedIntegerFormat,\n\t\t\tTHREE.UnsignedIntType,\n\t\t);\n\t\tsceneIndexesTexture.internalFormat = \"R32UI\";\n\t\tsceneIndexesTexture.needsUpdate = true;\n\t\tthis.material.uniforms.sceneIndexesTexture.value = sceneIndexesTexture;\n\t\tthis.material.uniforms.sceneIndexesTextureSize.value.copy(sceneIndexesTexSize);\n\t\tthis.material.uniformsNeedUpdate = true;\n\t\tthis.splatDataTextures[\"sceneIndexes\"] = {\n\t\t\tdata: paddedTransformIndexes,\n\t\t\ttexture: sceneIndexesTexture,\n\t\t\tsize: sceneIndexesTexSize,\n\t\t};\n\t\tthis.material.uniforms.sceneCount.value = this.scenes.length;\n\t}\n\n\tupdateBaseDataFromSplatBuffers(fromSplat, toSplat) {\n\t\tconst covarancesTextureDesc = this.splatDataTextures[\"covariances\"];\n\t\tconst covarianceCompressionLevel = covarancesTextureDesc ?\n\t\t\tcovarancesTextureDesc.compressionLevel :\n\t\t\tundefined;\n\t\tconst scaleRotationsTextureDesc = this.splatDataTextures[\"scaleRotations\"];\n\t\tconst scaleRotationCompressionLevel = scaleRotationsTextureDesc ?\n\t\t\tscaleRotationsTextureDesc.compressionLevel :\n\t\t\tundefined;\n\t\tconst shITextureDesc = this.splatDataTextures[\"sphericalHarmonics\"];\n\t\tconst shCompressionLevel = shITextureDesc ? shITextureDesc.compressionLevel : 0;\n\n\t\tthis.fillSplatDataArrays(\n\t\t\tthis.splatDataTextures.baseData.covariances,\n\t\t\tthis.splatDataTextures.baseData.scales,\n\t\t\tthis.splatDataTextures.baseData.rotations,\n\t\t\tthis.splatDataTextures.baseData.centers,\n\t\t\tthis.splatDataTextures.baseData.colors,\n\t\t\tthis.splatDataTextures.baseData.sphericalHarmonics,\n\t\t\tundefined,\n\t\t\tcovarianceCompressionLevel,\n\t\t\tscaleRotationCompressionLevel,\n\t\t\tshCompressionLevel,\n\t\t\tfromSplat,\n\t\t\ttoSplat,\n\t\t\tfromSplat,\n\t\t);\n\t}\n\n\tupdateDataTexturesFromBaseData(fromSplat, toSplat) {\n\t\tconst covarancesTextureDesc = this.splatDataTextures[\"covariances\"];\n\t\tconst covarianceCompressionLevel = covarancesTextureDesc ?\n\t\t\tcovarancesTextureDesc.compressionLevel :\n\t\t\tundefined;\n\t\tconst scaleRotationsTextureDesc = this.splatDataTextures[\"scaleRotations\"];\n\t\tconst scaleRotationCompressionLevel = scaleRotationsTextureDesc ?\n\t\t\tscaleRotationsTextureDesc.compressionLevel :\n\t\t\tundefined;\n\t\tconst shTextureDesc = this.splatDataTextures[\"sphericalHarmonics\"];\n\t\tconst shCompressionLevel = shTextureDesc ? shTextureDesc.compressionLevel : 0;\n\n\t\t// Update center & color data texture\n\t\tconst centerColorsTextureDescriptor = this.splatDataTextures[\"centerColors\"];\n\t\tconst paddedCenterColors = centerColorsTextureDescriptor.data;\n\t\tconst centerColorsTexture = centerColorsTextureDescriptor.texture;\n\t\tSplatMesh.updateCenterColorsPaddedData(\n\t\t\tfromSplat,\n\t\t\ttoSplat,\n\t\t\tthis.splatDataTextures.baseData.centers,\n\t\t\tthis.splatDataTextures.baseData.colors,\n\t\t\tpaddedCenterColors,\n\t\t);\n\t\tconst centerColorsTextureProps = this.renderer ? this.renderer.properties.get(centerColorsTexture) : null;\n\t\tif (!centerColorsTextureProps || !centerColorsTextureProps.__webglTexture) {\n\t\t\tcenterColorsTexture.needsUpdate = true;\n\t\t} else {\n\t\t\tthis.updateDataTexture(\n\t\t\t\tpaddedCenterColors,\n\t\t\t\tcenterColorsTextureDescriptor.texture,\n\t\t\t\tcenterColorsTextureDescriptor.size,\n\t\t\t\tcenterColorsTextureProps,\n\t\t\t\tCENTER_COLORS_ELEMENTS_PER_TEXEL,\n\t\t\t\tCENTER_COLORS_ELEMENTS_PER_SPLAT,\n\t\t\t\t4,\n\t\t\t\tfromSplat,\n\t\t\t\ttoSplat,\n\t\t\t);\n\t\t}\n\n\t\t// update covariance data texture\n\t\tif (covarancesTextureDesc) {\n\t\t\tconst covariancesTexture = covarancesTextureDesc.texture;\n\t\t\tconst covarancesStartElement = fromSplat * COVARIANCES_ELEMENTS_PER_SPLAT;\n\t\t\tconst covariancesEndElement = toSplat * COVARIANCES_ELEMENTS_PER_SPLAT;\n\n\t\t\tif (covarianceCompressionLevel === 0) {\n\t\t\t\tfor (let i = covarancesStartElement; i <= covariancesEndElement; i++) {\n\t\t\t\t\tconst covariance = this.splatDataTextures.baseData.covariances[i];\n\t\t\t\t\tcovarancesTextureDesc.data[i] = covariance;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tSplatMesh.updatePaddedCompressedCovariancesTextureData(\n\t\t\t\t\tthis.splatDataTextures.baseData.covariances,\n\t\t\t\t\tcovarancesTextureDesc.data,\n\t\t\t\t\tfromSplat * covarancesTextureDesc.elementsPerTexelAllocated,\n\t\t\t\t\tcovarancesStartElement,\n\t\t\t\t\tcovariancesEndElement,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst covariancesTextureProps = this.renderer ? this.renderer.properties.get(covariancesTexture) : null;\n\t\t\tif (!covariancesTextureProps || !covariancesTextureProps.__webglTexture) {\n\t\t\t\tcovariancesTexture.needsUpdate = true;\n\t\t\t} else {\n\t\t\t\tif (covarianceCompressionLevel === 0) {\n\t\t\t\t\tthis.updateDataTexture(\n\t\t\t\t\t\tcovarancesTextureDesc.data,\n\t\t\t\t\t\tcovarancesTextureDesc.texture,\n\t\t\t\t\t\tcovarancesTextureDesc.size,\n\t\t\t\t\t\tcovariancesTextureProps,\n\t\t\t\t\t\tcovarancesTextureDesc.elementsPerTexelStored,\n\t\t\t\t\t\tCOVARIANCES_ELEMENTS_PER_SPLAT,\n\t\t\t\t\t\t4,\n\t\t\t\t\t\tfromSplat,\n\t\t\t\t\t\ttoSplat,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tthis.updateDataTexture(\n\t\t\t\t\t\tcovarancesTextureDesc.data,\n\t\t\t\t\t\tcovarancesTextureDesc.texture,\n\t\t\t\t\t\tcovarancesTextureDesc.size,\n\t\t\t\t\t\tcovariancesTextureProps,\n\t\t\t\t\t\tcovarancesTextureDesc.elementsPerTexelAllocated,\n\t\t\t\t\t\tcovarancesTextureDesc.elementsPerTexelAllocated,\n\t\t\t\t\t\t2,\n\t\t\t\t\t\tfromSplat,\n\t\t\t\t\t\ttoSplat,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// update scale and rotation data texture\n\t\tif (scaleRotationsTextureDesc) {\n\t\t\tconst paddedScaleRotations = scaleRotationsTextureDesc.data;\n\t\t\tconst scaleRotationsTexture = scaleRotationsTextureDesc.texture;\n\t\t\tconst elementsPerSplat = 6;\n\t\t\tconst bytesPerElement = scaleRotationCompressionLevel === 0 ? 4 : 2;\n\n\t\t\tSplatMesh.updateScaleRotationsPaddedData(\n\t\t\t\tfromSplat,\n\t\t\t\ttoSplat,\n\t\t\t\tthis.splatDataTextures.baseData.scales,\n\t\t\t\tthis.splatDataTextures.baseData.rotations,\n\t\t\t\tpaddedScaleRotations,\n\t\t\t);\n\t\t\tconst scaleRotationsTextureProps = this.renderer ?\n\t\t\t\tthis.renderer.properties.get(scaleRotationsTexture) :\n\t\t\t\tnull;\n\t\t\tif (!scaleRotationsTextureProps || !scaleRotationsTextureProps.__webglTexture) {\n\t\t\t\tscaleRotationsTexture.needsUpdate = true;\n\t\t\t} else {\n\t\t\t\tthis.updateDataTexture(\n\t\t\t\t\tpaddedScaleRotations,\n\t\t\t\t\tscaleRotationsTextureDesc.texture,\n\t\t\t\t\tscaleRotationsTextureDesc.size,\n\t\t\t\t\tscaleRotationsTextureProps,\n\t\t\t\t\tSCALES_ROTATIONS_ELEMENTS_PER_TEXEL,\n\t\t\t\t\telementsPerSplat,\n\t\t\t\t\tbytesPerElement,\n\t\t\t\t\tfromSplat,\n\t\t\t\t\ttoSplat,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// update spherical harmonics data texture\n\t\tconst shData = this.splatDataTextures.baseData.sphericalHarmonics;\n\t\tif (shData) {\n\t\t\tlet shBytesPerElement = 4;\n\t\t\tif (shCompressionLevel === 1) shBytesPerElement = 2;\n\t\t\telse if (shCompressionLevel === 2) shBytesPerElement = 1;\n\n\t\t\tconst updateTexture = (\n\t\t\t\tshTexture,\n\t\t\t\tshTextureSize,\n\t\t\t\telementsPerTexel,\n\t\t\t\tpaddedSHArray,\n\t\t\t\tpaddedSHComponentCount,\n\t\t\t) => {\n\t\t\t\tconst shTextureProps = this.renderer ? this.renderer.properties.get(shTexture) : null;\n\t\t\t\tif (!shTextureProps || !shTextureProps.__webglTexture) {\n\t\t\t\t\tshTexture.needsUpdate = true;\n\t\t\t\t} else {\n\t\t\t\t\tthis.updateDataTexture(\n\t\t\t\t\t\tpaddedSHArray,\n\t\t\t\t\t\tshTexture,\n\t\t\t\t\t\tshTextureSize,\n\t\t\t\t\t\tshTextureProps,\n\t\t\t\t\t\telementsPerTexel,\n\t\t\t\t\t\tpaddedSHComponentCount,\n\t\t\t\t\t\tshBytesPerElement,\n\t\t\t\t\t\tfromSplat,\n\t\t\t\t\t\ttoSplat,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst shComponentCount = shTextureDesc.componentCount;\n\t\t\tconst paddedSHComponentCount = shTextureDesc.paddedComponentCount;\n\n\t\t\t// Update for the case of a single texture for all spherical harmonics data\n\t\t\tif (shTextureDesc.textureCount === 1) {\n\t\t\t\tconst paddedSHArray = shTextureDesc.data;\n\t\t\t\tfor (let c = fromSplat; c <= toSplat; c++) {\n\t\t\t\t\tconst srcBase = shComponentCount * c;\n\t\t\t\t\tconst destBase = paddedSHComponentCount * c;\n\t\t\t\t\tfor (let i = 0; i < shComponentCount; i++) {\n\t\t\t\t\t\tpaddedSHArray[destBase + i] = shData[srcBase + i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tupdateTexture(\n\t\t\t\t\tshTextureDesc.texture,\n\t\t\t\t\tshTextureDesc.size,\n\t\t\t\t\tshTextureDesc.elementsPerTexel,\n\t\t\t\t\tpaddedSHArray,\n\t\t\t\t\tpaddedSHComponentCount,\n\t\t\t\t);\n\t\t\t\t// Update for the case of spherical harmonics data split among three textures, one for each color channel\n\t\t\t} else {\n\t\t\t\tconst shComponentCountPerChannel = shTextureDesc.componentCountPerChannel;\n\t\t\t\tfor (let t = 0; t < 3; t++) {\n\t\t\t\t\tconst paddedSHArray = shTextureDesc.data[t];\n\t\t\t\t\tfor (let c = fromSplat; c <= toSplat; c++) {\n\t\t\t\t\t\tconst srcBase = shComponentCount * c;\n\t\t\t\t\t\tconst destBase = paddedSHComponentCount * c;\n\t\t\t\t\t\tif (shComponentCountPerChannel >= 3) {\n\t\t\t\t\t\t\tfor (let i = 0; i < 3; i++) paddedSHArray[destBase + i] = shData[srcBase + t * 3 + i];\n\t\t\t\t\t\t\tif (shComponentCountPerChannel >= 8) {\n\t\t\t\t\t\t\t\tfor (let i = 0; i < 5; i++) paddedSHArray[destBase + 3 + i] = shData[srcBase + 9 + t * 5 + i];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tupdateTexture(\n\t\t\t\t\t\tshTextureDesc.textures[t],\n\t\t\t\t\t\tshTextureDesc.size,\n\t\t\t\t\t\tshTextureDesc.elementsPerTexel,\n\t\t\t\t\t\tpaddedSHArray,\n\t\t\t\t\t\tpaddedSHComponentCount,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// update scene index & transform data\n\t\tconst sceneIndexesTexDesc = this.splatDataTextures[\"sceneIndexes\"];\n\t\tconst paddedSceneIndexes = sceneIndexesTexDesc.data;\n\t\tfor (let c = this.lastBuildSplatCount; c <= toSplat; c++) {\n\t\t\tpaddedSceneIndexes[c] = this.globalSplatIndexToSceneIndexMap[c];\n\t\t}\n\t\tconst sceneIndexesTexture = sceneIndexesTexDesc.texture;\n\t\tconst sceneIndexesTextureProps = this.renderer ? this.renderer.properties.get(sceneIndexesTexture) : null;\n\t\tif (!sceneIndexesTextureProps || !sceneIndexesTextureProps.__webglTexture) {\n\t\t\tsceneIndexesTexture.needsUpdate = true;\n\t\t} else {\n\t\t\tthis.updateDataTexture(\n\t\t\t\tpaddedSceneIndexes,\n\t\t\t\tsceneIndexesTexDesc.texture,\n\t\t\t\tsceneIndexesTexDesc.size,\n\t\t\t\tsceneIndexesTextureProps,\n\t\t\t\t1,\n\t\t\t\t1,\n\t\t\t\t1,\n\t\t\t\tthis.lastBuildSplatCount,\n\t\t\t\ttoSplat,\n\t\t\t);\n\t\t}\n\t}\n\n\tgetTargetCovarianceCompressionLevel() {\n\t\treturn this.halfPrecisionCovariancesOnGPU ? 1 : 0;\n\t}\n\n\tgetTargetSphericalHarmonicsCompressionLevel() {\n\t\treturn Math.max(1, this.getMaximumSplatBufferCompressionLevel());\n\t}\n\n\tgetMaximumSplatBufferCompressionLevel() {\n\t\tlet maxCompressionLevel;\n\t\tfor (let i = 0; i < this.scenes.length; i++) {\n\t\t\tconst scene = this.getScene(i);\n\t\t\tconst splatBuffer = scene.splatBuffer;\n\t\t\tif (i === 0 || splatBuffer.compressionLevel > maxCompressionLevel) {\n\t\t\t\tmaxCompressionLevel = splatBuffer.compressionLevel;\n\t\t\t}\n\t\t}\n\t\treturn maxCompressionLevel;\n\t}\n\n\tgetMinimumSplatBufferCompressionLevel() {\n\t\tlet minCompressionLevel;\n\t\tfor (let i = 0; i < this.scenes.length; i++) {\n\t\t\tconst scene = this.getScene(i);\n\t\t\tconst splatBuffer = scene.splatBuffer;\n\t\t\tif (i === 0 || splatBuffer.compressionLevel < minCompressionLevel) {\n\t\t\t\tminCompressionLevel = splatBuffer.compressionLevel;\n\t\t\t}\n\t\t}\n\t\treturn minCompressionLevel;\n\t}\n\n\tstatic computeTextureUpdateRegion(startSplat, endSplat, textureWidth, elementsPerTexel, elementsPerSplat) {\n\t\tconst texelsPerSplat = elementsPerSplat / elementsPerTexel;\n\n\t\tconst startSplatTexels = startSplat * texelsPerSplat;\n\t\tconst startRow = Math.floor(startSplatTexels / textureWidth);\n\t\tconst startRowElement = startRow * textureWidth * elementsPerTexel;\n\n\t\tconst endSplatTexels = endSplat * texelsPerSplat;\n\t\tconst endRow = Math.floor(endSplatTexels / textureWidth);\n\t\tconst endRowEndElement = endRow * textureWidth * elementsPerTexel + textureWidth * elementsPerTexel;\n\n\t\treturn {\n\t\t\tdataStart: startRowElement,\n\t\t\tdataEnd: endRowEndElement,\n\t\t\tstartRow: startRow,\n\t\t\tendRow: endRow,\n\t\t};\n\t}\n\n\tupdateDataTexture(\n\t\tpaddedData,\n\t\ttexture,\n\t\ttextureSize,\n\t\ttextureProps,\n\t\telementsPerTexel,\n\t\telementsPerSplat,\n\t\tbytesPerElement,\n\t\tfrom,\n\t\tto,\n\t) {\n\t\tconst gl = this.renderer.getContext();\n\t\tconst updateRegion = SplatMesh.computeTextureUpdateRegion(\n\t\t\tfrom,\n\t\t\tto,\n\t\t\ttextureSize.x,\n\t\t\telementsPerTexel,\n\t\t\telementsPerSplat,\n\t\t);\n\t\tconst updateElementCount = updateRegion.dataEnd - updateRegion.dataStart;\n\t\tconst updateDataView = new paddedData.constructor(\n\t\t\tpaddedData.buffer,\n\t\t\tupdateRegion.dataStart * bytesPerElement,\n\t\t\tupdateElementCount,\n\t\t);\n\t\tconst updateHeight = updateRegion.endRow - updateRegion.startRow + 1;\n\t\tconst glType = this.webGLUtils.convert(texture.type);\n\t\tconst glFormat = this.webGLUtils.convert(texture.format, texture.colorSpace);\n\t\tconst currentTexture = gl.getParameter(gl.TEXTURE_BINDING_2D);\n\t\tgl.bindTexture(gl.TEXTURE_2D, textureProps.__webglTexture);\n\t\tgl.texSubImage2D(\n\t\t\tgl.TEXTURE_2D,\n\t\t\t0,\n\t\t\t0,\n\t\t\tupdateRegion.startRow,\n\t\t\ttextureSize.x,\n\t\t\tupdateHeight,\n\t\t\tglFormat,\n\t\t\tglType,\n\t\t\tupdateDataView,\n\t\t);\n\t\tgl.bindTexture(gl.TEXTURE_2D, currentTexture);\n\t}\n\n\tstatic updatePaddedCompressedCovariancesTextureData(\n\t\tsourceData,\n\t\ttextureData,\n\t\ttextureDataStartIndex,\n\t\tfromElement,\n\t\ttoElement,\n\t) {\n\t\tlet textureDataView = new DataView(textureData.buffer);\n\t\tlet textureDataIndex = textureDataStartIndex;\n\t\tlet sequentialCount = 0;\n\t\tfor (let i = fromElement; i <= toElement; i += 2) {\n\t\t\ttextureDataView.setUint16(textureDataIndex * 2, sourceData[i], true);\n\t\t\ttextureDataView.setUint16(textureDataIndex * 2 + 2, sourceData[i + 1], true);\n\t\t\ttextureDataIndex += 2;\n\t\t\tsequentialCount++;\n\t\t\tif (sequentialCount >= 3) {\n\t\t\t\ttextureDataIndex += 2;\n\t\t\t\tsequentialCount = 0;\n\t\t\t}\n\t\t}\n\t}\n\n\tstatic updateCenterColorsPaddedData(from, to, centers, colors, paddedCenterColors) {\n\t\tfor (let c = from; c <= to; c++) {\n\t\t\tconst colorsBase = c * 4;\n\t\t\tconst centersBase = c * 3;\n\t\t\tconst centerColorsBase = c * 4;\n\t\t\tpaddedCenterColors[centerColorsBase] = rgbaArrayToInteger(colors, colorsBase);\n\t\t\tpaddedCenterColors[centerColorsBase + 1] = uintEncodedFloat(centers[centersBase]);\n\t\t\tpaddedCenterColors[centerColorsBase + 2] = uintEncodedFloat(centers[centersBase + 1]);\n\t\t\tpaddedCenterColors[centerColorsBase + 3] = uintEncodedFloat(centers[centersBase + 2]);\n\t\t}\n\t}\n\n\tstatic updateScaleRotationsPaddedData(from, to, scales, rotations, paddedScaleRotations) {\n\t\tconst combinedSize = 6;\n\t\tfor (let c = from; c <= to; c++) {\n\t\t\tconst scaleBase = c * 3;\n\t\t\tconst rotationBase = c * 4;\n\t\t\tconst scaleRotationsBase = c * combinedSize;\n\n\t\t\tpaddedScaleRotations[scaleRotationsBase] = scales[scaleBase];\n\t\t\tpaddedScaleRotations[scaleRotationsBase + 1] = scales[scaleBase + 1];\n\t\t\tpaddedScaleRotations[scaleRotationsBase + 2] = scales[scaleBase + 2];\n\n\t\t\tpaddedScaleRotations[scaleRotationsBase + 3] = rotations[rotationBase];\n\t\t\tpaddedScaleRotations[scaleRotationsBase + 4] = rotations[rotationBase + 1];\n\t\t\tpaddedScaleRotations[scaleRotationsBase + 5] = rotations[rotationBase + 2];\n\t\t}\n\t}\n\n\tupdateVisibleRegion(sinceLastBuildOnly) {\n\t\tconst splatCount = this.getSplatCount(true);\n\t\tconst tempCenter = new THREE.Vector3();\n\t\tif (!sinceLastBuildOnly) {\n\t\t\tconst avgCenter = new THREE.Vector3();\n\t\t\tthis.scenes.forEach((scene) => {\n\t\t\t\tavgCenter.add(scene.splatBuffer.sceneCenter);\n\t\t\t});\n\t\t\tavgCenter.multiplyScalar(1.0 / this.scenes.length);\n\t\t\tthis.calculatedSceneCenter.copy(avgCenter);\n\t\t\tthis.material.uniforms.sceneCenter.value.copy(this.calculatedSceneCenter);\n\t\t\tthis.material.uniformsNeedUpdate = true;\n\t\t}\n\n\t\tconst startSplatFormMaxDistanceCalc = sinceLastBuildOnly ? this.lastBuildSplatCount : 0;\n\t\tfor (let i = startSplatFormMaxDistanceCalc; i < splatCount; i++) {\n\t\t\tthis.getSplatCenter(i, tempCenter, true);\n\t\t\tconst distFromCSceneCenter = tempCenter.sub(this.calculatedSceneCenter).length();\n\t\t\tif (distFromCSceneCenter > this.maxSplatDistanceFromSceneCenter) {\nthis.maxSplatDistanceFromSceneCenter = distFromCSceneCenter;\n}\n\t\t}\n\n\t\tif (\n\t\t\tthis.maxSplatDistanceFromSceneCenter - this.visibleRegionBufferRadius >\n\t\t\tVISIBLE_REGION_EXPANSION_DELTA\n\t\t) {\n\t\t\tthis.visibleRegionBufferRadius = this.maxSplatDistanceFromSceneCenter;\n\t\t\tthis.visibleRegionRadius = Math.max(\n\t\t\t\tthis.visibleRegionBufferRadius - VISIBLE_REGION_EXPANSION_DELTA,\n\t\t\t\t0.0,\n\t\t\t);\n\t\t}\n\t\tif (this.finalBuild) {\nthis.visibleRegionRadius = this.visibleRegionBufferRadius = this.maxSplatDistanceFromSceneCenter;\n}\n\t\tthis.updateVisibleRegionFadeDistance();\n\t}\n\n\tupdateVisibleRegionFadeDistance(sceneRevealMode = SceneRevealMode.Default) {\n\t\tconst fastFadeRate = SCENE_FADEIN_RATE_FAST * this.sceneFadeInRateMultiplier;\n\t\tconst gradualFadeRate = SCENE_FADEIN_RATE_GRADUAL * this.sceneFadeInRateMultiplier;\n\t\tconst defaultFadeInRate = this.finalBuild ? fastFadeRate : gradualFadeRate;\n\t\tconst fadeInRate = sceneRevealMode === SceneRevealMode.Default ? defaultFadeInRate : gradualFadeRate;\n\t\tthis.visibleRegionFadeStartRadius =\n\t\t\t(this.visibleRegionRadius - this.visibleRegionFadeStartRadius) * fadeInRate +\n\t\t\tthis.visibleRegionFadeStartRadius;\n\t\tconst fadeInPercentage =\n\t\t\tthis.visibleRegionBufferRadius > 0 ?\n\t\t\t\tthis.visibleRegionFadeStartRadius / this.visibleRegionBufferRadius :\n\t\t\t\t0;\n\t\tconst fadeInComplete = fadeInPercentage > 0.99;\n\t\tconst shaderFadeInComplete = fadeInComplete || sceneRevealMode === SceneRevealMode.Instant ? 1 : 0;\n\n\t\tthis.material.uniforms.visibleRegionFadeStartRadius.value = this.visibleRegionFadeStartRadius;\n\t\tthis.material.uniforms.visibleRegionRadius.value = this.visibleRegionRadius;\n\t\tthis.material.uniforms.firstRenderTime.value = this.firstRenderTime;\n\t\tthis.material.uniforms.currentTime.value = performance.now();\n\t\tthis.material.uniforms.fadeInComplete.value = shaderFadeInComplete;\n\t\tthis.material.uniformsNeedUpdate = true;\n\t\tthis.visibleRegionChanging = !fadeInComplete;\n\t}\n\n\t/**\n\t * Set the indexes of splats that should be rendered; should be sorted in desired render order.\n\t * @param {Uint32Array} globalIndexes Sorted index list of splats to be rendered\n\t * @param {number} renderSplatCount Total number of splats to be rendered. Necessary because we may not want to render\n\t *                                  every splat.\n\t */\n\tupdateRenderIndexes(globalIndexes, renderSplatCount) {\n\t\tconst geometry = this.geometry;\n\t\tgeometry.attributes.splatIndex.set(globalIndexes);\n\t\tgeometry.attributes.splatIndex.needsUpdate = true;\n\t\tif (renderSplatCount > 0 && this.firstRenderTime === -1) this.firstRenderTime = performance.now();\n\t\tgeometry.instanceCount = renderSplatCount;\n\t\tgeometry.setDrawRange(0, renderSplatCount);\n\t}\n\n\t/**\n\t * Update the transforms for each scene in this splat mesh from their individual components (position,\n\t * quaternion, and scale)\n\t */\n\tupdateTransforms() {\n\t\tfor (let i = 0; i < this.scenes.length; i++) {\n\t\t\tconst scene = this.getScene(i);\n\t\t\tscene.updateTransform(this.dynamicMode);\n\t\t}\n\t}\n\n\tupdateUniforms = (function() {\n\t\tconst viewport = new THREE.Vector2();\n\n\t\treturn function(\n\t\t\trenderDimensions,\n\t\t\tcameraFocalLengthX,\n\t\t\tcameraFocalLengthY,\n\t\t\torthographicMode,\n\t\t\torthographicZoom,\n\t\t\tinverseFocalAdjustment,\n\t\t) {\n\t\t\tconst splatCount = this.getSplatCount();\n\t\t\tif (splatCount > 0) {\n\t\t\t\tviewport.set(renderDimensions.x * this.devicePixelRatio, renderDimensions.y * this.devicePixelRatio);\n\t\t\t\tthis.material.uniforms.viewport.value.copy(viewport);\n\t\t\t\tthis.material.uniforms.basisViewport.value.set(1.0 / viewport.x, 1.0 / viewport.y);\n\t\t\t\tthis.material.uniforms.focal.value.set(cameraFocalLengthX, cameraFocalLengthY);\n\t\t\t\tthis.material.uniforms.orthographicMode.value = orthographicMode ? 1 : 0;\n\t\t\t\tthis.material.uniforms.orthoZoom.value = orthographicZoom;\n\t\t\t\tthis.material.uniforms.inverseFocalAdjustment.value = inverseFocalAdjustment;\n\t\t\t\tif (this.dynamicMode) {\n\t\t\t\t\tfor (let i = 0; i < this.scenes.length; i++) {\n\t\t\t\t\t\tthis.material.uniforms.transforms.value[i].copy(this.getScene(i).transform);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this.enableOptionalEffects) {\n\t\t\t\t\tfor (let i = 0; i < this.scenes.length; i++) {\n\t\t\t\t\t\tthis.material.uniforms.sceneOpacity.value[i] = clamp(this.getScene(i).opacity, 0.0, 1.0);\n\t\t\t\t\t\tthis.material.uniforms.sceneVisibility.value[i] = this.getScene(i).visible ? 1 : 0;\n\t\t\t\t\t\tthis.material.uniformsNeedUpdate = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.material.uniformsNeedUpdate = true;\n\t\t\t}\n\t\t};\n\t})();\n\n\tsetSplatScale(splatScale = 1) {\n\t\tthis.splatScale = splatScale;\n\t\tthis.material.uniforms.splatScale.value = splatScale;\n\t\tthis.material.uniformsNeedUpdate = true;\n\t}\n\n\tgetSplatScale() {\n\t\treturn this.splatScale;\n\t}\n\n\tsetPointCloudModeEnabled(enabled) {\n\t\tthis.pointCloudModeEnabled = enabled;\n\t\tthis.material.uniforms.pointCloudModeEnabled.value = enabled ? 1 : 0;\n\t\tthis.material.uniformsNeedUpdate = true;\n\t}\n\n\tgetPointCloudModeEnabled() {\n\t\treturn this.pointCloudModeEnabled;\n\t}\n\n\tgetSplatDataTextures() {\n\t\treturn this.splatDataTextures;\n\t}\n\n\tgetSplatCount(includeSinceLastBuild = false) {\n\t\tif (!includeSinceLastBuild) return this.lastBuildSplatCount;\n\t\telse return SplatMesh.getTotalSplatCountForScenes(this.scenes);\n\t}\n\n\tstatic getTotalSplatCountForScenes(scenes) {\n\t\tlet totalSplatCount = 0;\n\t\tfor (let scene of scenes) {\n\t\t\tif (scene && scene.splatBuffer) totalSplatCount += scene.splatBuffer.getSplatCount();\n\t\t}\n\t\treturn totalSplatCount;\n\t}\n\n\tstatic getTotalSplatCountForSplatBuffers(splatBuffers) {\n\t\tlet totalSplatCount = 0;\n\t\tfor (let splatBuffer of splatBuffers) totalSplatCount += splatBuffer.getSplatCount();\n\t\treturn totalSplatCount;\n\t}\n\n\tgetMaxSplatCount() {\n\t\treturn SplatMesh.getTotalMaxSplatCountForScenes(this.scenes);\n\t}\n\n\tstatic getTotalMaxSplatCountForScenes(scenes) {\n\t\tlet totalSplatCount = 0;\n\t\tfor (let scene of scenes) {\n\t\t\tif (scene && scene.splatBuffer) totalSplatCount += scene.splatBuffer.getMaxSplatCount();\n\t\t}\n\t\treturn totalSplatCount;\n\t}\n\n\tstatic getTotalMaxSplatCountForSplatBuffers(splatBuffers) {\n\t\tlet totalSplatCount = 0;\n\t\tfor (let splatBuffer of splatBuffers) totalSplatCount += splatBuffer.getMaxSplatCount();\n\t\treturn totalSplatCount;\n\t}\n\n\tdisposeDistancesComputationGPUResources() {\n\t\tif (!this.renderer) return;\n\n\t\tconst gl = this.renderer.getContext();\n\n\t\tif (this.distancesTransformFeedback.vao) {\n\t\t\tgl.deleteVertexArray(this.distancesTransformFeedback.vao);\n\t\t\tthis.distancesTransformFeedback.vao = null;\n\t\t}\n\t\tif (this.distancesTransformFeedback.program) {\n\t\t\tgl.deleteProgram(this.distancesTransformFeedback.program);\n\t\t\tgl.deleteShader(this.distancesTransformFeedback.vertexShader);\n\t\t\tgl.deleteShader(this.distancesTransformFeedback.fragmentShader);\n\t\t\tthis.distancesTransformFeedback.program = null;\n\t\t\tthis.distancesTransformFeedback.vertexShader = null;\n\t\t\tthis.distancesTransformFeedback.fragmentShader = null;\n\t\t}\n\t\tthis.disposeDistancesComputationGPUBufferResources();\n\t\tif (this.distancesTransformFeedback.id) {\n\t\t\tgl.deleteTransformFeedback(this.distancesTransformFeedback.id);\n\t\t\tthis.distancesTransformFeedback.id = null;\n\t\t}\n\t}\n\n\tdisposeDistancesComputationGPUBufferResources() {\n\t\tif (!this.renderer) return;\n\n\t\tconst gl = this.renderer.getContext();\n\n\t\tif (this.distancesTransformFeedback.centersBuffer) {\n\t\t\tthis.distancesTransformFeedback.centersBuffer = null;\n\t\t\tgl.deleteBuffer(this.distancesTransformFeedback.centersBuffer);\n\t\t}\n\t\tif (this.distancesTransformFeedback.outDistancesBuffer) {\n\t\t\tgl.deleteBuffer(this.distancesTransformFeedback.outDistancesBuffer);\n\t\t\tthis.distancesTransformFeedback.outDistancesBuffer = null;\n\t\t}\n\t}\n\n\t/**\n\t * Set the Three.js renderer used by this splat mesh\n\t * @param {THREE.WebGLRenderer} renderer Instance of THREE.WebGLRenderer\n\t */\n\tsetRenderer(renderer) {\n\t\tif (renderer !== this.renderer) {\n\t\t\tthis.renderer = renderer;\n\t\t\tconst gl = this.renderer.getContext();\n\t\t\tconst extensions = new WebGLExtensions(gl);\n\t\t\tconst capabilities = new WebGLCapabilities(gl, extensions, {});\n\t\t\textensions.init(capabilities);\n\t\t\tthis.webGLUtils = new THREE.WebGLUtils(gl, extensions, capabilities);\n\t\t\tif (this.enableDistancesComputationOnGPU && this.getSplatCount() > 0) {\n\t\t\t\tthis.setupDistancesComputationTransformFeedback();\n\t\t\t\tconst { centers, sceneIndexes } = this.getDataForDistancesComputation(0, this.getSplatCount() - 1);\n\t\t\t\tthis.refreshGPUBuffersForDistancesComputation(centers, sceneIndexes);\n\t\t\t}\n\t\t}\n\t}\n\n\tsetupDistancesComputationTransformFeedback = (function() {\n\t\tlet currentMaxSplatCount;\n\n\t\treturn function() {\n\t\t\tconst maxSplatCount = this.getMaxSplatCount();\n\n\t\t\tif (!this.renderer) return;\n\n\t\t\tconst rebuildGPUObjects = this.lastRenderer !== this.renderer;\n\t\t\tconst rebuildBuffers = currentMaxSplatCount !== maxSplatCount;\n\n\t\t\tif (!rebuildGPUObjects && !rebuildBuffers) return;\n\n\t\t\tif (rebuildGPUObjects) {\n\t\t\t\tthis.disposeDistancesComputationGPUResources();\n\t\t\t} else if (rebuildBuffers) {\n\t\t\t\tthis.disposeDistancesComputationGPUBufferResources();\n\t\t\t}\n\n\t\t\tconst gl = this.renderer.getContext();\n\n\t\t\tconst createShader = (gl, type, source) => {\n\t\t\t\tconst shader = gl.createShader(type);\n\t\t\t\tif (!shader) {\n\t\t\t\t\tconsole.error(\"Fatal error: gl could not create a shader object.\");\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tgl.shaderSource(shader, source);\n\t\t\t\tgl.compileShader(shader);\n\n\t\t\t\tconst compiled = gl.getShaderParameter(shader, gl.COMPILE_STATUS);\n\t\t\t\tif (!compiled) {\n\t\t\t\t\tlet typeName = \"unknown\";\n\t\t\t\t\tif (type === gl.VERTEX_SHADER) typeName = \"vertex shader\";\n\t\t\t\t\telse if (type === gl.FRAGMENT_SHADER) typeName = \"fragement shader\";\n\t\t\t\t\tconst errors = gl.getShaderInfoLog(shader);\n\t\t\t\t\tconsole.error(\"Failed to compile \" + typeName + \" with these errors:\" + errors);\n\t\t\t\t\tgl.deleteShader(shader);\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn shader;\n\t\t\t};\n\n\t\t\tlet vsSource;\n\t\t\tif (this.integerBasedDistancesComputation) {\n\t\t\t\tvsSource = `#version 300 es\n                in ivec4 center;\n                flat out int distance;`;\n\t\t\t\tif (this.dynamicMode) {\n\t\t\t\t\tvsSource += `\n                        in uint sceneIndex;\n                        uniform ivec4 transforms[${Constants.MaxScenes}];\n                        void main(void) {\n                            ivec4 transform = transforms[sceneIndex];\n                            distance = center.x * transform.x + center.y * transform.y + center.z * transform.z + transform.w * center.w;\n                        }\n                    `;\n\t\t\t\t} else {\n\t\t\t\t\tvsSource += `\n                        uniform ivec3 modelViewProj;\n                        void main(void) {\n                            distance = center.x * modelViewProj.x + center.y * modelViewProj.y + center.z * modelViewProj.z;\n                        }\n                    `;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvsSource = `#version 300 es\n                in vec4 center;\n                flat out float distance;`;\n\t\t\t\tif (this.dynamicMode) {\n\t\t\t\t\tvsSource += `\n                        in uint sceneIndex;\n                        uniform mat4 transforms[${Constants.MaxScenes}];\n                        void main(void) {\n                            vec4 transformedCenter = transforms[sceneIndex] * vec4(center.xyz, 1.0);\n                            distance = transformedCenter.z;\n                        }\n                    `;\n\t\t\t\t} else {\n\t\t\t\t\tvsSource += `\n                        uniform vec3 modelViewProj;\n                        void main(void) {\n                            distance = center.x * modelViewProj.x + center.y * modelViewProj.y + center.z * modelViewProj.z;\n                        }\n                    `;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst fsSource = `#version 300 es\n                precision lowp float;\n                out vec4 fragColor;\n                void main(){}\n            `;\n\n\t\t\tconst currentVao = gl.getParameter(gl.VERTEX_ARRAY_BINDING);\n\t\t\tconst currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);\n\t\t\tconst currentProgramDeleted = currentProgram ?\n\t\t\t\tgl.getProgramParameter(currentProgram, gl.DELETE_STATUS) :\n\t\t\t\tfalse;\n\n\t\t\tif (rebuildGPUObjects) {\n\t\t\t\tthis.distancesTransformFeedback.vao = gl.createVertexArray();\n\t\t\t}\n\n\t\t\tgl.bindVertexArray(this.distancesTransformFeedback.vao);\n\n\t\t\tif (rebuildGPUObjects) {\n\t\t\t\tconst program = gl.createProgram();\n\t\t\t\tconst vertexShader = createShader(gl, gl.VERTEX_SHADER, vsSource);\n\t\t\t\tconst fragmentShader = createShader(gl, gl.FRAGMENT_SHADER, fsSource);\n\t\t\t\tif (!vertexShader || !fragmentShader) {\n\t\t\t\t\tthrow new Error(\"Could not compile shaders for distances computation on GPU.\");\n\t\t\t\t}\n\t\t\t\tgl.attachShader(program, vertexShader);\n\t\t\t\tgl.attachShader(program, fragmentShader);\n\t\t\t\tgl.transformFeedbackVaryings(program, [\"distance\"], gl.SEPARATE_ATTRIBS);\n\t\t\t\tgl.linkProgram(program);\n\n\t\t\t\tconst linked = gl.getProgramParameter(program, gl.LINK_STATUS);\n\t\t\t\tif (!linked) {\n\t\t\t\t\tconst error = gl.getProgramInfoLog(program);\n\t\t\t\t\tconsole.error(\"Fatal error: Failed to link program: \" + error);\n\t\t\t\t\tgl.deleteProgram(program);\n\t\t\t\t\tgl.deleteShader(fragmentShader);\n\t\t\t\t\tgl.deleteShader(vertexShader);\n\t\t\t\t\tthrow new Error(\"Could not link shaders for distances computation on GPU.\");\n\t\t\t\t}\n\n\t\t\t\tthis.distancesTransformFeedback.program = program;\n\t\t\t\tthis.distancesTransformFeedback.vertexShader = vertexShader;\n\t\t\t\tthis.distancesTransformFeedback.vertexShader = fragmentShader;\n\t\t\t}\n\n\t\t\tgl.useProgram(this.distancesTransformFeedback.program);\n\n\t\t\tthis.distancesTransformFeedback.centersLoc = gl.getAttribLocation(\n\t\t\t\tthis.distancesTransformFeedback.program,\n\t\t\t\t\"center\",\n\t\t\t);\n\t\t\tif (this.dynamicMode) {\n\t\t\t\tthis.distancesTransformFeedback.sceneIndexesLoc = gl.getAttribLocation(\n\t\t\t\t\tthis.distancesTransformFeedback.program,\n\t\t\t\t\t\"sceneIndex\",\n\t\t\t\t);\n\t\t\t\tfor (let i = 0; i < this.scenes.length; i++) {\n\t\t\t\t\tthis.distancesTransformFeedback.transformsLocs[i] = gl.getUniformLocation(\n\t\t\t\t\t\tthis.distancesTransformFeedback.program,\n\t\t\t\t\t\t`transforms[${i}]`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.distancesTransformFeedback.modelViewProjLoc = gl.getUniformLocation(\n\t\t\t\t\tthis.distancesTransformFeedback.program,\n\t\t\t\t\t\"modelViewProj\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (rebuildGPUObjects || rebuildBuffers) {\n\t\t\t\tthis.distancesTransformFeedback.centersBuffer = gl.createBuffer();\n\t\t\t\tgl.bindBuffer(gl.ARRAY_BUFFER, this.distancesTransformFeedback.centersBuffer);\n\t\t\t\tgl.enableVertexAttribArray(this.distancesTransformFeedback.centersLoc);\n\t\t\t\tif (this.integerBasedDistancesComputation) {\n\t\t\t\t\tgl.vertexAttribIPointer(this.distancesTransformFeedback.centersLoc, 4, gl.INT, 0, 0);\n\t\t\t\t} else {\n\t\t\t\t\tgl.vertexAttribPointer(this.distancesTransformFeedback.centersLoc, 4, gl.FLOAT, false, 0, 0);\n\t\t\t\t}\n\n\t\t\t\tif (this.dynamicMode) {\n\t\t\t\t\tthis.distancesTransformFeedback.sceneIndexesBuffer = gl.createBuffer();\n\t\t\t\t\tgl.bindBuffer(gl.ARRAY_BUFFER, this.distancesTransformFeedback.sceneIndexesBuffer);\n\t\t\t\t\tgl.enableVertexAttribArray(this.distancesTransformFeedback.sceneIndexesLoc);\n\t\t\t\t\tgl.vertexAttribIPointer(this.distancesTransformFeedback.sceneIndexesLoc, 1, gl.UNSIGNED_INT, 0, 0);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (rebuildGPUObjects || rebuildBuffers) {\n\t\t\t\tthis.distancesTransformFeedback.outDistancesBuffer = gl.createBuffer();\n\t\t\t}\n\t\t\tgl.bindBuffer(gl.ARRAY_BUFFER, this.distancesTransformFeedback.outDistancesBuffer);\n\t\t\tgl.bufferData(gl.ARRAY_BUFFER, maxSplatCount * 4, gl.STATIC_READ);\n\n\t\t\tif (rebuildGPUObjects) {\n\t\t\t\tthis.distancesTransformFeedback.id = gl.createTransformFeedback();\n\t\t\t}\n\t\t\tgl.bindTransformFeedback(gl.TRANSFORM_FEEDBACK, this.distancesTransformFeedback.id);\n\t\t\tgl.bindBufferBase(gl.TRANSFORM_FEEDBACK_BUFFER, 0, this.distancesTransformFeedback.outDistancesBuffer);\n\n\t\t\tif (currentProgram && currentProgramDeleted !== true) gl.useProgram(currentProgram);\n\t\t\tif (currentVao) gl.bindVertexArray(currentVao);\n\n\t\t\tthis.lastRenderer = this.renderer;\n\t\t\tcurrentMaxSplatCount = maxSplatCount;\n\t\t};\n\t})();\n\n\t/**\n\t * Refresh GPU buffers used for computing splat distances with centers data from the scenes for this mesh.\n\t * @param {boolean} isUpdate Specify whether or not to update the GPU buffer or to initialize & fill\n\t * @param {Array<number>} centers The splat centers data\n\t * @param {number} offsetSplats Offset in the GPU buffer at which to start updating data, specified in splats\n\t */\n\tupdateGPUCentersBufferForDistancesComputation(isUpdate, centers, offsetSplats) {\n\t\tif (!this.renderer) return;\n\n\t\tconst gl = this.renderer.getContext();\n\n\t\tconst currentVao = gl.getParameter(gl.VERTEX_ARRAY_BINDING);\n\t\tgl.bindVertexArray(this.distancesTransformFeedback.vao);\n\n\t\tconst ArrayType = this.integerBasedDistancesComputation ? Uint32Array : Float32Array;\n\t\tconst attributeBytesPerCenter = 16;\n\t\tconst subBufferOffset = offsetSplats * attributeBytesPerCenter;\n\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, this.distancesTransformFeedback.centersBuffer);\n\n\t\tif (isUpdate) {\n\t\t\tgl.bufferSubData(gl.ARRAY_BUFFER, subBufferOffset, centers);\n\t\t} else {\n\t\t\tconst maxArray = new ArrayType(this.getMaxSplatCount() * attributeBytesPerCenter);\n\t\t\tmaxArray.set(centers);\n\t\t\tgl.bufferData(gl.ARRAY_BUFFER, maxArray, gl.STATIC_DRAW);\n\t\t}\n\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, null);\n\n\t\tif (currentVao) gl.bindVertexArray(currentVao);\n\t}\n\n\t/**\n\t * Refresh GPU buffers used for pre-computing splat distances with centers data from the scenes for this mesh.\n\t * @param {boolean} isUpdate Specify whether or not to update the GPU buffer or to initialize & fill\n\t * @param {Array<number>} sceneIndexes The splat scene indexes\n\t * @param {number} offsetSplats Offset in the GPU buffer at which to start updating data, specified in splats\n\t */\n\tupdateGPUTransformIndexesBufferForDistancesComputation(isUpdate, sceneIndexes, offsetSplats) {\n\t\tif (!this.renderer || !this.dynamicMode) return;\n\n\t\tconst gl = this.renderer.getContext();\n\n\t\tconst currentVao = gl.getParameter(gl.VERTEX_ARRAY_BINDING);\n\t\tgl.bindVertexArray(this.distancesTransformFeedback.vao);\n\n\t\tconst subBufferOffset = offsetSplats * 4;\n\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, this.distancesTransformFeedback.sceneIndexesBuffer);\n\n\t\tif (isUpdate) {\n\t\t\tgl.bufferSubData(gl.ARRAY_BUFFER, subBufferOffset, sceneIndexes);\n\t\t} else {\n\t\t\tconst maxArray = new Uint32Array(this.getMaxSplatCount() * 4);\n\t\t\tmaxArray.set(sceneIndexes);\n\t\t\tgl.bufferData(gl.ARRAY_BUFFER, maxArray, gl.STATIC_DRAW);\n\t\t}\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, null);\n\n\t\tif (currentVao) gl.bindVertexArray(currentVao);\n\t}\n\n\t/**\n\t * Get a typed array containing a mapping from global splat indexes to their scene index.\n\t * @param {number} start Starting splat index to store\n\t * @param {number} end Ending splat index to store\n\t * @return {Uint32Array}\n\t */\n\tgetSceneIndexes(start, end) {\n\t\tlet sceneIndexes;\n\t\tconst fillCount = end - start + 1;\n\t\tsceneIndexes = new Uint32Array(fillCount);\n\t\tfor (let i = start; i <= end; i++) {\n\t\t\tsceneIndexes[i] = this.globalSplatIndexToSceneIndexMap[i];\n\t\t}\n\n\t\treturn sceneIndexes;\n\t}\n\n\t/**\n\t * Fill 'array' with the transforms for each scene in this splat mesh.\n\t * @param {Array} array Empty array to be filled with scene transforms. If not empty, contents will be overwritten.\n\t */\n\tfillTransformsArray = (function() {\n\t\tconst tempArray = [];\n\n\t\treturn function(array) {\n\t\t\tif (tempArray.length !== array.length) tempArray.length = array.length;\n\t\t\tfor (let i = 0; i < this.scenes.length; i++) {\n\t\t\t\tconst sceneTransform = this.getScene(i).transform;\n\t\t\t\tconst sceneTransformElements = sceneTransform.elements;\n\t\t\t\tfor (let j = 0; j < 16; j++) {\n\t\t\t\t\ttempArray[i * 16 + j] = sceneTransformElements[j];\n\t\t\t\t}\n\t\t\t}\n\t\t\tarray.set(tempArray);\n\t\t};\n\t})();\n\n\tcomputeDistancesOnGPU = (function() {\n\t\tconst tempMatrix = new THREE.Matrix4();\n\n\t\treturn function(modelViewProjMatrix, outComputedDistances) {\n\t\t\tif (!this.renderer) return;\n\n\t\t\t// console.time(\"gpu_compute_distances\");\n\t\t\tconst gl = this.renderer.getContext();\n\n\t\t\tconst currentVao = gl.getParameter(gl.VERTEX_ARRAY_BINDING);\n\t\t\tconst currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);\n\t\t\tconst currentProgramDeleted = currentProgram ?\n\t\t\t\tgl.getProgramParameter(currentProgram, gl.DELETE_STATUS) :\n\t\t\t\tfalse;\n\n\t\t\tgl.bindVertexArray(this.distancesTransformFeedback.vao);\n\t\t\tgl.useProgram(this.distancesTransformFeedback.program);\n\n\t\t\tgl.enable(gl.RASTERIZER_DISCARD);\n\n\t\t\tif (this.dynamicMode) {\n\t\t\t\tfor (let i = 0; i < this.scenes.length; i++) {\n\t\t\t\t\ttempMatrix.copy(this.getScene(i).transform);\n\t\t\t\t\ttempMatrix.premultiply(modelViewProjMatrix);\n\n\t\t\t\t\tif (this.integerBasedDistancesComputation) {\n\t\t\t\t\t\tconst iTempMatrix = SplatMesh.getIntegerMatrixArray(tempMatrix);\n\t\t\t\t\t\tconst iTransform = [iTempMatrix[2], iTempMatrix[6], iTempMatrix[10], iTempMatrix[14]];\n\t\t\t\t\t\tgl.uniform4i(\n\t\t\t\t\t\t\tthis.distancesTransformFeedback.transformsLocs[i],\n\t\t\t\t\t\t\tiTransform[0],\n\t\t\t\t\t\t\tiTransform[1],\n\t\t\t\t\t\t\tiTransform[2],\n\t\t\t\t\t\t\tiTransform[3],\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tgl.uniformMatrix4fv(\n\t\t\t\t\t\t\tthis.distancesTransformFeedback.transformsLocs[i],\n\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\ttempMatrix.elements,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (this.integerBasedDistancesComputation) {\n\t\t\t\t\tconst iViewProjMatrix = SplatMesh.getIntegerMatrixArray(modelViewProjMatrix);\n\t\t\t\t\tconst iViewProj = [iViewProjMatrix[2], iViewProjMatrix[6], iViewProjMatrix[10]];\n\t\t\t\t\tgl.uniform3i(\n\t\t\t\t\t\tthis.distancesTransformFeedback.modelViewProjLoc,\n\t\t\t\t\t\tiViewProj[0],\n\t\t\t\t\t\tiViewProj[1],\n\t\t\t\t\t\tiViewProj[2],\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tconst viewProj = [\n\t\t\t\t\t\tmodelViewProjMatrix.elements[2],\n\t\t\t\t\t\tmodelViewProjMatrix.elements[6],\n\t\t\t\t\t\tmodelViewProjMatrix.elements[10],\n\t\t\t\t\t];\n\t\t\t\t\tgl.uniform3f(\n\t\t\t\t\t\tthis.distancesTransformFeedback.modelViewProjLoc,\n\t\t\t\t\t\tviewProj[0],\n\t\t\t\t\t\tviewProj[1],\n\t\t\t\t\t\tviewProj[2],\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tgl.bindBuffer(gl.ARRAY_BUFFER, this.distancesTransformFeedback.centersBuffer);\n\t\t\tgl.enableVertexAttribArray(this.distancesTransformFeedback.centersLoc);\n\t\t\tif (this.integerBasedDistancesComputation) {\n\t\t\t\tgl.vertexAttribIPointer(this.distancesTransformFeedback.centersLoc, 4, gl.INT, 0, 0);\n\t\t\t} else {\n\t\t\t\tgl.vertexAttribPointer(this.distancesTransformFeedback.centersLoc, 4, gl.FLOAT, false, 0, 0);\n\t\t\t}\n\n\t\t\tif (this.dynamicMode) {\n\t\t\t\tgl.bindBuffer(gl.ARRAY_BUFFER, this.distancesTransformFeedback.sceneIndexesBuffer);\n\t\t\t\tgl.enableVertexAttribArray(this.distancesTransformFeedback.sceneIndexesLoc);\n\t\t\t\tgl.vertexAttribIPointer(this.distancesTransformFeedback.sceneIndexesLoc, 1, gl.UNSIGNED_INT, 0, 0);\n\t\t\t}\n\n\t\t\tgl.bindTransformFeedback(gl.TRANSFORM_FEEDBACK, this.distancesTransformFeedback.id);\n\t\t\tgl.bindBufferBase(gl.TRANSFORM_FEEDBACK_BUFFER, 0, this.distancesTransformFeedback.outDistancesBuffer);\n\n\t\t\tgl.beginTransformFeedback(gl.POINTS);\n\t\t\tgl.drawArrays(gl.POINTS, 0, this.getSplatCount());\n\t\t\tgl.endTransformFeedback();\n\n\t\t\tgl.bindBufferBase(gl.TRANSFORM_FEEDBACK_BUFFER, 0, null);\n\t\t\tgl.bindTransformFeedback(gl.TRANSFORM_FEEDBACK, null);\n\n\t\t\tgl.disable(gl.RASTERIZER_DISCARD);\n\n\t\t\tconst sync = gl.fenceSync(gl.SYNC_GPU_COMMANDS_COMPLETE, 0);\n\t\t\tgl.flush();\n\n\t\t\tconst promise = new Promise((resolve) => {\n\t\t\t\tconst checkSync = () => {\n\t\t\t\t\tif (this.disposed) {\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst timeout = 0;\n\t\t\t\t\t\tconst bitflags = 0;\n\t\t\t\t\t\tconst status = gl.clientWaitSync(sync, bitflags, timeout);\n\t\t\t\t\t\tswitch (status) {\n\t\t\t\t\t\t\tcase gl.TIMEOUT_EXPIRED:\n\t\t\t\t\t\t\t\tthis.computeDistancesOnGPUSyncTimeout = setTimeout(checkSync);\n\t\t\t\t\t\t\t\treturn this.computeDistancesOnGPUSyncTimeout;\n\t\t\t\t\t\t\tcase gl.WAIT_FAILED:\n\t\t\t\t\t\t\t\tthrow new Error(\"should never get here\");\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tthis.computeDistancesOnGPUSyncTimeout = null;\n\t\t\t\t\t\t\t\tgl.deleteSync(sync);\n\t\t\t\t\t\t\t\tconst currentVao = gl.getParameter(gl.VERTEX_ARRAY_BINDING);\n\t\t\t\t\t\t\t\tgl.bindVertexArray(this.distancesTransformFeedback.vao);\n\t\t\t\t\t\t\t\tgl.bindBuffer(gl.ARRAY_BUFFER, this.distancesTransformFeedback.outDistancesBuffer);\n\t\t\t\t\t\t\t\tgl.getBufferSubData(gl.ARRAY_BUFFER, 0, outComputedDistances);\n\t\t\t\t\t\t\t\tgl.bindBuffer(gl.ARRAY_BUFFER, null);\n\n\t\t\t\t\t\t\t\tif (currentVao) gl.bindVertexArray(currentVao);\n\n\t\t\t\t\t\t\t\t// console.timeEnd(\"gpu_compute_distances\");\n\n\t\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tthis.computeDistancesOnGPUSyncTimeout = setTimeout(checkSync);\n\t\t\t});\n\n\t\t\tif (currentProgram && currentProgramDeleted !== true) gl.useProgram(currentProgram);\n\t\t\tif (currentVao) gl.bindVertexArray(currentVao);\n\n\t\t\treturn promise;\n\t\t};\n\t})();\n\n\t/**\n\t * Given a global splat index, return corresponding local data (splat buffer, index of splat in that splat\n\t * buffer, and the corresponding transform)\n\t * @param {number} globalIndex Global splat index\n\t * @param {object} paramsObj Object in which to store local data\n\t * @param {boolean} returnSceneTransform By default, the transform of the scene to which the splat at 'globalIndex' belongs will be\n\t *                                       returned via the 'sceneTransform' property of 'paramsObj' only if the splat mesh is static.\n\t *                                       If 'returnSceneTransform' is true, the 'sceneTransform' property will always contain the scene\n\t *                                       transform, and if 'returnSceneTransform' is false, the 'sceneTransform' property will always\n\t *                                       be null.\n\t */\n\tgetLocalSplatParameters(globalIndex, paramsObj, returnSceneTransform) {\n\t\tif (returnSceneTransform === undefined || returnSceneTransform === null) {\n\t\t\treturnSceneTransform = this.dynamicMode ? false : true;\n\t\t}\n\t\tparamsObj.splatBuffer = this.getSplatBufferForSplat(globalIndex);\n\t\tparamsObj.localIndex = this.getSplatLocalIndex(globalIndex);\n\t\tparamsObj.sceneTransform = returnSceneTransform ? this.getSceneTransformForSplat(globalIndex) : null;\n\t}\n\n\t/**\n\t * Fill arrays with splat data and apply transforms if appropriate. Each array is optional.\n\t * @param {Float32Array} covariances Target storage for splat covariances\n\t * @param {Float32Array} scales Target storage for splat scales\n\t * @param {Float32Array} rotations Target storage for splat rotations\n\t * @param {Float32Array} centers Target storage for splat centers\n\t * @param {Uint8Array} colors Target storage for splat colors\n\t * @param {Float32Array} sphericalHarmonics Target storage for spherical harmonics\n\t * @param {boolean} applySceneTransform By default, scene transforms are applied to relevant splat data only if the splat mesh is\n\t *                                      static. If 'applySceneTransform' is true, scene transforms will always be applied and if\n\t *                                      it is false, they will never be applied. If undefined, the default behavior will apply.\n\t * @param {number} covarianceCompressionLevel The compression level for covariances in the destination array\n\t * @param {number} sphericalHarmonicsCompressionLevel The compression level for spherical harmonics in the destination array\n\t * @param {number} srcStart The start location from which to pull source data\n\t * @param {number} srcEnd The end location from which to pull source data\n\t * @param {number} destStart The start location from which to write data\n\t */\n\tfillSplatDataArrays(\n\t\tcovariances,\n\t\tscales,\n\t\trotations,\n\t\tcenters,\n\t\tcolors,\n\t\tsphericalHarmonics,\n\t\tapplySceneTransform,\n\t\tcovarianceCompressionLevel = 0,\n\t\tscaleRotationCompressionLevel = 0,\n\t\tsphericalHarmonicsCompressionLevel = 1,\n\t\tsrcStart,\n\t\tsrcEnd,\n\t\tdestStart = 0,\n\t\tsceneIndex,\n\t) {\n\t\tconst scaleOverride = new THREE.Vector3();\n\t\tscaleOverride.x = undefined;\n\t\tscaleOverride.y = undefined;\n\t\tif (this.splatRenderMode === SplatRenderMode.ThreeD) {\n\t\t\tscaleOverride.z = undefined;\n\t\t} else {\n\t\t\tscaleOverride.z = 1;\n\t\t}\n\t\tconst tempTransform = new THREE.Matrix4();\n\n\t\tlet startSceneIndex = 0;\n\t\tlet endSceneIndex = this.scenes.length - 1;\n\t\tif (\n\t\t\tsceneIndex !== undefined &&\n\t\t\tsceneIndex !== null &&\n\t\t\tsceneIndex >= 0 &&\n\t\t\tsceneIndex <= this.scenes.length\n\t\t) {\n\t\t\tstartSceneIndex = sceneIndex;\n\t\t\tendSceneIndex = sceneIndex;\n\t\t}\n\t\tfor (let i = startSceneIndex; i <= endSceneIndex; i++) {\n\t\t\tif (applySceneTransform === undefined || applySceneTransform === null) {\n\t\t\t\tapplySceneTransform = this.dynamicMode ? false : true;\n\t\t\t}\n\n\t\t\tconst scene = this.getScene(i);\n\t\t\tconst splatBuffer = scene.splatBuffer;\n\t\t\tlet sceneTransform;\n\t\t\tif (applySceneTransform) {\n\t\t\t\tthis.getSceneTransform(i, tempTransform);\n\t\t\t\tsceneTransform = tempTransform;\n\t\t\t}\n\t\t\tif (covariances) {\n\t\t\t\tsplatBuffer.fillSplatCovarianceArray(\n\t\t\t\t\tcovariances,\n\t\t\t\t\tsceneTransform,\n\t\t\t\t\tsrcStart,\n\t\t\t\t\tsrcEnd,\n\t\t\t\t\tdestStart,\n\t\t\t\t\tcovarianceCompressionLevel,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (scales || rotations) {\n\t\t\t\tif (!scales || !rotations) {\n\t\t\t\t\tthrow new Error(\"SplatMesh::fillSplatDataArrays() -> \\\"scales\\\" and \\\"rotations\\\" must both be valid.\");\n\t\t\t\t}\n\t\t\t\tsplatBuffer.fillSplatScaleRotationArray(\n\t\t\t\t\tscales,\n\t\t\t\t\trotations,\n\t\t\t\t\tsceneTransform,\n\t\t\t\t\tsrcStart,\n\t\t\t\t\tsrcEnd,\n\t\t\t\t\tdestStart,\n\t\t\t\t\tscaleRotationCompressionLevel,\n\t\t\t\t\tscaleOverride,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (centers) splatBuffer.fillSplatCenterArray(centers, sceneTransform, srcStart, srcEnd, destStart);\n\t\t\tif (colors) splatBuffer.fillSplatColorArray(colors, scene.minimumAlpha, srcStart, srcEnd, destStart);\n\t\t\tif (sphericalHarmonics) {\n\t\t\t\tsplatBuffer.fillSphericalHarmonicsArray(\n\t\t\t\t\tsphericalHarmonics,\n\t\t\t\t\tthis.minSphericalHarmonicsDegree,\n\t\t\t\t\tsceneTransform,\n\t\t\t\t\tsrcStart,\n\t\t\t\t\tsrcEnd,\n\t\t\t\t\tdestStart,\n\t\t\t\t\tsphericalHarmonicsCompressionLevel,\n\t\t\t\t);\n\t\t\t}\n\t\t\tdestStart += splatBuffer.getSplatCount();\n\t\t}\n\t}\n\n\t/**\n\t * Convert splat centers, which are floating point values, to an array of integers and multiply\n\t * each by 1000. Centers will get transformed as appropriate before conversion to integer.\n\t * @param {number} start The index at which to start retrieving data\n\t * @param {number} end The index at which to stop retrieving data\n\t * @param {boolean} padFour Enforce alignment of 4 by inserting a 1 after every 3 values\n\t * @return {Int32Array}\n\t */\n\tgetIntegerCenters(start, end, padFour = false) {\n\t\tconst splatCount = end - start + 1;\n\t\tconst floatCenters = new Float32Array(splatCount * 3);\n\t\tthis.fillSplatDataArrays(\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tfloatCenters,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tstart,\n\t\t);\n\t\tlet intCenters;\n\t\tlet componentCount = padFour ? 4 : 3;\n\t\tintCenters = new Int32Array(splatCount * componentCount);\n\t\tfor (let i = 0; i < splatCount; i++) {\n\t\t\tfor (let t = 0; t < 3; t++) {\n\t\t\t\tintCenters[i * componentCount + t] = Math.round(floatCenters[i * 3 + t] * 1000.0);\n\t\t\t}\n\t\t\tif (padFour) intCenters[i * componentCount + 3] = 1000;\n\t\t}\n\t\treturn intCenters;\n\t}\n\n\t/**\n\t * Returns an array of splat centers, transformed as appropriate, optionally padded.\n\t * @param {number} start The index at which to start retrieving data\n\t * @param {number} end The index at which to stop retrieving data\n\t * @param {boolean} padFour Enforce alignment of 4 by inserting a 1 after every 3 values\n\t * @return {Float32Array}\n\t */\n\tgetFloatCenters(start, end, padFour = false) {\n\t\tconst splatCount = end - start + 1;\n\t\tconst floatCenters = new Float32Array(splatCount * 3);\n\t\tthis.fillSplatDataArrays(\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tfloatCenters,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tstart,\n\t\t);\n\t\tif (!padFour) return floatCenters;\n\t\tlet paddedFloatCenters = new Float32Array(splatCount * 4);\n\t\tfor (let i = 0; i < splatCount; i++) {\n\t\t\tfor (let t = 0; t < 3; t++) {\n\t\t\t\tpaddedFloatCenters[i * 4 + t] = floatCenters[i * 3 + t];\n\t\t\t}\n\t\t\tpaddedFloatCenters[i * 4 + 3] = 1.0;\n\t\t}\n\t\treturn paddedFloatCenters;\n\t}\n\n\t/**\n\t * Get the center for a splat, transformed as appropriate.\n\t * @param {number} globalIndex Global index of splat\n\t * @param {THREE.Vector3} outCenter THREE.Vector3 instance in which to store splat center\n\t * @param {boolean} applySceneTransform By default, if the splat mesh is static, the transform of the scene to which the splat at\n\t *                                      'globalIndex' belongs will be applied to the splat center. If 'applySceneTransform' is true,\n\t *                                      the scene transform will always be applied and if 'applySceneTransform' is false, the\n\t *                                      scene transform will never be applied. If undefined, the default behavior will apply.\n\t */\n\tgetSplatCenter = (function() {\n\t\tconst paramsObj = {};\n\n\t\treturn function(globalIndex, outCenter, applySceneTransform) {\n\t\t\tthis.getLocalSplatParameters(globalIndex, paramsObj, applySceneTransform);\n\t\t\tparamsObj.splatBuffer.getSplatCenter(paramsObj.localIndex, outCenter, paramsObj.sceneTransform);\n\t\t};\n\t})();\n\n\t/**\n\t * Get the scale and rotation for a splat, transformed as appropriate.\n\t * @param {number} globalIndex Global index of splat\n\t * @param {THREE.Vector3} outScale THREE.Vector3 instance in which to store splat scale\n\t * @param {THREE.Quaternion} outRotation THREE.Quaternion instance in which to store splat rotation\n\t * @param {boolean} applySceneTransform By default, if the splat mesh is static, the transform of the scene to which the splat at\n\t *                                      'globalIndex' belongs will be applied to the splat scale and rotation. If\n\t *                                      'applySceneTransform' is true, the scene transform will always be applied and if\n\t *                                      'applySceneTransform' is false, the scene transform will never be applied. If undefined,\n\t *                                      the default behavior will apply.\n\t */\n\tgetSplatScaleAndRotation = (function() {\n\t\tconst paramsObj = {};\n\t\tconst scaleOverride = new THREE.Vector3();\n\n\t\treturn function(globalIndex, outScale, outRotation, applySceneTransform) {\n\t\t\tthis.getLocalSplatParameters(globalIndex, paramsObj, applySceneTransform);\n\t\t\tscaleOverride.x = undefined;\n\t\t\tscaleOverride.y = undefined;\n\t\t\tscaleOverride.z = undefined;\n\t\t\tif (this.splatRenderMode === SplatRenderMode.TwoD) scaleOverride.z = 0;\n\t\t\tparamsObj.splatBuffer.getSplatScaleAndRotation(\n\t\t\t\tparamsObj.localIndex,\n\t\t\t\toutScale,\n\t\t\t\toutRotation,\n\t\t\t\tparamsObj.sceneTransform,\n\t\t\t\tscaleOverride,\n\t\t\t);\n\t\t};\n\t})();\n\n\t/**\n\t * Get the color for a splat.\n\t * @param {number} globalIndex Global index of splat\n\t * @param {THREE.Vector4} outColor THREE.Vector4 instance in which to store splat color\n\t */\n\tgetSplatColor = (function() {\n\t\tconst paramsObj = {};\n\n\t\treturn function(globalIndex, outColor) {\n\t\t\tthis.getLocalSplatParameters(globalIndex, paramsObj);\n\t\t\tparamsObj.splatBuffer.getSplatColor(paramsObj.localIndex, outColor);\n\t\t};\n\t})();\n\n\t/**\n\t * Store the transform of the scene at 'sceneIndex' in 'outTransform'.\n\t * @param {number} sceneIndex Index of the desired scene\n\t * @param {THREE.Matrix4} outTransform Instance of THREE.Matrix4 in which to store the scene's transform\n\t */\n\tgetSceneTransform(sceneIndex, outTransform) {\n\t\tconst scene = this.getScene(sceneIndex);\n\t\tscene.updateTransform(this.dynamicMode);\n\t\toutTransform.copy(scene.transform);\n\t}\n\n\t/**\n\t * Get the scene at 'sceneIndex'.\n\t * @param {number} sceneIndex Index of the desired scene\n\t * @return {SplatScene}\n\t */\n\tgetScene(sceneIndex) {\n\t\tif (sceneIndex < 0 || sceneIndex >= this.scenes.length) {\n\t\t\tthrow new Error(\"SplatMesh::getScene() -> Invalid scene index.\");\n\t\t}\n\t\treturn this.scenes[sceneIndex];\n\t}\n\n\tgetSceneCount() {\n\t\treturn this.scenes.length;\n\t}\n\n\tgetSplatBufferForSplat(globalIndex) {\n\t\treturn this.getScene(this.globalSplatIndexToSceneIndexMap[globalIndex]).splatBuffer;\n\t}\n\n\tgetSceneIndexForSplat(globalIndex) {\n\t\treturn this.globalSplatIndexToSceneIndexMap[globalIndex];\n\t}\n\n\tgetSceneTransformForSplat(globalIndex) {\n\t\treturn this.getScene(this.globalSplatIndexToSceneIndexMap[globalIndex]).transform;\n\t}\n\n\tgetSplatLocalIndex(globalIndex) {\n\t\treturn this.globalSplatIndexToLocalSplatIndexMap[globalIndex];\n\t}\n\n\tstatic getIntegerMatrixArray(matrix) {\n\t\tconst matrixElements = matrix.elements;\n\t\tconst intMatrixArray = [];\n\t\tfor (let i = 0; i < 16; i++) {\n\t\t\tintMatrixArray[i] = Math.round(matrixElements[i] * 1000.0);\n\t\t}\n\t\treturn intMatrixArray;\n\t}\n\n\tcomputeBoundingBox(applySceneTransforms = false, sceneIndex) {\n\t\tlet splatCount = this.getSplatCount();\n\t\tif (sceneIndex !== undefined && sceneIndex !== null) {\n\t\t\tif (sceneIndex < 0 || sceneIndex >= this.scenes.length) {\n\t\t\t\tthrow new Error(\"SplatMesh::computeBoundingBox() -> Invalid scene index.\");\n\t\t\t}\n\t\t\tsplatCount = this.scenes[sceneIndex].splatBuffer.getSplatCount();\n\t\t}\n\n\t\tconst floatCenters = new Float32Array(splatCount * 3);\n\t\tthis.fillSplatDataArrays(\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tfloatCenters,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\tapplySceneTransforms,\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tsceneIndex,\n\t\t);\n\n\t\tconst min = new THREE.Vector3();\n\t\tconst max = new THREE.Vector3();\n\t\tfor (let i = 0; i < splatCount; i++) {\n\t\t\tconst offset = i * 3;\n\t\t\tconst x = floatCenters[offset];\n\t\t\tconst y = floatCenters[offset + 1];\n\t\t\tconst z = floatCenters[offset + 2];\n\t\t\tif (i === 0 || x < min.x) min.x = x;\n\t\t\tif (i === 0 || y < min.y) min.y = y;\n\t\t\tif (i === 0 || z < min.z) min.z = z;\n\t\t\tif (i === 0 || x > max.x) max.x = x;\n\t\t\tif (i === 0 || y > max.y) max.y = y;\n\t\t\tif (i === 0 || z > max.z) max.z = z;\n\t\t}\n\n\t\treturn new THREE.Box3(min, max);\n\t}\n}\n","\u0000asm\u0001\u0000\u0000\u0000\u0000\u000f\bdylink.0\u0001\u0004\u0000\u0000\u0000\u0000\u0001\u001b\u0003`\u0000\u0000`\u0010\u0000`\u0000\u0001\u0002\u0012\u0001\u0003env\u0006memory\u0002\u0003\u0000��\u0004\u0003\u0004\u0003\u0000\u0001\u0002\u0007T\u0004\u0011__wasm_call_ctors\u0000\u0000\u0018__wasm_apply_data_relocs\u0000\u0000\u000bsortIndexes\u0000\u0001\u0013emscripten_tls_init\u0000\u0002\n�\u0010\u0003\u0003\u0000\u0001\u000b�\u0010\u0004\u0001|\u0003{\u0003\u0003} \u000b \nk!\f\u0002@\u0002@ \u000e\u0004@ \r\u0004@A����\u0007!\nA����x!\r \u000b \fM\r\u0003 \f!\u0001\u0003@ \u0003 \u0001A\u0002t\"\u0005j \u0002 \u0000 \u0005j(\u0002\u0000A\u0002tj(\u0002\u0000\"\u00056\u0002\u0000 \u0005 \n \u0005 \nH\u001b!\n \u0005 \r \u0005 \rJ\u001b!\r \u0001A\u0001j\"\u0001 \u000bG\r\u0000\u000b\f\u0003\u000b \u000f\u0004@ \u000b \fM\r\u0002A!\u000fA����\u0007!\nA����x!\r \f!\u0002\u0003@ \u000f \u0007 \u0000 \u0002A\u0002t\"\u0015j(\u0002\u0000\"\u0016A\u0002tj(\u0002\u0000\"\u0014G\u0004@\u0002 \u0005�\t\u00028 \b \u0014A\u0006tj\"\u000e�\t\u0002\f \u000e*\u0002\u001c� \u0001 \u000e*\u0002,� \u0002 \u000e*\u0002<� \u0003��\u0001 \u0005�\t\u0002( \u000e�\t\u0002\b \u000e*\u0002\u0018� \u0001 \u000e*\u0002(� \u0002 \u000e*\u00028� \u0003��\u0001 \u0005�\t\u0002\b \u000e�\t\u0002\u0000 \u000e*\u0002\u0010� \u0001 \u000e*\u0002 � \u0002 \u000e*\u00020� \u0003��\u0001 \u0005�\t\u0002\u0018 \u000e�\t\u0002\u0004 \u000e*\u0002\u0014� \u0001 \u000e*\u0002$� \u0002 \u000e*\u00024� \u0003��\u0001��\u0001��\u0001��\u0001\"\u0011�_�\f\u0000\u0000\u0000\u0000\u0000@�@\u0000\u0000\u0000\u0000\u0000@�@\"\u0012��\u0001\"\u0013�!\u0001\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u000e\u0002 \u0013�!\u0000\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b�\u0011 \u000e�\u001c\u0001\u0002 \u0011 \u0011�\r\b\t\n\u000b\f\r\u000e\u000f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000�_ \u0012��\u0001\"\u0011�!\u0000\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b�\u001c\u0002\u0002 \u0011�!\u0001\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b�\u001c\u0003!\u0012 \u0014!\u000f\u000b \u0003 \u0015j \u0001 \u0016A\u0004tj�\u0000\u0000\u0000 \u0012��\u0001\"\u0011�\u001b\u0000 \u0011�\u001b\u0001j \u0011�\u001b\u0002j \u0011�\u001b\u0003j\"\u000e6\u0002\u0000 \u000e \n \n \u000eJ\u001b!\n \u000e \r \r \u000eH\u001b!\r \u0002A\u0001j\"\u0002 \u000bG\r\u0000\u000b\f\u0003\u000b\u0002 \u0005*\u0002\b��\u0014 \u0005*\u0002\u0018��\"\u0001�\f\u0000\u0000\u0000\u0000\u0000@�@\u0000\u0000\u0000\u0000\u0000@�@��\u0001\"\u0011�!\u0001\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u000e\u0002 \u0011�!\u0000\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u0002\u0002 \u0005*\u0002(�D\u0000\u0000\u0000\u0000\u0000@�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u0005A����\u0007!\nA����x!\r \u000b \fM\r\u0002 \u0002�\u0011 \u000e�\u001c\u0001 \u0005�\u001c\u0002!\u0012 \f!\u0005\u0003@ \u0003 \u0005A\u0002t\"\u0002j \u0001 \u0000 \u0002j(\u0002\u0000A\u0004tj�\u0000\u0000\u0000 \u0012��\u0001\"\u0011�\u001b\u0000 \u0011�\u001b\u0001j \u0011�\u001b\u0002j\"\u00026\u0002\u0000 \u0002 \n \u0002 \nH\u001b!\n \u0002 \r \u0002 \rJ\u001b!\r \u0005A\u0001j\"\u0005 \u000bG\r\u0000\u000b\f\u0002\u000b \r\u0004@A����\u0007!\nA����x!\r \u000b \fM\r\u0002 \f!\u0001\u0003@ \u0003 \u0001A\u0002t\"\u0005j\u0002 \u0002 \u0000 \u0005j(\u0002\u0000A\u0002tj*\u0002\u0000�D\u0000\u0000\u0000\u0000\u0000\u0000�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b\"\u000e6\u0002\u0000 \n \u000e \n \u000eH\u001b!\n \r \u000e \r \u000eJ\u001b!\r \u0001A\u0001j\"\u0001 \u000bG\r\u0000\u000b\f\u0002\u000b \u000fE\u0004@ \u000b \fM\r\u0001 \u0005*\u0002(!\u0017 \u0005*\u0002\u0018!\u0018 \u0005*\u0002\b!\u0019A����\u0007!\nA����x!\r \f!\u0005\u0003@\u0002 \u0017 \u0001 \u0000 \u0005A\u0002t\"\u0007j(\u0002\u0000A\u0004tj\"\u0002*\u0002\b� \u0019 \u0002*\u0002\u0000� \u0018 \u0002*\u0002\u0004����D\u0000\u0000\u0000\u0000\u0000\u0000�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u000e \u0003 \u0007j \u000e6\u0002\u0000 \n \u000e \n \u000eH\u001b!\n \r \u000e \r \u000eJ\u001b!\r \u0005A\u0001j\"\u0005 \u000bG\r\u0000\u000b\f\u0002\u000b \u000b \fM\r\u0000A!\u000fA����\u0007!\nA����x!\r \f!\u0002\u0003@ \u000f \u0007 \u0000 \u0002A\u0002t\"\u0014j(\u0002\u0000A\u0002t\"\u0015j(\u0002\u0000\"\u000eG\u0004@ \u0005�\t\u00028 \b \u000eA\u0006tj\"\u000f�\t\u0002\f \u000f*\u0002\u001c� \u0001 \u000f*\u0002,� \u0002 \u000f*\u0002<� \u0003��\u0001 \u0005�\t\u0002( \u000f�\t\u0002\b \u000f*\u0002\u0018� \u0001 \u000f*\u0002(� \u0002 \u000f*\u00028� \u0003��\u0001 \u0005�\t\u0002\b \u000f�\t\u0002\u0000 \u000f*\u0002\u0010� \u0001 \u000f*\u0002 � \u0002 \u000f*\u00020� \u0003��\u0001 \u0005�\t\u0002\u0018 \u000f�\t\u0002\u0004 \u000f*\u0002\u0014� \u0001 \u000f*\u0002$� \u0002 \u000f*\u00024� \u0003��\u0001��\u0001��\u0001��\u0001!\u0011 \u000e!\u000f\u000b \u0003 \u0014j\u0002 \u0011�\u001f\u0003 \u0001 \u0015A\u0002t\"\u000eA\frj*\u0002\u0000� \u0011�\u001f\u0002 \u0001 \u000eA\brj*\u0002\u0000� \u0011�\u001f\u0000 \u0001 \u000ej*\u0002\u0000� \u0011�\u001f\u0001 \u0001 \u000eA\u0004rj*\u0002\u0000�����D\u0000\u0000\u0000\u0000\u0000\u0000�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b\"\u000e6\u0002\u0000 \n \u000e \n \u000eH\u001b!\n \r \u000e \r \u000eJ\u001b!\r \u0002A\u0001j\"\u0002 \u000bG\r\u0000\u000b\f\u0001\u000bA����x!\rA����\u0007!\n\u000b \u000b \fK\u0004@ \tA\u0001k� \r� \n���!\u0017 \f!\r\u0003@\u0002 \u0017 \u0003 \rA\u0002tj\"\u0001(\u0002\u0000 \nk��\"\u0018�C\u0000\u0000\u0000O]\u0004@ \u0018�\f\u0001\u000bA����x\u000b!\u000e \u0001 \u000e6\u0002\u0000 \u0004 \u000eA\u0002tj\"\u0001 \u0001(\u0002\u0000A\u0001j6\u0002\u0000 \rA\u0001j\"\r \u000bG\r\u0000\u000b\u000b \tA\u0002O\u0004@ \u0004(\u0002\u0000!\rA\u0001!\n\u0003@ \u0004 \nA\u0002tj\"\u0001 \u0001(\u0002\u0000 \rj\"\r6\u0002\u0000 \nA\u0001j\"\n \tG\r\u0000\u000b\u000b \fA\u0000J\u0004@ \f!\n\u0003@ \u0006 \nA\u0001k\"\u0001A\u0002t\"\u0002j \u0000 \u0002j(\u0002\u00006\u0002\u0000 \nA\u0001K!\u0002 \u0001!\n \u0002\r\u0000\u000b\u000b \u000b \fJ\u0004@ \u000b!\n\u0003@ \u0006 \u000b \u0004 \u0003 \nA\u0001k\"\nA\u0002t\"\u0001j(\u0002\u0000A\u0002tj\"\u0002(\u0002\u0000\"\u0005kA\u0002tj \u0000 \u0001j(\u0002\u00006\u0002\u0000 \u0002 \u0005A\u0001k6\u0002\u0000 \n \fJ\r\u0000\u000b\u000b\u000b\u0004\u0000A\u0000\u000b","\u0000asm\u0001\u0000\u0000\u0000\u0000\u000f\bdylink.0\u0001\u0004\u0000\u0000\u0000\u0000\u0001\u0017\u0002`\u0000\u0000`\u0010\u0000\u0002\u0012\u0001\u0003env\u0006memory\u0002\u0003\u0000��\u0004\u0003\u0003\u0002\u0000\u0001\u0007>\u0003\u0011__wasm_call_ctors\u0000\u0000\u0018__wasm_apply_data_relocs\u0000\u0000\u000bsortIndexes\u0000\u0001\n�\u000f\u0002\u0002\u0000\u000b�\u000f\u0003\u0001|\u0007}\u0006 \u000b \nk!\f\u0002@\u0002@ \u000e\u0004@ \r\u0004@A����\u0007!\nA����x!\r \u000b \fM\r\u0003 \f!\u0005\u0003@ \u0003 \u0005A\u0002t\"\u0001j \u0002 \u0000 \u0001j(\u0002\u0000A\u0002tj(\u0002\u0000\"\u00016\u0002\u0000 \u0001 \n \u0001 \nH\u001b!\n \u0001 \r \u0001 \rJ\u001b!\r \u0005A\u0001j\"\u0005 \u000bG\r\u0000\u000b\f\u0003\u000b \u000f\u0004@ \u000b \fM\r\u0002A!\u000fA����\u0007!\nA����x!\r \f!\u0002\u0003@ \u000f \u0007 \u0000 \u0002A\u0002t\"\u001aj(\u0002\u0000A\u0002t\"\u001bj(\u0002\u0000\"\u000eG\u0004@\u0002 \u0005*\u00028\"\u0011 \b \u000eA\u0006tj\"\u000f*\u0002<� \u0005*\u0002(\"\u0012 \u000f*\u00028� \u0005*\u0002\b\"\u0013 \u000f*\u00020� \u0005*\u0002\u0018\"\u0014 \u000f*\u00024�����D\u0000\u0000\u0000\u0000\u0000@�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u0018\u0002 \u0011 \u000f*\u0002,� \u0012 \u000f*\u0002(� \u0013 \u000f*\u0002 � \u0014 \u000f*\u0002$�����D\u0000\u0000\u0000\u0000\u0000@�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u0019\u0002 \u0011 \u000f*\u0002\u001c� \u0012 \u000f*\u0002\u0018� \u0013 \u000f*\u0002\u0010� \u0014 \u000f*\u0002\u0014�����D\u0000\u0000\u0000\u0000\u0000@�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u001c\u0002 \u0011 \u000f*\u0002\f� \u0012 \u000f*\u0002\b� \u0013 \u000f*\u0002\u0000� \u0014 \u000f*\u0002\u0004�����D\u0000\u0000\u0000\u0000\u0000@�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u001d \u000e!\u000f\u000b \u0003 \u001aj \u0001 \u001bA\u0002tj\"\u000e(\u0002\u0004 \u001cl \u000e(\u0002\u0000 \u001dlj \u000e(\u0002\b \u0019lj \u000e(\u0002\f \u0018lj\"\u000e6\u0002\u0000 \u000e \n \n \u000eJ\u001b!\n \u000e \r \r \u000eH\u001b!\r \u0002A\u0001j\"\u0002 \u000bG\r\u0000\u000b\f\u0003\u000b\u0002 \u0005*\u0002(�D\u0000\u0000\u0000\u0000\u0000@�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u0002\u0002 \u0005*\u0002\u0018�D\u0000\u0000\u0000\u0000\u0000@�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u0007 \u000b \fM\u0002 \u0005*\u0002\b�D\u0000\u0000\u0000\u0000\u0000@�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u000fA����\u0007!\nA����x!\r\r\u0002 \f!\u0005\u0003@ \u0003 \u0005A\u0002t\"\bj \u0001 \u0000 \bj(\u0002\u0000A\u0004tj\"\b(\u0002\u0004 \u0007l \b(\u0002\u0000 \u000flj \b(\u0002\b \u0002lj\"\b6\u0002\u0000 \b \n \b \nH\u001b!\n \b \r \b \rJ\u001b!\r \u0005A\u0001j\"\u0005 \u000bG\r\u0000\u000b\f\u0002\u000b \r\u0004@A����\u0007!\nA����x!\r \u000b \fM\r\u0002 \f!\u0005\u0003@ \u0003 \u0005A\u0002t\"\u0001j\u0002 \u0002 \u0000 \u0001j(\u0002\u0000A\u0002tj*\u0002\u0000�D\u0000\u0000\u0000\u0000\u0000\u0000�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b\"\u000e6\u0002\u0000 \n \u000e \n \u000eH\u001b!\n \r \u000e \r \u000eJ\u001b!\r \u0005A\u0001j\"\u0005 \u000bG\r\u0000\u000b\f\u0002\u000b \u000fE\u0004@ \u000b \fM\r\u0001 \u0005*\u0002(!\u0011 \u0005*\u0002\u0018!\u0012 \u0005*\u0002\b!\u0013A����\u0007!\nA����x!\r \f!\u0005\u0003@\u0002 \u0011 \u0001 \u0000 \u0005A\u0002t\"\u0007j(\u0002\u0000A\u0004tj\"\u0002*\u0002\b� \u0013 \u0002*\u0002\u0000� \u0012 \u0002*\u0002\u0004����D\u0000\u0000\u0000\u0000\u0000\u0000�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u000e \u0003 \u0007j \u000e6\u0002\u0000 \n \u000e \n \u000eH\u001b!\n \r \u000e \r \u000eJ\u001b!\r \u0005A\u0001j\"\u0005 \u000bG\r\u0000\u000b\f\u0002\u000b \u000b \fM\r\u0000A!\u000fA����\u0007!\nA����x!\r \f!\u0002\u0003@ \u000f \u0007 \u0000 \u0002A\u0002t\"\u0018j(\u0002\u0000A\u0002t\"\u0019j(\u0002\u0000\"\u000eG\u0004@ \u0005*\u00028\"\u0011 \b \u000eA\u0006tj\"\u000f*\u0002<� \u0005*\u0002(\"\u0012 \u000f*\u00028� \u0005*\u0002\b\"\u0013 \u000f*\u00020� \u0005*\u0002\u0018\"\u0014 \u000f*\u00024����!\u0015 \u0011 \u000f*\u0002,� \u0012 \u000f*\u0002(� \u0013 \u000f*\u0002 � \u0014 \u000f*\u0002$����!\u0016 \u0011 \u000f*\u0002\u001c� \u0012 \u000f*\u0002\u0018� \u0013 \u000f*\u0002\u0010� \u0014 \u000f*\u0002\u0014����!\u0017 \u0011 \u000f*\u0002\f� \u0012 \u000f*\u0002\b� \u0013 \u000f*\u0002\u0000� \u0014 \u000f*\u0002\u0004����!\u0011 \u000e!\u000f\u000b \u0003 \u0018j\u0002 \u0015 \u0001 \u0019A\u0002tj\"\u000e*\u0002\f� \u0016 \u000e*\u0002\b� \u0011 \u000e*\u0002\u0000� \u0017 \u000e*\u0002\u0004�����D\u0000\u0000\u0000\u0000\u0000\u0000�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b\"\u000e6\u0002\u0000 \n \u000e \n \u000eH\u001b!\n \r \u000e \r \u000eJ\u001b!\r \u0002A\u0001j\"\u0002 \u000bG\r\u0000\u000b\f\u0001\u000bA����x!\rA����\u0007!\n\u000b \u000b \fK\u0004@ \tA\u0001k� \r� \n���!\u0011 \f!\r\u0003@\u0002 \u0011 \u0003 \rA\u0002tj\"\u0001(\u0002\u0000 \nk��\"\u0012�C\u0000\u0000\u0000O]\u0004@ \u0012�\f\u0001\u000bA����x\u000b!\u000e \u0001 \u000e6\u0002\u0000 \u0004 \u000eA\u0002tj\"\u0001 \u0001(\u0002\u0000A\u0001j6\u0002\u0000 \rA\u0001j\"\r \u000bG\r\u0000\u000b\u000b \tA\u0002O\u0004@ \u0004(\u0002\u0000!\rA\u0001!\n\u0003@ \u0004 \nA\u0002tj\"\u0001 \u0001(\u0002\u0000 \rj\"\r6\u0002\u0000 \nA\u0001j\"\n \tG\r\u0000\u000b\u000b \fA\u0000J\u0004@ \f!\n\u0003@ \u0006 \nA\u0001k\"\u0001A\u0002t\"\u0002j \u0000 \u0002j(\u0002\u00006\u0002\u0000 \nA\u0001K \u0001!\n\r\u0000\u000b\u000b \u000b \fJ\u0004@ \u000b!\n\u0003@ \u0006 \u000b \u0004 \u0003 \nA\u0001k\"\nA\u0002t\"\u0001j(\u0002\u0000A\u0002tj\"\u0002(\u0002\u0000\"\u0005kA\u0002tj \u0000 \u0001j(\u0002\u00006\u0002\u0000 \u0002 \u0005A\u0001k6\u0002\u0000 \n \fJ\r\u0000\u000b\u000b\u000b","\u0000asm\u0001\u0000\u0000\u0000\u0000\u000f\bdylink.0\u0001\u0004\u0000\u0000\u0000\u0000\u0001\u0017\u0002`\u0000\u0000`\u0010\u0000\u0002\u000f\u0001\u0003env\u0006memory\u0002\u0000\u0000\u0003\u0003\u0002\u0000\u0001\u0007>\u0003\u0011__wasm_call_ctors\u0000\u0000\u0018__wasm_apply_data_relocs\u0000\u0000\u000bsortIndexes\u0000\u0001\n�\u000f\u0002\u0002\u0000\u000b�\u000f\u0004\u0001|\u0003{\u0007}\u0003 \u000b \nk!\f\u0002@\u0002@ \u000e\u0004@ \r\u0004@A����\u0007!\nA����x!\r \u000b \fM\r\u0003 \f!\u0005\u0003@ \u0003 \u0005A\u0002t\"\u0001j \u0002 \u0000 \u0001j(\u0002\u0000A\u0002tj(\u0002\u0000\"\u00016\u0002\u0000 \u0001 \n \u0001 \nH\u001b!\n \u0001 \r \u0001 \rJ\u001b!\r \u0005A\u0001j\"\u0005 \u000bG\r\u0000\u000b\f\u0003\u000b \u000f\u0004@ \u000b \fM\r\u0002A!\u000fA����\u0007!\nA����x!\r \f!\u0002\u0003@ \u000f \u0007 \u0000 \u0002A\u0002t\"\u001cj(\u0002\u0000\"\u001dA\u0002tj(\u0002\u0000\"\u001bG\u0004@\u0002 \u0005�\t\u00028 \b \u001bA\u0006tj\"\u000e�\t\u0002\f \u000e*\u0002\u001c� \u0001 \u000e*\u0002,� \u0002 \u000e*\u0002<� \u0003��\u0001 \u0005�\t\u0002( \u000e�\t\u0002\b \u000e*\u0002\u0018� \u0001 \u000e*\u0002(� \u0002 \u000e*\u00028� \u0003��\u0001 \u0005�\t\u0002\b \u000e�\t\u0002\u0000 \u000e*\u0002\u0010� \u0001 \u000e*\u0002 � \u0002 \u000e*\u00020� \u0003��\u0001 \u0005�\t\u0002\u0018 \u000e�\t\u0002\u0004 \u000e*\u0002\u0014� \u0001 \u000e*\u0002$� \u0002 \u000e*\u00024� \u0003��\u0001��\u0001��\u0001��\u0001\"\u0011�_�\f\u0000\u0000\u0000\u0000\u0000@�@\u0000\u0000\u0000\u0000\u0000@�@\"\u0012��\u0001\"\u0013�!\u0001\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u000e\u0002 \u0013�!\u0000\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b�\u0011 \u000e�\u001c\u0001\u0002 \u0011 \u0011�\r\b\t\n\u000b\f\r\u000e\u000f\u0000\u0001\u0002\u0003\u0000\u0001\u0002\u0003�_ \u0012��\u0001\"\u0011�!\u0000\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b�\u001c\u0002\u0002 \u0011�!\u0001\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b�\u001c\u0003!\u0012 \u001b!\u000f\u000b \u0003 \u001cj \u0001 \u001dA\u0004tj�\u0000\u0000\u0000 \u0012��\u0001\"\u0011�\u001b\u0000 \u0011�\u001b\u0001j \u0011�\u001b\u0002j \u0011�\u001b\u0003j\"\u000e6\u0002\u0000 \u000e \n \n \u000eJ\u001b!\n \u000e \r \r \u000eH\u001b!\r \u0002A\u0001j\"\u0002 \u000bG\r\u0000\u000b\f\u0003\u000b\u0002 \u0005*\u0002\b��\u0014 \u0005*\u0002\u0018��\"\u0001�\f\u0000\u0000\u0000\u0000\u0000@�@\u0000\u0000\u0000\u0000\u0000@�@��\u0001\"\u0011�!\u0001\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u000e\u0002 \u0011�!\u0000\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b\u0002 \u0005*\u0002(�D\u0000\u0000\u0000\u0000\u0000@�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u0005A����\u0007!\nA����x!\r \u000b \fM\r\u0002�\u0011 \u000e�\u001c\u0001 \u0005�\u001c\u0002!\u0012 \f!\u0005\u0003@ \u0003 \u0005A\u0002t\"\u0002j \u0001 \u0000 \u0002j(\u0002\u0000A\u0004tj�\u0000\u0000\u0000 \u0012��\u0001\"\u0011�\u001b\u0000 \u0011�\u001b\u0001j \u0011�\u001b\u0002j\"\u00026\u0002\u0000 \u0002 \n \u0002 \nH\u001b!\n \u0002 \r \u0002 \rJ\u001b!\r \u0005A\u0001j\"\u0005 \u000bG\r\u0000\u000b\f\u0002\u000b \r\u0004@A����\u0007!\nA����x!\r \u000b \fM\r\u0002 \f!\u0005\u0003@ \u0003 \u0005A\u0002t\"\u0001j\u0002 \u0002 \u0000 \u0001j(\u0002\u0000A\u0002tj*\u0002\u0000�D\u0000\u0000\u0000\u0000\u0000\u0000�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b\"\u000e6\u0002\u0000 \n \u000e \n \u000eH\u001b!\n \r \u000e \r \u000eJ\u001b!\r \u0005A\u0001j\"\u0005 \u000bG\r\u0000\u000b\f\u0002\u000b \u000fE\u0004@ \u000b \fM\r\u0001 \u0005*\u0002(!\u0014 \u0005*\u0002\u0018!\u0015 \u0005*\u0002\b!\u0016A����\u0007!\nA����x!\r \f!\u0005\u0003@\u0002 \u0014 \u0001 \u0000 \u0005A\u0002t\"\u0007j(\u0002\u0000A\u0004tj\"\u0002*\u0002\b� \u0016 \u0002*\u0002\u0000� \u0015 \u0002*\u0002\u0004����D\u0000\u0000\u0000\u0000\u0000\u0000�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u000e \u0003 \u0007j \u000e6\u0002\u0000 \n \u000e \n \u000eH\u001b!\n \r \u000e \r \u000eJ\u001b!\r \u0005A\u0001j\"\u0005 \u000bG\r\u0000\u000b\f\u0002\u000b \u000b \fM\r\u0000A!\u000fA����\u0007!\nA����x!\r \f!\u0002\u0003@ \u000f \u0007 \u0000 \u0002A\u0002t\"\u001bj(\u0002\u0000A\u0002t\"\u001cj(\u0002\u0000\"\u000eG\u0004@ \u0005*\u00028\"\u0014 \b \u000eA\u0006tj\"\u000f*\u0002<� \u0005*\u0002(\"\u0015 \u000f*\u00028� \u0005*\u0002\b\"\u0016 \u000f*\u00020� \u0005*\u0002\u0018\"\u0017 \u000f*\u00024����!\u0018 \u0014 \u000f*\u0002,� \u0015 \u000f*\u0002(� \u0016 \u000f*\u0002 � \u0017 \u000f*\u0002$����!\u0019 \u0014 \u000f*\u0002\u001c� \u0015 \u000f*\u0002\u0018� \u0016 \u000f*\u0002\u0010� \u0017 \u000f*\u0002\u0014����!\u001a \u0014 \u000f*\u0002\f� \u0015 \u000f*\u0002\b� \u0016 \u000f*\u0002\u0000� \u0017 \u000f*\u0002\u0004����!\u0014 \u000e!\u000f\u000b \u0003 \u001bj\u0002 \u0018 \u0001 \u001cA\u0002tj\"\u000e*\u0002\f� \u0019 \u000e*\u0002\b� \u0014 \u000e*\u0002\u0000� \u001a \u000e*\u0002\u0004�����D\u0000\u0000\u0000\u0000\u0000\u0000�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b\"\u000e6\u0002\u0000 \n \u000e \n \u000eH\u001b!\n \r \u000e \r \u000eJ\u001b!\r \u0002A\u0001j\"\u0002 \u000bG\r\u0000\u000b\f\u0001\u000bA����x!\rA����\u0007!\n\u000b \u000b \fK\u0004@ \tA\u0001k� \r� \n���!\u0014 \f!\r\u0003@\u0002 \u0014 \u0003 \rA\u0002tj\"\u0001(\u0002\u0000 \nk��\"\u0015�C\u0000\u0000\u0000O]\u0004@ \u0015�\f\u0001\u000bA����x\u000b!\u000e \u0001 \u000e6\u0002\u0000 \u0004 \u000eA\u0002tj\"\u0001 \u0001(\u0002\u0000A\u0001j6\u0002\u0000 \rA\u0001j\"\r \u000bG\r\u0000\u000b\u000b \tA\u0002O\u0004@ \u0004(\u0002\u0000!\rA\u0001!\n\u0003@ \u0004 \nA\u0002tj\"\u0001 \u0001(\u0002\u0000 \rj\"\r6\u0002\u0000 \nA\u0001j\"\n \tG\r\u0000\u000b\u000b \fA\u0000J\u0004@ \f!\n\u0003@ \u0006 \nA\u0001k\"\u0001A\u0002t\"\u0002j \u0000 \u0002j(\u0002\u00006\u0002\u0000 \nA\u0001K \u0001!\n\r\u0000\u000b\u000b \u000b \fJ\u0004@ \u000b!\n\u0003@ \u0006 \u000b \u0004 \u0003 \nA\u0001k\"\nA\u0002t\"\u0001j(\u0002\u0000A\u0002tj\"\u0002(\u0002\u0000\"\u0005kA\u0002tj \u0000 \u0001j(\u0002\u00006\u0002\u0000 \u0002 \u0005A\u0001k6\u0002\u0000 \n \fJ\r\u0000\u000b\u000b\u000b","\u0000asm\u0001\u0000\u0000\u0000\u0000\u000f\bdylink.0\u0001\u0004\u0000\u0000\u0000\u0000\u0001\u0017\u0002`\u0000\u0000`\u0010\u0000\u0002\u000f\u0001\u0003env\u0006memory\u0002\u0000\u0000\u0003\u0003\u0002\u0000\u0001\u0007>\u0003\u0011__wasm_call_ctors\u0000\u0000\u0018__wasm_apply_data_relocs\u0000\u0000\u000bsortIndexes\u0000\u0001\n�\u000f\u0002\u0002\u0000\u000b�\u000f\u0003\u0001|\u0007}\u0006 \u000b \nk!\f\u0002@\u0002@ \u000e\u0004@ \r\u0004@A����\u0007!\nA����x!\r \u000b \fM\r\u0003 \f!\u0005\u0003@ \u0003 \u0005A\u0002t\"\u0001j \u0002 \u0000 \u0001j(\u0002\u0000A\u0002tj(\u0002\u0000\"\u00016\u0002\u0000 \u0001 \n \u0001 \nH\u001b!\n \u0001 \r \u0001 \rJ\u001b!\r \u0005A\u0001j\"\u0005 \u000bG\r\u0000\u000b\f\u0003\u000b \u000f\u0004@ \u000b \fM\r\u0002A!\u000fA����\u0007!\nA����x!\r \f!\u0002\u0003@ \u000f \u0007 \u0000 \u0002A\u0002t\"\u001aj(\u0002\u0000A\u0002t\"\u001bj(\u0002\u0000\"\u000eG\u0004@\u0002 \u0005*\u00028\"\u0011 \b \u000eA\u0006tj\"\u000f*\u0002<� \u0005*\u0002(\"\u0012 \u000f*\u00028� \u0005*\u0002\b\"\u0013 \u000f*\u00020� \u0005*\u0002\u0018\"\u0014 \u000f*\u00024�����D\u0000\u0000\u0000\u0000\u0000@�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u0018\u0002 \u0011 \u000f*\u0002,� \u0012 \u000f*\u0002(� \u0013 \u000f*\u0002 � \u0014 \u000f*\u0002$�����D\u0000\u0000\u0000\u0000\u0000@�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u0019\u0002 \u0011 \u000f*\u0002\u001c� \u0012 \u000f*\u0002\u0018� \u0013 \u000f*\u0002\u0010� \u0014 \u000f*\u0002\u0014�����D\u0000\u0000\u0000\u0000\u0000@�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u001c\u0002 \u0011 \u000f*\u0002\f� \u0012 \u000f*\u0002\b� \u0013 \u000f*\u0002\u0000� \u0014 \u000f*\u0002\u0004�����D\u0000\u0000\u0000\u0000\u0000@�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u001d \u000e!\u000f\u000b \u0003 \u001aj \u0001 \u001bA\u0002tj\"\u000e(\u0002\u0004 \u001cl \u000e(\u0002\u0000 \u001dlj \u000e(\u0002\b \u0019lj \u000e(\u0002\f \u0018lj\"\u000e6\u0002\u0000 \u000e \n \n \u000eJ\u001b!\n \u000e \r \r \u000eH\u001b!\r \u0002A\u0001j\"\u0002 \u000bG\r\u0000\u000b\f\u0003\u000b\u0002 \u0005*\u0002(�D\u0000\u0000\u0000\u0000\u0000@�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u0002\u0002 \u0005*\u0002\u0018�D\u0000\u0000\u0000\u0000\u0000@�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u0007 \u000b \fM\u0002 \u0005*\u0002\b�D\u0000\u0000\u0000\u0000\u0000@�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u000fA����\u0007!\nA����x!\r\r\u0002 \f!\u0005\u0003@ \u0003 \u0005A\u0002t\"\bj \u0001 \u0000 \bj(\u0002\u0000A\u0004tj\"\b(\u0002\u0004 \u0007l \b(\u0002\u0000 \u000flj \b(\u0002\b \u0002lj\"\b6\u0002\u0000 \b \n \b \nH\u001b!\n \b \r \b \rJ\u001b!\r \u0005A\u0001j\"\u0005 \u000bG\r\u0000\u000b\f\u0002\u000b \r\u0004@A����\u0007!\nA����x!\r \u000b \fM\r\u0002 \f!\u0005\u0003@ \u0003 \u0005A\u0002t\"\u0001j\u0002 \u0002 \u0000 \u0001j(\u0002\u0000A\u0002tj*\u0002\u0000�D\u0000\u0000\u0000\u0000\u0000\u0000�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b\"\u000e6\u0002\u0000 \n \u000e \n \u000eH\u001b!\n \r \u000e \r \u000eJ\u001b!\r \u0005A\u0001j\"\u0005 \u000bG\r\u0000\u000b\f\u0002\u000b \u000fE\u0004@ \u000b \fM\r\u0001 \u0005*\u0002(!\u0011 \u0005*\u0002\u0018!\u0012 \u0005*\u0002\b!\u0013A����\u0007!\nA����x!\r \f!\u0005\u0003@\u0002 \u0011 \u0001 \u0000 \u0005A\u0002t\"\u0007j(\u0002\u0000A\u0004tj\"\u0002*\u0002\b� \u0013 \u0002*\u0002\u0000� \u0012 \u0002*\u0002\u0004����D\u0000\u0000\u0000\u0000\u0000\u0000�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b!\u000e \u0003 \u0007j \u000e6\u0002\u0000 \n \u000e \n \u000eH\u001b!\n \r \u000e \r \u000eJ\u001b!\r \u0005A\u0001j\"\u0005 \u000bG\r\u0000\u000b\f\u0002\u000b \u000b \fM\r\u0000A!\u000fA����\u0007!\nA����x!\r \f!\u0002\u0003@ \u000f \u0007 \u0000 \u0002A\u0002t\"\u0018j(\u0002\u0000A\u0002t\"\u0019j(\u0002\u0000\"\u000eG\u0004@ \u0005*\u00028\"\u0011 \b \u000eA\u0006tj\"\u000f*\u0002<� \u0005*\u0002(\"\u0012 \u000f*\u00028� \u0005*\u0002\b\"\u0013 \u000f*\u00020� \u0005*\u0002\u0018\"\u0014 \u000f*\u00024����!\u0015 \u0011 \u000f*\u0002,� \u0012 \u000f*\u0002(� \u0013 \u000f*\u0002 � \u0014 \u000f*\u0002$����!\u0016 \u0011 \u000f*\u0002\u001c� \u0012 \u000f*\u0002\u0018� \u0013 \u000f*\u0002\u0010� \u0014 \u000f*\u0002\u0014����!\u0017 \u0011 \u000f*\u0002\f� \u0012 \u000f*\u0002\b� \u0013 \u000f*\u0002\u0000� \u0014 \u000f*\u0002\u0004����!\u0011 \u000e!\u000f\u000b \u0003 \u0018j\u0002 \u0015 \u0001 \u0019A\u0002tj\"\u000e*\u0002\f� \u0016 \u000e*\u0002\b� \u0011 \u000e*\u0002\u0000� \u0017 \u000e*\u0002\u0004�����D\u0000\u0000\u0000\u0000\u0000\u0000�@�\"\u0010�D\u0000\u0000\u0000\u0000\u0000\u0000�Ac\u0004@ \u0010�\f\u0001\u000bA����x\u000b\"\u000e6\u0002\u0000 \n \u000e \n \u000eH\u001b!\n \r \u000e \r \u000eJ\u001b!\r \u0002A\u0001j\"\u0002 \u000bG\r\u0000\u000b\f\u0001\u000bA����x!\rA����\u0007!\n\u000b \u000b \fK\u0004@ \tA\u0001k� \r� \n���!\u0011 \f!\r\u0003@\u0002 \u0011 \u0003 \rA\u0002tj\"\u0001(\u0002\u0000 \nk��\"\u0012�C\u0000\u0000\u0000O]\u0004@ \u0012�\f\u0001\u000bA����x\u000b!\u000e \u0001 \u000e6\u0002\u0000 \u0004 \u000eA\u0002tj\"\u0001 \u0001(\u0002\u0000A\u0001j6\u0002\u0000 \rA\u0001j\"\r \u000bG\r\u0000\u000b\u000b \tA\u0002O\u0004@ \u0004(\u0002\u0000!\rA\u0001!\n\u0003@ \u0004 \nA\u0002tj\"\u0001 \u0001(\u0002\u0000 \rj\"\r6\u0002\u0000 \nA\u0001j\"\n \tG\r\u0000\u000b\u000b \fA\u0000J\u0004@ \f!\n\u0003@ \u0006 \nA\u0001k\"\u0001A\u0002t\"\u0002j \u0000 \u0002j(\u0002\u00006\u0002\u0000 \nA\u0001K \u0001!\n\r\u0000\u000b\u000b \u000b \fJ\u0004@ \u000b!\n\u0003@ \u0006 \u000b \u0004 \u0003 \nA\u0001k\"\nA\u0002t\"\u0001j(\u0002\u0000A\u0002tj\"\u0002(\u0002\u0000\"\u0005kA\u0002tj \u0000 \u0001j(\u0002\u00006\u0002\u0000 \u0002 \u0005A\u0001k6\u0002\u0000 \n \fJ\r\u0000\u000b\u000b\u000b","import SorterWasm from \"./sorter.wasm\";\nimport SorterWasmNoSIMD from \"./sorter_no_simd.wasm\";\nimport SorterWasmNonShared from \"./sorter_non_shared.wasm\";\nimport SorterWasmNoSIMDNonShared from \"./sorter_no_simd_non_shared.wasm\";\nimport { isIOS, getIOSSemever } from \"../Util.js\";\nimport { Constants } from \"../Constants.js\";\n\nfunction sortWorker(self) {\n\tlet wasmInstance;\n\tlet wasmMemory;\n\tlet useSharedMemory;\n\tlet integerBasedSort;\n\tlet dynamicMode;\n\tlet splatCount;\n\tlet indexesToSortOffset;\n\tlet sortedIndexesOffset;\n\tlet sceneIndexesOffset;\n\tlet transformsOffset;\n\tlet precomputedDistancesOffset;\n\tlet mappedDistancesOffset;\n\tlet frequenciesOffset;\n\tlet centersOffset;\n\tlet modelViewProjOffset;\n\tlet countsZero;\n\tlet sortedIndexesOut;\n\tlet distanceMapRange;\n\tlet uploadedSplatCount;\n\tlet Constants;\n\n\tfunction sort(\n\t\tsplatSortCount,\n\t\tsplatRenderCount,\n\t\tmodelViewProj,\n\t\tusePrecomputedDistances,\n\t\tcopyIndexesToSort,\n\t\tcopyPrecomputedDistances,\n\t\tcopyTransforms,\n\t) {\n\t\tconst sortStartTime = performance.now();\n\n\t\tif (!useSharedMemory) {\n\t\t\tconst indexesToSort = new Uint32Array(\n\t\t\t\twasmMemory,\n\t\t\t\tindexesToSortOffset,\n\t\t\t\tcopyIndexesToSort.byteLength / Constants.BytesPerInt,\n\t\t\t);\n\t\t\tindexesToSort.set(copyIndexesToSort);\n\t\t\tconst transforms = new Float32Array(\n\t\t\t\twasmMemory,\n\t\t\t\ttransformsOffset,\n\t\t\t\tcopyTransforms.byteLength / Constants.BytesPerFloat,\n\t\t\t);\n\t\t\ttransforms.set(copyTransforms);\n\t\t\tif (usePrecomputedDistances) {\n\t\t\t\tlet precomputedDistances;\n\t\t\t\tif (integerBasedSort) {\n\t\t\t\t\tprecomputedDistances = new Int32Array(\n\t\t\t\t\t\twasmMemory,\n\t\t\t\t\t\tprecomputedDistancesOffset,\n\t\t\t\t\t\tcopyPrecomputedDistances.byteLength / Constants.BytesPerInt,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tprecomputedDistances = new Float32Array(\n\t\t\t\t\t\twasmMemory,\n\t\t\t\t\t\tprecomputedDistancesOffset,\n\t\t\t\t\t\tcopyPrecomputedDistances.byteLength / Constants.BytesPerFloat,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tprecomputedDistances.set(copyPrecomputedDistances);\n\t\t\t}\n\t\t}\n\n\t\tif (!countsZero) countsZero = new Uint32Array(distanceMapRange);\n\t\tnew Float32Array(wasmMemory, modelViewProjOffset, 16).set(modelViewProj);\n\t\tnew Uint32Array(wasmMemory, frequenciesOffset, distanceMapRange).set(countsZero);\n\t\twasmInstance.exports.sortIndexes(\n\t\t\tindexesToSortOffset,\n\t\t\tcentersOffset,\n\t\t\tprecomputedDistancesOffset,\n\t\t\tmappedDistancesOffset,\n\t\t\tfrequenciesOffset,\n\t\t\tmodelViewProjOffset,\n\t\t\tsortedIndexesOffset,\n\t\t\tsceneIndexesOffset,\n\t\t\ttransformsOffset,\n\t\t\tdistanceMapRange,\n\t\t\tsplatSortCount,\n\t\t\tsplatRenderCount,\n\t\t\tsplatCount,\n\t\t\tusePrecomputedDistances,\n\t\t\tintegerBasedSort,\n\t\t\tdynamicMode,\n\t\t);\n\n\t\tconst sortMessage = {\n\t\t\tsortDone: true,\n\t\t\tsplatSortCount: splatSortCount,\n\t\t\tsplatRenderCount: splatRenderCount,\n\t\t\tsortTime: 0,\n\t\t};\n\t\tif (!useSharedMemory) {\n\t\t\tconst sortedIndexes = new Uint32Array(wasmMemory, sortedIndexesOffset, splatRenderCount);\n\t\t\tif (!sortedIndexesOut || sortedIndexesOut.length < splatRenderCount) {\n\t\t\t\tsortedIndexesOut = new Uint32Array(splatRenderCount);\n\t\t\t}\n\t\t\tsortedIndexesOut.set(sortedIndexes);\n\t\t\tsortMessage.sortedIndexes = sortedIndexesOut;\n\t\t}\n\t\tconst sortEndTime = performance.now();\n\n\t\tsortMessage.sortTime = sortEndTime - sortStartTime;\n\n\t\tself.postMessage(sortMessage);\n\t}\n\n\tself.onmessage = (e) => {\n\t\tif (e.data.centers) {\n\t\t\tcenters = e.data.centers;\n\t\t\tsceneIndexes = e.data.sceneIndexes;\n\t\t\tif (integerBasedSort) {\n\t\t\t\tnew Int32Array(\n\t\t\t\t\twasmMemory,\n\t\t\t\t\tcentersOffset + e.data.range.from * Constants.BytesPerInt * 4,\n\t\t\t\t\te.data.range.count * 4,\n\t\t\t\t).set(new Int32Array(centers));\n\t\t\t} else {\n\t\t\t\tnew Float32Array(\n\t\t\t\t\twasmMemory,\n\t\t\t\t\tcentersOffset + e.data.range.from * Constants.BytesPerFloat * 4,\n\t\t\t\t\te.data.range.count * 4,\n\t\t\t\t).set(new Float32Array(centers));\n\t\t\t}\n\t\t\tif (dynamicMode) {\n\t\t\t\tnew Uint32Array(wasmMemory, sceneIndexesOffset + e.data.range.from * 4, e.data.range.count).set(\n\t\t\t\t\tnew Uint32Array(sceneIndexes),\n\t\t\t\t);\n\t\t\t}\n\t\t\tuploadedSplatCount = e.data.range.from + e.data.range.count;\n\t\t} else if (e.data.sort) {\n\t\t\tconst renderCount = Math.min(e.data.sort.splatRenderCount || 0, uploadedSplatCount);\n\t\t\tconst sortCount = Math.min(e.data.sort.splatSortCount || 0, uploadedSplatCount);\n\t\t\tconst usePrecomputedDistances = e.data.sort.usePrecomputedDistances;\n\n\t\t\tlet copyIndexesToSort;\n\t\t\tlet copyPrecomputedDistances;\n\t\t\tlet copyTransforms;\n\t\t\tif (!useSharedMemory) {\n\t\t\t\tcopyIndexesToSort = e.data.sort.indexesToSort;\n\t\t\t\tcopyTransforms = e.data.sort.transforms;\n\t\t\t\tif (usePrecomputedDistances) copyPrecomputedDistances = e.data.sort.precomputedDistances;\n\t\t\t}\n\t\t\tsort(\n\t\t\t\tsortCount,\n\t\t\t\trenderCount,\n\t\t\t\te.data.sort.modelViewProj,\n\t\t\t\tusePrecomputedDistances,\n\t\t\t\tcopyIndexesToSort,\n\t\t\t\tcopyPrecomputedDistances,\n\t\t\t\tcopyTransforms,\n\t\t\t);\n\t\t} else if (e.data.init) {\n\t\t\t// Yep, this is super hacky and gross :(\n\t\t\tConstants = e.data.init.Constants;\n\n\t\t\tsplatCount = e.data.init.splatCount;\n\t\t\tuseSharedMemory = e.data.init.useSharedMemory;\n\t\t\tintegerBasedSort = e.data.init.integerBasedSort;\n\t\t\tdynamicMode = e.data.init.dynamicMode;\n\t\t\tdistanceMapRange = e.data.init.distanceMapRange;\n\t\t\tuploadedSplatCount = 0;\n\n\t\t\tconst CENTERS_BYTES_PER_ENTRY = integerBasedSort ?\n\t\t\t\tConstants.BytesPerInt * 4 :\n\t\t\t\tConstants.BytesPerFloat * 4;\n\n\t\t\tconst sorterWasmBytes = new Uint8Array(e.data.init.sorterWasmBytes);\n\n\t\t\tconst matrixSize = 16 * Constants.BytesPerFloat;\n\t\t\tconst memoryRequiredForIndexesToSort = splatCount * Constants.BytesPerInt;\n\t\t\tconst memoryRequiredForCenters = splatCount * CENTERS_BYTES_PER_ENTRY;\n\t\t\tconst memoryRequiredForModelViewProjectionMatrix = matrixSize;\n\t\t\tconst memoryRequiredForPrecomputedDistances = integerBasedSort ?\n\t\t\t\tsplatCount * Constants.BytesPerInt :\n\t\t\t\tsplatCount * Constants.BytesPerFloat;\n\t\t\tconst memoryRequiredForMappedDistances = splatCount * Constants.BytesPerInt;\n\t\t\tconst memoryRequiredForSortedIndexes = splatCount * Constants.BytesPerInt;\n\t\t\tconst memoryRequiredForIntermediateSortBuffers = integerBasedSort ?\n\t\t\t\tdistanceMapRange * Constants.BytesPerInt * 2 :\n\t\t\t\tdistanceMapRange * Constants.BytesPerFloat * 2;\n\t\t\tconst memoryRequiredforTransformIndexes = dynamicMode ? splatCount * Constants.BytesPerInt : 0;\n\t\t\tconst memoryRequiredforTransforms = dynamicMode ? Constants.MaxScenes * matrixSize : 0;\n\t\t\tconst extraMemory = Constants.MemoryPageSize * 32;\n\n\t\t\tconst totalRequiredMemory =\n\t\t\t\tmemoryRequiredForIndexesToSort +\n\t\t\t\tmemoryRequiredForCenters +\n\t\t\t\tmemoryRequiredForModelViewProjectionMatrix +\n\t\t\t\tmemoryRequiredForPrecomputedDistances +\n\t\t\t\tmemoryRequiredForMappedDistances +\n\t\t\t\tmemoryRequiredForIntermediateSortBuffers +\n\t\t\t\tmemoryRequiredForSortedIndexes +\n\t\t\t\tmemoryRequiredforTransformIndexes +\n\t\t\t\tmemoryRequiredforTransforms +\n\t\t\t\textraMemory;\n\t\t\tconst totalPagesRequired = Math.floor(totalRequiredMemory / Constants.MemoryPageSize) + 1;\n\t\t\tconst sorterWasmImport = {\n\t\t\t\tmodule: {},\n\t\t\t\tenv: {\n\t\t\t\t\tmemory: new WebAssembly.Memory({\n\t\t\t\t\t\tinitial: totalPagesRequired,\n\t\t\t\t\t\tmaximum: totalPagesRequired,\n\t\t\t\t\t\tshared: true,\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t};\n\t\t\tWebAssembly.compile(sorterWasmBytes)\n\t\t\t\t.then((wasmModule) => {\n\t\t\t\t\treturn WebAssembly.instantiate(wasmModule, sorterWasmImport);\n\t\t\t\t})\n\t\t\t\t.then((instance) => {\n\t\t\t\t\twasmInstance = instance;\n\t\t\t\t\tindexesToSortOffset = 0;\n\t\t\t\t\tcentersOffset = indexesToSortOffset + memoryRequiredForIndexesToSort;\n\t\t\t\t\tmodelViewProjOffset = centersOffset + memoryRequiredForCenters;\n\t\t\t\t\tprecomputedDistancesOffset = modelViewProjOffset + memoryRequiredForModelViewProjectionMatrix;\n\t\t\t\t\tmappedDistancesOffset = precomputedDistancesOffset + memoryRequiredForPrecomputedDistances;\n\t\t\t\t\tfrequenciesOffset = mappedDistancesOffset + memoryRequiredForMappedDistances;\n\t\t\t\t\tsortedIndexesOffset = frequenciesOffset + memoryRequiredForIntermediateSortBuffers;\n\t\t\t\t\tsceneIndexesOffset = sortedIndexesOffset + memoryRequiredForSortedIndexes;\n\t\t\t\t\ttransformsOffset = sceneIndexesOffset + memoryRequiredforTransformIndexes;\n\t\t\t\t\twasmMemory = sorterWasmImport.env.memory.buffer;\n\t\t\t\t\tif (useSharedMemory) {\n\t\t\t\t\t\tself.postMessage({\n\t\t\t\t\t\t\tsortSetupPhase1Complete: true,\n\t\t\t\t\t\t\tindexesToSortBuffer: wasmMemory,\n\t\t\t\t\t\t\tindexesToSortOffset: indexesToSortOffset,\n\t\t\t\t\t\t\tsortedIndexesBuffer: wasmMemory,\n\t\t\t\t\t\t\tsortedIndexesOffset: sortedIndexesOffset,\n\t\t\t\t\t\t\tprecomputedDistancesBuffer: wasmMemory,\n\t\t\t\t\t\t\tprecomputedDistancesOffset: precomputedDistancesOffset,\n\t\t\t\t\t\t\ttransformsBuffer: wasmMemory,\n\t\t\t\t\t\t\ttransformsOffset: transformsOffset,\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.postMessage({\n\t\t\t\t\t\t\tsortSetupPhase1Complete: true,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t}\n\t};\n}\n\nexport function createSortWorker(\n\tsplatCount,\n\tuseSharedMemory,\n\tenableSIMDInSort,\n\tintegerBasedSort,\n\tdynamicMode,\n\tsplatSortDistanceMapPrecision = Constants.DefaultSplatSortDistanceMapPrecision,\n) {\n\tconst worker = new Worker(\n\t\tURL.createObjectURL(\n\t\t\tnew Blob([\"(\", sortWorker.toString(), \")(self)\"], {\n\t\t\t\ttype: \"application/javascript\",\n\t\t\t}),\n\t\t),\n\t);\n\n\tlet sourceWasm = SorterWasm;\n\n\t// iOS makes choosing the right WebAssembly configuration tricky :(\n\tconst iOSSemVer = isIOS() ? getIOSSemever() : null;\n\tif (!enableSIMDInSort && !useSharedMemory) {\n\t\tsourceWasm = SorterWasmNoSIMD;\n\t\t// Testing on various devices has shown that even when shared memory is disabled, the WASM module with shared\n\t\t// memory can still be used most of the time -- the exception seems to be iOS devices below 16.4\n\t\tif (iOSSemVer && iOSSemVer.major <= 16 && iOSSemVer.minor < 4) {\n\t\t\tsourceWasm = SorterWasmNoSIMDNonShared;\n\t\t}\n\t} else if (!enableSIMDInSort) {\n\t\tsourceWasm = SorterWasmNoSIMD;\n\t} else if (!useSharedMemory) {\n\t\t// Same issue with shared memory as above on iOS devices\n\t\tif (iOSSemVer && iOSSemVer.major <= 16 && iOSSemVer.minor < 4) {\n\t\t\tsourceWasm = SorterWasmNonShared;\n\t\t}\n\t}\n\n\tconst sorterWasmBinaryString = atob(sourceWasm);\n\tconst sorterWasmBytes = new Uint8Array(sorterWasmBinaryString.length);\n\tfor (let i = 0; i < sorterWasmBinaryString.length; i++) {\n\t\tsorterWasmBytes[i] = sorterWasmBinaryString.charCodeAt(i);\n\t}\n\n\tworker.postMessage({\n\t\tinit: {\n\t\t\tsorterWasmBytes: sorterWasmBytes.buffer,\n\t\t\tsplatCount: splatCount,\n\t\t\tuseSharedMemory: useSharedMemory,\n\t\t\tintegerBasedSort: integerBasedSort,\n\t\t\tdynamicMode: dynamicMode,\n\t\t\tdistanceMapRange: 1 << splatSortDistanceMapPrecision,\n\t\t\t// Super hacky\n\t\t\tConstants: {\n\t\t\t\tBytesPerFloat: Constants.BytesPerFloat,\n\t\t\t\tBytesPerInt: Constants.BytesPerInt,\n\t\t\t\tMemoryPageSize: Constants.MemoryPageSize,\n\t\t\t\tMaxScenes: Constants.MaxScenes,\n\t\t\t},\n\t\t},\n\t});\n\treturn worker;\n}\n","export const WebXRMode = {\n\tNone: 0,\n\tVR: 1,\n\tAR: 2,\n};\n","/*\nCopyright © 2010-2024 three.js authors & Mark Kellogg\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n*/\n\nexport class VRButton {\n\tstatic createButton(renderer, sessionInit = {}) {\n\t\tconst button = document.createElement(\"button\");\n\n\t\tfunction showEnterVR(/* device */) {\n\t\t\tlet currentSession = null;\n\n\t\t\tasync function onSessionStarted(session) {\n\t\t\t\tsession.addEventListener(\"end\", onSessionEnded);\n\n\t\t\t\tawait renderer.xr.setSession(session);\n\t\t\t\tbutton.textContent = \"EXIT VR\";\n\n\t\t\t\tcurrentSession = session;\n\t\t\t}\n\n\t\t\tfunction onSessionEnded(/* event */) {\n\t\t\t\tcurrentSession.removeEventListener(\"end\", onSessionEnded);\n\n\t\t\t\tbutton.textContent = \"ENTER VR\";\n\n\t\t\t\tcurrentSession = null;\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tbutton.style.display = \"\";\n\n\t\t\tbutton.style.cursor = \"pointer\";\n\t\t\tbutton.style.left = \"calc(50% - 50px)\";\n\t\t\tbutton.style.width = \"100px\";\n\n\t\t\tbutton.textContent = \"ENTER VR\";\n\n\t\t\t// WebXR's requestReferenceSpace only works if the corresponding feature\n\t\t\t// was requested at session creation time. For simplicity, just ask for\n\t\t\t// the interesting ones as optional features, but be aware that the\n\t\t\t// requestReferenceSpace call will fail if it turns out to be unavailable.\n\t\t\t// ('local' is always available for immersive sessions and doesn't need to\n\t\t\t// be requested separately.)\n\n\t\t\tconst sessionOptions = {\n\t\t\t\t...sessionInit,\n\t\t\t\toptionalFeatures: [\"local-floor\", \"bounded-floor\", \"layers\", ...(sessionInit.optionalFeatures || [])],\n\t\t\t};\n\n\t\t\tbutton.onmouseenter = function() {\n\t\t\t\tbutton.style.opacity = \"1.0\";\n\t\t\t};\n\n\t\t\tbutton.onmouseleave = function() {\n\t\t\t\tbutton.style.opacity = \"0.5\";\n\t\t\t};\n\n\t\t\tbutton.onclick = function() {\n\t\t\t\tif (currentSession === null) {\n\t\t\t\t\tnavigator.xr.requestSession(\"immersive-vr\", sessionOptions).then(onSessionStarted);\n\t\t\t\t} else {\n\t\t\t\t\tcurrentSession.end();\n\n\t\t\t\t\tif (navigator.xr.offerSession !== undefined) {\n\t\t\t\t\t\tnavigator.xr\n\t\t\t\t\t\t\t.offerSession(\"immersive-vr\", sessionOptions)\n\t\t\t\t\t\t\t.then(onSessionStarted)\n\t\t\t\t\t\t\t.catch((err) => {\n\t\t\t\t\t\t\t\tconsole.warn(err);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tif (navigator.xr.offerSession !== undefined) {\n\t\t\t\tnavigator.xr\n\t\t\t\t\t.offerSession(\"immersive-vr\", sessionOptions)\n\t\t\t\t\t.then(onSessionStarted)\n\t\t\t\t\t.catch((err) => {\n\t\t\t\t\t\tconsole.warn(err);\n\t\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tfunction disableButton() {\n\t\t\tbutton.style.display = \"\";\n\n\t\t\tbutton.style.cursor = \"auto\";\n\t\t\tbutton.style.left = \"calc(50% - 75px)\";\n\t\t\tbutton.style.width = \"150px\";\n\n\t\t\tbutton.onmouseenter = null;\n\t\t\tbutton.onmouseleave = null;\n\n\t\t\tbutton.onclick = null;\n\t\t}\n\n\t\tfunction showWebXRNotFound() {\n\t\t\tdisableButton();\n\n\t\t\tbutton.textContent = \"VR NOT SUPPORTED\";\n\t\t}\n\n\t\tfunction showVRNotAllowed(exception) {\n\t\t\tdisableButton();\n\n\t\t\tconsole.warn(\"Exception when trying to call xr.isSessionSupported\", exception);\n\n\t\t\tbutton.textContent = \"VR NOT ALLOWED\";\n\t\t}\n\n\t\tfunction stylizeElement(element) {\n\t\t\telement.style.position = \"absolute\";\n\t\t\telement.style.bottom = \"20px\";\n\t\t\telement.style.padding = \"12px 6px\";\n\t\t\telement.style.border = \"1px solid #fff\";\n\t\t\telement.style.borderRadius = \"4px\";\n\t\t\telement.style.background = \"rgba(0,0,0,0.1)\";\n\t\t\telement.style.color = \"#fff\";\n\t\t\telement.style.font = \"normal 13px sans-serif\";\n\t\t\telement.style.textAlign = \"center\";\n\t\t\telement.style.opacity = \"0.5\";\n\t\t\telement.style.outline = \"none\";\n\t\t\telement.style.zIndex = \"999\";\n\t\t}\n\n\t\tif (\"xr\" in navigator) {\n\t\t\tbutton.id = \"VRButton\";\n\t\t\tbutton.style.display = \"none\";\n\n\t\t\tstylizeElement(button);\n\n\t\t\tnavigator.xr\n\t\t\t\t.isSessionSupported(\"immersive-vr\")\n\t\t\t\t.then(function(supported) {\n\t\t\t\t\tsupported ? showEnterVR() : showWebXRNotFound();\n\n\t\t\t\t\tif (supported && VRButton.xrSessionIsGranted) {\n\t\t\t\t\t\tbutton.click();\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.catch(showVRNotAllowed);\n\n\t\t\treturn button;\n\t\t} else {\n\t\t\tconst message = document.createElement(\"a\");\n\n\t\t\tif (window.isSecureContext === false) {\n\t\t\t\tmessage.href = document.location.href.replace(/^http:/, \"https:\");\n\t\t\t\tmessage.innerHTML = \"WEBXR NEEDS HTTPS\"; // TODO Improve message\n\t\t\t} else {\n\t\t\t\tmessage.href = \"https://immersiveweb.dev/\";\n\t\t\t\tmessage.innerHTML = \"WEBXR NOT AVAILABLE\";\n\t\t\t}\n\n\t\t\tmessage.style.left = \"calc(50% - 90px)\";\n\t\t\tmessage.style.width = \"180px\";\n\t\t\tmessage.style.textDecoration = \"none\";\n\n\t\t\tstylizeElement(message);\n\n\t\t\treturn message;\n\t\t}\n\t}\n\n\tstatic registerSessionGrantedListener() {\n\t\tif (typeof navigator !== \"undefined\" && \"xr\" in navigator) {\n\t\t\t// WebXRViewer (based on Firefox) has a bug where addEventListener\n\t\t\t// throws a silent exception and aborts execution entirely.\n\t\t\tif (/WebXRViewer\\//i.test(navigator.userAgent)) return;\n\n\t\t\tnavigator.xr.addEventListener(\"sessiongranted\", () => {\n\t\t\t\tVRButton.xrSessionIsGranted = true;\n\t\t\t});\n\t\t}\n\t}\n}\n\nVRButton.xrSessionIsGranted = false;\nVRButton.registerSessionGrantedListener();\n","/*\nCopyright © 2010-2024 three.js authors & Mark Kellogg\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n*/\n\nexport class ARButton {\n\tstatic createButton(renderer, sessionInit = {}) {\n\t\tconst button = document.createElement(\"button\");\n\n\t\tfunction showStartAR(/* device */) {\n\t\t\tif (sessionInit.domOverlay === undefined) {\n\t\t\t\tconst overlay = document.createElement(\"div\");\n\t\t\t\toverlay.style.display = \"none\";\n\t\t\t\tdocument.body.appendChild(overlay);\n\n\t\t\t\tconst svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n\t\t\t\tsvg.setAttribute(\"width\", 38);\n\t\t\t\tsvg.setAttribute(\"height\", 38);\n\t\t\t\tsvg.style.position = \"absolute\";\n\t\t\t\tsvg.style.right = \"20px\";\n\t\t\t\tsvg.style.top = \"20px\";\n\t\t\t\tsvg.addEventListener(\"click\", function() {\n\t\t\t\t\tcurrentSession.end();\n\t\t\t\t});\n\t\t\t\toverlay.appendChild(svg);\n\n\t\t\t\tconst path = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n\t\t\t\tpath.setAttribute(\"d\", \"M 12,12 L 28,28 M 28,12 12,28\");\n\t\t\t\tpath.setAttribute(\"stroke\", \"#fff\");\n\t\t\t\tpath.setAttribute(\"stroke-width\", 2);\n\t\t\t\tsvg.appendChild(path);\n\n\t\t\t\tif (sessionInit.optionalFeatures === undefined) {\n\t\t\t\t\tsessionInit.optionalFeatures = [];\n\t\t\t\t}\n\n\t\t\t\tsessionInit.optionalFeatures.push(\"dom-overlay\");\n\t\t\t\tsessionInit.domOverlay = { root: overlay };\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tlet currentSession = null;\n\n\t\t\tasync function onSessionStarted(session) {\n\t\t\t\tsession.addEventListener(\"end\", onSessionEnded);\n\n\t\t\t\trenderer.xr.setReferenceSpaceType(\"local\");\n\n\t\t\t\tawait renderer.xr.setSession(session);\n\n\t\t\t\tbutton.textContent = \"STOP AR\";\n\t\t\t\tsessionInit.domOverlay.root.style.display = \"\";\n\n\t\t\t\tcurrentSession = session;\n\t\t\t}\n\n\t\t\tfunction onSessionEnded(/* event */) {\n\t\t\t\tcurrentSession.removeEventListener(\"end\", onSessionEnded);\n\n\t\t\t\tbutton.textContent = \"START AR\";\n\t\t\t\tsessionInit.domOverlay.root.style.display = \"none\";\n\n\t\t\t\tcurrentSession = null;\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tbutton.style.display = \"\";\n\n\t\t\tbutton.style.cursor = \"pointer\";\n\t\t\tbutton.style.left = \"calc(50% - 50px)\";\n\t\t\tbutton.style.width = \"100px\";\n\n\t\t\tbutton.textContent = \"START AR\";\n\n\t\t\tbutton.onmouseenter = function() {\n\t\t\t\tbutton.style.opacity = \"1.0\";\n\t\t\t};\n\n\t\t\tbutton.onmouseleave = function() {\n\t\t\t\tbutton.style.opacity = \"0.5\";\n\t\t\t};\n\n\t\t\tbutton.onclick = function() {\n\t\t\t\tif (currentSession === null) {\n\t\t\t\t\tnavigator.xr.requestSession(\"immersive-ar\", sessionInit).then(onSessionStarted);\n\t\t\t\t} else {\n\t\t\t\t\tcurrentSession.end();\n\n\t\t\t\t\tif (navigator.xr.offerSession !== undefined) {\n\t\t\t\t\t\tnavigator.xr\n\t\t\t\t\t\t\t.offerSession(\"immersive-ar\", sessionInit)\n\t\t\t\t\t\t\t.then(onSessionStarted)\n\t\t\t\t\t\t\t.catch((err) => {\n\t\t\t\t\t\t\t\tconsole.warn(err);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tif (navigator.xr.offerSession !== undefined) {\n\t\t\t\tnavigator.xr\n\t\t\t\t\t.offerSession(\"immersive-ar\", sessionInit)\n\t\t\t\t\t.then(onSessionStarted)\n\t\t\t\t\t.catch((err) => {\n\t\t\t\t\t\tconsole.warn(err);\n\t\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tfunction disableButton() {\n\t\t\tbutton.style.display = \"\";\n\n\t\t\tbutton.style.cursor = \"auto\";\n\t\t\tbutton.style.left = \"calc(50% - 75px)\";\n\t\t\tbutton.style.width = \"150px\";\n\n\t\t\tbutton.onmouseenter = null;\n\t\t\tbutton.onmouseleave = null;\n\n\t\t\tbutton.onclick = null;\n\t\t}\n\n\t\tfunction showARNotSupported() {\n\t\t\tdisableButton();\n\n\t\t\tbutton.textContent = \"AR NOT SUPPORTED\";\n\t\t}\n\n\t\tfunction showARNotAllowed(exception) {\n\t\t\tdisableButton();\n\n\t\t\tconsole.warn(\"Exception when trying to call xr.isSessionSupported\", exception);\n\n\t\t\tbutton.textContent = \"AR NOT ALLOWED\";\n\t\t}\n\n\t\tfunction stylizeElement(element) {\n\t\t\telement.style.position = \"absolute\";\n\t\t\telement.style.bottom = \"20px\";\n\t\t\telement.style.padding = \"12px 6px\";\n\t\t\telement.style.border = \"1px solid #fff\";\n\t\t\telement.style.borderRadius = \"4px\";\n\t\t\telement.style.background = \"rgba(0,0,0,0.1)\";\n\t\t\telement.style.color = \"#fff\";\n\t\t\telement.style.font = \"normal 13px sans-serif\";\n\t\t\telement.style.textAlign = \"center\";\n\t\t\telement.style.opacity = \"0.5\";\n\t\t\telement.style.outline = \"none\";\n\t\t\telement.style.zIndex = \"999\";\n\t\t}\n\n\t\tif (\"xr\" in navigator) {\n\t\t\tbutton.id = \"ARButton\";\n\t\t\tbutton.style.display = \"none\";\n\n\t\t\tstylizeElement(button);\n\n\t\t\tnavigator.xr\n\t\t\t\t.isSessionSupported(\"immersive-ar\")\n\t\t\t\t.then(function(supported) {\n\t\t\t\t\tsupported ? showStartAR() : showARNotSupported();\n\t\t\t\t})\n\t\t\t\t.catch(showARNotAllowed);\n\n\t\t\treturn button;\n\t\t} else {\n\t\t\tconst message = document.createElement(\"a\");\n\n\t\t\tif (window.isSecureContext === false) {\n\t\t\t\tmessage.href = document.location.href.replace(/^http:/, \"https:\");\n\t\t\t\tmessage.innerHTML = \"WEBXR NEEDS HTTPS\"; // TODO Improve message\n\t\t\t} else {\n\t\t\t\tmessage.href = \"https://immersiveweb.dev/\";\n\t\t\t\tmessage.innerHTML = \"WEBXR NOT AVAILABLE\";\n\t\t\t}\n\n\t\t\tmessage.style.left = \"calc(50% - 90px)\";\n\t\t\tmessage.style.width = \"180px\";\n\t\t\tmessage.style.textDecoration = \"none\";\n\n\t\t\tstylizeElement(message);\n\n\t\t\treturn message;\n\t\t}\n\t}\n}\n","export const RenderMode = {\n\tAlways: 0,\n\tOnChange: 1,\n\tNever: 2,\n};\n","export class GSVisionLogo {\n\t/**\n\t * This component is responsible for rendering the GS Vision logo in top right corner of the screen\n\t * @param {HTMLElement} container - The container to append the logo to\n\t * @param {boolean} hideAttribution - Whether to hide the logo or not\n\t */\n\tconstructor(container, hideAttribution) {\n\t\tthis.idGen = 1;\n\t\tthis.container = container || document.body;\n\n\t\tthis.gsVisionLogoElement = document.createElement(\"div\");\n\t\tthis.gsVisionLogoElement.innerHTML = `\n            <svg width=\"505\" height=\"220\" style=\"height: auto;\" viewBox=\"0 0 505 220\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                <path\n                d=\"M110.273 0.582862C116.166 0.359348 122.432 0.669538 128.305 1.22604C160.819 4.30508 185.141 17.4514 205.91 42.3695C191.162 53.191 177.245 65.1042 162.39 75.8542C155.992 70.1204 149.347 65.1194 141.288 61.9492C126.796 56.2473 108.719 56.8737 94.5584 63.3055C82.7121 68.6865 72.9383 78.4452 68.433 90.7339C63.4822 104.235 64.3261 120.748 70.51 133.714C70.8679 134.454 71.2439 135.185 71.6383 135.907C72.0316 136.629 72.4426 137.34 72.8714 138.042C73.3012 138.743 73.7477 139.434 74.211 140.113C74.6742 140.792 75.1537 141.459 75.6494 142.115C76.1461 142.77 76.6585 143.413 77.1866 144.043C77.7147 144.673 78.258 145.289 78.8166 145.892C79.3751 146.496 79.9483 147.086 80.5363 147.661C81.1242 148.235 81.7258 148.795 82.3411 149.341C82.9564 149.885 83.5849 150.414 84.2266 150.928C84.8682 151.442 85.5225 151.94 86.1895 152.421C86.8555 152.904 87.5332 153.369 88.2225 153.817C88.9118 154.265 89.6117 154.695 90.3223 155.108C91.0329 155.522 91.7536 155.917 92.4844 156.295C93.2143 156.674 93.9533 157.033 94.7014 157.374C95.4495 157.715 96.2056 158.038 96.9699 158.341C97.7332 158.645 98.5042 158.93 99.2827 159.195C112.719 163.714 132.03 163.192 144.685 156.53C153.253 152.02 157.048 144.487 159.799 135.636C143.951 135.357 128.063 135.503 112.212 135.449L112.38 90.3508C138.034 90.6812 163.689 90.7405 189.344 90.5287L227.665 90.5697L227.939 93.5454C230.798 126.013 225.442 157.752 203.821 183.216C184.977 205.406 158.767 216.453 130.062 218.521C96.4271 220.943 61.0433 214.919 34.8799 192.183C13.5791 173.672 2.18775 146.728 0.309619 118.851C-1.63603 89.9707 5.47113 60.0501 24.951 37.9875C47.1155 12.8823 77.6382 2.59754 110.273 0.582862Z\"\n                fill=\"white\" />\n                <path\n                d=\"M313.107 3.62545C325.604 3.1252 338.178 3.86871 350.656 4.54686C358.677 25.9557 365.605 47.8146 372.749 69.5259C371.259 68.9066 369.765 68.2989 368.265 67.7028C353.951 62.0207 328.509 53.4846 313.384 60.6021C311.368 61.5509 309.464 63.0212 308.953 65.3263C306.44 76.6313 334.516 84.1091 342.184 87.1821C348.062 89.5373 353.757 92.1709 359.253 95.3198C365.472 98.8839 370.771 103.852 375.264 109.412C384.933 121.382 397.225 152.148 395.402 167.182C393.669 181.474 385.113 193.288 373.853 201.798C349.017 220.568 315.343 220.283 285.974 216.015C266.733 212.123 250.411 204.275 234.158 193.442L259.111 141.436C273.573 151.799 289.155 162.7 307.462 164.001C315.251 164.555 325.282 164.008 331.273 158.318C332.859 156.814 333.713 155.126 333.716 152.911C333.735 139.345 297.118 128.94 286.238 124.039C278.387 120.501 270.562 116.426 263.942 110.854C252.015 100.814 245.921 87.8617 244.688 72.4225C243.38 56.0238 245.918 40.6028 256.908 27.8563C271.02 11.4926 292.26 5.20526 313.107 3.62545Z\"\n                fill=\"white\" />\n                <path\n                d=\"M434.4 4.33551C457.678 4.72071 480.957 4.928 504.239 4.9574C499.321 18.7515 493.309 32.1974 488.145 45.9139L437.204 181.393C433.235 191.472 429.527 201.646 426.08 211.914C418.813 193.841 415.683 173.717 411.145 154.846C407.374 139.168 402.231 124.199 395.857 109.398C399.357 97.6872 404.162 86.0204 408.437 74.5648C417.382 51.2625 426.036 27.8528 434.4 4.33551Z\"\n                fill=\"white\" />\n            </svg>\n        `;\n\t\tthis.gsVisionLogoElement.className = \"gsVisionLogo\";\n\t\tthis.gsVisionLogoElement.style.display = hideAttribution ? \"none\" : \"flex\";\n\n\t\tconst style = document.createElement(\"style\");\n\t\tstyle.innerHTML = `\n            .gsVisionLogo{\n                position: absolute;\n                display: flex;\n                width: 100px;\n                top: 0;\n                right: 0;\n                margin: 10px;\n                height: fit-content;\n                opacity: 0.7;\n                z-index: 1000;\n            }\n        `;\n\t\tthis.gsVisionLogoElement.appendChild(style);\n\t\tthis.container.appendChild(this.gsVisionLogoElement);\n\t}\n\n\t/**\n\t * Show the logo\n\t */\n\tshow() {\n\t\tif (this.gsVisionLogoElement) {\n\t\t\tthis.gsVisionLogoElement.style.display = \"flex\";\n\t\t}\n\t}\n\n\t/**\n\t * Hide the logo\n\t */\n\thide() {\n\t\tif (this.gsVisionLogoElement) {\n\t\t\tthis.gsVisionLogoElement.style.display = \"none\";\n\t\t}\n\t}\n}\n","export class Controls {\n\tconstructor(container, hide) {\n\t\tthis.container = container || document.body;\n\t\tthis.keysPressed = {};\n\t\tthis.toggleStates = {\n\t\t\tKeyZ: false, // Orbit mode\n\t\t\tKeyO: false, // Orthographic mode\n\t\t\tKeyP: false, // Point cloud mode\n\t\t\tKeyI: false, // Info panel\n\t\t};\n\n\t\t// Check if device is mobile or touch-enabled\n\t\tthis.isMobileOrTouch = this.detectMobileOrTouch();\n\n\t\t// Create controls container\n\t\tthis.controlsElement = document.createElement(\"div\");\n\t\tthis.controlsElement.className = \"controls-panel\";\n\t\tthis.controlsElement.style.display = hide || this.isMobileOrTouch ? \"none\" : \"flex\";\n\n\t\t// Create the key layout\n\t\tthis.controlsElement.innerHTML = `\n            <div class=\"controls-row\">\n                <div class=\"key-container\">\n                    <div class=\"key\" data-key=\"KeyQ\">Q</div>\n                </div>\n                <div class=\"key-container\">\n                    <div class=\"key\" data-key=\"KeyW\">W</div>\n                </div>\n                <div class=\"key-container\">\n                    <div class=\"key\" data-key=\"KeyE\">E</div>\n                </div>\n            </div>\n            <div class=\"controls-row\">\n                <div class=\"key-container\">\n                    <div class=\"key\" data-key=\"KeyA\">A</div>\n                </div>\n                <div class=\"key-container\">\n                    <div class=\"key\" data-key=\"KeyS\">S</div>\n                </div>\n                <div class=\"key-container\">\n                    <div class=\"key\" data-key=\"KeyD\">D</div>\n                </div>\n            </div>\n            <div class=\"controls-row controls-toggle-row\">\n                <div class=\"key-container toggle-container\">\n                    <div class=\"key toggle-key\" data-key=\"KeyZ\" data-toggle=\"true\">Z</div>\n                    <div class=\"key-label\">Orbit</div>\n                </div>\n                <div class=\"key-container toggle-container\">\n                    <div class=\"key toggle-key\" data-key=\"KeyO\" data-toggle=\"true\">O</div>\n                    <div class=\"key-label\">Ortho</div>\n                </div>\n                <div class=\"key-container toggle-container\">\n                    <div class=\"key toggle-key\" data-key=\"KeyP\" data-toggle=\"true\">P</div>\n                    <div class=\"key-label\">Point</div>\n                </div>\n                <div class=\"key-container toggle-container\">\n                    <div class=\"key toggle-key\" data-key=\"KeyI\" data-toggle=\"true\">I</div>\n                    <div class=\"key-label\">Info</div>\n                </div>\n            </div>\n        `;\n\n\t\t// Add styles\n\t\tconst style = document.createElement(\"style\");\n\t\tstyle.innerHTML = `\n            .controls-panel {\n                position: absolute;\n                display: flex;\n                flex-direction: column;\n                gap: 5px;\n                bottom: 20px;\n                left: 20px;\n                z-index: 1000;\n                background-color: rgba(0, 0, 0, 0.5);\n                padding: 10px;\n                border-radius: 8px;\n            }\n            \n            .controls-row {\n                display: flex;\n                justify-content: center;\n                gap: 5px;\n            }\n            \n            .controls-toggle-row {\n                margin-top: 10px;\n                border-top: 1px solid rgba(255, 255, 255, 0.3);\n                padding-top: 10px;\n            }\n            \n            .key-container {\n                width: 40px;\n                height: 40px;\n                display: flex;\n                justify-content: center;\n                align-items: center;\n            }\n            \n            .toggle-container {\n                display: flex;\n                flex-direction: column;\n                height: auto;\n                align-items: center;\n                gap: 2px;\n            }\n            \n            .key {\n                width: 36px;\n                height: 36px;\n                background-color: rgba(255, 255, 255, 0.8);\n                color: #333;\n                display: flex;\n                justify-content: center;\n                align-items: center;\n                border-radius: 4px;\n                font-family: Arial, sans-serif;\n                font-weight: bold;\n                user-select: none;\n                cursor: default;\n                box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);\n            }\n            \n            .toggle-key {\n                transition: background-color 0.2s, transform 0.1s, box-shadow 0.1s;\n            }\n            \n            .toggle-key.toggled {\n                background-color: #4CD964;\n                color: white;\n                box-shadow: 0 0 5px rgba(76, 217, 100, 0.5);\n            }\n            \n            .key.pressed {\n                background-color: #C27BFF;\n                transform: translateY(2px);\n                box-shadow: 0 0 2px rgba(0, 0, 0, 0.3);\n            }\n            \n            .key-label {\n                font-size: 10px;\n                color: rgba(255, 255, 255, 0.9);\n                font-family: Arial, sans-serif;\n                margin-top: 2px;\n                text-align: center;\n            }\n        `;\n\n\t\tthis.controlsElement.appendChild(style);\n\t\tthis.container.appendChild(this.controlsElement);\n\n\t\t// Set up event listeners\n\t\tthis.setupKeyListeners();\n\t}\n\n\t/**\n\t * Set up keyboard event listeners to highlight pressed keys\n\t */\n\tsetupKeyListeners() {\n\t\t// Don't set up listeners if on mobile/touch\n\t\tif (this.isMobileOrTouch) return;\n\n\t\t// Store bound handlers to use in disposal\n\t\tthis.keydownHandler = (event) => {\n\t\t\tthis.keysPressed[event.code] = true;\n\t\t\tthis.updateKeyHighlights();\n\t\t};\n\n\t\tthis.keyupHandler = (event) => {\n\t\t\tthis.keysPressed[event.code] = false;\n\t\t\tthis.updateKeyHighlights();\n\t\t};\n\n\t\t// Add event listeners\n\t\tdocument.addEventListener(\"keydown\", this.keydownHandler);\n\t\tdocument.addEventListener(\"keyup\", this.keyupHandler);\n\n\t\t// Add click handlers for toggle keys\n\t\tconst toggleKeys = this.controlsElement.querySelectorAll(\".toggle-key\");\n\t\ttoggleKeys.forEach((key) => {\n\t\t\tkey.addEventListener(\"click\", () => {\n\t\t\t\tconst keyCode = key.getAttribute(\"data-key\");\n\t\t\t\tif (this.toggleStates.hasOwnProperty(keyCode)) {\n\t\t\t\t\tthis.toggleStates[keyCode] = !this.toggleStates[keyCode];\n\t\t\t\t\tthis.updateToggleKeys();\n\t\t\t\t\t// Simulate a key press to trigger the viewer's handlers\n\t\t\t\t\tconst keyEvent = new KeyboardEvent(\"keydown\", {\n\t\t\t\t\t\tcode: keyCode,\n\t\t\t\t\t\tkey: key.textContent.toLowerCase(),\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t});\n\t\t\t\t\tdocument.dispatchEvent(keyEvent);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Update the toggle states from external changes\n\t */\n\tupdateToggleState(keyCode, state) {\n\t\tif (this.toggleStates.hasOwnProperty(keyCode)) {\n\t\t\tthis.toggleStates[keyCode] = state;\n\t\t\tthis.updateToggleKeys();\n\t\t}\n\t}\n\n\t/**\n\t * Update the visual highlighting of keys based on pressed state\n\t */\n\tupdateKeyHighlights() {\n\t\t// Get all regular key elements\n\t\tconst keyElements = this.controlsElement.querySelectorAll(\".key:not([data-toggle='true'])\");\n\n\t\t// Update each key's appearance\n\t\tkeyElements.forEach((key) => {\n\t\t\tconst keyCode = key.getAttribute(\"data-key\");\n\t\t\tif (this.keysPressed[keyCode]) {\n\t\t\t\tkey.classList.add(\"pressed\");\n\t\t\t} else {\n\t\t\t\tkey.classList.remove(\"pressed\");\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Update the visual state of toggle keys\n\t */\n\tupdateToggleKeys() {\n\t\t// Get all toggle key elements\n\t\tconst toggleKeyElements = this.controlsElement.querySelectorAll(\".toggle-key\");\n\n\t\t// Update each toggle key's appearance\n\t\ttoggleKeyElements.forEach((key) => {\n\t\t\tconst keyCode = key.getAttribute(\"data-key\");\n\t\t\tif (this.toggleStates[keyCode]) {\n\t\t\t\tkey.classList.add(\"toggled\");\n\t\t\t} else {\n\t\t\t\tkey.classList.remove(\"toggled\");\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Show the controls (only if not on mobile/touch device)\n\t */\n\tshow() {\n\t\tif (!this.isMobileOrTouch) {\n\t\t\tthis.controlsElement.style.display = \"flex\";\n\t\t}\n\t}\n\n\t/**\n\t * Hide the controls\n\t */\n\thide() {\n\t\tthis.controlsElement.style.display = \"none\";\n\t}\n\n\t/**\n\t * Detect if device is a mobile device (phone/tablet)\n\t * @returns {boolean} True if mobile device\n\t */\n\tdetectMobileOrTouch() {\n\t\t// Check if it's a mobile device based on user agent\n\t\tconst isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n\t\t\tnavigator.userAgent,\n\t\t);\n\n\t\t// Check screen size - typical cutoff for tablets is around 768px width\n\t\tconst isSmallScreen = window.innerWidth <= 1024;\n\n\t\t// Only hide on mobile devices, not just any touch-enabled device\n\t\treturn isMobile && isSmallScreen;\n\t}\n\n\t/**\n\t * Remove the component and clean up event listeners\n\t */\n\tdispose() {\n\t\tif (this.keydownHandler) {\n\t\t\tdocument.removeEventListener(\"keydown\", this.keydownHandler);\n\t\t\tthis.keydownHandler = null;\n\t\t}\n\n\t\tif (this.keyupHandler) {\n\t\t\tdocument.removeEventListener(\"keyup\", this.keyupHandler);\n\t\t\tthis.keyupHandler = null;\n\t\t}\n\n\t\tif (this.controlsElement.parentNode) {\n\t\t\tthis.container.removeChild(this.controlsElement);\n\t\t}\n\t}\n}\n","export class Presets {\n\t/**\n\t * This component shows buttons for preset views that users can click or press\n\t * @param {HTMLElement} container - The container to append the controls to\n\t * @param {Object} options - Configuration options\n\t * @param {boolean} [options.hide=false] - Whether to hide the controls initially\n\t * @param {[{label?: string; lookAt: number[]; position: number[];}]} [options.presets=[]] - Array of preset configurations\n\t * @param {Function} [options.onPresetSelected] - Callback when preset is selected\n\t * @param {Function} [options.onUpdate] - Callback when presets are updated (receives full presets array)\n\t * @param {\"admin\" | \"user\"} [options.role=\"user\"] - Role of the user (admin or user)\n\t */\n\tconstructor(container, options = {}) {\n\t\tthis.container = container || document.body;\n\t\tthis.keysPressed = {};\n\t\tthis.presets = options.presets || [];\n\t\tthis.onPresetSelected =\n\t\t\toptions.onPresetSelected || ((preset) => console.log(`Preset ${preset.id} selected`));\n\n\t\t// Single update callback replacing individual callbacks\n\t\tthis.onUpdate = options.onUpdate;\n\n\t\tthis.role = options.role || \"user\";\n\t\tthis.editMode = false; // Start in view mode, not edit mode\n\n\t\t// Check if device is mobile\n\t\tthis.isMobile = this.detectMobile();\n\n\t\t// Create controls container\n\t\tthis.controlsElement = document.createElement(\"div\");\n\t\tthis.controlsElement.className = \"preset-controls-panel\";\n\n\t\t// Set initial display state\n\t\tthis.controlsElement.style.display = options.hide ? \"none\" : \"flex\";\n\n\t\t// Limit to maximum 9 presets\n\t\tthis.updatePresetIds();\n\n\t\t// Render preset buttons\n\t\tthis.renderPresetButtons();\n\n\t\t// Add admin controls if user is admin\n\t\tif (this.role === \"admin\") {\n\t\t\tthis.renderAdminControls();\n\t\t}\n\n\t\tthis.container.appendChild(this.controlsElement);\n\n\t\t// Set up event listeners\n\t\tthis.setupEventListeners();\n\t}\n\n\t/**\n\t * Update preset IDs and key mappings\n\t */\n\tupdatePresetIds() {\n\t\tthis.presets = this.presets.slice(0, 9).map((preset, index) => {\n\t\t\treturn {\n\t\t\t\t...preset,\n\t\t\t\tid: index + 1,\n\t\t\t\tkey: `Digit${index + 1}`,\n\t\t\t\t// Keep original label if it exists\n\t\t\t\tlabel: preset.label || \"\",\n\t\t\t};\n\t\t});\n\t}\n\n\t/**\n\t * Render the preset buttons\n\t */\n\trenderPresetButtons() {\n\t\t// Clear content first\n\t\tthis.controlsElement.innerHTML = \"\";\n\n\t\t// If there are no presets and the user is not an admin, don't render anything\n\t\tif (this.presets.length === 0 && this.role !== \"admin\") {\n\t\t\treturn;\n\t\t}\n\n\t\t// Create a container for preset buttons\n\t\tconst presetsContainer = document.createElement(\"div\");\n\t\tpresetsContainer.className = \"presets-container\";\n\n\t\t// Create the preset buttons layout in a single row\n\t\tfor (let i = 0; i < this.presets.length; i++) {\n\t\t\tconst preset = this.presets[i];\n\t\t\tconst buttonContainer = document.createElement(\"div\");\n\t\t\tbuttonContainer.className = \"preset-button-container\";\n\n\t\t\tconst button = document.createElement(\"div\");\n\t\t\tbutton.className = \"preset-button\";\n\t\t\tbutton.setAttribute(\"data-key\", preset.key);\n\t\t\tbutton.setAttribute(\"data-preset-index\", i);\n\n\t\t\t// Display number and label if it exists\n\t\t\tconst positionNumber = i + 1;\n\t\t\tconst displayText = preset.label\n\t\t\t\t? `<span class=\"preset-number\">${positionNumber}</span><span class=\"preset-label\">${preset.label}</span>`\n\t\t\t\t: positionNumber;\n\n\t\t\tbutton.innerHTML = displayText;\n\n\t\t\t// Add tooltips and edit mode styling for admin\n\t\t\tif (this.role === \"admin\" && this.editMode) {\n\t\t\t\tbutton.classList.add(\"edit-mode\");\n\t\t\t\tbutton.setAttribute(\"data-tooltip\", \"Click to overwrite\");\n\n\t\t\t\t// Add delete button (X) in the corner\n\t\t\t\tconst deleteButton = document.createElement(\"div\");\n\t\t\t\tdeleteButton.className = \"preset-delete-button\";\n\t\t\t\tdeleteButton.innerHTML = \"×\";\n\t\t\t\tdeleteButton.addEventListener(\"click\", (e) => {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tthis.handleDeletePreset(i);\n\t\t\t\t});\n\n\t\t\t\tbutton.appendChild(deleteButton);\n\t\t\t}\n\n\t\t\tbuttonContainer.appendChild(button);\n\t\t\tpresetsContainer.appendChild(buttonContainer);\n\t\t}\n\n\t\t// Add only one placeholder button (for the next position) if admin and in edit mode\n\t\tif (this.role === \"admin\" && this.editMode && this.presets.length < 9) {\n\t\t\tconst buttonContainer = document.createElement(\"div\");\n\t\t\tbuttonContainer.className = \"preset-button-container\";\n\n\t\t\tconst button = document.createElement(\"div\");\n\t\t\tbutton.className = \"preset-button preset-empty\";\n\t\t\tbutton.setAttribute(\"data-preset-index\", this.presets.length);\n\t\t\tbutton.innerHTML = \"+\";\n\t\t\tbutton.setAttribute(\"data-tooltip\", \"Add new preset\");\n\n\t\t\tbuttonContainer.appendChild(button);\n\t\t\tpresetsContainer.appendChild(buttonContainer);\n\t\t}\n\n\t\t// Only add the container to the DOM if there's something to display\n\t\tif (presetsContainer.children.length > 0) {\n\t\t\tthis.controlsElement.appendChild(presetsContainer);\n\t\t}\n\n\t\t// Only add styles if we're going to show something\n\t\tif (this.presets.length > 0 || this.role === \"admin\") {\n\t\t\t// Add styles\n\t\t\tconst style = document.createElement(\"style\");\n\t\t\tstyle.innerHTML = `\n                .preset-controls-panel {\n                    position: absolute;\n                    display: flex;\n                    flex-direction: column;\n                    gap: 10px;\n                    bottom: 20px;\n                    left: 50%;\n                    transform: translateX(-50%);\n                    z-index: 1000;\n                    background-color: rgba(0, 0, 0, 0.5);\n                    padding: 10px;\n                    border-radius: 8px;\n                    max-width: 90vw;\n                    font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n                }\n                \n                @media (max-width: 768px) {\n                    .preset-controls-panel {\n                        max-width: 95vw;\n                    }\n                }\n                \n                .presets-container {\n                    display: flex;\n                    flex-direction: row;\n                    flex-wrap: wrap;\n                    gap: 5px;\n                    justify-content: center;\n                }\n                \n                .preset-button-container {\n                    width: 40px;\n                    height: 40px;\n                    display: flex;\n                    justify-content: center;\n                    align-items: center;\n                    position: relative;\n                }\n                \n                .preset-button {\n                    width: 36px;\n                    height: 36px;\n                    background-color: rgba(255, 255, 255, 0.8);\n                    color: #333;\n                    display: flex;\n                    justify-content: center;\n                    align-items: center;\n                    border-radius: 4px;\n                    font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n                    font-weight: bold;\n                    user-select: none;\n                    cursor: pointer;\n                    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);\n                    transition: all 0.1s ease;\n                    position: relative;\n                    font-size: 14px;\n                    text-overflow: ellipsis;\n                }\n                \n                .preset-number {\n                    font-weight: bold;\n                }\n                \n                .preset-label {\n                    font-size: 10px;\n                    margin-left: 1px;\n                    opacity: 0.9;\n                }\n                \n                .preset-button:hover {\n                    background-color: rgba(255, 255, 255, 0.9);\n                }\n                \n                .preset-button.pressed {\n                    background-color: #C27BFF;\n                    transform: translateY(2px);\n                    box-shadow: 0 0 2px rgba(0, 0, 0, 0.3);\n                }\n                \n                .preset-button.edit-mode {\n                    background-color: rgba(194, 123, 255, 0.4); \n                    border: 2px dashed #fff;\n                    color: #fff;\n                }\n                \n                .preset-delete-button {\n                    position: absolute;\n                    top: -8px;\n                    right: -8px;\n                    width: 16px;\n                    height: 16px;\n                    background-color: rgba(220, 53, 69, 0.9);\n                    color: white;\n                    border-radius: 50%;\n                    display: flex;\n                    justify-content: center;\n                    align-items: center;\n                    font-size: 12px;\n                    line-height: 0;\n                    cursor: pointer;\n                    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);\n                    z-index: 1;\n                }\n                \n                .preset-delete-button:hover {\n                    background-color: rgba(220, 53, 69, 1);\n                    transform: scale(1.1);\n                }\n                \n                .preset-empty {\n                    background-color: rgba(150, 150, 150, 0.5);\n                    color: white;\n                    font-size: 18px;\n                }\n\n                .preset-empty:hover {\n                    color: #333;\n                }\n                \n                .preset-button[data-tooltip]:before {\n                    content: attr(data-tooltip);\n                    position: absolute;\n                    bottom: 100%;\n                    left: 50%;\n                    transform: translateX(-50%);\n                    margin-bottom: 5px;\n                    padding: 5px 8px;\n                    background-color: rgba(0, 0, 0, 0.7);\n                    color: white;\n                    border-radius: 4px;\n                    font-size: 12px;\n                    font-weight: normal;\n                    white-space: nowrap;\n                    opacity: 0;\n                    transition: opacity 0.2s;\n                    pointer-events: none;\n                    z-index: 10;\n                }\n                \n                .preset-button[data-tooltip]:hover:before {\n                    opacity: 1;\n                }\n                \n                .admin-controls {\n                    display: flex;\n                    flex-direction: row;\n                    gap: 5px;\n                    justify-content: center;\n                }\n                \n                .admin-button {\n                    padding: 5px 10px;\n                    background-color: rgba(80, 80, 80, 0.8);\n                    color: white;\n                    border-radius: 4px;\n                    cursor: pointer;\n                    font-size: 12px;\n                    transition: all 0.1s ease;\n                }\n                \n                .admin-button:hover {\n                    background-color: rgba(100, 100, 100, 0.9);\n                }\n                \n                .admin-button.active {\n                    background-color: rgba(194, 123, 255, 0.8); /* Match the purple color */\n                }\n                \n                .context-menu {\n                    position: absolute;\n                    background-color: #333;\n                    border-radius: 4px;\n                    padding: 5px 0;\n                    z-index: 1001;\n                    box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3);\n                }\n                \n                .context-menu-item {\n                    padding: 8px 12px;\n                    color: white;\n                    cursor: pointer;\n                    font-size: 14px;\n                    white-space: nowrap;\n                }\n                \n                .context-menu-item:hover {\n                    background-color: #555;\n                }\n            `;\n\n\t\t\tthis.controlsElement.appendChild(style);\n\t\t}\n\t}\n\n\t/**\n\t * Render admin controls\n\t */\n\trenderAdminControls() {\n\t\t// Only render admin controls if we're showing something\n\t\tif (this.presets.length === 0 && !this.editMode) {\n\t\t\tconst adminControls = document.createElement(\"div\");\n\t\t\tadminControls.className = \"admin-controls\";\n\n\t\t\t// Add a toggle button to switch between view and edit modes\n\t\t\tconst editModeButton = document.createElement(\"div\");\n\t\t\teditModeButton.className = \"admin-button\";\n\t\t\teditModeButton.innerHTML = \"Enter Edit Mode\";\n\t\t\teditModeButton.addEventListener(\"click\", () => {\n\t\t\t\tthis.editMode = true;\n\t\t\t\tthis.renderPresetButtons(); // Re-render buttons with new mode\n\t\t\t\tthis.renderAdminControls(); // Re-render admin controls to update button text\n\t\t\t});\n\n\t\t\tadminControls.appendChild(editModeButton);\n\t\t\tthis.controlsElement.appendChild(adminControls);\n\t\t\treturn;\n\t\t}\n\n\t\tconst adminControls = document.createElement(\"div\");\n\t\tadminControls.className = \"admin-controls\";\n\n\t\t// Add a toggle button to switch between view and edit modes\n\t\tconst editModeButton = document.createElement(\"div\");\n\t\teditModeButton.className = `admin-button ${this.editMode ? \"active\" : \"\"}`;\n\t\teditModeButton.innerHTML = this.editMode ? \"Exit Edit Mode\" : \"Enter Edit Mode\";\n\t\teditModeButton.addEventListener(\"click\", () => {\n\t\t\tthis.editMode = !this.editMode;\n\t\t\tthis.renderPresetButtons(); // Re-render buttons with new mode\n\t\t\tthis.renderAdminControls(); // Re-render admin controls to update button text\n\t\t});\n\n\t\tadminControls.appendChild(editModeButton);\n\n\t\tthis.controlsElement.appendChild(adminControls);\n\t}\n\n\t/**\n\t * Set up keyboard and click event listeners\n\t */\n\tsetupEventListeners() {\n\t\t// Don't set up keyboard listeners if on mobile\n\t\tif (!this.isMobile) {\n\t\t\t// Keydown event - highlight key and trigger preset\n\t\t\tdocument.addEventListener(\"keydown\", this.handleKeyDown.bind(this));\n\n\t\t\t// Keyup event - remove highlight\n\t\t\tdocument.addEventListener(\"keyup\", this.handleKeyUp.bind(this));\n\t\t}\n\n\t\t// Click event for buttons\n\t\tdocument.addEventListener(\"click\", (event) => {\n\t\t\t// Remove any open context menu when clicking elsewhere\n\t\t\tif (this.contextMenu && !this.contextMenu.contains(event.target)) {\n\t\t\t\tthis.removeContextMenu();\n\t\t\t}\n\n\t\t\t// Handle clicks on preset buttons\n\t\t\tif (\n\t\t\t\tevent.target.classList.contains(\"preset-button\") &&\n\t\t\t\t!event.target.classList.contains(\"preset-empty\")\n\t\t\t) {\n\t\t\t\tthis.handleButtonClick(event);\n\t\t\t} else if (\n\t\t\t\tevent.target.closest(\".preset-button\") &&\n\t\t\t\t!event.target.classList.contains(\"preset-delete-button\")\n\t\t\t) {\n\t\t\t\t// Handle clicks on child elements of the button (like number or label spans)\n\t\t\t\tconst button = event.target.closest(\".preset-button\");\n\t\t\t\tif (button && !button.classList.contains(\"preset-empty\")) {\n\t\t\t\t\tthis.handleButtonClick({ target: button });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Handle clicks on empty preset slots (for admin)\n\t\t\tif (this.role === \"admin\" && this.editMode && event.target.classList.contains(\"preset-empty\")) {\n\t\t\t\tthis.handleCreatePreset(parseInt(event.target.getAttribute(\"data-preset-index\")));\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Handle keydown event\n\t */\n\thandleKeyDown(event) {\n\t\t// Find preset that matches the pressed key\n\t\tconst presetIndex = this.presets.findIndex((preset) => preset.key === event.code);\n\n\t\tif (presetIndex !== -1) {\n\t\t\tthis.keysPressed[event.code] = true;\n\t\t\tthis.updateHighlights();\n\n\t\t\t// Get the preset and invoke the callback\n\t\t\tconst preset = this.presets[presetIndex];\n\t\t\tthis.onPresetSelected(preset);\n\t\t}\n\t}\n\n\t/**\n\t * Handle keyup event\n\t */\n\thandleKeyUp(event) {\n\t\t// Find preset that matches the released key\n\t\tconst presetIndex = this.presets.findIndex((preset) => preset.key === event.code);\n\n\t\tif (presetIndex !== -1) {\n\t\t\tthis.keysPressed[event.code] = false;\n\t\t\tthis.updateHighlights();\n\t\t}\n\t}\n\n\t/**\n\t * Handle button click event\n\t */\n\thandleButtonClick(event) {\n\t\tconst button = event.target;\n\t\tconst presetIndex = parseInt(button.getAttribute(\"data-preset-index\"));\n\n\t\tif (presetIndex >= 0 && presetIndex < this.presets.length) {\n\t\t\t// Visual feedback\n\t\t\tbutton.classList.add(\"pressed\");\n\t\t\tsetTimeout(() => {\n\t\t\t\tbutton.classList.remove(\"pressed\");\n\t\t\t}, 200);\n\n\t\t\t// In edit mode for admin, clicking should overwrite instead of navigate\n\t\t\tif (this.role === \"admin\" && this.editMode) {\n\t\t\t\tthis.handleOverwritePreset(presetIndex);\n\t\t\t} else {\n\t\t\t\t// Invoke the callback with the preset object\n\t\t\t\tthis.onPresetSelected(this.presets[presetIndex]);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Handle right-click context menu for preset buttons (admin only)\n\t */\n\thandleContextMenu(event) {\n\t\tif (!this.editMode) return;\n\n\t\tevent.preventDefault();\n\n\t\t// Remove any existing context menu\n\t\tthis.removeContextMenu();\n\n\t\tconst button = event.target;\n\t\tconst presetIndex = parseInt(button.getAttribute(\"data-preset-index\"));\n\n\t\tif (presetIndex >= 0 && presetIndex < this.presets.length) {\n\t\t\t// Create context menu\n\t\t\tthis.contextMenu = document.createElement(\"div\");\n\t\t\tthis.contextMenu.className = \"context-menu\";\n\n\t\t\t// Position context menu\n\t\t\tthis.contextMenu.style.left = `${event.clientX}px`;\n\t\t\tthis.contextMenu.style.top = `${event.clientY}px`;\n\n\t\t\tconst deleteItem = document.createElement(\"div\");\n\t\t\tdeleteItem.className = \"context-menu-item\";\n\t\t\tdeleteItem.innerHTML = \"Delete Preset\";\n\t\t\tdeleteItem.addEventListener(\"click\", () => {\n\t\t\t\tthis.handleDeletePreset(presetIndex);\n\t\t\t\tthis.removeContextMenu();\n\t\t\t});\n\n\t\t\tconst overwriteItem = document.createElement(\"div\");\n\t\t\toverwriteItem.className = \"context-menu-item\";\n\t\t\toverwriteItem.innerHTML = \"Overwrite with Current View\";\n\t\t\toverwriteItem.addEventListener(\"click\", () => {\n\t\t\t\tthis.handleOverwritePreset(presetIndex);\n\t\t\t\tthis.removeContextMenu();\n\t\t\t});\n\n\t\t\t// Add items to menu\n\t\t\tthis.contextMenu.appendChild(overwriteItem);\n\t\t\tthis.contextMenu.appendChild(deleteItem);\n\n\t\t\t// Add to document\n\t\t\tdocument.body.appendChild(this.contextMenu);\n\t\t}\n\t}\n\n\t/**\n\t * Remove context menu\n\t */\n\tremoveContextMenu() {\n\t\tif (this.contextMenu && this.contextMenu.parentNode) {\n\t\t\tdocument.body.removeChild(this.contextMenu);\n\t\t\tthis.contextMenu = null;\n\t\t}\n\t}\n\n\t/**\n\t * Handle creating a new preset\n\t */\n\thandleCreatePreset(index) {\n\t\tif (this.role !== \"admin\" || !this.editMode) return;\n\n\t\t// Get current camera position and lookAt\n\t\tthis.getCurrentCameraState((cameraState) => {\n\t\t\t// Validate data to ensure it's not just zeros\n\t\t\tif (this.isValidCameraState(cameraState)) {\n\t\t\t\t// Create new preset with automatic numbering\n\t\t\t\tconst newPreset = {\n\t\t\t\t\tposition: cameraState.position,\n\t\t\t\t\tlookAt: cameraState.lookAt,\n\t\t\t\t\t// No label needed - it will use the default index + 1\n\t\t\t\t};\n\n\t\t\t\t// Insert at specified index\n\t\t\t\tconst updatedPresets = [...this.presets];\n\t\t\t\tif (index < updatedPresets.length) {\n\t\t\t\t\tupdatedPresets[index] = newPreset;\n\t\t\t\t} else {\n\t\t\t\t\tupdatedPresets.push(newPreset);\n\t\t\t\t}\n\n\t\t\t\t// Update presets\n\t\t\t\tthis.presets = updatedPresets;\n\t\t\t\tthis.updatePresetIds();\n\t\t\t\tthis.renderPresetButtons();\n\t\t\t\tthis.renderAdminControls();\n\n\t\t\t\t// Call onUpdate with the full updated presets array\n\t\t\t\tif (this.onUpdate) {\n\t\t\t\t\tthis.onUpdate(this.presets);\n\t\t\t\t}\n\n\t\t\t\t// Setup event listeners again since we re-rendered the buttons\n\t\t\t\tthis.setupEventListeners();\n\t\t\t} else {\n\t\t\t\tconsole.error(\"Invalid camera state received:\", cameraState);\n\t\t\t\talert(\"Could not create preset: Invalid camera position data received.\");\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Check if camera state is valid (not just zeros)\n\t */\n\tisValidCameraState(cameraState) {\n\t\t// Check if position and lookAt are arrays\n\t\tif (!Array.isArray(cameraState.position) || !Array.isArray(cameraState.lookAt)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Check if position has at least one non-zero value\n\t\tconst hasNonZeroPosition = cameraState.position.some((value) => Math.abs(value) > 0.001);\n\n\t\t// Check if lookAt has at least one non-zero value\n\t\tconst hasNonZeroLookAt = cameraState.lookAt.some((value) => Math.abs(value) > 0.001);\n\n\t\treturn hasNonZeroPosition || hasNonZeroLookAt;\n\t}\n\n\t/**\n\t * Handle deleting a preset\n\t */\n\thandleDeletePreset(index) {\n\t\tif (this.role !== \"admin\" || !this.editMode || index < 0 || index >= this.presets.length) return;\n\n\t\t// Remove preset\n\t\tconst updatedPresets = [...this.presets];\n\t\tupdatedPresets.splice(index, 1);\n\n\t\t// Update presets\n\t\tthis.presets = updatedPresets;\n\t\tthis.updatePresetIds();\n\t\tthis.renderPresetButtons();\n\t\tthis.renderAdminControls();\n\n\t\t// Call onUpdate with the full updated presets array\n\t\tif (this.onUpdate) {\n\t\t\tthis.onUpdate(this.presets);\n\t\t}\n\n\t\t// Setup event listeners again since we re-rendered the buttons\n\t\tthis.setupEventListeners();\n\t}\n\n\t/**\n\t * Handle overwriting a preset with current camera state\n\t */\n\thandleOverwritePreset(index) {\n\t\tif (this.role !== \"admin\" || !this.editMode || index < 0 || index >= this.presets.length) return;\n\n\t\t// Get current preset\n\t\tconst preset = this.presets[index];\n\n\t\t// Get current camera position and lookAt\n\t\tthis.getCurrentCameraState((cameraState) => {\n\t\t\t// Validate data to ensure it's not just zeros\n\t\t\tif (this.isValidCameraState(cameraState)) {\n\t\t\t\t// Update preset\n\t\t\t\tconst updatedPreset = {\n\t\t\t\t\t...preset,\n\t\t\t\t\tposition: cameraState.position,\n\t\t\t\t\tlookAt: cameraState.lookAt,\n\t\t\t\t};\n\n\t\t\t\tconst updatedPresets = [...this.presets];\n\t\t\t\tupdatedPresets[index] = updatedPreset;\n\n\t\t\t\t// Update presets\n\t\t\t\tthis.presets = updatedPresets;\n\n\t\t\t\t// Call onUpdate with the full updated presets array\n\t\t\t\tif (this.onUpdate) {\n\t\t\t\t\tthis.onUpdate(this.presets);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconsole.error(\"Invalid camera state received:\", cameraState);\n\t\t\t\talert(\"Could not update preset: Invalid camera position data received.\");\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Handle saving current view as a new preset\n\t */\n\thandleSaveCurrentView() {\n\t\tif (this.role !== \"admin\" || !this.editMode) return;\n\n\t\t// Get current camera position and lookAt\n\t\tthis.getCurrentCameraState((cameraState) => {\n\t\t\t// Validate data to ensure it's not just zeros\n\t\t\tif (this.isValidCameraState(cameraState)) {\n\t\t\t\t// Create new preset\n\t\t\t\tconst newPreset = {\n\t\t\t\t\tposition: cameraState.position,\n\t\t\t\t\tlookAt: cameraState.lookAt,\n\t\t\t\t\t// No label needed - it will use the default index + 1\n\t\t\t\t};\n\n\t\t\t\t// Add new preset if we have less than 9\n\t\t\t\tif (this.presets.length < 9) {\n\t\t\t\t\tconst updatedPresets = [...this.presets, newPreset];\n\n\t\t\t\t\t// Update presets\n\t\t\t\t\tthis.presets = updatedPresets;\n\t\t\t\t\tthis.updatePresetIds();\n\t\t\t\t\tthis.renderPresetButtons();\n\t\t\t\t\tthis.renderAdminControls();\n\n\t\t\t\t\t// Call onUpdate with the full updated presets array\n\t\t\t\t\tif (this.onUpdate) {\n\t\t\t\t\t\tthis.onUpdate(this.presets);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Setup event listeners again since we re-rendered the buttons\n\t\t\t\t\tthis.setupEventListeners();\n\t\t\t\t} else {\n\t\t\t\t\talert(\"Maximum of 9 presets reached. Please delete or overwrite an existing preset.\");\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconsole.error(\"Invalid camera state received:\", cameraState);\n\t\t\t\talert(\"Could not create preset: Invalid camera position data received.\");\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Get current camera state\n\t * This needs to be implemented by the Viewer to provide the current camera state\n\t * We're using a callback as this might be an async operation in some implementations\n\t */\n\tgetCurrentCameraState(callback) {\n\t\t// Create a custom event to request the camera state from the Viewer\n\t\tconst event = new CustomEvent(\"request-camera-state\", {\n\t\t\tdetail: {\n\t\t\t\tcallback: (position, lookAt) => {\n\t\t\t\t\tcallback({\n\t\t\t\t\t\tposition: position,\n\t\t\t\t\t\tlookAt: lookAt,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\n\t\tdocument.dispatchEvent(event);\n\t}\n\n\t/**\n\t * Update the visual highlighting of buttons based on pressed state\n\t */\n\tupdateHighlights() {\n\t\t// Get all button elements\n\t\tconst buttonElements = this.controlsElement.querySelectorAll(\".preset-button:not(.preset-empty)\");\n\n\t\t// Update each button's appearance\n\t\tbuttonElements.forEach((button) => {\n\t\t\tconst keyCode = button.getAttribute(\"data-key\");\n\t\t\tif (this.keysPressed[keyCode]) {\n\t\t\t\tbutton.classList.add(\"pressed\");\n\t\t\t} else {\n\t\t\t\tbutton.classList.remove(\"pressed\");\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Set presets\n\t * @param {Array} presets - Array of preset objects\n\t */\n\tsetPresets(presets) {\n\t\tthis.presets = presets || [];\n\t\tthis.updatePresetIds();\n\t\tthis.renderPresetButtons();\n\t\tthis.setupEventListeners();\n\t}\n\n\t/**\n\t * Get presets\n\t * @returns {Array} Array of preset objects\n\t */\n\tgetPresets() {\n\t\treturn this.presets;\n\t}\n\n\t/**\n\t * Set role\n\t * @param {\"admin\" | \"user\"} role - Role\n\t */\n\tsetRole(role) {\n\t\tthis.role = role;\n\t\tthis.editMode = false; // Reset edit mode when role changes\n\t\tthis.renderPresetButtons();\n\t\tif (this.role === \"admin\") {\n\t\t\tthis.renderAdminControls();\n\t\t}\n\t\tthis.setupEventListeners();\n\t}\n\n\t/**\n\t * Detect if device is a mobile device (phone/tablet)\n\t * @returns {boolean} True if mobile device\n\t */\n\tdetectMobile() {\n\t\t// Check if it's a mobile device based on user agent\n\t\tconst isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n\t\t\tnavigator.userAgent,\n\t\t);\n\n\t\t// Check screen size - typical cutoff for tablets is around 768px width\n\t\tconst isSmallScreen = window.innerWidth <= 1024;\n\n\t\t// Only hide on mobile devices, not just any touch-enabled device\n\t\treturn isMobile && isSmallScreen;\n\t}\n\n\t/**\n\t * Show the controls\n\t */\n\tshow() {\n\t\tif (this.controlsElement) {\n\t\t\t// If there are no presets and user is not admin, don't show anything\n\t\t\tif (this.presets.length === 0 && this.role !== \"admin\") {\n\t\t\t\tthis.controlsElement.style.display = \"none\";\n\t\t\t} else {\n\t\t\t\tthis.controlsElement.style.display = \"flex\";\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Hide the controls\n\t */\n\thide() {\n\t\tif (this.controlsElement) {\n\t\t\tthis.controlsElement.style.display = \"none\";\n\t\t}\n\t}\n\n\t/**\n\t * Remove the component and clean up event listeners\n\t */\n\tdispose() {\n\t\tdocument.removeEventListener(\"keydown\", this.handleKeyDown);\n\t\tdocument.removeEventListener(\"keyup\", this.handleKeyUp);\n\n\t\t// Remove context menu if open\n\t\tthis.removeContextMenu();\n\n\t\tif (this.controlsElement && this.controlsElement.parentNode) {\n\t\t\tthis.container.removeChild(this.controlsElement);\n\t\t}\n\t}\n}\n","import {\n\tBox3,\n\tFloat32BufferAttribute,\n\tInstancedBufferGeometry,\n\tInstancedInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tSphere,\n\tVector3,\n\tWireframeGeometry\n} from 'three';\n\nconst _box = new Box3();\nconst _vector = new Vector3();\n\nclass LineSegmentsGeometry extends InstancedBufferGeometry {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isLineSegmentsGeometry = true;\n\n\t\tthis.type = 'LineSegmentsGeometry';\n\n\t\tconst positions = [ - 1, 2, 0, 1, 2, 0, - 1, 1, 0, 1, 1, 0, - 1, 0, 0, 1, 0, 0, - 1, - 1, 0, 1, - 1, 0 ];\n\t\tconst uvs = [ - 1, 2, 1, 2, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 2, 1, - 2 ];\n\t\tconst index = [ 0, 2, 1, 2, 3, 1, 2, 4, 3, 4, 5, 3, 4, 6, 5, 6, 7, 5 ];\n\n\t\tthis.setIndex( index );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tconst start = this.attributes.instanceStart;\n\t\tconst end = this.attributes.instanceEnd;\n\n\t\tif ( start !== undefined ) {\n\n\t\t\tstart.applyMatrix4( matrix );\n\n\t\t\tend.applyMatrix4( matrix );\n\n\t\t\tstart.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetPositions( array ) {\n\n\t\tlet lineSegments;\n\n\t\tif ( array instanceof Float32Array ) {\n\n\t\t\tlineSegments = array;\n\n\t\t} else if ( Array.isArray( array ) ) {\n\n\t\t\tlineSegments = new Float32Array( array );\n\n\t\t}\n\n\t\tconst instanceBuffer = new InstancedInterleavedBuffer( lineSegments, 6, 1 ); // xyz, xyz\n\n\t\tthis.setAttribute( 'instanceStart', new InterleavedBufferAttribute( instanceBuffer, 3, 0 ) ); // xyz\n\t\tthis.setAttribute( 'instanceEnd', new InterleavedBufferAttribute( instanceBuffer, 3, 3 ) ); // xyz\n\n\t\t//\n\n\t\tthis.computeBoundingBox();\n\t\tthis.computeBoundingSphere();\n\n\t\treturn this;\n\n\t}\n\n\tsetColors( array ) {\n\n\t\tlet colors;\n\n\t\tif ( array instanceof Float32Array ) {\n\n\t\t\tcolors = array;\n\n\t\t} else if ( Array.isArray( array ) ) {\n\n\t\t\tcolors = new Float32Array( array );\n\n\t\t}\n\n\t\tconst instanceColorBuffer = new InstancedInterleavedBuffer( colors, 6, 1 ); // rgb, rgb\n\n\t\tthis.setAttribute( 'instanceColorStart', new InterleavedBufferAttribute( instanceColorBuffer, 3, 0 ) ); // rgb\n\t\tthis.setAttribute( 'instanceColorEnd', new InterleavedBufferAttribute( instanceColorBuffer, 3, 3 ) ); // rgb\n\n\t\treturn this;\n\n\t}\n\n\tfromWireframeGeometry( geometry ) {\n\n\t\tthis.setPositions( geometry.attributes.position.array );\n\n\t\treturn this;\n\n\t}\n\n\tfromEdgesGeometry( geometry ) {\n\n\t\tthis.setPositions( geometry.attributes.position.array );\n\n\t\treturn this;\n\n\t}\n\n\tfromMesh( mesh ) {\n\n\t\tthis.fromWireframeGeometry( new WireframeGeometry( mesh.geometry ) );\n\n\t\t// set colors, maybe\n\n\t\treturn this;\n\n\t}\n\n\tfromLineSegments( lineSegments ) {\n\n\t\tconst geometry = lineSegments.geometry;\n\n\t\tthis.setPositions( geometry.attributes.position.array ); // assumes non-indexed\n\n\t\t// set colors, maybe\n\n\t\treturn this;\n\n\t}\n\n\tcomputeBoundingBox() {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tconst start = this.attributes.instanceStart;\n\t\tconst end = this.attributes.instanceEnd;\n\n\t\tif ( start !== undefined && end !== undefined ) {\n\n\t\t\tthis.boundingBox.setFromBufferAttribute( start );\n\n\t\t\t_box.setFromBufferAttribute( end );\n\n\t\t\tthis.boundingBox.union( _box );\n\n\t\t}\n\n\t}\n\n\tcomputeBoundingSphere() {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tconst start = this.attributes.instanceStart;\n\t\tconst end = this.attributes.instanceEnd;\n\n\t\tif ( start !== undefined && end !== undefined ) {\n\n\t\t\tconst center = this.boundingSphere.center;\n\n\t\t\tthis.boundingBox.getCenter( center );\n\n\t\t\tlet maxRadiusSq = 0;\n\n\t\t\tfor ( let i = 0, il = start.count; i < il; i ++ ) {\n\n\t\t\t\t_vector.fromBufferAttribute( start, i );\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector ) );\n\n\t\t\t\t_vector.fromBufferAttribute( end, i );\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector ) );\n\n\t\t\t}\n\n\t\t\tthis.boundingSphere.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\tif ( isNaN( this.boundingSphere.radius ) ) {\n\n\t\t\t\tconsole.error( 'THREE.LineSegmentsGeometry.computeBoundingSphere(): Computed radius is NaN. The instanced position data is likely to have NaN values.', this );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON() {\n\n\t\t// todo\n\n\t}\n\n\tapplyMatrix( matrix ) {\n\n\t\tconsole.warn( 'THREE.LineSegmentsGeometry: applyMatrix() has been renamed to applyMatrix4().' );\n\n\t\treturn this.applyMatrix4( matrix );\n\n\t}\n\n}\n\nexport { LineSegmentsGeometry };\n","/**\n * parameters = {\n *  color: <hex>,\n *  linewidth: <float>,\n *  dashed: <boolean>,\n *  dashScale: <float>,\n *  dashSize: <float>,\n *  dashOffset: <float>,\n *  gapSize: <float>,\n *  resolution: <Vector2>, // to be set by renderer\n * }\n */\n\nimport {\n\tShaderLib,\n\tShaderMaterial,\n\tUniformsLib,\n\tUniformsUtils,\n\tVector2\n} from 'three';\n\n\nUniformsLib.line = {\n\n\tworldUnits: { value: 1 },\n\tlinewidth: { value: 1 },\n\tresolution: { value: new Vector2( 1, 1 ) },\n\tdashOffset: { value: 0 },\n\tdashScale: { value: 1 },\n\tdashSize: { value: 1 },\n\tgapSize: { value: 1 } // todo FIX - maybe change to totalSize\n\n};\n\nShaderLib[ 'line' ] = {\n\n\tuniforms: UniformsUtils.merge( [\n\t\tUniformsLib.common,\n\t\tUniformsLib.fog,\n\t\tUniformsLib.line\n\t] ),\n\n\tvertexShader:\n\t/* glsl */`\n\t\t#include <common>\n\t\t#include <color_pars_vertex>\n\t\t#include <fog_pars_vertex>\n\t\t#include <logdepthbuf_pars_vertex>\n\t\t#include <clipping_planes_pars_vertex>\n\n\t\tuniform float linewidth;\n\t\tuniform vec2 resolution;\n\n\t\tattribute vec3 instanceStart;\n\t\tattribute vec3 instanceEnd;\n\n\t\tattribute vec3 instanceColorStart;\n\t\tattribute vec3 instanceColorEnd;\n\n\t\t#ifdef WORLD_UNITS\n\n\t\t\tvarying vec4 worldPos;\n\t\t\tvarying vec3 worldStart;\n\t\t\tvarying vec3 worldEnd;\n\n\t\t\t#ifdef USE_DASH\n\n\t\t\t\tvarying vec2 vUv;\n\n\t\t\t#endif\n\n\t\t#else\n\n\t\t\tvarying vec2 vUv;\n\n\t\t#endif\n\n\t\t#ifdef USE_DASH\n\n\t\t\tuniform float dashScale;\n\t\t\tattribute float instanceDistanceStart;\n\t\t\tattribute float instanceDistanceEnd;\n\t\t\tvarying float vLineDistance;\n\n\t\t#endif\n\n\t\tvoid trimSegment( const in vec4 start, inout vec4 end ) {\n\n\t\t\t// trim end segment so it terminates between the camera plane and the near plane\n\n\t\t\t// conservative estimate of the near plane\n\t\t\tfloat a = projectionMatrix[ 2 ][ 2 ]; // 3nd entry in 3th column\n\t\t\tfloat b = projectionMatrix[ 3 ][ 2 ]; // 3nd entry in 4th column\n\t\t\tfloat nearEstimate = - 0.5 * b / a;\n\n\t\t\tfloat alpha = ( nearEstimate - start.z ) / ( end.z - start.z );\n\n\t\t\tend.xyz = mix( start.xyz, end.xyz, alpha );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\t#ifdef USE_COLOR\n\n\t\t\t\tvColor.xyz = ( position.y < 0.5 ) ? instanceColorStart : instanceColorEnd;\n\n\t\t\t#endif\n\n\t\t\t#ifdef USE_DASH\n\n\t\t\t\tvLineDistance = ( position.y < 0.5 ) ? dashScale * instanceDistanceStart : dashScale * instanceDistanceEnd;\n\t\t\t\tvUv = uv;\n\n\t\t\t#endif\n\n\t\t\tfloat aspect = resolution.x / resolution.y;\n\n\t\t\t// camera space\n\t\t\tvec4 start = modelViewMatrix * vec4( instanceStart, 1.0 );\n\t\t\tvec4 end = modelViewMatrix * vec4( instanceEnd, 1.0 );\n\n\t\t\t#ifdef WORLD_UNITS\n\n\t\t\t\tworldStart = start.xyz;\n\t\t\t\tworldEnd = end.xyz;\n\n\t\t\t#else\n\n\t\t\t\tvUv = uv;\n\n\t\t\t#endif\n\n\t\t\t// special case for perspective projection, and segments that terminate either in, or behind, the camera plane\n\t\t\t// clearly the gpu firmware has a way of addressing this issue when projecting into ndc space\n\t\t\t// but we need to perform ndc-space calculations in the shader, so we must address this issue directly\n\t\t\t// perhaps there is a more elegant solution -- WestLangley\n\n\t\t\tbool perspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 ); // 4th entry in the 3rd column\n\n\t\t\tif ( perspective ) {\n\n\t\t\t\tif ( start.z < 0.0 && end.z >= 0.0 ) {\n\n\t\t\t\t\ttrimSegment( start, end );\n\n\t\t\t\t} else if ( end.z < 0.0 && start.z >= 0.0 ) {\n\n\t\t\t\t\ttrimSegment( end, start );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// clip space\n\t\t\tvec4 clipStart = projectionMatrix * start;\n\t\t\tvec4 clipEnd = projectionMatrix * end;\n\n\t\t\t// ndc space\n\t\t\tvec3 ndcStart = clipStart.xyz / clipStart.w;\n\t\t\tvec3 ndcEnd = clipEnd.xyz / clipEnd.w;\n\n\t\t\t// direction\n\t\t\tvec2 dir = ndcEnd.xy - ndcStart.xy;\n\n\t\t\t// account for clip-space aspect ratio\n\t\t\tdir.x *= aspect;\n\t\t\tdir = normalize( dir );\n\n\t\t\t#ifdef WORLD_UNITS\n\n\t\t\t\tvec3 worldDir = normalize( end.xyz - start.xyz );\n\t\t\t\tvec3 tmpFwd = normalize( mix( start.xyz, end.xyz, 0.5 ) );\n\t\t\t\tvec3 worldUp = normalize( cross( worldDir, tmpFwd ) );\n\t\t\t\tvec3 worldFwd = cross( worldDir, worldUp );\n\t\t\t\tworldPos = position.y < 0.5 ? start: end;\n\n\t\t\t\t// height offset\n\t\t\t\tfloat hw = linewidth * 0.5;\n\t\t\t\tworldPos.xyz += position.x < 0.0 ? hw * worldUp : - hw * worldUp;\n\n\t\t\t\t// don't extend the line if we're rendering dashes because we\n\t\t\t\t// won't be rendering the endcaps\n\t\t\t\t#ifndef USE_DASH\n\n\t\t\t\t\t// cap extension\n\t\t\t\t\tworldPos.xyz += position.y < 0.5 ? - hw * worldDir : hw * worldDir;\n\n\t\t\t\t\t// add width to the box\n\t\t\t\t\tworldPos.xyz += worldFwd * hw;\n\n\t\t\t\t\t// endcaps\n\t\t\t\t\tif ( position.y > 1.0 || position.y < 0.0 ) {\n\n\t\t\t\t\t\tworldPos.xyz -= worldFwd * 2.0 * hw;\n\n\t\t\t\t\t}\n\n\t\t\t\t#endif\n\n\t\t\t\t// project the worldpos\n\t\t\t\tvec4 clip = projectionMatrix * worldPos;\n\n\t\t\t\t// shift the depth of the projected points so the line\n\t\t\t\t// segments overlap neatly\n\t\t\t\tvec3 clipPose = ( position.y < 0.5 ) ? ndcStart : ndcEnd;\n\t\t\t\tclip.z = clipPose.z * clip.w;\n\n\t\t\t#else\n\n\t\t\t\tvec2 offset = vec2( dir.y, - dir.x );\n\t\t\t\t// undo aspect ratio adjustment\n\t\t\t\tdir.x /= aspect;\n\t\t\t\toffset.x /= aspect;\n\n\t\t\t\t// sign flip\n\t\t\t\tif ( position.x < 0.0 ) offset *= - 1.0;\n\n\t\t\t\t// endcaps\n\t\t\t\tif ( position.y < 0.0 ) {\n\n\t\t\t\t\toffset += - dir;\n\n\t\t\t\t} else if ( position.y > 1.0 ) {\n\n\t\t\t\t\toffset += dir;\n\n\t\t\t\t}\n\n\t\t\t\t// adjust for linewidth\n\t\t\t\toffset *= linewidth;\n\n\t\t\t\t// adjust for clip-space to screen-space conversion // maybe resolution should be based on viewport ...\n\t\t\t\toffset /= resolution.y;\n\n\t\t\t\t// select end\n\t\t\t\tvec4 clip = ( position.y < 0.5 ) ? clipStart : clipEnd;\n\n\t\t\t\t// back to clip space\n\t\t\t\toffset *= clip.w;\n\n\t\t\t\tclip.xy += offset;\n\n\t\t\t#endif\n\n\t\t\tgl_Position = clip;\n\n\t\t\tvec4 mvPosition = ( position.y < 0.5 ) ? start : end; // this is an approximation\n\n\t\t\t#include <logdepthbuf_vertex>\n\t\t\t#include <clipping_planes_vertex>\n\t\t\t#include <fog_vertex>\n\n\t\t}\n\t\t`,\n\n\tfragmentShader:\n\t/* glsl */`\n\t\tuniform vec3 diffuse;\n\t\tuniform float opacity;\n\t\tuniform float linewidth;\n\n\t\t#ifdef USE_DASH\n\n\t\t\tuniform float dashOffset;\n\t\t\tuniform float dashSize;\n\t\t\tuniform float gapSize;\n\n\t\t#endif\n\n\t\tvarying float vLineDistance;\n\n\t\t#ifdef WORLD_UNITS\n\n\t\t\tvarying vec4 worldPos;\n\t\t\tvarying vec3 worldStart;\n\t\t\tvarying vec3 worldEnd;\n\n\t\t\t#ifdef USE_DASH\n\n\t\t\t\tvarying vec2 vUv;\n\n\t\t\t#endif\n\n\t\t#else\n\n\t\t\tvarying vec2 vUv;\n\n\t\t#endif\n\n\t\t#include <common>\n\t\t#include <color_pars_fragment>\n\t\t#include <fog_pars_fragment>\n\t\t#include <logdepthbuf_pars_fragment>\n\t\t#include <clipping_planes_pars_fragment>\n\n\t\tvec2 closestLineToLine(vec3 p1, vec3 p2, vec3 p3, vec3 p4) {\n\n\t\t\tfloat mua;\n\t\t\tfloat mub;\n\n\t\t\tvec3 p13 = p1 - p3;\n\t\t\tvec3 p43 = p4 - p3;\n\n\t\t\tvec3 p21 = p2 - p1;\n\n\t\t\tfloat d1343 = dot( p13, p43 );\n\t\t\tfloat d4321 = dot( p43, p21 );\n\t\t\tfloat d1321 = dot( p13, p21 );\n\t\t\tfloat d4343 = dot( p43, p43 );\n\t\t\tfloat d2121 = dot( p21, p21 );\n\n\t\t\tfloat denom = d2121 * d4343 - d4321 * d4321;\n\n\t\t\tfloat numer = d1343 * d4321 - d1321 * d4343;\n\n\t\t\tmua = numer / denom;\n\t\t\tmua = clamp( mua, 0.0, 1.0 );\n\t\t\tmub = ( d1343 + d4321 * ( mua ) ) / d4343;\n\t\t\tmub = clamp( mub, 0.0, 1.0 );\n\n\t\t\treturn vec2( mua, mub );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\t#include <clipping_planes_fragment>\n\n\t\t\t#ifdef USE_DASH\n\n\t\t\t\tif ( vUv.y < - 1.0 || vUv.y > 1.0 ) discard; // discard endcaps\n\n\t\t\t\tif ( mod( vLineDistance + dashOffset, dashSize + gapSize ) > dashSize ) discard; // todo - FIX\n\n\t\t\t#endif\n\n\t\t\tfloat alpha = opacity;\n\n\t\t\t#ifdef WORLD_UNITS\n\n\t\t\t\t// Find the closest points on the view ray and the line segment\n\t\t\t\tvec3 rayEnd = normalize( worldPos.xyz ) * 1e5;\n\t\t\t\tvec3 lineDir = worldEnd - worldStart;\n\t\t\t\tvec2 params = closestLineToLine( worldStart, worldEnd, vec3( 0.0, 0.0, 0.0 ), rayEnd );\n\n\t\t\t\tvec3 p1 = worldStart + lineDir * params.x;\n\t\t\t\tvec3 p2 = rayEnd * params.y;\n\t\t\t\tvec3 delta = p1 - p2;\n\t\t\t\tfloat len = length( delta );\n\t\t\t\tfloat norm = len / linewidth;\n\n\t\t\t\t#ifndef USE_DASH\n\n\t\t\t\t\t#ifdef USE_ALPHA_TO_COVERAGE\n\n\t\t\t\t\t\tfloat dnorm = fwidth( norm );\n\t\t\t\t\t\talpha = 1.0 - smoothstep( 0.5 - dnorm, 0.5 + dnorm, norm );\n\n\t\t\t\t\t#else\n\n\t\t\t\t\t\tif ( norm > 0.5 ) {\n\n\t\t\t\t\t\t\tdiscard;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t#endif\n\n\t\t\t\t#endif\n\n\t\t\t#else\n\n\t\t\t\t#ifdef USE_ALPHA_TO_COVERAGE\n\n\t\t\t\t\t// artifacts appear on some hardware if a derivative is taken within a conditional\n\t\t\t\t\tfloat a = vUv.x;\n\t\t\t\t\tfloat b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0;\n\t\t\t\t\tfloat len2 = a * a + b * b;\n\t\t\t\t\tfloat dlen = fwidth( len2 );\n\n\t\t\t\t\tif ( abs( vUv.y ) > 1.0 ) {\n\n\t\t\t\t\t\talpha = 1.0 - smoothstep( 1.0 - dlen, 1.0 + dlen, len2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t#else\n\n\t\t\t\t\tif ( abs( vUv.y ) > 1.0 ) {\n\n\t\t\t\t\t\tfloat a = vUv.x;\n\t\t\t\t\t\tfloat b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0;\n\t\t\t\t\t\tfloat len2 = a * a + b * b;\n\n\t\t\t\t\t\tif ( len2 > 1.0 ) discard;\n\n\t\t\t\t\t}\n\n\t\t\t\t#endif\n\n\t\t\t#endif\n\n\t\t\tvec4 diffuseColor = vec4( diffuse, alpha );\n\n\t\t\t#include <logdepthbuf_fragment>\n\t\t\t#include <color_fragment>\n\n\t\t\tgl_FragColor = vec4( diffuseColor.rgb, alpha );\n\n\t\t\t#include <tonemapping_fragment>\n\t\t\t#include <colorspace_fragment>\n\t\t\t#include <fog_fragment>\n\t\t\t#include <premultiplied_alpha_fragment>\n\n\t\t}\n\t\t`\n};\n\nclass LineMaterial extends ShaderMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper( {\n\n\t\t\ttype: 'LineMaterial',\n\n\t\t\tuniforms: UniformsUtils.clone( ShaderLib[ 'line' ].uniforms ),\n\n\t\t\tvertexShader: ShaderLib[ 'line' ].vertexShader,\n\t\t\tfragmentShader: ShaderLib[ 'line' ].fragmentShader,\n\n\t\t\tclipping: true // required for clipping support\n\n\t\t} );\n\n\t\tthis.isLineMaterial = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tget color() {\n\n\t\treturn this.uniforms.diffuse.value;\n\n\t}\n\n\tset color( value ) {\n\n\t\tthis.uniforms.diffuse.value = value;\n\n\t}\n\n\tget worldUnits() {\n\n\t\treturn 'WORLD_UNITS' in this.defines;\n\n\t}\n\n\tset worldUnits( value ) {\n\n\t\tif ( value === true ) {\n\n\t\t\tthis.defines.WORLD_UNITS = '';\n\n\t\t} else {\n\n\t\t\tdelete this.defines.WORLD_UNITS;\n\n\t\t}\n\n\t}\n\n\tget linewidth() {\n\n\t\treturn this.uniforms.linewidth.value;\n\n\t}\n\n\tset linewidth( value ) {\n\n\t\tif ( ! this.uniforms.linewidth ) return;\n\t\tthis.uniforms.linewidth.value = value;\n\n\t}\n\n\tget dashed() {\n\n\t\treturn 'USE_DASH' in this.defines;\n\n\t}\n\n\tset dashed( value ) {\n\n\t\tif ( ( value === true ) !== this.dashed ) {\n\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( value === true ) {\n\n\t\t\tthis.defines.USE_DASH = '';\n\n\t\t} else {\n\n\t\t\tdelete this.defines.USE_DASH;\n\n\t\t}\n\n\t}\n\n\tget dashScale() {\n\n\t\treturn this.uniforms.dashScale.value;\n\n\t}\n\n\tset dashScale( value ) {\n\n\t\tthis.uniforms.dashScale.value = value;\n\n\t}\n\n\tget dashSize() {\n\n\t\treturn this.uniforms.dashSize.value;\n\n\t}\n\n\tset dashSize( value ) {\n\n\t\tthis.uniforms.dashSize.value = value;\n\n\t}\n\n\tget dashOffset() {\n\n\t\treturn this.uniforms.dashOffset.value;\n\n\t}\n\n\tset dashOffset( value ) {\n\n\t\tthis.uniforms.dashOffset.value = value;\n\n\t}\n\n\tget gapSize() {\n\n\t\treturn this.uniforms.gapSize.value;\n\n\t}\n\n\tset gapSize( value ) {\n\n\t\tthis.uniforms.gapSize.value = value;\n\n\t}\n\n\tget opacity() {\n\n\t\treturn this.uniforms.opacity.value;\n\n\t}\n\n\tset opacity( value ) {\n\n\t\tif ( ! this.uniforms ) return;\n\t\tthis.uniforms.opacity.value = value;\n\n\t}\n\n\tget resolution() {\n\n\t\treturn this.uniforms.resolution.value;\n\n\t}\n\n\tset resolution( value ) {\n\n\t\tthis.uniforms.resolution.value.copy( value );\n\n\t}\n\n\tget alphaToCoverage() {\n\n\t\treturn 'USE_ALPHA_TO_COVERAGE' in this.defines;\n\n\t}\n\n\tset alphaToCoverage( value ) {\n\n\t\tif ( ! this.defines ) return;\n\n\t\tif ( ( value === true ) !== this.alphaToCoverage ) {\n\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( value === true ) {\n\n\t\t\tthis.defines.USE_ALPHA_TO_COVERAGE = '';\n\t\t\tthis.extensions.derivatives = true;\n\n\t\t} else {\n\n\t\t\tdelete this.defines.USE_ALPHA_TO_COVERAGE;\n\t\t\tthis.extensions.derivatives = false;\n\n\t\t}\n\n\t}\n\n}\n\nexport { LineMaterial };\n","import {\n\tBox3,\n\tInstancedInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tLine3,\n\tMathUtils,\n\tMatrix4,\n\tMesh,\n\tSphere,\n\tVector3,\n\tVector4\n} from 'three';\nimport { LineSegmentsGeometry } from '../lines/LineSegmentsGeometry.js';\nimport { LineMaterial } from '../lines/LineMaterial.js';\n\nconst _start = new Vector3();\nconst _end = new Vector3();\n\nconst _start4 = new Vector4();\nconst _end4 = new Vector4();\n\nconst _ssOrigin = new Vector4();\nconst _ssOrigin3 = new Vector3();\nconst _mvMatrix = new Matrix4();\nconst _line = new Line3();\nconst _closestPoint = new Vector3();\n\nconst _box = new Box3();\nconst _sphere = new Sphere();\nconst _clipToWorldVector = new Vector4();\n\nlet _ray, _lineWidth;\n\n// Returns the margin required to expand by in world space given the distance from the camera,\n// line width, resolution, and camera projection\nfunction getWorldSpaceHalfWidth( camera, distance, resolution ) {\n\n\t// transform into clip space, adjust the x and y values by the pixel width offset, then\n\t// transform back into world space to get world offset. Note clip space is [-1, 1] so full\n\t// width does not need to be halved.\n\t_clipToWorldVector.set( 0, 0, - distance, 1.0 ).applyMatrix4( camera.projectionMatrix );\n\t_clipToWorldVector.multiplyScalar( 1.0 / _clipToWorldVector.w );\n\t_clipToWorldVector.x = _lineWidth / resolution.width;\n\t_clipToWorldVector.y = _lineWidth / resolution.height;\n\t_clipToWorldVector.applyMatrix4( camera.projectionMatrixInverse );\n\t_clipToWorldVector.multiplyScalar( 1.0 / _clipToWorldVector.w );\n\n\treturn Math.abs( Math.max( _clipToWorldVector.x, _clipToWorldVector.y ) );\n\n}\n\nfunction raycastWorldUnits( lineSegments, intersects ) {\n\n\tconst matrixWorld = lineSegments.matrixWorld;\n\tconst geometry = lineSegments.geometry;\n\tconst instanceStart = geometry.attributes.instanceStart;\n\tconst instanceEnd = geometry.attributes.instanceEnd;\n\tconst segmentCount = Math.min( geometry.instanceCount, instanceStart.count );\n\n\tfor ( let i = 0, l = segmentCount; i < l; i ++ ) {\n\n\t\t_line.start.fromBufferAttribute( instanceStart, i );\n\t\t_line.end.fromBufferAttribute( instanceEnd, i );\n\n\t\t_line.applyMatrix4( matrixWorld );\n\n\t\tconst pointOnLine = new Vector3();\n\t\tconst point = new Vector3();\n\n\t\t_ray.distanceSqToSegment( _line.start, _line.end, point, pointOnLine );\n\t\tconst isInside = point.distanceTo( pointOnLine ) < _lineWidth * 0.5;\n\n\t\tif ( isInside ) {\n\n\t\t\tintersects.push( {\n\t\t\t\tpoint,\n\t\t\t\tpointOnLine,\n\t\t\t\tdistance: _ray.origin.distanceTo( point ),\n\t\t\t\tobject: lineSegments,\n\t\t\t\tface: null,\n\t\t\t\tfaceIndex: i,\n\t\t\t\tuv: null,\n\t\t\t\tuv1: null,\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n}\n\nfunction raycastScreenSpace( lineSegments, camera, intersects ) {\n\n\tconst projectionMatrix = camera.projectionMatrix;\n\tconst material = lineSegments.material;\n\tconst resolution = material.resolution;\n\tconst matrixWorld = lineSegments.matrixWorld;\n\n\tconst geometry = lineSegments.geometry;\n\tconst instanceStart = geometry.attributes.instanceStart;\n\tconst instanceEnd = geometry.attributes.instanceEnd;\n\tconst segmentCount = Math.min( geometry.instanceCount, instanceStart.count );\n\n\tconst near = - camera.near;\n\n\t//\n\n\t// pick a point 1 unit out along the ray to avoid the ray origin\n\t// sitting at the camera origin which will cause \"w\" to be 0 when\n\t// applying the projection matrix.\n\t_ray.at( 1, _ssOrigin );\n\n\t// ndc space [ - 1.0, 1.0 ]\n\t_ssOrigin.w = 1;\n\t_ssOrigin.applyMatrix4( camera.matrixWorldInverse );\n\t_ssOrigin.applyMatrix4( projectionMatrix );\n\t_ssOrigin.multiplyScalar( 1 / _ssOrigin.w );\n\n\t// screen space\n\t_ssOrigin.x *= resolution.x / 2;\n\t_ssOrigin.y *= resolution.y / 2;\n\t_ssOrigin.z = 0;\n\n\t_ssOrigin3.copy( _ssOrigin );\n\n\t_mvMatrix.multiplyMatrices( camera.matrixWorldInverse, matrixWorld );\n\n\tfor ( let i = 0, l = segmentCount; i < l; i ++ ) {\n\n\t\t_start4.fromBufferAttribute( instanceStart, i );\n\t\t_end4.fromBufferAttribute( instanceEnd, i );\n\n\t\t_start4.w = 1;\n\t\t_end4.w = 1;\n\n\t\t// camera space\n\t\t_start4.applyMatrix4( _mvMatrix );\n\t\t_end4.applyMatrix4( _mvMatrix );\n\n\t\t// skip the segment if it's entirely behind the camera\n\t\tconst isBehindCameraNear = _start4.z > near && _end4.z > near;\n\t\tif ( isBehindCameraNear ) {\n\n\t\t\tcontinue;\n\n\t\t}\n\n\t\t// trim the segment if it extends behind camera near\n\t\tif ( _start4.z > near ) {\n\n\t\t\tconst deltaDist = _start4.z - _end4.z;\n\t\t\tconst t = ( _start4.z - near ) / deltaDist;\n\t\t\t_start4.lerp( _end4, t );\n\n\t\t} else if ( _end4.z > near ) {\n\n\t\t\tconst deltaDist = _end4.z - _start4.z;\n\t\t\tconst t = ( _end4.z - near ) / deltaDist;\n\t\t\t_end4.lerp( _start4, t );\n\n\t\t}\n\n\t\t// clip space\n\t\t_start4.applyMatrix4( projectionMatrix );\n\t\t_end4.applyMatrix4( projectionMatrix );\n\n\t\t// ndc space [ - 1.0, 1.0 ]\n\t\t_start4.multiplyScalar( 1 / _start4.w );\n\t\t_end4.multiplyScalar( 1 / _end4.w );\n\n\t\t// screen space\n\t\t_start4.x *= resolution.x / 2;\n\t\t_start4.y *= resolution.y / 2;\n\n\t\t_end4.x *= resolution.x / 2;\n\t\t_end4.y *= resolution.y / 2;\n\n\t\t// create 2d segment\n\t\t_line.start.copy( _start4 );\n\t\t_line.start.z = 0;\n\n\t\t_line.end.copy( _end4 );\n\t\t_line.end.z = 0;\n\n\t\t// get closest point on ray to segment\n\t\tconst param = _line.closestPointToPointParameter( _ssOrigin3, true );\n\t\t_line.at( param, _closestPoint );\n\n\t\t// check if the intersection point is within clip space\n\t\tconst zPos = MathUtils.lerp( _start4.z, _end4.z, param );\n\t\tconst isInClipSpace = zPos >= - 1 && zPos <= 1;\n\n\t\tconst isInside = _ssOrigin3.distanceTo( _closestPoint ) < _lineWidth * 0.5;\n\n\t\tif ( isInClipSpace && isInside ) {\n\n\t\t\t_line.start.fromBufferAttribute( instanceStart, i );\n\t\t\t_line.end.fromBufferAttribute( instanceEnd, i );\n\n\t\t\t_line.start.applyMatrix4( matrixWorld );\n\t\t\t_line.end.applyMatrix4( matrixWorld );\n\n\t\t\tconst pointOnLine = new Vector3();\n\t\t\tconst point = new Vector3();\n\n\t\t\t_ray.distanceSqToSegment( _line.start, _line.end, point, pointOnLine );\n\n\t\t\tintersects.push( {\n\t\t\t\tpoint: point,\n\t\t\t\tpointOnLine: pointOnLine,\n\t\t\t\tdistance: _ray.origin.distanceTo( point ),\n\t\t\t\tobject: lineSegments,\n\t\t\t\tface: null,\n\t\t\t\tfaceIndex: i,\n\t\t\t\tuv: null,\n\t\t\t\tuv1: null,\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n}\n\nclass LineSegments2 extends Mesh {\n\n\tconstructor( geometry = new LineSegmentsGeometry(), material = new LineMaterial( { color: Math.random() * 0xffffff } ) ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isLineSegments2 = true;\n\n\t\tthis.type = 'LineSegments2';\n\n\t}\n\n\t// for backwards-compatibility, but could be a method of LineSegmentsGeometry...\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst instanceStart = geometry.attributes.instanceStart;\n\t\tconst instanceEnd = geometry.attributes.instanceEnd;\n\t\tconst lineDistances = new Float32Array( 2 * instanceStart.count );\n\n\t\tfor ( let i = 0, j = 0, l = instanceStart.count; i < l; i ++, j += 2 ) {\n\n\t\t\t_start.fromBufferAttribute( instanceStart, i );\n\t\t\t_end.fromBufferAttribute( instanceEnd, i );\n\n\t\t\tlineDistances[ j ] = ( j === 0 ) ? 0 : lineDistances[ j - 1 ];\n\t\t\tlineDistances[ j + 1 ] = lineDistances[ j ] + _start.distanceTo( _end );\n\n\t\t}\n\n\t\tconst instanceDistanceBuffer = new InstancedInterleavedBuffer( lineDistances, 2, 1 ); // d0, d1\n\n\t\tgeometry.setAttribute( 'instanceDistanceStart', new InterleavedBufferAttribute( instanceDistanceBuffer, 1, 0 ) ); // d0\n\t\tgeometry.setAttribute( 'instanceDistanceEnd', new InterleavedBufferAttribute( instanceDistanceBuffer, 1, 1 ) ); // d1\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst worldUnits = this.material.worldUnits;\n\t\tconst camera = raycaster.camera;\n\n\t\tif ( camera === null && ! worldUnits ) {\n\n\t\t\tconsole.error( 'LineSegments2: \"Raycaster.camera\" needs to be set in order to raycast against LineSegments2 while worldUnits is set to false.' );\n\n\t\t}\n\n\t\tconst threshold = ( raycaster.params.Line2 !== undefined ) ? raycaster.params.Line2.threshold || 0 : 0;\n\n\t\t_ray = raycaster.ray;\n\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst geometry = this.geometry;\n\t\tconst material = this.material;\n\n\t\t_lineWidth = material.linewidth + threshold;\n\n\t\t// check if we intersect the sphere bounds\n\t\tif ( geometry.boundingSphere === null ) {\n\n\t\t\tgeometry.computeBoundingSphere();\n\n\t\t}\n\n\t\t_sphere.copy( geometry.boundingSphere ).applyMatrix4( matrixWorld );\n\n\t\t// increase the sphere bounds by the worst case line screen space width\n\t\tlet sphereMargin;\n\t\tif ( worldUnits ) {\n\n\t\t\tsphereMargin = _lineWidth * 0.5;\n\n\t\t} else {\n\n\t\t\tconst distanceToSphere = Math.max( camera.near, _sphere.distanceToPoint( _ray.origin ) );\n\t\t\tsphereMargin = getWorldSpaceHalfWidth( camera, distanceToSphere, material.resolution );\n\n\t\t}\n\n\t\t_sphere.radius += sphereMargin;\n\n\t\tif ( _ray.intersectsSphere( _sphere ) === false ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// check if we intersect the box bounds\n\t\tif ( geometry.boundingBox === null ) {\n\n\t\t\tgeometry.computeBoundingBox();\n\n\t\t}\n\n\t\t_box.copy( geometry.boundingBox ).applyMatrix4( matrixWorld );\n\n\t\t// increase the box bounds by the worst case line width\n\t\tlet boxMargin;\n\t\tif ( worldUnits ) {\n\n\t\t\tboxMargin = _lineWidth * 0.5;\n\n\t\t} else {\n\n\t\t\tconst distanceToBox = Math.max( camera.near, _box.distanceToPoint( _ray.origin ) );\n\t\t\tboxMargin = getWorldSpaceHalfWidth( camera, distanceToBox, material.resolution );\n\n\t\t}\n\n\t\t_box.expandByScalar( boxMargin );\n\n\t\tif ( _ray.intersectsBox( _box ) === false ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( worldUnits ) {\n\n\t\t\traycastWorldUnits( this, intersects );\n\n\t\t} else {\n\n\t\t\traycastScreenSpace( this, camera, intersects );\n\n\t\t}\n\n\t}\n\n}\n\nexport { LineSegments2 };\n","import { LineSegmentsGeometry } from '../lines/LineSegmentsGeometry.js';\n\nclass LineGeometry extends LineSegmentsGeometry {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isLineGeometry = true;\n\n\t\tthis.type = 'LineGeometry';\n\n\t}\n\n\tsetPositions( array ) {\n\n\t\t// converts [ x1, y1, z1,  x2, y2, z2, ... ] to pairs format\n\n\t\tconst length = array.length - 3;\n\t\tconst points = new Float32Array( 2 * length );\n\n\t\tfor ( let i = 0; i < length; i += 3 ) {\n\n\t\t\tpoints[ 2 * i ] = array[ i ];\n\t\t\tpoints[ 2 * i + 1 ] = array[ i + 1 ];\n\t\t\tpoints[ 2 * i + 2 ] = array[ i + 2 ];\n\n\t\t\tpoints[ 2 * i + 3 ] = array[ i + 3 ];\n\t\t\tpoints[ 2 * i + 4 ] = array[ i + 4 ];\n\t\t\tpoints[ 2 * i + 5 ] = array[ i + 5 ];\n\n\t\t}\n\n\t\tsuper.setPositions( points );\n\n\t\treturn this;\n\n\t}\n\n\tsetColors( array ) {\n\n\t\t// converts [ r1, g1, b1,  r2, g2, b2, ... ] to pairs format\n\n\t\tconst length = array.length - 3;\n\t\tconst colors = new Float32Array( 2 * length );\n\n\t\tfor ( let i = 0; i < length; i += 3 ) {\n\n\t\t\tcolors[ 2 * i ] = array[ i ];\n\t\t\tcolors[ 2 * i + 1 ] = array[ i + 1 ];\n\t\t\tcolors[ 2 * i + 2 ] = array[ i + 2 ];\n\n\t\t\tcolors[ 2 * i + 3 ] = array[ i + 3 ];\n\t\t\tcolors[ 2 * i + 4 ] = array[ i + 4 ];\n\t\t\tcolors[ 2 * i + 5 ] = array[ i + 5 ];\n\n\t\t}\n\n\t\tsuper.setColors( colors );\n\n\t\treturn this;\n\n\t}\n\n\tfromLine( line ) {\n\n\t\tconst geometry = line.geometry;\n\n\t\tthis.setPositions( geometry.attributes.position.array ); // assumes non-indexed\n\n\t\t// set colors, maybe\n\n\t\treturn this;\n\n\t}\n\n}\n\nexport { LineGeometry };\n","import { LineSegments2 } from '../lines/LineSegments2.js';\nimport { LineGeometry } from '../lines/LineGeometry.js';\nimport { LineMaterial } from '../lines/LineMaterial.js';\n\nclass Line2 extends LineSegments2 {\n\n\tconstructor( geometry = new LineGeometry(), material = new LineMaterial( { color: Math.random() * 0xffffff } ) ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isLine2 = true;\n\n\t\tthis.type = 'Line2';\n\n\t}\n\n}\n\nexport { Line2 };\n","import * as THREE from \"three\";\nimport { Line2 } from \"three/examples/jsm/lines/Line2.js\";\nimport { LineMaterial } from \"three/examples/jsm/lines/LineMaterial.js\";\nimport { LineGeometry } from \"three/examples/jsm/lines/LineGeometry.js\";\n\nexport class FloatingLabels {\n\tconstructor(viewer, labelsData = [], callbacks = {}) {\n\t\tthis.viewer = viewer;\n\t\tthis.scene = viewer.threeScene;\n\t\tthis.camera = viewer.camera;\n\t\tthis.renderer = viewer.renderer; // Store renderer if needed for resolution updates\n\t\tthis.labels = new Map();\n\t\tthis.editMode = false;\n\t\tthis.selectedLabelId = null;\n\n\t\tthis.callbacks = {\n\t\t\tonLabelsUpdate: callbacks.onLabelsUpdate, // The single update callback\n\t\t\tonModalOpen: callbacks.onModalOpen,\n\t\t\tonModalClose: callbacks.onModalClose,\n\t\t};\n\n\t\t// Create a group to hold all labels\n\t\tthis.labelsGroup = new THREE.Group();\n\t\tthis.scene.add(this.labelsGroup);\n\n\t\t// --- Temporary vectors for update loop ---\n\t\tthis._tempVec3 = new THREE.Vector3();\n\t\tthis._cameraRight = new THREE.Vector3();\n\t\t// ---\n\n\t\t// Create UI for label editing/creation\n\t\tthis.createEditUI();\n\n\t\t// Add labels from initial data\n\t\tif (labelsData && labelsData.length > 0) {\n\t\t\tthis.addLabels(labelsData);\n\t\t}\n\n\t\t// Set up integration with viewer update cycle\n\t\tthis.setupViewerIntegration();\n\n\t\t// Set up click handler for label selection\n\t\tthis.setupClickHandler();\n\t}\n\n\t// --- NEW Internal Method to Notify Viewer ---\n\t/**\n\t * Gathers the current state of all labels and calls the onLabelsUpdate callback.\n\t * @private\n\t */\n\t_notifyUpdate() {\n\t\tif (this.callbacks.onLabelsUpdate) {\n\t\t\tconst allCurrentLabelsData = [];\n\t\t\tthis.labels.forEach((labelInstance, id) => {\n\t\t\t\tallCurrentLabelsData.push({\n\t\t\t\t\tid: id,\n\t\t\t\t\t// Use the connectorTarget as the persistent position\n\t\t\t\t\tposition:\n\t\t\t\t\t\tlabelInstance.options.connectorTarget?.toArray() || labelInstance.container.position.toArray(),\n\t\t\t\t\ttext: labelInstance.text,\n\t\t\t\t\toptions: labelInstance.options,\n\t\t\t\t});\n\t\t\t});\n\t\t\tconsole.log(`[FloatingLabels] Notifying update with ${allCurrentLabelsData.length} labels.`);\n\t\t\ttry {\n\t\t\t\tthis.callbacks.onLabelsUpdate(allCurrentLabelsData);\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error(\"[FloatingLabels] Error executing onLabelsUpdate callback:\", e);\n\t\t\t}\n\t\t}\n\t}\n\n\tsetupClickHandler() {\n\t\tthis.raycaster = new THREE.Raycaster();\n\t\tthis.mouse = new THREE.Vector2();\n\n\t\tthis.clickHandler = (event) => {\n\t\t\tif (!this.editMode) return;\n\n\t\t\tconst rect = this.viewer.renderer.domElement.getBoundingClientRect();\n\t\t\tthis.mouse.x = ((event.clientX - rect.left) / rect.width) * 2 - 1;\n\t\t\tthis.mouse.y = -((event.clientY - rect.top) / rect.height) * 2 + 1;\n\n\t\t\tthis.raycaster.setFromCamera(this.mouse, this.camera);\n\n\t\t\tconst labelObjects = [];\n\t\t\tthis.labels.forEach((label, id) => {\n\t\t\t\tif (label.background) {\n\t\t\t\t\tlabelObjects.push({ id, object: label.background });\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tconst intersects = this.raycaster.intersectObjects(labelObjects.map((item) => item.object));\n\n\t\t\tif (intersects.length > 0) {\n\t\t\t\tconst clickedObject = intersects[0].object;\n\t\t\t\tconst labelInfo = labelObjects.find((item) => item.object === clickedObject);\n\n\t\t\t\tif (labelInfo) {\n\t\t\t\t\tthis.selectLabel(labelInfo.id);\n\t\t\t\t\tthis.showEditUI(labelInfo.id);\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.deselectLabel();\n\t\t\tthis.hideEditUI();\n\t\t};\n\n\t\tthis.viewer.renderer.domElement.addEventListener(\"click\", this.clickHandler);\n\t}\n\n\tcreateEditUI() {\n\t\t// Create modal container\n\t\tthis.editUI = document.createElement(\"div\");\n\t\tthis.editUI.className = \"label-edit-ui\";\n\t\tthis.editUI.style.display = \"none\";\n\t\tthis.editUI.style.position = \"absolute\";\n\t\tthis.editUI.style.top = \"50%\";\n\t\tthis.editUI.style.left = \"50%\";\n\t\tthis.editUI.style.transform = \"translate(-50%, -50%)\";\n\t\tthis.editUI.style.backgroundColor = \"#2a2a2a\";\n\t\tthis.editUI.style.color = \"white\";\n\t\tthis.editUI.style.padding = \"20px\";\n\t\tthis.editUI.style.borderRadius = \"8px\";\n\t\tthis.editUI.style.boxShadow = \"0 4px 20px rgba(0, 0, 0, 0.5)\";\n\t\tthis.editUI.style.zIndex = \"1000\";\n\t\tthis.editUI.style.minWidth = \"370px\";\n\t\tthis.editUI.style.fontFamily = \"Arial, sans-serif\";\n\n\t\t// Create UI content\n\t\tthis.editUI.innerHTML = `\n            <h3 style=\"margin-top: 0; margin-bottom: 15px;\" id=\"label-modal-title\">Edit Label</h3>\n            <div style=\"margin-bottom: 15px;\">\n                <label style=\"display: block; margin-bottom: 5px;\">Text:</label>\n                <input type=\"text\" id=\"label-text-input\" style=\"width: 100%; padding: 8px; box-sizing: border-box; background: #3a3a3a; color: white; border: 1px solid #555; border-radius: 4px;\">\n            </div>\n            <div style=\"margin-bottom: 15px; display: flex; gap: 10px;\">\n                <div style=\"flex: 1;\">\n                    <label style=\"display: block; margin-bottom: 5px;\">Background Color:</label>\n                    <input type=\"color\" id=\"label-bg-color\" style=\"width: 100%; height: 30px; background: #3a3a3a; border: 1px solid #555; border-radius: 4px;\">\n                </div>\n                <div style=\"flex: 1;\">\n                    <label style=\"display: block; margin-bottom: 5px;\">Text Color:</label>\n                    <input type=\"color\" id=\"label-text-color\" style=\"width: 100%; height: 30px; background: #3a3a3a; border: 1px solid #555; border-radius: 4px;\">\n                </div>\n            </div>\n            <div style=\"margin-bottom: 15px; display: flex; gap: 10px;\">\n                <div style=\"flex: 1;\">\n                    <label style=\"display: block; margin-bottom: 5px;\">Width:</label>\n                    <input type=\"number\" id=\"label-width\" min=\"0.5\" step=\"0.1\" style=\"width: 100%; padding: 8px; box-sizing: border-box; background: #3a3a3a; color: white; border: 1px solid #555; border-radius: 4px;\">\n                </div>\n                <div style=\"flex: 1;\">\n                    <label style=\"display: block; margin-bottom: 5px;\">Height:</label>\n                    <input type=\"number\" id=\"label-height\" min=\"0.3\" step=\"0.1\" style=\"width: 100%; padding: 8px; box-sizing: border-box; background: #3a3a3a; color: white; border: 1px solid #555; border-radius: 4px;\">\n                </div>\n            </div>\n            <div style=\"margin-bottom: 15px;\">\n                <label style=\"display: block; margin-bottom: 5px;\">Connector:</label>\n                <input type=\"checkbox\" id=\"label-connector\" checked style=\"margin-right: 5px;\">\n                <label for=\"label-connector\">Show connector</label>\n            </div>\n\t\t\t<div style=\"margin-bottom: 15px;\">\n\t\t\t\t<label style=\"display: block; margin-bottom: 5px;\">Anchor Point Coordinates:</label>\n\t\t\t\t<div style=\"display: flex; gap: 10px;\">\n\t\t\t\t\t<div style=\"flex: 1;\">\n\t\t\t\t\t\t<label style=\"display: block; margin-bottom: 5px;\">X:</label>\n\t\t\t\t\t\t<input type=\"number\" id=\"anchor-x\" step=\"0.01\" style=\"width: 100%; padding: 8px; box-sizing: border-box; background: #3a3a3a; color: white; border: 1px solid #555; border-radius: 4px;\">\n\t\t\t\t\t</div>\n\t\t\t\t\t<div style=\"flex: 1;\">\n\t\t\t\t\t\t<label style=\"display: block; margin-bottom: 5px;\">Y:</label>\n\t\t\t\t\t\t<input type=\"number\" id=\"anchor-y\" step=\"0.01\" style=\"width: 100%; padding: 8px; box-sizing: border-box; background: #3a3a3a; color: white; border: 1px solid #555; border-radius: 4px;\">\n\t\t\t\t\t</div>\n\t\t\t\t\t<div style=\"flex: 1;\">\n\t\t\t\t\t\t<label style=\"display: block; margin-bottom: 5px;\">Z:</label>\n\t\t\t\t\t\t<input type=\"number\" id=\"anchor-z\" step=\"0.01\" style=\"width: 100%; padding: 8px; box-sizing: border-box; background: #3a3a3a; color: white; border: 1px solid #555; border-radius: 4px;\">\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n            <div id=\"connector-options\" style=\"margin-bottom: 15px; padding-left: 20px;\">\n                <div style=\"margin-bottom: 10px;\">\n                    <label style=\"display: block; margin-bottom: 5px;\">Position:</label>\n                    <select id=\"connector-position\" style=\"width: 100%; padding: 8px; background: #3a3a3a; color: white; border: 1px solid #555; border-radius: 4px;\">\n                        <option value=\"bottom\">Below Target</option>\n                        <option value=\"top\">Above Target</option>\n                        <option value=\"left\">Visually Right of Target</option> <!-- Changed Label -->\n                        <option value=\"right\">Visually Left of Target</option> <!-- Changed Label -->\n                    </select>\n                </div>\n                <div style=\"margin-bottom: 10px; display: flex; gap: 10px;\">\n                    <div style=\"flex: 1;\">\n                        <label style=\"display: block; margin-bottom: 5px;\">Width (px):</label>\n                        <input type=\"number\" id=\"connector-width\" min=\"1\" max=\"10\" step=\"1\" style=\"width: 100%; padding: 8px; box-sizing: border-box; background: #3a3a3a; color: white; border: 1px solid #555; border-radius: 4px;\">\n                    </div>\n                    <div style=\"flex: 1;\">\n                        <label style=\"display: block; margin-bottom: 5px;\">Length:</label>\n                        <input type=\"number\" id=\"connector-length\" min=\"0.1\" step=\"0.1\" style=\"width: 100%; padding: 8px; box-sizing: border-box; background: #3a3a3a; color: white; border: 1px solid #555; border-radius: 4px;\">\n                    </div>\n                </div>\n                <div>\n                    <label style=\"display: block; margin-bottom: 5px;\">Color:</label>\n                    <input type=\"color\" id=\"connector-color\" style=\"width: 100%; height: 30px; background: #3a3a3a; border: 1px solid #555; border-radius: 4px;\">\n                </div>\n            </div>\n            <div style=\"display: flex; justify-content: space-between;\">\n                <button id=\"label-delete-btn\" style=\"padding: 8px 15px; background: #e74c3c; color: white; border: none; border-radius: 4px; cursor: pointer;\">Delete</button>\n                <div>\n                    <button id=\"label-cancel-btn\" style=\"padding: 8px 15px; margin-right: 10px; background: #666; color: white; border: none; border-radius: 4px; cursor: pointer;\">Cancel</button>\n                    <button id=\"label-save-btn\" style=\"padding: 8px 15px; background: #4CAF50; color: white; border: none; border-radius: 4px; cursor: pointer;\">Save</button>\n                </div>\n            </div>\n        `;\n\n\t\tdocument.body.appendChild(this.editUI);\n\n\t\tdocument.getElementById(\"label-connector\").addEventListener(\"change\", (e) => {\n\t\t\tdocument.getElementById(\"connector-options\").style.display = e.target.checked ? \"block\" : \"none\";\n\t\t});\n\t\tdocument.getElementById(\"label-cancel-btn\").addEventListener(\"click\", () => this.hideEditUI());\n\t\tdocument.getElementById(\"label-save-btn\").addEventListener(\"click\", () => this.saveEditUIData());\n\t\tdocument.getElementById(\"label-delete-btn\").addEventListener(\"click\", () => {\n\t\t\tif (this.selectedLabelId) {\n\t\t\t\tthis.removeLabel(this.selectedLabelId);\n\t\t\t\tthis.hideEditUI();\n\t\t\t}\n\t\t});\n\t\tthis.editUI.addEventListener(\"click\", (event) => event.stopPropagation());\n\t}\n\n\tshowEditUI(labelId = null) {\n\t\tthis.selectedLabelId = labelId;\n\t\tconst isCreating = !labelId;\n\t\tdocument.getElementById(\"label-modal-title\").textContent = isCreating ? \"Create Label\" : \"Edit Label\";\n\t\tdocument.getElementById(\"label-delete-btn\").style.display = isCreating ? \"none\" : \"block\";\n\n\t\tif (isCreating) {\n\t\t\tdocument.getElementById(\"label-text-input\").value = \"New Label\";\n\t\t\tdocument.getElementById(\"label-bg-color\").value = \"#333333\";\n\t\t\tdocument.getElementById(\"label-text-color\").value = \"#ffffff\";\n\t\t\tdocument.getElementById(\"label-width\").value = \"1.5\";\n\t\t\tdocument.getElementById(\"label-height\").value = \"0.4\";\n\t\t\tdocument.getElementById(\"label-connector\").checked = true;\n\t\t\tdocument.getElementById(\"connector-position\").value = \"top\";\n\t\t\tdocument.getElementById(\"connector-width\").value = \"2\";\n\t\t\tdocument.getElementById(\"connector-length\").value = \"0.5\";\n\t\t\tdocument.getElementById(\"connector-color\").value = \"#ffffff\";\n\t\t\tdocument.getElementById(\"anchor-x\").value = this.pendingCursorPosition?.x.toFixed(2) || \"0.00\";\n\t\t\tdocument.getElementById(\"anchor-y\").value = this.pendingCursorPosition?.y.toFixed(2) || \"0.00\";\n\t\t\tdocument.getElementById(\"anchor-z\").value = this.pendingCursorPosition?.z.toFixed(2) || \"0.00\";\n\t\t} else {\n\t\t\tconst label = this.labels.get(labelId);\n\t\t\tif (!label) return;\n\t\t\tconst options = label.options || {};\n\t\t\tconst currentTargetPos = options.connectorTarget || label.container.position;\n\t\t\tdocument.getElementById(\"label-text-input\").value = label.text || \"\";\n\t\t\tdocument.getElementById(\"label-bg-color\").value = this.colorToHex(options.backgroundColor || \"#333333\");\n\t\t\tdocument.getElementById(\"label-text-color\").value = this.colorToHex(options.textColor || \"#ffffff\");\n\t\t\tdocument.getElementById(\"label-width\").value = options.width || \"1.5\";\n\t\t\tdocument.getElementById(\"label-height\").value = options.height || \"0.4\";\n\t\t\tdocument.getElementById(\"label-connector\").checked = options.showConnector !== false;\n\t\t\tdocument.getElementById(\"connector-position\").value = options.connectorPosition || \"top\";\n\t\t\tdocument.getElementById(\"connector-width\").value = options.connectorWidth || \"2\";\n\t\t\tdocument.getElementById(\"connector-length\").value = options.connectorLength || \"0.5\";\n\t\t\tdocument.getElementById(\"connector-color\").value = this.colorToHex(options.connectorColor || \"#ffffff\");\n\t\t\tdocument.getElementById(\"anchor-x\").value = currentTargetPos.x.toFixed(2);\n\t\t\tdocument.getElementById(\"anchor-y\").value = currentTargetPos.y.toFixed(2);\n\t\t\tdocument.getElementById(\"anchor-z\").value = currentTargetPos.z.toFixed(2);\n\t\t}\n\n\t\tdocument.getElementById(\"connector-options\").style.display = document.getElementById(\"label-connector\")\n\t\t\t.checked\n\t\t\t? \"block\"\n\t\t\t: \"none\";\n\t\tthis.editUI.style.display = \"block\";\n\n\t\tif (this.callbacks.onModalOpen) this.callbacks.onModalOpen();\n\n\t\tconst textInput = document.getElementById(\"label-text-input\");\n\t\ttextInput.focus();\n\t\ttextInput.select();\n\t}\n\n\tcolorToHex(color) {\n\t\tif (typeof color === \"string\" && color.startsWith(\"#\")) {\n\t\t\treturn color;\n\t\t}\n\t\tif (color instanceof THREE.Color) {\n\t\t\treturn \"#\" + color.getHexString();\n\t\t}\n\t\tconst tempDiv = document.createElement(\"div\");\n\t\ttempDiv.style.color = color;\n\t\tdocument.body.appendChild(tempDiv);\n\t\tconst computedColor = window.getComputedStyle(tempDiv).color;\n\t\tdocument.body.removeChild(tempDiv);\n\t\tconst match = computedColor.match(/rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/);\n\t\tif (match) {\n\t\t\tconst r = parseInt(match[1]).toString(16).padStart(2, \"0\");\n\t\t\tconst g = parseInt(match[2]).toString(16).padStart(2, \"0\");\n\t\t\tconst b = parseInt(match[3]).toString(16).padStart(2, \"0\");\n\t\t\treturn `#${r}${g}${b}`;\n\t\t}\n\t\treturn \"#333333\"; // Default fallback\n\t}\n\n\thideEditUI(calledAfterSave = false) {\n\t\tif (this.editUI.style.display !== \"none\") {\n\t\t\tthis.editUI.style.display = \"none\";\n\t\t\tthis.deselectLabel(calledAfterSave);\n\t\t\tif (this.callbacks.onModalClose) {\n\t\t\t\tthis.callbacks.onModalClose();\n\t\t\t}\n\t\t}\n\t}\n\n\tsaveEditUIData() {\n\t\tconst text = document.getElementById(\"label-text-input\").value;\n\t\tconst currentOptions = {\n\t\t\tbackgroundColor: document.getElementById(\"label-bg-color\").value,\n\t\t\ttextColor: document.getElementById(\"label-text-color\").value,\n\t\t\twidth: parseFloat(document.getElementById(\"label-width\").value) || 1.5,\n\t\t\theight: parseFloat(document.getElementById(\"label-height\").value) || 0.4,\n\t\t\tshowConnector: document.getElementById(\"label-connector\").checked,\n\t\t\tconnectorPosition: document.getElementById(\"connector-position\").value,\n\t\t\tconnectorWidth: parseFloat(document.getElementById(\"connector-width\").value) || 2,\n\t\t\tconnectorLength: parseFloat(document.getElementById(\"connector-length\").value) || 0.5,\n\t\t\tconnectorColor: document.getElementById(\"connector-color\").value,\n\t\t};\n\n\t\tlet changed = false;\n\n\t\tconst anchorX = parseFloat(document.getElementById(\"anchor-x\").value) || 0;\n\t\tconst anchorY = parseFloat(document.getElementById(\"anchor-y\").value) || 0;\n\t\tconst anchorZ = parseFloat(document.getElementById(\"anchor-z\").value) || 0;\n\n\t\tconsole.log(`[saveEditUIData] Form values: X=${anchorX}, Y=${anchorY}, Z=${anchorZ}`);\n\n\t\tconst newAnchorPos = new THREE.Vector3(anchorX, anchorY, anchorZ);\n\n\t\tif (this.selectedLabelId) {\n\t\t\tconst label = this.labels.get(this.selectedLabelId);\n\t\t\tif (label) {\n\t\t\t\tconst oldOptions = label.options || {};\n\t\t\t\tconst appearanceChanged =\n\t\t\t\t\tcurrentOptions.width !== oldOptions.width ||\n\t\t\t\t\tcurrentOptions.height !== oldOptions.height ||\n\t\t\t\t\tcurrentOptions.backgroundColor !== oldOptions.backgroundColor ||\n\t\t\t\t\tcurrentOptions.opacity !== oldOptions.opacity ||\n\t\t\t\t\tcurrentOptions.showConnector !== oldOptions.showConnector ||\n\t\t\t\t\tcurrentOptions.connectorPosition !== oldOptions.connectorPosition ||\n\t\t\t\t\tcurrentOptions.connectorWidth !== oldOptions.connectorWidth ||\n\t\t\t\t\tcurrentOptions.connectorLength !== oldOptions.connectorLength ||\n\t\t\t\t\tcurrentOptions.connectorColor !== oldOptions.connectorColor ||\n\t\t\t\t\tcurrentOptions.textColor !== oldOptions.textColor ||\n\t\t\t\t\tcurrentOptions.font !== oldOptions.font;\n\n\t\t\t\tconst textChanged = text !== label.text;\n\n\t\t\t\tconst currentPos = label.options.connectorTarget || label.container.position;\n\t\t\t\tconst anchorChanged = !currentPos.equals(newAnchorPos);\n\n\t\t\t\tif (anchorChanged) {\n\t\t\t\t\t// Update container position to new anchor\n\t\t\t\t\tlabel.container.position.copy(newAnchorPos);\n\n\t\t\t\t\t// Update stored target in options\n\t\t\t\t\tcurrentOptions.connectorTarget = newAnchorPos.clone();\n\n\t\t\t\t\tchanged = true;\n\t\t\t\t} else {\n\t\t\t\t\t// Only if NOT changed, preserve the existing target position\n\t\t\t\t\tcurrentOptions.connectorTarget =\n\t\t\t\t\t\tlabel.options.connectorTarget?.clone() || label.container.position.clone();\n\t\t\t\t}\n\n\t\t\t\tthis.updateLabelText(this.selectedLabelId, text, currentOptions, appearanceChanged || textChanged);\n\n\t\t\t\tdelete label.originalColor; // Clear selection highlight tracker\n\t\t\t\tdelete label.originalOpacity;\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t} else if (this.pendingCursorPosition) {\n\t\t\tconst id = `label-${Date.now()}`;\n\t\t\tcurrentOptions.connectorTarget = newAnchorPos.clone();\n\t\t\tthis.addLabel(id, newAnchorPos, text, currentOptions);\n\t\t\tchanged = false;\n\t\t\tthis.pendingCursorPosition = null;\n\t\t}\n\n\t\tif (this.selectedLabelId && changed) {\n\t\t\t// Only notify if an existing label was changed and saved\n\t\t\tthis._notifyUpdate();\n\t\t}\n\n\t\tthis.hideEditUI(true); // Pass true to keep saved color if needed\n\t}\n\n\ttoggleEditMode() {\n\t\tthis.editMode = !this.editMode;\n\t\tconsole.log(`[toggleEditMode] Set editMode to: ${this.editMode}`);\n\n\t\tthis.labels.forEach((label, id) => {\n\t\t\tif (label.background && label.background.material) {\n\t\t\t\tif (this.editMode) {\n\t\t\t\t\tif (label.originalColor === undefined) {\n\t\t\t\t\t\t// Store current OPTIONS color/opacity\n\t\t\t\t\t\tlabel.originalColor = this.colorToHex(label.options.backgroundColor);\n\t\t\t\t\t\tlabel.originalOpacity = label.options.opacity;\n\t\t\t\t\t\tconsole.log(`[toggleEditMode ON] Stored original color: ${label.originalColor} for ${id}`);\n\t\t\t\t\t}\n\t\t\t\t\t// Set edit mode style (purple)\n\t\t\t\t\tlabel.background.material.color.setHex(0x9966ff);\n\t\t\t\t\tlabel.background.material.opacity = 0.9;\n\t\t\t\t\tconsole.log(`[toggleEditMode ON] Set edit mode purple for ${id}`);\n\t\t\t\t} else {\n\t\t\t\t\t// --- Turning Edit Mode OFF ---\n\t\t\t\t\t// Restore directly from the label's SAVED options\n\t\t\t\t\tconst optionsColor = this.colorToHex(label.options.backgroundColor);\n\t\t\t\t\tconst optionsOpacity = label.options.opacity;\n\t\t\t\t\tlabel.background.material.color.set(optionsColor);\n\t\t\t\t\tlabel.background.material.opacity = optionsOpacity;\n\t\t\t\t\tconsole.log(`[toggleEditMode OFF] Restored color from options: ${optionsColor} for ${id}`);\n\n\t\t\t\t\t// Clear the stored original state now that edit mode is off\n\t\t\t\t\tdelete label.originalColor;\n\t\t\t\t\tdelete label.originalOpacity;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconsole.warn(`[toggleEditMode] Label ${id} missing background or material.`);\n\t\t\t}\n\t\t});\n\n\t\tif (!this.editMode) {\n\t\t\tthis.deselectLabel(false); // Deselect will restore from options\n\t\t\tthis.hideEditUI(false);\n\t\t}\n\t\treturn this.editMode;\n\t}\n\n\tselectLabel(id) {\n\t\tif (!this.editMode) return;\n\n\t\tthis.deselectLabel(); // Deselect previous\n\n\t\tthis.selectedLabelId = id;\n\t\tconst label = this.labels.get(id);\n\n\t\tif (label && label.background) {\n\t\t\t// Store the color IT CURRENTLY HAS (which should be edit purple)\n\t\t\t// if switching selection within edit mode.\n\t\t\tif (label.originalColor === undefined) {\n\t\t\t\tlabel.originalColor = label.background.material.color.getHexString(); // Get current hex\n\t\t\t\tlabel.originalColor = \"#\" + label.originalColor; // Add hash if missing\n\t\t\t\tlabel.originalOpacity = label.background.material.opacity;\n\t\t\t}\n\t\t\t// Highlight selected label (orange)\n\t\t\tlabel.background.material.color.setHex(0xffaa55);\n\t\t\tlabel.background.material.opacity = 0.95;\n\t\t}\n\t}\n\n\tdeselectLabel(keepSavedColor = false) {\n\t\tif (this.selectedLabelId) {\n\t\t\tconst label = this.labels.get(this.selectedLabelId);\n\t\t\tif (label && label.background && label.background.material) {\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[deselectLabel] EditMode: ${this.editMode}, KeepSaved: ${keepSavedColor}, LabelID: ${this.selectedLabelId}`,\n\t\t\t\t);\n\n\t\t\t\tif (!this.editMode) {\n\t\t\t\t\t// Exiting edit mode entirely: Restore from SAVED OPTIONS\n\t\t\t\t\tconst optionsColor = this.colorToHex(label.options.backgroundColor);\n\t\t\t\t\tlabel.background.material.color.set(optionsColor);\n\t\t\t\t\tlabel.background.material.opacity = label.options.opacity;\n\t\t\t\t\tconsole.log(`[deselectLabel] Exiting edit mode. Restored color from options: ${optionsColor}`);\n\t\t\t\t\tdelete label.originalColor; // Clear tracker\n\t\t\t\t\tdelete label.originalOpacity;\n\t\t\t\t} else {\n\t\t\t\t\t// Still in edit mode, just deselecting this one\n\t\t\t\t\tif (!keepSavedColor && label.originalColor !== undefined) {\n\t\t\t\t\t\t// Restore to standard edit mode color (purple), NOT the saved options color\n\t\t\t\t\t\tlabel.background.material.color.setHex(0x9966ff);\n\t\t\t\t\t\tlabel.background.material.opacity = 0.9;\n\t\t\t\t\t\tconsole.log(\"[deselectLabel] Still edit mode. Set color to standard edit purple.\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Keep the current color (likely orange selection or just saved options color)\n\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t`[deselectLabel] Still edit mode. Keeping current color (keepSavedColor=${keepSavedColor}).`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t// Don't delete originalColor here, as we might re-select it\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.selectedLabelId = null;\n\t\t}\n\t}\n\n\tcreateLabelAtCursor() {\n\t\tif (!this.editMode || !this.viewer.showMeshCursor) return false;\n\n\t\tthis.pendingCursorPosition = this.viewer.sceneHelper.meshCursor.position.clone();\n\t\tif (this.pendingCursorPosition.y < 0.1) {\n\t\t\tthis.pendingCursorPosition.y = 0.1;\n\t\t}\n\n\t\tthis.deselectLabel();\n\t\tthis.showEditUI(null); // Show UI for creation\n\n\t\treturn true;\n\t}\n\n\taddLabels(labelsData, notify = true) {\n\t\tif (!labelsData || !Array.isArray(labelsData)) return;\n\t\tlet changed = false;\n\t\tlabelsData.forEach((labelData) => {\n\t\t\tconst added = this._addLabelInternal(\n\t\t\t\tlabelData.id,\n\t\t\t\tlabelData.position,\n\t\t\t\tlabelData.text,\n\t\t\t\tlabelData.options,\n\t\t\t);\n\t\t\tif (added) changed = true;\n\t\t});\n\t\tif (changed && notify) {\n\t\t\tthis._notifyUpdate();\n\t\t}\n\t}\n\n\taddLabel(id, position, text, options = {}) {\n\t\tconst label = this._addLabelInternal(id, position, text, options);\n\t\tif (label) {\n\t\t\tthis._notifyUpdate(); // Notify after successful addition/replacement\n\t\t}\n\t\treturn label;\n\t}\n\n\t_addLabelInternal(id, position, text, options = {}) {\n\t\tif (this.labels.has(id)) {\n\t\t\tthis.removeLabel(id, false); // Remove existing without notifying yet\n\t\t}\n\t\tconst targetPosition = Array.isArray(position) ? new THREE.Vector3(...position) : position.clone();\n\t\tconst finalOptions = { ...this.getDefaultLabelOptions(), ...options };\n\n\t\t// IMPORTANT: Ensure connectorTarget is set from the input position\n\t\tfinalOptions.connectorTarget = targetPosition.clone();\n\n\t\tconst label = this.createLabelObject(targetPosition, text, finalOptions);\n\t\tthis.labels.set(id, label);\n\t\tthis.labelsGroup.add(label.container);\n\t\treturn label;\n\t}\n\n\tcreateLabelObject(targetPosition, text, options = {}) {\n\t\t// Options should already be merged with defaults here\n\t\tconst container = new THREE.Group();\n\t\tcontainer.position.copy(targetPosition); // Container is at the target/anchor point\n\t\tcontainer.quaternion.copy(this.camera.quaternion); // Initial face camera\n\n\t\tconst width = options.width;\n\t\tconst height = options.height;\n\n\t\t// Calculate initial offset based on user's intended position\n\t\tconst initialVisualOffset = this.calculateVisualOffset(options);\n\t\toptions.calculatedVisualOffset = initialVisualOffset.clone(); // Store initial calculation for reference\n\t\t// connectorTarget is already set in options during add/update\n\n\t\tconsole.log(\n\t\t\t`[createLabelObject ${targetPosition\n\t\t\t\t.toArray()\n\t\t\t\t.map((p) => p.toFixed(2))}] TargetPos, Initial VisualOffset: ${initialVisualOffset\n\t\t\t\t.toArray()\n\t\t\t\t.map((p) => p.toFixed(2))}`,\n\t\t);\n\n\t\t// --- Create Visual Elements ---\n\t\tconst background = this.createBackgroundMesh(width, height, options);\n\t\tbackground.position.copy(initialVisualOffset); // Position relative to container\n\t\tcontainer.add(background);\n\n\t\tconst textSprite = this.createTextSprite(text, options);\n\t\ttextSprite.position.copy(initialVisualOffset); // Position relative to container\n\t\tcontainer.add(textSprite);\n\n\t\tlet connector = null;\n\t\tif (options.showConnector) {\n\t\t\t// Create connector using the initial offset\n\t\t\tconnector = this.createConnector(initialVisualOffset, options);\n\t\t\tcontainer.add(connector);\n\t\t}\n\n\t\tcontainer.visible = options.visible;\n\n\t\t// --- Store state for dynamic positioning ---\n\t\tconst labelInstance = {\n\t\t\tcontainer,\n\t\t\tbackground,\n\t\t\ttextSprite,\n\t\t\tconnector,\n\t\t\ttext,\n\t\t\toptions, // Contains connectorTarget, calculatedVisualOffset etc.\n\t\t\tcurrentAppliedOffset: initialVisualOffset.clone(), // Track the offset currently applied visually\n\t\t};\n\t\t// ---\n\n\t\tconsole.log(\n\t\t\t`[createLabelObject] Final container settings. Visible: ${\n\t\t\t\tcontainer.visible\n\t\t\t}, Position: ${container.position.toArray().map((p) => p.toFixed(2))}`,\n\t\t);\n\n\t\treturn labelInstance; // Return the enhanced label instance\n\t}\n\n\tcreateBackgroundMesh(width, height, options) {\n\t\tconst geometry = new THREE.PlaneGeometry(width, height);\n\t\tconst material = new THREE.MeshBasicMaterial({\n\t\t\tcolor: new THREE.Color(options.backgroundColor),\n\t\t\ttransparent: true,\n\t\t\topacity: options.opacity,\n\t\t\tside: THREE.DoubleSide,\n\t\t\tdepthTest: true,\n\t\t\tdepthWrite: true,\n\t\t});\n\t\tconst mesh = new THREE.Mesh(geometry, material);\n\t\tmesh.renderOrder = options.renderOrderBackground; // Will be set via default options\n\t\treturn mesh;\n\t}\n\n\tcreateTextSprite(text, options = {}) {\n\t\tconst canvas = document.createElement(\"canvas\");\n\t\tconst context = canvas.getContext(\"2d\");\n\t\tconst font = options.font;\n\t\tconst textColor = options.textColor;\n\t\tconst width = options.width; // Desired world width of the background\n\t\tconst height = options.height; // Desired world height of the background\n\t\tconst padding = options.padding || 10;\n\n\t\t// Increase resolution scale for sharper text\n\t\tconst scale = 8; // Higher scale for better text clarity\n\n\t\t// Set font on context for text measurements\n\t\tcontext.font = font;\n\n\t\t// Handle multi-line text\n\t\tconst lines = text ? text.split(\"\\\\n\") : [\"\"];\n\n\t\t// Calculate text dimensions\n\t\tlet maxTextWidth = 0;\n\t\tlines.forEach((line) => {\n\t\t\tmaxTextWidth = Math.max(maxTextWidth, context.measureText(line).width);\n\t\t});\n\n\t\t// Extract font size from the font string\n\t\tconst fontSize = parseInt(font, 10) || 24;\n\t\tconst estimatedLineHeight = fontSize * 1.2;\n\t\tconst totalTextHeight = estimatedLineHeight * lines.length;\n\n\t\t// Calculate canvas dimensions with padding\n\t\tconst canvasWidthPixels = Math.max(100, Math.ceil(maxTextWidth + padding * 2));\n\t\tconst canvasHeightPixels = Math.max(50, Math.ceil(totalTextHeight + padding * 2));\n\n\t\t// Scale canvas for higher resolution\n\t\tcanvas.width = canvasWidthPixels * scale;\n\t\tcanvas.height = canvasHeightPixels * scale;\n\n\t\t// Clear and prepare canvas\n\t\tcontext.clearRect(0, 0, canvas.width, canvas.height);\n\t\tcontext.scale(scale, scale);\n\t\tcontext.font = font;\n\t\tcontext.fillStyle = textColor;\n\t\tcontext.textAlign = \"center\";\n\t\tcontext.textBaseline = \"middle\";\n\n\t\t// Draw text centered in canvas\n\t\tconst startX = canvasWidthPixels / 2;\n\t\tconst startY = canvasHeightPixels / 2 - (totalTextHeight - estimatedLineHeight) / 2;\n\n\t\tlines.forEach((line, i) => {\n\t\t\tcontext.fillText(line, startX, startY + i * estimatedLineHeight);\n\t\t});\n\n\t\t// Create texture from canvas\n\t\tconst texture = new THREE.CanvasTexture(canvas);\n\t\ttexture.minFilter = THREE.LinearFilter;\n\t\ttexture.magFilter = THREE.LinearFilter;\n\t\ttexture.needsUpdate = true;\n\n\t\t// Create sprite material with the texture\n\t\tconst spriteMaterial = new THREE.SpriteMaterial({\n\t\t\tmap: texture,\n\t\t\ttransparent: true,\n\t\t\tdepthTest: options.depthTest,\n\t\t\tsizeAttenuation: options.sizeAttenuation,\n\t\t});\n\n\t\t// Create the sprite\n\t\tconst sprite = new THREE.Sprite(spriteMaterial);\n\n\t\t// Calculate aspect ratio to maintain text proportion\n\t\tconst textureAspect = canvas.width / canvas.height;\n\n\t\t// Scale sprite to fit the background while maintaining aspect ratio\n\t\t// Use a consistent approach to avoid very small text\n\t\tlet spriteWidth, spriteHeight;\n\n\t\t// Make text fill most of the background area with a small margin\n\t\tconst margin = 0.05; // 5% margin\n\t\tspriteWidth = width * (1 - margin * 2);\n\t\tspriteHeight = spriteWidth / textureAspect;\n\n\t\t// If height exceeds background, constrain by height instead\n\t\tif (spriteHeight > height * (1 - margin * 2)) {\n\t\t\tspriteHeight = height * (1 - margin * 2);\n\t\t\tspriteWidth = spriteHeight * textureAspect;\n\t\t}\n\n\t\t// Apply calculated scale\n\t\tsprite.scale.set(spriteWidth, spriteHeight, 1);\n\n\t\t// Ensure sprite renders on top\n\t\tsprite.renderOrder = options.renderOrderText;\n\n\t\treturn sprite;\n\t}\n\n\t// Helper to create connector line - uses the provided visualOffset\n\tcreateConnector(visualOffset, options = {}) {\n\t\tconst lineWidth = options.connectorWidth;\n\t\tconst color = new THREE.Color(options.connectorColor);\n\t\t// const width = options.width;\n\t\t// const height = options.height;\n\t\t// // Intended position helps determine which edge to connect FROM\n\t\t// const connectorPosition = options.connectorPosition;\n\n\t\t// Calculate start point based on the CURRENT visualOffset and intended position\n\t\tconst startPoint = this.calculateConnectorStartPoint(visualOffset, options);\n\t\tconst endPoint = new THREE.Vector3(0, 0, 0); // Target point (container origin)\n\n\t\tconst geometry = new LineGeometry();\n\t\tgeometry.setPositions([startPoint.x, startPoint.y, startPoint.z, endPoint.x, endPoint.y, endPoint.z]);\n\n\t\tconst resolution = new THREE.Vector2();\n\t\tif (this.renderer) this.renderer.getDrawingBufferSize(resolution);\n\t\telse resolution.set(window.innerWidth, window.innerHeight);\n\n\t\tconst material = new LineMaterial({\n\t\t\tcolor: color,\n\t\t\tlinewidth: lineWidth * 0.005,\n\t\t\tworldUnits: true,\n\t\t\tresolution: resolution,\n\t\t\ttransparent: true,\n\t\t\topacity: options.opacity,\n\t\t\tdashed: false,\n\t\t\tdepthTest: options.depthTest,\n\t\t});\n\t\tconst connector = new Line2(geometry, material);\n\t\tconnector.position.z = -0.01;\n\t\tconnector.computeLineDistances();\n\t\tconnector.renderOrder = options.renderOrderConnector;\n\n\t\treturn connector;\n\t}\n\n\t// --- NEW HELPER: Calculate connector start based on offset and intended position ---\n\tcalculateConnectorStartPoint(visualOffset, options) {\n\t\tconst startPoint = visualOffset.clone();\n\t\tconst width = options.width;\n\t\tconst height = options.height;\n\t\t// Use the INTENDED position to determine which edge of the label box to connect FROM.\n\t\t// This ensures the connector starts correctly even if the visualOffset is flipped.\n\t\tswitch (options.connectorPosition) {\n\t\t\tcase \"top\": // Label is intended to be above target -> Connect TO label's bottom edge\n\t\t\t\tstartPoint.y -= height / 2;\n\t\t\t\tbreak;\n\t\t\tcase \"bottom\": // Label is intended to be below target -> Connect TO label's top edge\n\t\t\t\tstartPoint.y += height / 2;\n\t\t\t\tbreak;\n\t\t\tcase \"left\": // Label is intended to be visually right of target -> Connect TO label's left edge\n\t\t\t\tstartPoint.x -= width / 2;\n\t\t\t\tbreak;\n\t\t\tcase \"right\": // Label is intended to be visually left of target -> Connect TO label's right edge\n\t\t\t\tstartPoint.x += width / 2;\n\t\t\t\tbreak;\n\t\t\tdefault: // Fallback\n\t\t\t\tstartPoint.y -= height / 2; // Default to bottom edge\n\t\t\t\tbreak;\n\t\t}\n\t\treturn startPoint;\n\t}\n\t// ---\n\n\t// --- Update and Removal ---\n\n\tupdateLabelText(id, newText, newOptions = {}, forceFullRedraw = false) {\n\t\tconst label = this.labels.get(id);\n\t\tif (!label) return;\n\n\t\tconst oldOptions = { ...label.options };\n\t\tlabel.text = newText;\n\t\t// Merge options: Start with defaults, layer old, layer new\n\t\tconst mergedOptions = {\n\t\t\t...this.getDefaultLabelOptions(),\n\t\t\t...oldOptions, // Include potentially existing connectorTarget etc.\n\t\t\t...newOptions, // Overwrite with changes from UI\n\t\t};\n\t\tlabel.options = mergedOptions; // Store final merged options\n\n\t\tconst appearanceChanged =\n\t\t\tforceFullRedraw ||\n\t\t\tmergedOptions.width !== oldOptions.width ||\n\t\t\tmergedOptions.height !== oldOptions.height ||\n\t\t\tmergedOptions.backgroundColor !== oldOptions.backgroundColor ||\n\t\t\tmergedOptions.opacity !== oldOptions.opacity ||\n\t\t\tmergedOptions.showConnector !== oldOptions.showConnector ||\n\t\t\tmergedOptions.connectorPosition !== oldOptions.connectorPosition ||\n\t\t\tmergedOptions.connectorWidth !== oldOptions.connectorWidth ||\n\t\t\tmergedOptions.connectorLength !== oldOptions.connectorLength ||\n\t\t\tmergedOptions.connectorColor !== oldOptions.connectorColor ||\n\t\t\tmergedOptions.textColor !== oldOptions.textColor ||\n\t\t\tmergedOptions.font !== oldOptions.font ||\n\t\t\tmergedOptions.offset !== oldOptions.offset; // Check explicit offset change\n\n\t\tif (appearanceChanged) {\n\t\t\tconsole.log(`[updateLabelText - ${id}] Appearance changed, full redraw.`);\n\t\t\tthis.cleanupLabelElements(label);\n\n\t\t\t// Recalculate the initial visual offset based on potentially changed options\n\t\t\tconst newInitialVisualOffset = this.calculateVisualOffset(mergedOptions);\n\t\t\tmergedOptions.calculatedVisualOffset = newInitialVisualOffset.clone(); // Update stored initial calculation\n\t\t\tlabel.options.calculatedVisualOffset = newInitialVisualOffset.clone(); // Also update on label object\n\n\t\t\t// --- IMPORTANT: Reset currentAppliedOffset to the new initial calculation ---\n\t\t\tlabel.currentAppliedOffset = newInitialVisualOffset.clone();\n\t\t\t// ---\n\n\t\t\t// Create elements using the NEW initial offset\n\t\t\tlabel.background = this.createBackgroundMesh(mergedOptions.width, mergedOptions.height, mergedOptions);\n\t\t\tlabel.background.position.copy(newInitialVisualOffset);\n\t\t\tlabel.container.add(label.background);\n\n\t\t\tlabel.textSprite = this.createTextSprite(newText, mergedOptions);\n\t\t\tlabel.textSprite.position.copy(newInitialVisualOffset);\n\t\t\tlabel.container.add(label.textSprite);\n\n\t\t\tif (mergedOptions.showConnector) {\n\t\t\t\tlabel.connector = this.createConnector(newInitialVisualOffset, mergedOptions); // Create with new initial offset\n\t\t\t\tlabel.container.add(label.connector);\n\t\t\t}\n\n\t\t\t// Ensure visibility\n\t\t\tif (label.background) label.background.visible = true;\n\t\t\tif (label.textSprite) label.textSprite.visible = true;\n\t\t\tif (label.connector) label.connector.visible = true;\n\t\t} else {\n\t\t\t// Only text or non-appearance options changed\n\t\t\tconsole.log(`[updateLabelText - ${id}] Only text/minor options changed.`);\n\t\t\t// Update text sprite using the CURRENTLY APPLIED offset\n\t\t\tif (label.textSprite) {\n\t\t\t\tlabel.container.remove(label.textSprite);\n\t\t\t\tlabel.textSprite.material.map?.dispose();\n\t\t\t\tlabel.textSprite.material.dispose();\n\t\t\t\tlabel.textSprite = null;\n\t\t\t}\n\t\t\tlabel.textSprite = this.createTextSprite(newText, mergedOptions);\n\t\t\t// Position using the offset that's currently visually correct\n\t\t\tlabel.textSprite.position.copy(label.currentAppliedOffset);\n\t\t\tlabel.textSprite.visible = true;\n\t\t\tlabel.container.add(label.textSprite);\n\t\t}\n\t\tconsole.log(`[updateLabelText - ${id}] Update finished. Sprite:`, label.textSprite);\n\t}\n\n\tgetDefaultLabelOptions() {\n\t\treturn {\n\t\t\twidth: 1.5,\n\t\t\theight: 0.4,\n\t\t\tbackgroundColor: \"#333333\",\n\t\t\ttextColor: \"#ffffff\",\n\t\t\topacity: 0.8,\n\t\t\tshowConnector: true,\n\t\t\tconnectorPosition: \"top\", // 'top', 'bottom', 'left', 'right'\n\t\t\tconnectorWidth: 2, // Line width in pixels\n\t\t\tconnectorLength: 0.5, // World units length\n\t\t\tconnectorColor: \"#ffffff\",\n\t\t\tfont: \"Bold 24px Arial\",\n\t\t\tpadding: 10, // Pixels for text canvas\n\t\t\tdepthTest: true, // Ensure depth testing is enabled\n\t\t\tsizeAttenuation: true, // For text sprite\n\t\t\tvisible: true,\n\t\t\trenderOrderBackground: 1, // Background in front\n\t\t\trenderOrderText: 2, // Text on top\n\t\t\trenderOrderConnector: 0, //\n\t\t\tcalculatedVisualOffset: new THREE.Vector3(),\n\t\t\tconnectorTarget: new THREE.Vector3(),\n\t\t\t// fadeWithDistance: false,\n\t\t\t// fadeStartDistance: 10,\n\t\t\t// fadeEndDistance: 30,\n\t\t\t// offset: null,\n\t\t};\n\t}\n\n\t// Helper to calculate the VISUAL offset based on options\n\t// This determines where the label box sits relative to the target anchor point\n\tcalculateVisualOffset(options) {\n\t\tconst width = options.width;\n\t\tconst height = options.height;\n\t\tconst connectorLength = options.showConnector ? options.connectorLength : 0;\n\t\t// Use the INTENDED position from options for calculation\n\t\tconst connectorPosition = options.connectorPosition;\n\t\tconst visualOffset = new THREE.Vector3();\n\n\t\tif (options.showConnector) {\n\t\t\tswitch (connectorPosition) {\n\t\t\t\tcase \"top\": // Label appears ABOVE target\n\t\t\t\t\tvisualOffset.y = height / 2 + connectorLength;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"left\": // Label appears VISUALLY RIGHT of target\n\t\t\t\t\tvisualOffset.x = width / 2 + connectorLength;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"right\": // Label appears VISUALLY LEFT of target\n\t\t\t\t\tvisualOffset.x = -(width / 2 + connectorLength);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"bottom\": // Label appears BELOW target\n\t\t\t\tdefault:\n\t\t\t\t\tvisualOffset.y = -(height / 2 + connectorLength);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t} else {\n\t\t\t// Default placement slightly above if no connector\n\t\t\tvisualOffset.y = height / 2 + 0.1;\n\t\t}\n\t\tif (options.offset) {\n\t\t\tconst explicitOffset = Array.isArray(options.offset)\n\t\t\t\t? new THREE.Vector3(...options.offset)\n\t\t\t\t: options.offset;\n\t\t\tvisualOffset.add(explicitOffset);\n\t\t}\n\t\treturn visualOffset;\n\t}\n\n\tcleanupLabelElements(label) {\n\t\tif (label.textSprite) {\n\t\t\tif (label.textSprite.parent) label.textSprite.parent.remove(label.textSprite);\n\t\t\tlabel.textSprite.material.map?.dispose();\n\t\t\tlabel.textSprite.material.dispose();\n\t\t\tlabel.textSprite = null;\n\t\t}\n\t\tif (label.background) {\n\t\t\tif (label.background.parent) label.background.parent.remove(label.background);\n\t\t\tlabel.background.material.dispose();\n\t\t\tlabel.background.geometry.dispose();\n\t\t\tlabel.background = null;\n\t\t}\n\t\tif (label.connector) {\n\t\t\tif (label.connector.parent) label.connector.parent.remove(label.connector);\n\t\t\tlabel.connector.material.dispose();\n\t\t\tlabel.connector.geometry.dispose();\n\t\t\tlabel.connector = null;\n\t\t}\n\t}\n\n\tremoveLabel(id, notify = true) {\n\t\tconst label = this.labels.get(id);\n\t\tif (!label) return;\n\n\t\tthis.cleanupLabelElements(label);\n\t\tif (label.container?.parent) label.container.parent.remove(label.container);\n\t\tconst deleted = this.labels.delete(id);\n\n\t\tif (deleted && notify) {\n\t\t\tthis._notifyUpdate();\n\t\t}\n\t}\n\n\tclearAllLabels(notify = true) {\n\t\tconst hadLabels = this.labels.size > 0;\n\t\tconst labelIds = Array.from(this.labels.keys());\n\t\tfor (const id of labelIds) {\n\t\t\tthis.removeLabel(id, false);\n\t\t}\n\t\tif (hadLabels && notify) {\n\t\t\tthis._notifyUpdate();\n\t\t}\n\t}\n\n\tsetLabelVisibility(id, visible) {\n\t\tconst label = this.labels.get(id);\n\t\tif (label && label.container) {\n\t\t\tlabel.container.visible = visible;\n\t\t\tlabel.options.visible = visible; // Store visibility state\n\t\t}\n\t}\n\n\tupdateLabelPosition(id, newPosition) {\n\t\tconst label = this.labels.get(id);\n\t\tif (!label || !label.container) return;\n\n\t\tconst finalPosition = Array.isArray(newPosition)\n\t\t\t? new THREE.Vector3(...newPosition)\n\t\t\t: newPosition.clone();\n\t\tlabel.container.position.copy(finalPosition); // Update container position\n\t\t// Update stored target position in options\n\t\tif (label.options) {\n\t\t\tlabel.options.connectorTarget = finalPosition.clone();\n\t\t}\n\t\t// No need to notify here, position changes are usually frequent during drag/update\n\t\t// Notify should happen when the final position is saved/set.\n\t}\n\n\t// Add this method to properly update the connector start point when flipping\n\tupdateConnectorStartPoint(label, targetVisualOffset, needsFlip) {\n\t\tif (!label.connector || !label.options.showConnector) return;\n\n\t\t// Get the current options\n\t\tconst options = { ...label.options };\n\n\t\t// If we're flipping, we need to use the opposite connector position for calculations\n\t\tif (needsFlip) {\n\t\t\t// Temporarily swap the connector position for calculation\n\t\t\tconst originalPosition = options.connectorPosition;\n\t\t\toptions.connectorPosition =\n\t\t\t\toriginalPosition === \"left\" ? \"right\" : originalPosition === \"right\" ? \"left\" : originalPosition;\n\n\t\t\t// Calculate the correct start point based on flipped position\n\t\t\tconst newStartPoint = this.calculateConnectorStartPoint(targetVisualOffset, options);\n\n\t\t\t// Restore original position in options\n\t\t\toptions.connectorPosition = originalPosition;\n\n\t\t\t// Update connector with new start point\n\t\t\tconst endPoint = new THREE.Vector3(0, 0, 0);\n\t\t\tif (label.connector.geometry.setPositions) {\n\t\t\t\tlabel.connector.geometry.setPositions([\n\t\t\t\t\tnewStartPoint.x,\n\t\t\t\t\tnewStartPoint.y,\n\t\t\t\t\tnewStartPoint.z,\n\t\t\t\t\tendPoint.x,\n\t\t\t\t\tendPoint.y,\n\t\t\t\t\tendPoint.z,\n\t\t\t\t]);\n\t\t\t\tlabel.connector.computeLineDistances();\n\t\t\t}\n\t\t} else {\n\t\t\t// Normal case - use standard calculation\n\t\t\tconst newStartPoint = this.calculateConnectorStartPoint(targetVisualOffset, options);\n\t\t\tconst endPoint = new THREE.Vector3(0, 0, 0);\n\t\t\tif (label.connector.geometry.setPositions) {\n\t\t\t\tlabel.connector.geometry.setPositions([\n\t\t\t\t\tnewStartPoint.x,\n\t\t\t\t\tnewStartPoint.y,\n\t\t\t\t\tnewStartPoint.z,\n\t\t\t\t\tendPoint.x,\n\t\t\t\t\tendPoint.y,\n\t\t\t\t\tendPoint.z,\n\t\t\t\t]);\n\t\t\t\tlabel.connector.computeLineDistances();\n\t\t\t}\n\t\t}\n\t}\n\n\tupdate() {\n\t\tif (!this.camera || this.labels.size === 0) return;\n\n\t\tconst cameraQuaternion = this.camera.quaternion;\n\t\tconst cameraPosition = this.camera.position;\n\t\tthis.camera.updateMatrixWorld();\n\t\tthis._cameraRight.setFromMatrixColumn(this.camera.matrixWorld, 0).normalize();\n\n\t\tthis.labels.forEach((label) => {\n\t\t\tif (!label.container || !label.options) return;\n\n\t\t\t// 1. Billboard\n\t\t\tlabel.container.quaternion.copy(cameraQuaternion);\n\n\t\t\t// 2. Dynamic Positioning Check for Left/Right\n\t\t\tlet targetVisualOffset = label.options.calculatedVisualOffset.clone();\n\t\t\tconst intendedPosition = label.options.connectorPosition;\n\t\t\tlet needsFlip = false; // Track if a flip happened\n\n\t\t\tif (label.options.showConnector && (intendedPosition === \"left\" || intendedPosition === \"right\")) {\n\t\t\t\t// ... (logic to determine needsFlip and calculate targetVisualOffset) ...\n\t\t\t\tconst camToLabelDir = this._tempVec3\n\t\t\t\t\t.copy(label.options.connectorTarget)\n\t\t\t\t\t.sub(cameraPosition)\n\t\t\t\t\t.normalize();\n\t\t\t\tconst screenRight = this._cameraRight.clone().projectOnPlane(camToLabelDir).normalize();\n\t\t\t\tconst intendedOffset = this.calculateVisualOffset(label.options);\n\t\t\t\tconst dot = intendedOffset.dot(screenRight);\n\t\t\t\tif ((intendedPosition === \"left\" && dot < 0) || (intendedPosition === \"right\" && dot > 0)) {\n\t\t\t\t\tneedsFlip = true;\n\t\t\t\t\tconst flippedSide = intendedPosition === \"left\" ? \"right\" : \"left\";\n\t\t\t\t\ttargetVisualOffset = this.calculateVisualOffset({\n\t\t\t\t\t\t...label.options,\n\t\t\t\t\t\tconnectorPosition: flippedSide,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// 3. Apply the potentially updated offset IF it changed\n\t\t\tif (!label.currentAppliedOffset.equals(targetVisualOffset)) {\n\t\t\t\t// Apply offset to background/textsprite positions\n\t\t\t\tif (label.background) label.background.position.copy(targetVisualOffset);\n\t\t\t\tif (label.textSprite) label.textSprite.position.copy(targetVisualOffset);\n\n\t\t\t\t// Call our new method to update connector start point properly\n\t\t\t\tthis.updateConnectorStartPoint(label, targetVisualOffset, needsFlip);\n\n\t\t\t\tlabel.currentAppliedOffset.copy(targetVisualOffset);\n\t\t\t}\n\n\t\t\tif (label.background) {\n\t\t\t\t// Move all elements forward in the flipped case\n\t\t\t\tconst zBase = needsFlip ? 0.01 : 0;\n\n\t\t\t\t// Set appropriate z-offsets with larger gaps between elements\n\t\t\t\tif (label.connector) {\n\t\t\t\t\t// Always put connector furthest back\n\t\t\t\t\tlabel.connector.position.z = zBase - 0.005;\n\t\t\t\t}\n\n\t\t\t\t// Background in the middle\n\t\t\t\tlabel.background.position.z = zBase;\n\n\t\t\t\t// Text sprite always in front\n\t\t\t\tif (label.textSprite) {\n\t\t\t\t\tlabel.textSprite.position.z = zBase + 0.005;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// --- REMOVED Connector Z adjustment ---\n\n\t\t\t// --- 5. Optional: Distance-based effects & FINAL VISIBILITY ---\n\t\t\t// ... (visibility logic remains the same, using label.options.showConnector) ...\n\t\t\tlet finalContainerVisible = label.options.visible;\n\t\t\tlet finalConnectorVisible = label.options.showConnector && label.options.visible;\n\t\t\t// ... (fade logic) ...\n\t\t\t// Apply final visibility\n\t\t\tlabel.container.visible = finalContainerVisible;\n\t\t\tif (label.connector) {\n\t\t\t\tlabel.connector.visible = finalConnectorVisible;\n\t\t\t}\n\n\t\t\t// --- 6. Update LineMaterial Resolution ---\n\t\t\tif (label.connector?.material instanceof LineMaterial) {\n\t\t\t\tconst resolution = this._tempVec3; // Reuse temp vector\n\t\t\t\tif (this.renderer) this.renderer.getDrawingBufferSize(resolution);\n\t\t\t\telse resolution.set(window.innerWidth, window.innerHeight);\n\n\t\t\t\tif (!label.connector.material.resolution.equals(resolution)) {\n\t\t\t\t\tlabel.connector.material.resolution.copy(resolution);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// --- End LineMaterial Update ---\n\t\t}); // End labels.forEach loop\n\t} // End update() function\n\n\tsetupViewerIntegration() {\n\t\tif (this.viewer?.update) {\n\t\t\tconst originalUpdate = this.viewer.update.bind(this.viewer);\n\t\t\tconst self = this;\n\t\t\tthis.viewer.update = function (...args) {\n\t\t\t\toriginalUpdate(...args);\n\t\t\t\tself.update(); // Call labels update after viewer update\n\t\t\t};\n\t\t\tconsole.log(\"FloatingLabels integrated into viewer update loop.\");\n\t\t} else {\n\t\t\tconsole.warn(\"Viewer update loop not found for FloatingLabels integration.\");\n\t\t\t// Fallback: manual update loop if needed\n\t\t\t// const animate = () => {\n\t\t\t// \trequestAnimationFrame(animate);\n\t\t\t// \tthis.update();\n\t\t\t// };\n\t\t\t// animate();\n\t\t}\n\t}\n\n\tshow() {\n\t\tthis.labelsGroup.visible = true;\n\t}\n\n\thide() {\n\t\tthis.labelsGroup.visible = false;\n\t}\n\n\tdispose() {\n\t\tthis.hideEditUI();\n\t\tif (this.editUI?.parentNode) {\n\t\t\tdocument.body.removeChild(this.editUI);\n\t\t\tthis.editUI = null;\n\t\t}\n\t\tif (this.viewer?.renderer?.domElement && this.clickHandler) {\n\t\t\tthis.viewer.renderer.domElement.removeEventListener(\"click\", this.clickHandler);\n\t\t}\n\t\tthis.clickHandler = null;\n\t\tthis.clearAllLabels(false); // Clear without final notification\n\t\tif (this.labelsGroup?.parent) this.labelsGroup.parent.remove(this.labelsGroup);\n\t\tthis.labelsGroup = null;\n\t\tthis.labels.clear();\n\n\t\t// TODO: If viewer integration modified the original update, restore it here if possible/necessary\n\n\t\tthis.viewer = null;\n\t\tthis.scene = null;\n\t\tthis.camera = null;\n\t\tthis.renderer = null;\n\t\tthis.callbacks = {};\n\t}\n}\n","import * as THREE from \"three\";\nimport { OrbitControls } from \"./OrbitControls.js\";\nimport { PlyLoader } from \"./loaders/ply/PlyLoader.js\";\nimport { SplatLoader } from \"./loaders/splat/SplatLoader.js\";\nimport { KSplatLoader } from \"./loaders/ksplat/KSplatLoader.js\";\nimport { SpzLoader } from \"./loaders/spz/SpzLoader.js\";\nimport { sceneFormatFromPath } from \"./loaders/Utils.js\";\nimport { LoadingSpinner } from \"./ui/LoadingSpinner.js\";\nimport { LoadingProgressBar } from \"./ui/LoadingProgressBar.js\";\nimport { InfoPanel } from \"./ui/InfoPanel.js\";\nimport { SceneHelper } from \"./SceneHelper.js\";\nimport { Raycaster } from \"./raycaster/Raycaster.js\";\nimport { SplatMesh } from \"./splatmesh/SplatMesh.js\";\nimport { createSortWorker } from \"./worker/SortWorker.js\";\nimport { Constants } from \"./Constants.js\";\nimport { getCurrentTime, isIOS, getIOSSemever, clamp } from \"./Util.js\";\nimport { AbortablePromise, AbortedPromiseError } from \"./AbortablePromise.js\";\nimport { SceneFormat } from \"./loaders/SceneFormat.js\";\nimport { WebXRMode } from \"./webxr/WebXRMode.js\";\nimport { VRButton } from \"./webxr/VRButton.js\";\nimport { ARButton } from \"./webxr/ARButton.js\";\nimport { delayedExecute, abortablePromiseWithExtractedComponents } from \"./Util.js\";\nimport { LoaderStatus } from \"./loaders/LoaderStatus.js\";\nimport { DirectLoadError } from \"./loaders/DirectLoadError.js\";\nimport { RenderMode } from \"./RenderMode.js\";\nimport { LogLevel } from \"./LogLevel.js\";\nimport { SceneRevealMode } from \"./SceneRevealMode.js\";\nimport { SplatRenderMode } from \"./SplatRenderMode.js\";\nimport { GSVisionLogo } from \"./ui/GSVisionLogo.js\";\nimport { Controls } from \"./ui/Controls.js\";\nimport { Presets } from \"./ui/Presets.js\";\nimport { FloatingLabels } from \"./ui/Labels.js\";\n\nconst THREE_CAMERA_FOV = 50;\nconst MINIMUM_DISTANCE_TO_NEW_FOCAL_POINT = 0.75;\nconst MIN_SPLAT_COUNT_TO_SHOW_SPLAT_TREE_LOADING_SPINNER = 1500000;\nconst FOCUS_MARKER_FADE_IN_SPEED = 10.0;\nconst FOCUS_MARKER_FADE_OUT_SPEED = 2.5;\nconst CONSECUTIVE_RENDERED_FRAMES_FOR_FPS_CALCULATION = 60;\n\n/**\n * @typedef {Object} ViewerOptions\n * @property {HTMLElement|Object} [rootElement] - Parent element of the Three.js renderer canvas. Can be an HTMLElement or a React ref's current property\n * @property {Object} [containerStyles] - Optional styles to apply to the rootElement if it needs to be created\n * @property {boolean} [hideAttribution=false] - Whether to hide attribution\n * @property {number[]} [cameraUp=[0,1,0]] - The natural 'up' vector for viewing the scene\n * @property {number[]} [initialCameraPosition=[0,10,15]] - The camera's initial position\n * @property {number[]} [initialCameraLookAt=[0,0,0]] - The initial focal point of the camera and center of the camera's orbit\n * @property {boolean} [dropInMode=false] - Flag used internally to support the usage of the viewer as a Three.js scene object\n * @property {boolean} [selfDrivenMode=true] - If true, the viewer manages its own update/animation loop via requestAnimationFrame()\n * @property {boolean} [useBuiltInControls=true] - If true, the viewer will create its own instance of OrbitControls and attach to the camera\n * @property {boolean} [ignoreDevicePixelRatio=false] - Pretend the device pixel ratio is 1 to boost performance on devices where it is larger\n * @property {boolean} [halfPrecisionCovariancesOnGPU=false] - Use 16-bit floating point values when storing splat covariance data in textures\n * @property {Object} [threeScene] - If valid, it will be rendered by the viewer along with the splat mesh\n * @property {Object} [renderer] - Allows for usage of an external Three.js renderer\n * @property {Object} [camera] - Allows for usage of an external Three.js camera\n * @property {boolean} [gpuAcceleratedSort=false] - If true, a partially GPU-accelerated approach to sorting splats will be used\n * @property {boolean} [integerBasedSort=true] - If true, integer versions of values are used for sorting calculations\n * @property {boolean} [sharedMemoryForWorkers=true] - If true, a SharedArrayBuffer will be used to communicate with web workers\n * @property {boolean} [dynamicScene=false] - If true, viewer assumes scene elements are not stationary or the number of splats may change\n * @property {boolean} [antialiased=false] - When true, performs additional steps during rendering to address artifacts\n * @property {number} [kernel2DSize=0.3] - Constant added to the projected 2D screen-space splat scales\n * @property {number} [webXRMode=0] - WebXR mode setting\n * @property {Object} [webXRSessionInit={}] - WebXR session initialization options\n * @property {number} [renderMode] - Controls if the viewer renders on every update or only when changes occur\n * @property {number} [sceneRevealMode] - Controls how scenes are visually revealed when loaded\n * @property {number} [focalAdjustment=1.0] - Parameter for tweaking focal length related calculations\n * @property {number} [maxScreenSpaceSplatSize=1024] - Maximum screen-space splat size\n * @property {number} [logLevel=0] - The verbosity of console logging\n * @property {number} [sphericalHarmonicsDegree=0] - Degree of spherical harmonics to utilize in rendering splats (0-2)\n * @property {boolean} [enableOptionalEffects=false] - When true, allows for usage of extra properties during rendering\n * @property {boolean} [enableSIMDInSort=true] - Enable SIMD WebAssembly instructions for splat sorting\n * @property {number} [inMemoryCompressionLevel=0] - Level to compress non KSPLAT files when loading them\n * @property {boolean} [optimizeSplatData=true] - Reorder splat data in memory after loading to optimize cache utilization\n * @property {boolean} [freeIntermediateSplatData=false] - When true, intermediate splat data will be freed after loading\n * @property {number} [splatRenderMode] - Controls how splats are rendered\n * @property {number} [sceneFadeInRateMultiplier=1.0] - Customizes the speed at which the scene is revealed\n * @property {number} [splatSortDistanceMapPrecision] - Sets the range for the depth map for the counting sort\n * @property {string} [backgroundColor=\"#000000\"] - Background color\n * @property {string} [barColor=\"#FFFFFF\"] - Color for progress bar\n * @property {string} [mask] - URL to mask image for progress bar\n * @property {boolean} [orbitAroundFocalPoint=true] - Enable orbiting around the focal point by default\n * @property {{lookAt: number[], position: number[], label?: string}[]} [presets] - Array of preset configurations\n * @property {\"admin\"|\"user\"} [role=\"user\"] - Role of the user\n * @property {Function} [onUpdate] - Callback function for when a preset is updated, takes presests array.\n * @property {ViewerLabelData[]} [labels] - Initial label configurations.\n * @property {Function} [onLabelsUpdate] - Callback for label changes (receives full labels array). **(This is the one we use)**\n */\n\n/**\n * Viewer: Manages the rendering of splat scenes. Manages an instance of SplatMesh as well as a web worker\n * that performs the sort for its splats.\n */\nexport class Viewer {\n\t/**\n\t *\n\t * @param {ViewerOptions} options - Configuration options for the viewer\n\t */\n\n\tonLabelsUpdateCallback = null; // Callback provided by React/user for label updates\n\tinitialLabelData = [];\n\tlabelsManager = null;\n\n\tconstructor(options = {}) {\n\t\t// Parent element of the Three.js renderer canvas\n\t\t// Can be an HTMLElement or a React ref's current property\n\t\tthis.rootElement = options.rootElement;\n\n\t\t// Optional styles to apply to the rootElement if it needs to be created\n\t\tthis.containerStyles = options.containerStyles || {\n\t\t\twidth: \"100%\",\n\t\t\theight: \"100%\",\n\t\t\tposition: \"absolute\",\n\t\t};\n\n\t\tthis.hideAttribution = options.hideAttribution || false;\n\n\t\t// The natural 'up' vector for viewing the scene (only has an effect when used with orbit controls and\n\t\t// when the viewer uses its own camera).\n\t\tif (!options.cameraUp) options.cameraUp = [0, 1, 0];\n\t\tthis.cameraUp = new THREE.Vector3().fromArray(options.cameraUp);\n\n\t\t// The camera's initial position (only used when the viewer uses its own camera).\n\t\tif (!options.initialCameraPosition) options.initialCameraPosition = [0, 10, 15];\n\t\tthis.initialCameraPosition = new THREE.Vector3().fromArray(options.initialCameraPosition);\n\n\t\t// The initial focal point of the camera and center of the camera's orbit (only used when the viewer uses its own camera).\n\t\tif (!options.initialCameraLookAt) options.initialCameraLookAt = [0, 0, 0];\n\t\tthis.initialCameraLookAt = new THREE.Vector3().fromArray(options.initialCameraLookAt);\n\n\t\t// 'dropInMode' is a flag that is used internally to support the usage of the viewer as a Three.js scene object\n\t\tthis.dropInMode = options.dropInMode || false;\n\n\t\t// If 'selfDrivenMode' is true, the viewer manages its own update/animation loop via requestAnimationFrame()\n\t\tif (options.selfDrivenMode === undefined || options.selfDrivenMode === null) {\n\t\t\toptions.selfDrivenMode = true;\n\t\t}\n\t\tthis.selfDrivenMode = options.selfDrivenMode && !this.dropInMode;\n\t\tthis.selfDrivenUpdateFunc = this.selfDrivenUpdate.bind(this);\n\n\t\t// If 'useBuiltInControls' is true, the viewer will create its own instance of OrbitControls and attach to the camera\n\t\tif (options.useBuiltInControls === undefined) options.useBuiltInControls = true;\n\t\tthis.useBuiltInControls = options.useBuiltInControls;\n\n\t\t// parent element of the Three.js renderer canvas\n\t\tthis.rootElement = options.rootElement;\n\n\t\t// Tells the viewer to pretend the device pixel ratio is 1, which can boost performance on devices where it is larger,\n\t\t// at a small cost to visual quality\n\t\tthis.ignoreDevicePixelRatio = options.ignoreDevicePixelRatio || false;\n\t\tthis.devicePixelRatio = this.ignoreDevicePixelRatio ? 1 : window.devicePixelRatio || 1;\n\n\t\t// Tells the viewer to use 16-bit floating point values when storing splat covariance data in textures, instead of 32-bit\n\t\tthis.halfPrecisionCovariancesOnGPU = options.halfPrecisionCovariancesOnGPU || false;\n\n\t\t// If 'threeScene' is valid, it will be rendered by the viewer along with the splat mesh\n\t\tthis.threeScene = options.threeScene;\n\t\t// Allows for usage of an external Three.js renderer\n\t\tthis.renderer = options.renderer;\n\t\t// Allows for usage of an external Three.js camera\n\t\tthis.camera = options.camera;\n\n\t\t// If 'gpuAcceleratedSort' is true, a partially GPU-accelerated approach to sorting splats will be used.\n\t\t// Currently this means pre-computing splat distances from the camera on the GPU\n\t\tthis.gpuAcceleratedSort = options.gpuAcceleratedSort || false;\n\n\t\t// if 'integerBasedSort' is true, the integer version of splat centers as well as other values used to calculate\n\t\t// splat distances are used instead of the float version. This speeds up computation, but introduces the possibility of\n\t\t// overflow in larger scenes.\n\t\tif (options.integerBasedSort === undefined || options.integerBasedSort === null) {\n\t\t\toptions.integerBasedSort = true;\n\t\t}\n\t\tthis.integerBasedSort = options.integerBasedSort;\n\n\t\t// If 'sharedMemoryForWorkers' is true, a SharedArrayBuffer will be used to communicate with web workers. This method\n\t\t// is faster than copying memory to or from web workers, but comes with security implications as outlined here:\n\t\t// https://web.dev/articles/cross-origin-isolation-guide\n\t\t// If enabled, it requires specific CORS headers to be present in the response from the server that is sent when\n\t\t// loading the application. More information is available in the README.\n\t\tif (options.sharedMemoryForWorkers === undefined || options.sharedMemoryForWorkers === null) {\n\t\t\toptions.sharedMemoryForWorkers = true;\n\t\t}\n\t\tthis.sharedMemoryForWorkers = options.sharedMemoryForWorkers;\n\n\t\t// if 'dynamicScene' is true, it tells the viewer to assume scene elements are not stationary or that the number of splats in the\n\t\t// scene may change. This prevents optimizations that depend on a static scene from being made. Additionally, if 'dynamicScene' is\n\t\t// true it tells the splat mesh to not apply scene tranforms to splat data that is returned by functions like\n\t\t// SplatMesh.getSplatCenter() by default.\n\t\tthis.dynamicScene = !!options.dynamicScene;\n\n\t\t// When true, will perform additional steps during rendering to address artifacts caused by the rendering of gaussians at a\n\t\t// substantially different resolution than that at which they were rendered during training. This will only work correctly\n\t\t// for models that were trained using a process that utilizes this compensation calculation. For more details:\n\t\t// https://github.com/nerfstudio-project/gsplat/pull/117\n\t\t// https://github.com/graphdeco-inria/gaussian-splatting/issues/294#issuecomment-1772688093\n\t\tthis.antialiased = options.antialiased || false;\n\n\t\t// This constant is added to the projected 2D screen-space splat scales\n\t\tthis.kernel2DSize = options.kernel2DSize === undefined ? 0.3 : options.kernel2DSize;\n\n\t\tthis.webXRMode = options.webXRMode || WebXRMode.None;\n\t\tif (this.webXRMode !== WebXRMode.None) {\n\t\t\tthis.gpuAcceleratedSort = false;\n\t\t}\n\t\tthis.webXRActive = false;\n\n\t\tthis.webXRSessionInit = options.webXRSessionInit || {};\n\n\t\t// if 'renderMode' is RenderMode.Always, then the viewer will rrender the scene on every update. If it is RenderMode.OnChange,\n\t\t// it will only render when something in the scene has changed.\n\t\tthis.renderMode = options.renderMode || RenderMode.Always;\n\n\t\t// SceneRevealMode.Default results in a nice, slow fade-in effect for progressively loaded scenes,\n\t\t// and a fast fade-in for non progressively loaded scenes.\n\t\t// SceneRevealMode.Gradual will force a slow fade-in for all scenes.\n\t\t// SceneRevealMode.Instant will force all loaded scene data to be immediately visible.\n\t\tthis.sceneRevealMode = options.sceneRevealMode || SceneRevealMode.Default;\n\n\t\t// Hacky, experimental, non-scientific parameter for tweaking focal length related calculations. For scenes with very\n\t\t// small gaussians, small details, and small dimensions -- increasing this value can help improve visual quality.\n\t\tthis.focalAdjustment = options.focalAdjustment || 1.0;\n\n\t\t// Specify the maximum screen-space splat size, can help deal with large splats that get too unwieldy\n\t\tthis.maxScreenSpaceSplatSize = options.maxScreenSpaceSplatSize || 1024;\n\n\t\t// The verbosity of console logging\n\t\tthis.logLevel = options.logLevel || LogLevel.None;\n\n\t\t// Degree of spherical harmonics to utilize in rendering splats (assuming the data is present in the splat scene).\n\t\t// Valid values are 0 - 2. Default value is 0.\n\t\tthis.sphericalHarmonicsDegree = options.sphericalHarmonicsDegree || 0;\n\n\t\t// When true, allows for usage of extra properties and attributes during rendering for effects such as opacity adjustment.\n\t\t// Default is false for performance reasons. These properties are separate from transform properties (scale, rotation, position)\n\t\t// that are enabled by the 'dynamicScene' parameter.\n\t\tthis.enableOptionalEffects = options.enableOptionalEffects || false;\n\n\t\t// Enable the usage of SIMD WebAssembly instructions for the splat sort\n\t\tif (options.enableSIMDInSort === undefined || options.enableSIMDInSort === null) {\n\t\t\toptions.enableSIMDInSort = true;\n\t\t}\n\t\tthis.enableSIMDInSort = options.enableSIMDInSort;\n\n\t\t// Level to compress non KSPLAT files when loading them for direct rendering\n\t\tif (options.inMemoryCompressionLevel === undefined || options.inMemoryCompressionLevel === null) {\n\t\t\toptions.inMemoryCompressionLevel = 0;\n\t\t}\n\t\tthis.inMemoryCompressionLevel = options.inMemoryCompressionLevel;\n\n\t\t// Reorder splat data in memory after loading is complete to optimize cache utilization. Default is true.\n\t\t// Does not apply if splat scene is progressively loaded.\n\t\tif (options.optimizeSplatData === undefined || options.optimizeSplatData === null) {\n\t\t\toptions.optimizeSplatData = true;\n\t\t}\n\t\tthis.optimizeSplatData = options.optimizeSplatData;\n\n\t\t// When true, the intermediate splat data that is the result of decompressing splat bufffer(s) and is used to\n\t\t// populate the data textures will be freed. This will reduces memory usage, but if that data needs to be modified\n\t\t// it will need to be re-populated from the splat buffer(s). Default is false.\n\t\tif (options.freeIntermediateSplatData === undefined || options.freeIntermediateSplatData === null) {\n\t\t\toptions.freeIntermediateSplatData = false;\n\t\t}\n\t\tthis.freeIntermediateSplatData = options.freeIntermediateSplatData;\n\n\t\t// It appears that for certain iOS versions, special actions need to be taken with the\n\t\t// usage of SIMD instructions and shared memory\n\t\tif (isIOS()) {\n\t\t\tconst semver = getIOSSemever();\n\t\t\tif (semver.major < 17) {\n\t\t\t\tthis.enableSIMDInSort = false;\n\t\t\t}\n\t\t\tif (semver.major < 16) {\n\t\t\t\tthis.sharedMemoryForWorkers = false;\n\t\t\t}\n\t\t}\n\n\t\t// Tell the viewer how to render the splats\n\t\tif (options.splatRenderMode === undefined || options.splatRenderMode === null) {\n\t\t\toptions.splatRenderMode = SplatRenderMode.ThreeD;\n\t\t}\n\t\tthis.splatRenderMode = options.splatRenderMode;\n\n\t\t// Customize the speed at which the scene is revealed\n\t\tthis.sceneFadeInRateMultiplier = options.sceneFadeInRateMultiplier || 1.0;\n\n\t\t// Set the range for the depth map for the counting sort used to sort the splats\n\t\tthis.splatSortDistanceMapPrecision =\n\t\t\toptions.splatSortDistanceMapPrecision || Constants.DefaultSplatSortDistanceMapPrecision;\n\t\tconst maxPrecision = this.integerBasedSort ? 20 : 24;\n\t\tthis.splatSortDistanceMapPrecision = clamp(this.splatSortDistanceMapPrecision, 10, maxPrecision);\n\n\t\tthis.onSplatMeshChangedCallback = null;\n\t\tthis.createSplatMesh();\n\n\t\tthis.controls = null;\n\t\tthis.perspectiveControls = null;\n\t\tthis.orthographicControls = null;\n\n\t\tthis.orthographicCamera = null;\n\t\tthis.perspectiveCamera = null;\n\n\t\tthis.showMeshCursor = false;\n\t\tthis.showControlPlane = false;\n\t\tthis.showInfo = false;\n\n\t\tthis.sceneHelper = null;\n\n\t\tthis.sortWorker = null;\n\t\tthis.sortRunning = false;\n\t\tthis.splatRenderCount = 0;\n\t\tthis.splatSortCount = 0;\n\t\tthis.lastSplatSortCount = 0;\n\t\tthis.sortWorkerIndexesToSort = null;\n\t\tthis.sortWorkerSortedIndexes = null;\n\t\tthis.sortWorkerPrecomputedDistances = null;\n\t\tthis.sortWorkerTransforms = null;\n\t\tthis.preSortMessages = [];\n\t\tthis.runAfterNextSort = [];\n\n\t\tthis.selfDrivenModeRunning = false;\n\t\tthis.splatRenderReady = false;\n\n\t\tthis.raycaster = new Raycaster();\n\n\t\tthis.infoPanel = null;\n\n\t\tthis.startInOrthographicMode = false;\n\n\t\tthis.currentFPS = 0;\n\t\tthis.lastSortTime = 0;\n\t\tthis.consecutiveRenderFrames = 0;\n\n\t\tthis.previousCameraTarget = new THREE.Vector3();\n\t\tthis.nextCameraTarget = new THREE.Vector3();\n\n\t\tthis.mousePosition = new THREE.Vector2();\n\t\tthis.mouseDownPosition = new THREE.Vector2();\n\t\tthis.mouseDownTime = null;\n\n\t\tthis.resizeObserver = null;\n\t\tthis.mouseMoveListener = null;\n\t\tthis.mouseDownListener = null;\n\t\tthis.mouseUpListener = null;\n\t\tthis.keyDownListener = null;\n\n\t\tthis.sortPromise = null;\n\t\tthis.sortPromiseResolver = null;\n\t\tthis.splatSceneDownloadPromises = {};\n\t\tthis.splatSceneDownloadAndBuildPromise = null;\n\t\tthis.splatSceneRemovalPromise = null;\n\n\t\tthis.backgroundColor = options.backgroundColor;\n\t\tthis.barColor = options.barColor;\n\t\tthis.mask = options.mask || null;\n\n\t\tthis.loadingSpinner = new LoadingSpinner(null, this.rootElement || document.body);\n\t\tthis.loadingSpinner.hide();\n\t\tthis.loadingProgressBar = new LoadingProgressBar(\n\t\t\tthis.rootElement || document.body,\n\t\t\tthis.mask,\n\t\t\tthis.backgroundColor,\n\t\t\tthis.barColor,\n\t\t);\n\t\tthis.loadingProgressBar.hide();\n\t\tthis.infoPanel = new InfoPanel(this.rootElement || document.body, options.role ?? \"user\");\n\t\tthis.infoPanel.hide();\n\n\t\tthis.usingExternalCamera = this.dropInMode || this.camera ? true : false;\n\t\tthis.usingExternalRenderer = this.dropInMode || this.renderer ? true : false;\n\n\t\tthis.initialized = false;\n\t\tthis.disposing = false;\n\t\t1;\n\t\tthis.disposed = false;\n\t\tthis.disposePromise = null;\n\n\t\tthis.role = options.role || \"user\";\n\n\t\tthis.gsVisionLogo = new GSVisionLogo(this.rootElement || document.body, this.hideAttribution);\n\t\tthis.controlsUI = new Controls(this.rootElement || document.body, false);\n\t\tthis.presetsUI = new Presets(this.rootElement || document.body, {\n\t\t\tpresets: options.presets,\n\t\t\tonPresetSelected: this.onPresetSelected.bind(this),\n\t\t\trole: options.role ?? \"user\",\n\t\t\tonUpdate: options.role === \"admin\" && options.onUpdate,\n\t\t});\n\t\tthis.presetsUI.hide(); // Always hide by default\n\n\t\tthis.setupControlsIntegration();\n\n\t\tthis.keyboardInputActive = true;\n\t\tthis.orbitControlsEnabled = true;\n\n\t\tthis.onKeyDown = this.onKeyDown.bind(this);\n\n\t\tthis.onMouseMove = this.onMouseMove.bind(this);\n\t\tthis.onMouseDown = this.onMouseDown.bind(this);\n\t\tthis.onMouseUp = this.onMouseUp.bind(this); // Bind this one too if it wasn't already\n\t\tthis.preventPageScroll = this.preventPageScroll.bind(this); // Bind this helper too\n\n\t\tthis.onLabelsUpdateCallback = options.onLabelsUpdate;\n\t\tthis.initialLabelData = options.labels ?? [];\n\t\tthis._uiVisible = false; // Set initial state to false\n\n\t\tthis.orbitAroundFocalPoint =\n\t\t\toptions.orbitAroundFocalPoint !== undefined ? options.orbitAroundFocalPoint : true;\n\n\t\tif (!this.dropInMode) this.init();\n\t}\n\n\t/**\n\t * @param {{lookAt: number[]; position: number[]}} preset - The preset to apply\n\t */\n\tonPresetSelected(preset) {\n\t\t// Don't animate if already animating\n\t\tif (this.isPresetAnimating) return;\n\n\t\t// Create target vectors from the preset\n\t\tconst targetPosition = new THREE.Vector3().fromArray(preset.position);\n\t\tconst targetLookAt = new THREE.Vector3().fromArray(preset.lookAt);\n\n\t\t// Store initial camera state\n\t\tconst startPosition = this.camera.position.clone();\n\t\tconst startTarget = this.controls.target.clone();\n\n\t\t// Use a fixed number of steps instead of time-based animation\n\t\tconst totalSteps = 40;\n\t\tlet currentStep = 0;\n\n\t\t// Set flag to prevent overlapping animations\n\t\tthis.isPresetAnimating = true;\n\n\t\t// Helper for smoother easing\n\t\tconst easeOutQuad = (t) => 1 - (1 - t) * (1 - t);\n\n\t\t// If there's an existing timer, clear it\n\t\tif (this.presetAnimationTimer) {\n\t\t\tclearInterval(this.presetAnimationTimer);\n\t\t}\n\n\t\t// Use setInterval for more consistent timing\n\t\tthis.presetAnimationTimer = setInterval(() => {\n\t\t\t// Advance to next step\n\t\t\tcurrentStep++;\n\n\t\t\t// Calculate progress with easing\n\t\t\tconst progress = easeOutQuad(currentStep / totalSteps);\n\n\t\t\t// Interpolate camera position\n\t\t\tthis.camera.position.lerpVectors(startPosition, targetPosition, progress);\n\n\t\t\t// Interpolate target (look at point)\n\t\t\tthis.controls.target.lerpVectors(startTarget, targetLookAt, progress);\n\n\t\t\t// Make sure camera is looking at the target\n\t\t\tthis.camera.lookAt(this.controls.target);\n\n\t\t\t// Update controls\n\t\t\tthis.controls.update();\n\n\t\t\t// Force render\n\t\t\tthis.forceRenderNextFrame();\n\n\t\t\t// End animation when complete\n\t\t\tif (currentStep >= totalSteps) {\n\t\t\t\tclearInterval(this.presetAnimationTimer);\n\t\t\t\tthis.presetAnimationTimer = null;\n\t\t\t\tthis.isPresetAnimating = false;\n\n\t\t\t\t// Ensure final position is exactly as specified\n\t\t\t\tthis.camera.position.copy(targetPosition);\n\t\t\t\tthis.controls.target.copy(targetLookAt);\n\t\t\t\tthis.camera.lookAt(this.controls.target);\n\t\t\t\tthis.controls.update();\n\t\t\t}\n\t\t}, 16); // ~60fps timing but with fixed intervals\n\t}\n\n\tcreateSplatMesh() {\n\t\tthis.splatMesh = new SplatMesh(\n\t\t\tthis.splatRenderMode,\n\t\t\tthis.dynamicScene,\n\t\t\tthis.enableOptionalEffects,\n\t\t\tthis.halfPrecisionCovariancesOnGPU,\n\t\t\tthis.devicePixelRatio,\n\t\t\tthis.gpuAcceleratedSort,\n\t\t\tthis.integerBasedSort,\n\t\t\tthis.antialiased,\n\t\t\tthis.maxScreenSpaceSplatSize,\n\t\t\tthis.logLevel,\n\t\t\tthis.sphericalHarmonicsDegree,\n\t\t\tthis.sceneFadeInRateMultiplier,\n\t\t\tthis.kernel2DSize,\n\t\t);\n\t\tthis.splatMesh.frustumCulled = false;\n\t\tif (this.onSplatMeshChangedCallback) this.onSplatMeshChangedCallback();\n\t}\n\n\ttoggleOrbitMode() {\n\t\tthis.orbitAroundFocalPoint = !this.orbitAroundFocalPoint;\n\t\tconsole.log(`Orbit around focal point: ${this.orbitAroundFocalPoint ? \"enabled\" : \"disabled\"}`);\n\n\t\t// Update both the perspective and orthographic OrbitControls\n\t\tif (this.perspectiveControls) {\n\t\t\tthis.perspectiveControls.setFocalPointOrbitMode(this.orbitAroundFocalPoint);\n\t\t}\n\t\tif (this.orthographicControls) {\n\t\t\tthis.orthographicControls.setFocalPointOrbitMode(this.orbitAroundFocalPoint);\n\t\t}\n\n\t\t// Update the UI control state\n\t\tif (this.controlsUI) {\n\t\t\tthis.controlsUI.updateToggleState(\"KeyZ\", this.orbitAroundFocalPoint);\n\t\t}\n\t}\n\tinit() {\n\t\tif (this.initialized) return;\n\n\t\tif (!this.rootElement) {\n\t\t\tif (!this.usingExternalRenderer) {\n\t\t\t\tthis.rootElement = document.createElement(\"div\");\n\t\t\t\tObject.assign(this.rootElement.style, this.containerStyles);\n\t\t\t\tdocument.body.appendChild(this.rootElement);\n\t\t\t} else {\n\t\t\t\tthis.rootElement = this.renderer.domElement || document.body;\n\t\t\t}\n\t\t}\n\n\t\tthis.setupCamera();\n\t\tthis.setupRenderer();\n\t\tthis.setupWebXR(this.webXRSessionInit);\n\t\tthis.setupControls();\n\t\tthis.setupEventHandlers();\n\t\tthis.threeScene = this.threeScene || new THREE.Scene();\n\t\tthis.sceneHelper = new SceneHelper(this.threeScene);\n\t\tthis.sceneHelper.setupMeshCursor();\n\t\tthis.sceneHelper.setupFocusMarker();\n\t\tthis.sceneHelper.setupControlPlane();\n\n\t\tthis.loadingProgressBar.setContainer(this.rootElement);\n\t\tthis.loadingSpinner.setContainer(this.rootElement);\n\t\tthis.infoPanel.setContainer(this.rootElement);\n\n\t\tdocument.addEventListener(\"request-camera-state\", (event) => {\n\t\t\tconst callback = event.detail.callback;\n\t\t\tif (callback && typeof callback === \"function\") {\n\t\t\t\t// Get current camera position and target as arrays\n\t\t\t\tconst position = this.camera.position.toArray();\n\t\t\t\tconst lookAt = this.controls.target.toArray();\n\t\t\t\tcallback(position, lookAt);\n\t\t\t}\n\t\t});\n\n\t\t// Initialize labels but keep them hidden until loading completes\n\t\tthis.setupLabels(false);\n\n\t\tthis.setupControlsIntegration();\n\n\t\tthis.initialized = true;\n\t}\n\n\tpreventPageScroll(e) {\n\t\t// Keep as method if bound in constructor\n\t\tif ([\"Space\", \"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\"].includes(e.code)) {\n\t\t\tconst target = e.target;\n\t\t\tif (\n\t\t\t\t!(\n\t\t\t\t\ttarget instanceof HTMLInputElement ||\n\t\t\t\t\ttarget instanceof HTMLTextAreaElement ||\n\t\t\t\t\ttarget instanceof HTMLSelectElement\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Callback when the label modal is opened.\n\t * Disables viewer keyboard and mouse controls.\n\t */\n\tonLabelModalOpen() {\n\t\tconsole.log(\"Label modal opened, disabling controls.\");\n\t\tthis.keyboardInputActive = false;\n\t\tif (this.controls && typeof this.controls.disconnect === \"function\") {\n\t\t\tthis.controls.disconnect();\n\t\t} else if (this.controls) {\n\t\t\tthis.controls.enabled = false;\n\t\t}\n\t\twindow.addEventListener(\"keydown\", this.preventPageScroll);\n\t}\n\n\tonLabelModalClose() {\n\t\tconsole.log(\"Label modal closed, enabling controls.\");\n\t\tthis.keyboardInputActive = true;\n\t\tif (this.controls && typeof this.controls.connect === \"function\") {\n\t\t\tthis.controls.connect();\n\t\t} else if (this.controls) {\n\t\t\tthis.controls.enabled = true;\n\t\t}\n\t\twindow.removeEventListener(\"keydown\", this.preventPageScroll);\n\t}\n\n\t/**\n\t * Set up floating labels in the scene\n\t */\n\tsetupLabels(shouldBeVisible = false) {\n\t\tconsole.log(`[Viewer] Attempting to set up labels... (shouldBeVisible: ${shouldBeVisible})`);\n\t\tif (this.threeScene && this.camera && this.renderer) {\n\t\t\t// Callbacks passed TO FloatingLabels instance\n\t\t\tconst internalLabelCallbacks = {\n\t\t\t\t// Pass the viewer's handler function for the label manager's update notification\n\t\t\t\tonLabelsUpdate: this.handleLabelsUpdateFromManager.bind(this),\n\t\t\t\t// Pass through modal callbacks\n\t\t\t\tonModalOpen: this.onLabelModalOpen, // Assumes already bound\n\t\t\t\tonModalClose: this.onLabelModalClose, // Assumes already bound\n\t\t\t};\n\n\t\t\tif (!this.labelsManager) {\n\t\t\t\ttry {\n\t\t\t\t\t// Pass initial data AND the internal callbacks\n\t\t\t\t\tthis.labelsManager = new FloatingLabels(this, this.initialLabelData, internalLabelCallbacks);\n\t\t\t\t\tconsole.log(\"[Viewer] Labels initialized successfully.\");\n\n\t\t\t\t\t// Important: Immediately hide the labels group if they shouldn't be visible yet\n\t\t\t\t\tif (!shouldBeVisible) {\n\t\t\t\t\t\tthis.labelsManager.hide();\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error(\"[Viewer] Error initializing FloatingLabels:\", error);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconsole.log(\"[Viewer] Labels manager already exists.\");\n\t\t\t\t// Set visibility based on parameter\n\t\t\t\tif (shouldBeVisible) {\n\t\t\t\t\tthis.labelsManager.show();\n\t\t\t\t} else {\n\t\t\t\t\tthis.labelsManager.hide();\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.warn(\"[Viewer] Cannot setup labels: threeScene, camera, or renderer not ready.\");\n\t\t}\n\t}\n\n\thandleLabelsUpdateFromManager(allCurrentLabelsData) {\n\t\tif (this.onLabelsUpdateCallback && this.role === \"admin\") {\n\t\t\tconsole.log(\"[Viewer] Forwarding label update to external callback.\");\n\t\t\ttry {\n\t\t\t\tthis.onLabelsUpdateCallback(allCurrentLabelsData);\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error(\"[Viewer] Error executing onLabelsUpdateCallback:\", e);\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.log(\"[Viewer] No external onLabelsUpdateCallback to call.\");\n\t\t}\n\t}\n\n\t/**\n\t * Add labels from an array of data\n\t * @param {Array} labelData - Array of label configurations\n\t */\n\taddLabels(labelData) {\n\t\tif (!labelData || !Array.isArray(labelData)) return;\n\n\t\t// Store the new label data\n\t\tthis.labelData = [...(this.labelData || []), ...labelData];\n\n\t\t// Add to the manager if it exists\n\t\tif (this.labelsManager) {\n\t\t\tthis.labelsManager.addLabels(labelData);\n\t\t} else {\n\t\t\t// Create the manager if it doesn't exist yet\n\t\t\tthis.setupLabels();\n\t\t}\n\t}\n\n\t/**\n\t * Add a single label\n\t * @param {string} id - Unique identifier\n\t * @param {Array|THREE.Vector3} position - 3D position\n\t * @param {string} text - Text content\n\t * @param {Object} options - Customization options\n\t */\n\taddLabel(id, position, text, options = {}) {\n\t\t// Add to the manager if it exists\n\t\tif (this.labelsManager) {\n\t\t\tthis.labelsManager.addLabel(id, position, text, options);\n\n\t\t\t// Store the new label data\n\t\t\tthis.labelData = this.labelData || [];\n\t\t\tthis.labelData.push({ id, position, text, options });\n\t\t} else {\n\t\t\t// Create the manager with this single label\n\t\t\tthis.labelData = [{ id, position, text, options }];\n\t\t\tthis.setupLabels();\n\t\t}\n\t}\n\n\t/**\n\t * Remove a label by ID\n\t * @param {string} id - Label identifier\n\t */\n\tremoveLabel(id) {\n\t\tif (this.labelsManager) {\n\t\t\tthis.labelsManager.removeLabel(id);\n\n\t\t\t// Update stored label data\n\t\t\tif (this.labelData) {\n\t\t\t\tthis.labelData = this.labelData.filter((label) => label.id !== id);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Clear all labels\n\t */\n\tclearAllLabels() {\n\t\tif (this.labelsManager) {\n\t\t\tthis.labelsManager.clearAllLabels();\n\t\t\tthis.labelData = [];\n\t\t}\n\t}\n\n\t/**\n\t * Show or hide all labels\n\t * @param {boolean} visible - Visibility state\n\t */\n\tsetLabelsVisible(visible) {\n\t\tif (this.labelsManager) {\n\t\t\tif (visible) {\n\t\t\t\tthis.labelsManager.show();\n\t\t\t} else {\n\t\t\t\tthis.labelsManager.hide();\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Toggle labels edit mode\n\t * @returns {boolean} The new edit mode state\n\t */\n\ttoggleLabelsEditMode() {\n\t\tif (this.labelsManager) {\n\t\t\treturn this.labelsManager.toggleEditMode();\n\t\t}\n\t\treturn false;\n\t}\n\n\t// Don't forget to update your toggleUIVisibility method to include labels\n\ttoggleUIVisibility() {\n\t\tthis._uiVisible = this._uiVisible === undefined ? false : !this._uiVisible;\n\n\t\t// Hide/show all UI components\n\t\tif (this.controlsUI) {\n\t\t\tthis._uiVisible ? this.controlsUI.show() : this.controlsUI.hide();\n\t\t}\n\n\t\tif (this.presetsUI) {\n\t\t\tthis._uiVisible ? this.presetsUI.show() : this.presetsUI.hide();\n\t\t}\n\n\t\tif (this.gsVisionLogo) {\n\t\t\tthis._uiVisible ? this.gsVisionLogo.show() : this.gsVisionLogo.hide();\n\t\t}\n\n\t\t// Add this line to show/hide labels with other UI\n\t\tif (this.labelsManager) {\n\t\t\tthis._uiVisible ? this.labelsManager.show() : this.labelsManager.hide();\n\t\t}\n\n\t\t// Force a render to update the display\n\t\tthis.forceRenderNextFrame();\n\t}\n\n\tsetupCamera() {\n\t\tif (!this.usingExternalCamera) {\n\t\t\tconst renderDimensions = new THREE.Vector2();\n\t\t\tthis.getRenderDimensions(renderDimensions);\n\n\t\t\tthis.perspectiveCamera = new THREE.PerspectiveCamera(\n\t\t\t\tTHREE_CAMERA_FOV,\n\t\t\t\trenderDimensions.x / renderDimensions.y,\n\t\t\t\t0.1,\n\t\t\t\t1000,\n\t\t\t);\n\t\t\tthis.orthographicCamera = new THREE.OrthographicCamera(\n\t\t\t\trenderDimensions.x / -2,\n\t\t\t\trenderDimensions.x / 2,\n\t\t\t\trenderDimensions.y / 2,\n\t\t\t\trenderDimensions.y / -2,\n\t\t\t\t0.1,\n\t\t\t\t1000,\n\t\t\t);\n\t\t\tthis.camera = this.startInOrthographicMode ? this.orthographicCamera : this.perspectiveCamera;\n\t\t\tthis.camera.position.copy(this.initialCameraPosition);\n\t\t\tthis.camera.up.copy(this.cameraUp).normalize();\n\t\t\tthis.camera.lookAt(this.initialCameraLookAt);\n\t\t}\n\t}\n\n\tsetupRenderer() {\n\t\tif (!this.usingExternalRenderer) {\n\t\t\tconst renderDimensions = new THREE.Vector2();\n\t\t\tthis.getRenderDimensions(renderDimensions);\n\n\t\t\tthis.renderer = new THREE.WebGLRenderer({\n\t\t\t\tantialias: false,\n\t\t\t\tprecision: \"highp\",\n\t\t\t});\n\t\t\tthis.renderer.setPixelRatio(this.devicePixelRatio);\n\t\t\tthis.renderer.autoClear = true;\n\t\t\tthis.renderer.setClearColor(new THREE.Color(0x000000), 0.0);\n\t\t\tthis.renderer.setSize(renderDimensions.x, renderDimensions.y);\n\n\t\t\tthis.resizeObserver = new ResizeObserver(() => {\n\t\t\t\tthis.getRenderDimensions(renderDimensions);\n\t\t\t\tthis.renderer.setSize(renderDimensions.x, renderDimensions.y);\n\t\t\t\tthis.forceRenderNextFrame();\n\t\t\t});\n\t\t\tthis.resizeObserver.observe(this.rootElement);\n\t\t\tthis.rootElement.appendChild(this.renderer.domElement);\n\t\t}\n\t}\n\n\tsetupWebXR(webXRSessionInit) {\n\t\tif (this.webXRMode) {\n\t\t\tif (this.webXRMode === WebXRMode.VR) {\n\t\t\t\tthis.rootElement.appendChild(VRButton.createButton(this.renderer, webXRSessionInit));\n\t\t\t} else if (this.webXRMode === WebXRMode.AR) {\n\t\t\t\tthis.rootElement.appendChild(ARButton.createButton(this.renderer, webXRSessionInit));\n\t\t\t}\n\t\t\tthis.renderer.xr.addEventListener(\"sessionstart\", () => {\n\t\t\t\tthis.webXRActive = true;\n\t\t\t});\n\t\t\tthis.renderer.xr.addEventListener(\"sessionend\", () => {\n\t\t\t\tthis.webXRActive = false;\n\t\t\t});\n\t\t\tthis.renderer.xr.enabled = true;\n\t\t\tthis.camera.position.copy(this.initialCameraPosition);\n\t\t\tthis.camera.up.copy(this.cameraUp).normalize();\n\t\t\tthis.camera.lookAt(this.initialCameraLookAt);\n\t\t}\n\t}\n\n\tsetupControls() {\n\t\tif (this.useBuiltInControls && this.webXRMode === WebXRMode.None) {\n\t\t\tif (!this.usingExternalCamera) {\n\t\t\t\tthis.perspectiveControls = new OrbitControls(this.perspectiveCamera, this.renderer.domElement);\n\t\t\t\tthis.orthographicControls = new OrbitControls(this.orthographicCamera, this.renderer.domElement);\n\t\t\t} else {\n\t\t\t\tif (this.camera.isOrthographicCamera) {\n\t\t\t\t\tthis.orthographicControls = new OrbitControls(this.camera, this.renderer.domElement);\n\t\t\t\t} else {\n\t\t\t\t\tthis.perspectiveControls = new OrbitControls(this.camera, this.renderer.domElement);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (let controls of [this.orthographicControls, this.perspectiveControls]) {\n\t\t\t\tif (controls) {\n\t\t\t\t\tcontrols.listenToKeyEvents(window);\n\t\t\t\t\tcontrols.rotateSpeed = 0.5;\n\t\t\t\t\tcontrols.maxPolarAngle = Math.PI * 0.75;\n\t\t\t\t\tcontrols.minPolarAngle = 0.1;\n\t\t\t\t\tcontrols.enableDamping = true;\n\t\t\t\t\tcontrols.dampingFactor = 0.05;\n\t\t\t\t\tcontrols.target.copy(this.initialCameraLookAt);\n\t\t\t\t\tcontrols.enableFocalPointOrbit = this.orbitAroundFocalPoint;\n\t\t\t\t\tcontrols.update();\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.controls = this.camera.isOrthographicCamera ? this.orthographicControls : this.perspectiveControls;\n\t\t\tthis.controls.update();\n\t\t}\n\t}\n\n\tsetupEventHandlers() {\n\t\tif (this.useBuiltInControls && this.webXRMode === WebXRMode.None) {\n\t\t\t// Remove previous listener assignments using .bind(this) directly here if they existed\n\t\t\t// Now use the already bound methods from the constructor\n\t\t\tthis.renderer.domElement.addEventListener(\"pointermove\", this.onMouseMove, false);\n\t\t\tthis.renderer.domElement.addEventListener(\"pointerdown\", this.onMouseDown, false);\n\t\t\tthis.renderer.domElement.addEventListener(\"pointerup\", this.onMouseUp, false); // Ensure this is added\n\t\t\twindow.addEventListener(\"keydown\", this.onKeyDown, false); // Use the bound method directly\n\t\t}\n\t}\n\n\tremoveEventHandlers() {\n\t\tif (this.useBuiltInControls) {\n\t\t\tthis.renderer.domElement.removeEventListener(\"pointermove\", this.mouseMoveListener);\n\t\t\tthis.mouseMoveListener = null;\n\t\t\tthis.renderer.domElement.removeEventListener(\"pointerdown\", this.mouseDownListener);\n\t\t\tthis.mouseDownListener = null;\n\t\t\tthis.renderer.domElement.removeEventListener(\"pointerup\", this.mouseUpListener);\n\t\t\tthis.mouseUpListener = null;\n\t\t\twindow.removeEventListener(\"keydown\", this.keyDownListener);\n\t\t\tthis.keyDownListener = null;\n\t\t}\n\t}\n\n\tsetRenderMode(renderMode) {\n\t\tthis.renderMode = renderMode;\n\t}\n\n\tsetActiveSphericalHarmonicsDegrees(activeSphericalHarmonicsDegrees) {\n\t\tthis.splatMesh.material.uniforms.sphericalHarmonicsDegree.value = activeSphericalHarmonicsDegrees;\n\t\tthis.splatMesh.material.uniformsNeedUpdate = true;\n\t}\n\n\tonSplatMeshChanged(callback) {\n\t\tthis.onSplatMeshChangedCallback = callback;\n\t}\n\n\ttoggleUIVisibility() {\n\t\tthis._uiVisible = this._uiVisible === undefined ? false : !this._uiVisible;\n\n\t\t// Hide/show all UI components\n\t\tif (this.controlsUI) {\n\t\t\tthis._uiVisible ? this.controlsUI.show() : this.controlsUI.hide();\n\t\t}\n\n\t\tif (this.presetsUI) {\n\t\t\tthis._uiVisible ? this.presetsUI.show() : this.presetsUI.hide();\n\t\t}\n\n\t\tif (this.gsVisionLogo) {\n\t\t\t// Now we can use the show/hide methods\n\t\t\tthis._uiVisible ? this.gsVisionLogo.show() : this.gsVisionLogo.hide();\n\t\t}\n\n\t\t// if (this.infoPanel) {\n\t\t//     this._uiVisible ? this.infoPanel.show() : this.infoPanel.hide();\n\t\t// }\n\n\t\t// Force a render to update the display\n\t\tthis.forceRenderNextFrame();\n\t}\n\n\tonKeyDown(e) {\n\t\t// No IIFE needed\n\n\t\t// Helper defined directly inside the method\n\t\tconst isEventTargetInLabelModal = (target) => {\n\t\t\t// 'this' inside this arrow function correctly refers to the Viewer instance\n\t\t\t// because it captures 'this' from the onKeyDown method's scope,\n\t\t\t// and onKeyDown itself is bound to the Viewer instance.\n\n\t\t\t// --- Add a safety check AND logging ---\n\t\t\tif (!this.labelsManager) {\n\t\t\t\tconsole.warn(\"isEventTargetInLabelModal check skipped: this.labelsManager is not defined yet.\");\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (!this.labelsManager.editUI) {\n\t\t\t\tconsole.warn(\"isEventTargetInLabelModal check skipped: this.labelsManager.editUI is not defined.\");\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// --- End safety check ---\n\n\t\t\treturn this.labelsManager.editUI.contains(target);\n\t\t};\n\n\t\tconst target = e.target; // Get the target element\n\n\t\t// --- The rest of the logic ---\n\t\tif (isEventTargetInLabelModal(target)) {\n\t\t\tif (\n\t\t\t\ttarget instanceof HTMLInputElement ||\n\t\t\t\ttarget instanceof HTMLTextAreaElement ||\n\t\t\t\ttarget instanceof HTMLSelectElement ||\n\t\t\t\ttarget.isContentEditable\n\t\t\t) {\n\t\t\t\tconsole.log(\"Keydown target is input in modal, Viewer ignores.\");\n\t\t\t\treturn; // Explicitly return and do nothing else\n\t\t\t}\n\t\t\t// If it's inside the modal but NOT an input (e.g., a button),\n\t\t\t// let the code proceed to the keyboardInputActive check.\n\t\t}\n\n\t\t// ----- PRIORITY 2: Global Viewer Keyboard Input Disabled -----\n\t\t// This is your existing check for when the modal is open but focus might be elsewhere\n\t\tif (!this.keyboardInputActive) {\n\t\t\tconsole.log(\n\t\t\t\t\"Keyboard input not active (modal likely open, focus not on input), skipping viewer handler.\",\n\t\t\t);\n\t\t\t// Don't preventDefault here; maybe the modal itself needs the key (like Escape)\n\t\t\treturn;\n\t\t}\n\n\t\tconsole.log(\"Processing viewer keydown:\", e.code);\n\n\t\tconst forward = new THREE.Vector3(0, 0, -1);\n\t\tforward.transformDirection(this.camera.matrixWorld);\n\t\tconst tempMatrixLeft = new THREE.Matrix4().makeRotationAxis(forward, Math.PI / 128);\n\t\tconst tempMatrixRight = new THREE.Matrix4().makeRotationAxis(forward, -Math.PI / 128);\n\n\t\tlet preventDefault = false;\n\n\t\tswitch (e.code) {\n\t\t\tcase \"KeyG\":\n\t\t\t\tthis.focalAdjustment += 0.02;\n\t\t\t\tthis.forceRenderNextFrame();\n\t\t\t\tbreak;\n\t\t\tcase \"KeyF\":\n\t\t\t\tthis.focalAdjustment -= 0.02;\n\t\t\t\tthis.forceRenderNextFrame();\n\t\t\t\tbreak;\n\t\t\tcase \"ArrowLeft\":\n\t\t\t\tthis.camera.up.transformDirection(tempMatrixLeft);\n\t\t\t\tbreak;\n\t\t\tcase \"ArrowRight\":\n\t\t\t\tthis.camera.up.transformDirection(tempMatrixRight);\n\t\t\t\tbreak;\n\t\t\tcase \"KeyC\":\n\t\t\t\tthis.showMeshCursor = !this.showMeshCursor;\n\t\t\t\tbreak;\n\t\t\tcase \"KeyU\":\n\t\t\t\tthis.showControlPlane = !this.showControlPlane;\n\t\t\t\tbreak;\n\t\t\tcase \"KeyI\":\n\t\t\t\tthis.showInfo = !this.showInfo;\n\t\t\t\tif (this.showInfo) {\n\t\t\t\t\tthis.infoPanel.show();\n\t\t\t\t} else {\n\t\t\t\t\tthis.infoPanel.hide();\n\t\t\t\t}\n\t\t\t\t// Update UI toggle state\n\t\t\t\tif (this.controlsUI) this.controlsUI.updateToggleState(\"KeyI\", this.showInfo);\n\t\t\t\tbreak;\n\t\t\tcase \"KeyO\":\n\t\t\t\tif (!this.usingExternalCamera) {\n\t\t\t\t\tthis.setOrthographicMode(!this.camera.isOrthographicCamera);\n\t\t\t\t\t// Update UI toggle state\n\t\t\t\t\tif (this.controlsUI) this.controlsUI.updateToggleState(\"KeyO\", this.camera.isOrthographicCamera);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"KeyP\":\n\t\t\t\tif (!this.usingExternalCamera) {\n\t\t\t\t\tthis.splatMesh.setPointCloudModeEnabled(!this.splatMesh.getPointCloudModeEnabled());\n\t\t\t\t\t// Update UI toggle state\n\t\t\t\t\tif (this.controlsUI) {\n\t\t\t\t\t\tthis.controlsUI.updateToggleState(\"KeyP\", this.splatMesh.getPointCloudModeEnabled());\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"Equal\":\n\t\t\t\tif (!this.usingExternalCamera) {\n\t\t\t\t\tthis.splatMesh.setSplatScale(this.splatMesh.getSplatScale() + 0.05);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"Minus\":\n\t\t\t\tif (!this.usingExternalCamera) {\n\t\t\t\t\tthis.splatMesh.setSplatScale(Math.max(this.splatMesh.getSplatScale() - 0.05, 0.0));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"KeyZ\":\n\t\t\t\tthis.toggleOrbitMode();\n\t\t\t\t// Update UI toggle state\n\t\t\t\tif (this.controlsUI) this.controlsUI.updateToggleState(\"KeyZ\", this.orbitAroundFocalPoint);\n\t\t\t\tbreak;\n\t\t\tcase \"F1\":\n\t\t\t\tthis.toggleUIVisibility();\n\t\t\t\tpreventDefault = true;\n\t\t\t\tbreak;\n\n\t\t\tcase \"KeyL\":\n\t\t\t\tif (this.labelsManager && this.role === \"admin\") {\n\t\t\t\t\tconst editMode = this.labelsManager.toggleEditMode();\n\t\t\t\t\tif (editMode && !this.showMeshCursor) {\n\t\t\t\t\t\tthis.showMeshCursor = true;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn(\"KeyL pressed, but labelsManager not ready or no access.\");\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"KeyN\":\n\t\t\t\t// Create new label at mesh cursor\n\t\t\t\tif (\n\t\t\t\t\tthis.labelsManager &&\n\t\t\t\t\tthis.labelsManager.editMode &&\n\t\t\t\t\tthis.showMeshCursor &&\n\t\t\t\t\tthis.role === \"admin\"\n\t\t\t\t) {\n\t\t\t\t\tthis.labelsManager.createLabelAtCursor();\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\"KeyN pressed, but conditions not met (labelsManager ready? editMode active? cursor visible? admin mode?).\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t\tif (preventDefault) {\n\t\t\te.preventDefault();\n\t\t}\n\t}\n\n\tonMouseMove(mouse) {\n\t\tthis.mousePosition.set(mouse.offsetX, mouse.offsetY);\n\t}\n\n\tsetupControlsIntegration() {\n\t\tif (!this.controlsUI) return;\n\n\t\t// Initial states - only set if the relevant properties exist\n\t\tif (this.orbitAroundFocalPoint !== undefined) {\n\t\t\tthis.controlsUI.updateToggleState(\"KeyZ\", this.orbitAroundFocalPoint);\n\t\t}\n\n\t\tif (this.camera) {\n\t\t\tthis.controlsUI.updateToggleState(\"KeyO\", this.camera.isOrthographicCamera);\n\t\t}\n\n\t\tif (this.splatMesh && typeof this.splatMesh.getPointCloudModeEnabled === \"function\") {\n\t\t\tthis.controlsUI.updateToggleState(\"KeyP\", this.splatMesh.getPointCloudModeEnabled());\n\t\t}\n\n\t\tif (this.showInfo !== undefined) {\n\t\t\tthis.controlsUI.updateToggleState(\"KeyI\", this.showInfo);\n\t\t}\n\t}\n\n\tonMouseDown() {\n\t\tthis.mouseDownPosition.copy(this.mousePosition);\n\t\tthis.mouseDownTime = getCurrentTime();\n\t}\n\n\tonMouseUp = (function () {\n\t\tconst clickOffset = new THREE.Vector2();\n\n\t\treturn function (mouse) {\n\t\t\tclickOffset.copy(this.mousePosition).sub(this.mouseDownPosition);\n\t\t\tconst mouseUpTime = getCurrentTime();\n\t\t\tconst wasClick = mouseUpTime - this.mouseDownTime < 0.5 && clickOffset.length() < 2;\n\t\t\tif (wasClick) {\n\t\t\t\tthis.onMouseClick(mouse);\n\t\t\t}\n\t\t};\n\t})();\n\n\tonMouseClick(mouse) {\n\t\tthis.mousePosition.set(mouse.offsetX, mouse.offsetY);\n\t\tthis.checkForFocalPointChange();\n\t}\n\n\tcheckForFocalPointChange = (function () {\n\t\tconst renderDimensions = new THREE.Vector2();\n\t\tconst toNewFocalPoint = new THREE.Vector3();\n\t\tconst outHits = [];\n\n\t\treturn function () {\n\t\t\tif (!this.orbitAroundFocalPoint) return;\n\n\t\t\tif (!this.transitioningCameraTarget) {\n\t\t\t\tthis.getRenderDimensions(renderDimensions);\n\t\t\t\toutHits.length = 0;\n\t\t\t\tthis.raycaster.setFromCameraAndScreenPosition(this.camera, this.mousePosition, renderDimensions);\n\t\t\t\tthis.raycaster.intersectSplatMesh(this.splatMesh, outHits);\n\t\t\t\tif (outHits.length > 0) {\n\t\t\t\t\tconst hit = outHits[0];\n\t\t\t\t\tconst intersectionPoint = hit.origin;\n\t\t\t\t\ttoNewFocalPoint.copy(intersectionPoint).sub(this.camera.position);\n\t\t\t\t\tif (toNewFocalPoint.length() > MINIMUM_DISTANCE_TO_NEW_FOCAL_POINT) {\n\t\t\t\t\t\tthis.previousCameraTarget.copy(this.controls.target);\n\t\t\t\t\t\tthis.nextCameraTarget.copy(intersectionPoint);\n\t\t\t\t\t\tthis.transitioningCameraTarget = true;\n\t\t\t\t\t\tthis.transitioningCameraTargetStartTime = getCurrentTime();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t})();\n\n\tgetRenderDimensions(outDimensions) {\n\t\tif (this.rootElement) {\n\t\t\toutDimensions.x = this.rootElement.offsetWidth;\n\t\t\toutDimensions.y = this.rootElement.offsetHeight;\n\t\t} else {\n\t\t\tthis.renderer.getSize(outDimensions);\n\t\t}\n\t}\n\n\tsetOrthographicMode(orthographicMode) {\n\t\tif (orthographicMode === this.camera.isOrthographicCamera) return;\n\t\tconst fromCamera = this.camera;\n\t\tconst toCamera = orthographicMode ? this.orthographicCamera : this.perspectiveCamera;\n\t\ttoCamera.position.copy(fromCamera.position);\n\t\ttoCamera.up.copy(fromCamera.up);\n\t\ttoCamera.rotation.copy(fromCamera.rotation);\n\t\ttoCamera.quaternion.copy(fromCamera.quaternion);\n\t\ttoCamera.matrix.copy(fromCamera.matrix);\n\t\tthis.camera = toCamera;\n\n\t\tif (this.controls) {\n\t\t\tconst resetControls = (controls) => {\n\t\t\t\tcontrols.saveState();\n\t\t\t\tcontrols.reset();\n\t\t\t};\n\n\t\t\tconst fromControls = this.controls;\n\t\t\tconst toControls = orthographicMode ? this.orthographicControls : this.perspectiveControls;\n\n\t\t\tresetControls(toControls);\n\t\t\tresetControls(fromControls);\n\n\t\t\ttoControls.target.copy(fromControls.target);\n\t\t\tif (orthographicMode) {\n\t\t\t\tViewer.setCameraZoomFromPosition(toCamera, fromCamera, fromControls);\n\t\t\t} else {\n\t\t\t\tViewer.setCameraPositionFromZoom(toCamera, fromCamera, toControls);\n\t\t\t}\n\t\t\tthis.controls = toControls;\n\t\t\tthis.camera.lookAt(this.controls.target);\n\t\t}\n\t}\n\n\tstatic setCameraPositionFromZoom = (function () {\n\t\tconst tempVector = new THREE.Vector3();\n\n\t\treturn function (positionCamera, zoomedCamera, controls) {\n\t\t\tconst toLookAtDistance = 1 / (zoomedCamera.zoom * 0.001);\n\t\t\ttempVector\n\t\t\t\t.copy(controls.target)\n\t\t\t\t.sub(positionCamera.position)\n\t\t\t\t.normalize()\n\t\t\t\t.multiplyScalar(toLookAtDistance)\n\t\t\t\t.negate();\n\t\t\tpositionCamera.position.copy(controls.target).add(tempVector);\n\t\t};\n\t})();\n\n\tstatic setCameraZoomFromPosition = (function () {\n\t\tconst tempVector = new THREE.Vector3();\n\n\t\treturn function (zoomCamera, positionZamera, controls) {\n\t\t\tconst toLookAtDistance = tempVector.copy(controls.target).sub(positionZamera.position).length();\n\t\t\tzoomCamera.zoom = 1 / (toLookAtDistance * 0.001);\n\t\t};\n\t})();\n\n\tupdateSplatMesh = (function () {\n\t\tconst renderDimensions = new THREE.Vector2();\n\n\t\treturn function () {\n\t\t\tif (!this.splatMesh) return;\n\t\t\tconst splatCount = this.splatMesh.getSplatCount();\n\t\t\tif (splatCount > 0) {\n\t\t\t\tthis.splatMesh.updateVisibleRegionFadeDistance(this.sceneRevealMode);\n\t\t\t\tthis.splatMesh.updateTransforms();\n\t\t\t\tthis.getRenderDimensions(renderDimensions);\n\t\t\t\tconst focalLengthX =\n\t\t\t\t\tthis.camera.projectionMatrix.elements[0] * 0.5 * this.devicePixelRatio * renderDimensions.x;\n\t\t\t\tconst focalLengthY =\n\t\t\t\t\tthis.camera.projectionMatrix.elements[5] * 0.5 * this.devicePixelRatio * renderDimensions.y;\n\n\t\t\t\tconst focalMultiplier = this.camera.isOrthographicCamera ? 1.0 / this.devicePixelRatio : 1.0;\n\t\t\t\tconst focalAdjustment = this.focalAdjustment * focalMultiplier;\n\t\t\t\tconst inverseFocalAdjustment = 1.0 / focalAdjustment;\n\n\t\t\t\tthis.adjustForWebXRStereo(renderDimensions);\n\t\t\t\tthis.splatMesh.updateUniforms(\n\t\t\t\t\trenderDimensions,\n\t\t\t\t\tfocalLengthX * focalAdjustment,\n\t\t\t\t\tfocalLengthY * focalAdjustment,\n\t\t\t\t\tthis.camera.isOrthographicCamera,\n\t\t\t\t\tthis.camera.zoom || 1.0,\n\t\t\t\t\tinverseFocalAdjustment,\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\t})();\n\n\tadjustForWebXRStereo(renderDimensions) {\n\t\t// TODO: Figure out a less hacky way to determine if stereo rendering is active\n\t\tif (this.camera && this.webXRActive) {\n\t\t\tconst xrCamera = this.renderer.xr.getCamera();\n\t\t\tconst xrCameraProj00 = xrCamera.projectionMatrix.elements[0];\n\t\t\tconst cameraProj00 = this.camera.projectionMatrix.elements[0];\n\t\t\trenderDimensions.x *= cameraProj00 / xrCameraProj00;\n\t\t}\n\t}\n\n\tisLoadingOrUnloading() {\n\t\treturn (\n\t\t\tObject.keys(this.splatSceneDownloadPromises).length > 0 ||\n\t\t\tthis.splatSceneDownloadAndBuildPromise !== null ||\n\t\t\tthis.splatSceneRemovalPromise !== null\n\t\t);\n\t}\n\n\tisDisposingOrDisposed() {}\n\n\taddSplatSceneDownloadPromise(promise) {\n\t\tthis.splatSceneDownloadPromises[promise.id] = promise;\n\t}\n\n\tremoveSplatSceneDownloadPromise(promise) {\n\t\tdelete this.splatSceneDownloadPromises[promise.id];\n\t}\n\n\tsetSplatSceneDownloadAndBuildPromise(promise) {\n\t\tthis.splatSceneDownloadAndBuildPromise = promise;\n\t}\n\n\tclearSplatSceneDownloadAndBuildPromise() {\n\t\tthis.splatSceneDownloadAndBuildPromise = null;\n\t}\n\n\t/**\n\t * Add a splat scene to the viewer and display any loading UI if appropriate.\n\t * @param {string} path Path to splat scene to be loaded\n\t * @param {object} options {\n\t *\n\t *         splatAlphaRemovalThreshold: Ignore any splats with an alpha less than the specified\n\t *                                     value (valid range: 0 - 255), defaults to 1\n\t *\n\t *         showLoadingUI:         Display a loading spinner while the scene is loading, defaults to true\n\t *\n\t *         position (Array<number>):   Position of the scene, acts as an offset from its default position, defaults to [0, 0, 0]\n\t *\n\t *         rotation (Array<number>):   Rotation of the scene represented as a quaternion, defaults to [0, 0, 0, 1]\n\t *\n\t *         scale (Array<number>):      Scene's scale, defaults to [1, 1, 1]\n\t *\n\t *         onProgress:                 Function to be called as file data are received, or other processing occurs\n\t *\n\t *         headers:                    Optional HTTP headers to be sent along with splat requests\n\t * }\n\t * @return {AbortablePromise}\n\t */\n\taddSplatScene(path, options = {}) {\n\t\tif (this.isLoadingOrUnloading()) {\n\t\t\tthrow new Error(\"Cannot add splat scene while another load or unload is already in progress.\");\n\t\t}\n\n\t\tif (this.isDisposingOrDisposed()) {\n\t\t\tthrow new Error(\"Cannot add splat scene after dispose() is called.\");\n\t\t}\n\n\t\tif (options.progressiveLoad && this.splatMesh.scenes && this.splatMesh.scenes.length > 0) {\n\t\t\tconsole.log(\"addSplatScene(): 'progressiveLoad' option ignore because there are multiple splat scenes\");\n\t\t\toptions.progressiveLoad = false;\n\t\t}\n\n\t\tconst format =\n\t\t\toptions.format !== undefined && options.format !== null ? options.format : sceneFormatFromPath(path);\n\t\tconst progressiveLoad = Viewer.isProgressivelyLoadable(format) && options.progressiveLoad;\n\t\tconst showLoadingUI =\n\t\t\toptions.showLoadingUI !== undefined && options.showLoadingUI !== null ? options.showLoadingUI : true;\n\n\t\tlet loadingUITaskId = null;\n\t\tif (showLoadingUI) {\n\t\t\tthis.loadingSpinner.removeAllTasks();\n\t\t\tloadingUITaskId = this.loadingSpinner.addTask(\"Downloading...\");\n\t\t}\n\t\tconst hideLoadingUI = () => {\n\t\t\tthis.loadingProgressBar.hide();\n\t\t\tthis.loadingSpinner.removeAllTasks();\n\t\t};\n\n\t\tconst onProgressUIUpdate = (percentComplete, percentCompleteLabel, loaderStatus) => {\n\t\t\tif (showLoadingUI) {\n\t\t\t\tif (loaderStatus === LoaderStatus.Downloading) {\n\t\t\t\t\tif (percentComplete == 100) {\n\t\t\t\t\t\tthis.loadingSpinner.setMessageForTask(loadingUITaskId, \"Download complete!\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (progressiveLoad) {\n\t\t\t\t\t\t\tthis.loadingSpinner.setMessageForTask(loadingUITaskId, \"Downloading splats...\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst suffix = percentCompleteLabel ? `: ${percentCompleteLabel}` : \"...\";\n\t\t\t\t\t\t\tthis.loadingSpinner.setMessageForTask(loadingUITaskId, `Downloading${suffix}`);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (loaderStatus === LoaderStatus.Processing) {\n\t\t\t\t\tthis.loadingSpinner.setMessageForTask(loadingUITaskId, \"Processing splats...\");\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tlet downloadDone = false;\n\t\tlet downloadedPercentage = 0;\n\t\tconst splatBuffersAddedUIUpdate = (firstBuild, finalBuild) => {\n\t\t\tif (showLoadingUI) {\n\t\t\t\tif ((firstBuild && progressiveLoad) || (finalBuild && !progressiveLoad)) {\n\t\t\t\t\tthis.loadingSpinner.removeTask(loadingUITaskId);\n\t\t\t\t\tif (!finalBuild && !downloadDone) this.loadingProgressBar.show();\n\t\t\t\t}\n\t\t\t\tif (progressiveLoad) {\n\t\t\t\t\tif (finalBuild) {\n\t\t\t\t\t\tdownloadDone = true;\n\t\t\t\t\t\tthis.loadingProgressBar.hide();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.loadingProgressBar.setProgress(downloadedPercentage);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tconst onProgress = (percentComplete, percentCompleteLabel, loaderStatus) => {\n\t\t\tdownloadedPercentage = percentComplete;\n\t\t\tonProgressUIUpdate(percentComplete, percentCompleteLabel, loaderStatus);\n\t\t\tif (options.onProgress) options.onProgress(percentComplete, percentCompleteLabel, loaderStatus);\n\t\t};\n\n\t\tconst buildSection = (splatBuffer, firstBuild, finalBuild) => {\n\t\t\tif (!progressiveLoad && options.onProgress) options.onProgress(0, \"0%\", LoaderStatus.Processing);\n\t\t\tconst addSplatBufferOptions = {\n\t\t\t\trotation: options.rotation || options.orientation,\n\t\t\t\tposition: options.position,\n\t\t\t\tscale: options.scale,\n\t\t\t\tsplatAlphaRemovalThreshold: options.splatAlphaRemovalThreshold,\n\t\t\t};\n\t\t\treturn this.addSplatBuffers(\n\t\t\t\t[splatBuffer],\n\t\t\t\t[addSplatBufferOptions],\n\t\t\t\tfinalBuild,\n\t\t\t\tfirstBuild && showLoadingUI,\n\t\t\t\tshowLoadingUI,\n\t\t\t\tprogressiveLoad,\n\t\t\t\tprogressiveLoad,\n\t\t\t).then(() => {\n\t\t\t\tif (!progressiveLoad && options.onProgress) options.onProgress(100, \"100%\", LoaderStatus.Processing);\n\t\t\t\tsplatBuffersAddedUIUpdate(firstBuild, finalBuild);\n\t\t\t});\n\t\t};\n\n\t\tconst loadFunc = progressiveLoad\n\t\t\t? this.downloadAndBuildSingleSplatSceneProgressiveLoad.bind(this)\n\t\t\t: this.downloadAndBuildSingleSplatSceneStandardLoad.bind(this);\n\t\treturn loadFunc(\n\t\t\tpath,\n\t\t\tformat,\n\t\t\toptions.splatAlphaRemovalThreshold,\n\t\t\tbuildSection.bind(this),\n\t\t\tonProgress,\n\t\t\thideLoadingUI.bind(this),\n\t\t\toptions.headers,\n\t\t);\n\t}\n\n\t/**\n\t * Download a single splat scene, convert to splat buffer and then rebuild the viewer's splat mesh\n\t * by calling 'buildFunc' -- all before displaying the scene. Also sets/clears relevant instance synchronization objects,\n\t * and calls appropriate functions on success or failure.\n\t * @param {string} path Path to splat scene to be loaded\n\t * @param {SceneFormat} format Format of the splat scene file\n\t * @param {number} splatAlphaRemovalThreshold Ignore any splats with an alpha less than the specified value (valid range: 0 - 255)\n\t * @param {function} buildFunc Function to build the viewer's splat mesh with the downloaded splat buffer\n\t * @param {function} onProgress Function to be called as file data are received, or other processing occurs\n\t * @param {function} onException Function to be called when exception occurs\n\t * @param {object} headers Optional HTTP headers to pass to use for downloading splat scene\n\t * @return {AbortablePromise}\n\t */\n\tdownloadAndBuildSingleSplatSceneStandardLoad(\n\t\tpath,\n\t\tformat,\n\t\tsplatAlphaRemovalThreshold,\n\t\tbuildFunc,\n\t\tonProgress,\n\t\tonException,\n\t\theaders,\n\t) {\n\t\tconst downloadPromise = this.downloadSplatSceneToSplatBuffer(\n\t\t\tpath,\n\t\t\tsplatAlphaRemovalThreshold,\n\t\t\tonProgress,\n\t\t\tfalse,\n\t\t\tundefined,\n\t\t\tformat,\n\t\t\theaders,\n\t\t);\n\t\tconst downloadAndBuildPromise = abortablePromiseWithExtractedComponents(downloadPromise.abortHandler);\n\n\t\tdownloadPromise\n\t\t\t.then((splatBuffer) => {\n\t\t\t\tthis.removeSplatSceneDownloadPromise(downloadPromise);\n\t\t\t\treturn buildFunc(splatBuffer, true, true).then(() => {\n\t\t\t\t\tdownloadAndBuildPromise.resolve();\n\t\t\t\t\tthis.clearSplatSceneDownloadAndBuildPromise();\n\t\t\t\t});\n\t\t\t})\n\t\t\t.catch((e) => {\n\t\t\t\tif (onException) onException();\n\t\t\t\tthis.clearSplatSceneDownloadAndBuildPromise();\n\t\t\t\tthis.removeSplatSceneDownloadPromise(downloadPromise);\n\t\t\t\tdownloadAndBuildPromise.reject(\n\t\t\t\t\tthis.updateError(e, `Viewer::addSplatScene -> Could not load file ${path}`),\n\t\t\t\t);\n\t\t\t});\n\n\t\tthis.addSplatSceneDownloadPromise(downloadPromise);\n\t\tthis.setSplatSceneDownloadAndBuildPromise(downloadAndBuildPromise.promise);\n\n\t\treturn downloadAndBuildPromise.promise;\n\t}\n\n\t/**\n\t * Download a single splat scene and convert to splat buffer in a progressive manner, allowing rendering as the file downloads.\n\t * As each section is downloaded, the viewer's splat mesh is rebuilt by calling 'buildFunc'\n\t * Also sets/clears relevant instance synchronization objects, and calls appropriate functions on success or failure.\n\t * @param {string} path Path to splat scene to be loaded\n\t * @param {SceneFormat} format Format of the splat scene file\n\t * @param {number} splatAlphaRemovalThreshold Ignore any splats with an alpha less than the specified value (valid range: 0 - 255)\n\t * @param {function} buildFunc Function to rebuild the viewer's splat mesh after a new splat buffer section is downloaded\n\t * @param {function} onDownloadProgress Function to be called as file data are received\n\t * @param {function} onDownloadException Function to be called when exception occurs at any point during the full download\n\t * @param {object} headers Optional HTTP headers to pass to use for downloading splat scene\n\t * @return {AbortablePromise}\n\t */\n\tdownloadAndBuildSingleSplatSceneProgressiveLoad(\n\t\tpath,\n\t\tformat,\n\t\tsplatAlphaRemovalThreshold,\n\t\tbuildFunc,\n\t\tonDownloadProgress,\n\t\tonDownloadException,\n\t\theaders,\n\t) {\n\t\tlet progressiveLoadedSectionBuildCount = 0;\n\t\tlet progressiveLoadedSectionBuilding = false;\n\t\tconst queuedProgressiveLoadSectionBuilds = [];\n\n\t\tconst checkAndBuildProgressiveLoadSections = () => {\n\t\t\tif (\n\t\t\t\tqueuedProgressiveLoadSectionBuilds.length > 0 &&\n\t\t\t\t!progressiveLoadedSectionBuilding &&\n\t\t\t\t!this.isDisposingOrDisposed()\n\t\t\t) {\n\t\t\t\tprogressiveLoadedSectionBuilding = true;\n\t\t\t\tconst queuedBuild = queuedProgressiveLoadSectionBuilds.shift();\n\t\t\t\tbuildFunc(queuedBuild.splatBuffer, queuedBuild.firstBuild, queuedBuild.finalBuild).then(() => {\n\t\t\t\t\tprogressiveLoadedSectionBuilding = false;\n\t\t\t\t\tif (queuedBuild.firstBuild) {\n\t\t\t\t\t\tprogressiveLoadFirstSectionBuildPromise.resolve();\n\t\t\t\t\t} else if (queuedBuild.finalBuild) {\n\t\t\t\t\t\t// For progressive loading, we don't immediately show UI here\n\t\t\t\t\t\t// The UI will be shown after optimization completes in onSplatTreeReady\n\t\t\t\t\t\tsplatSceneDownloadAndBuildPromise.resolve();\n\t\t\t\t\t\tthis.clearSplatSceneDownloadAndBuildPromise();\n\t\t\t\t\t}\n\t\t\t\t\tif (queuedProgressiveLoadSectionBuilds.length > 0) {\n\t\t\t\t\t\tdelayedExecute(() => checkAndBuildProgressiveLoadSections());\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tconst onProgressiveLoadSectionProgress = (splatBuffer, finalBuild) => {\n\t\t\tif (!this.isDisposingOrDisposed()) {\n\t\t\t\tif (\n\t\t\t\t\tfinalBuild ||\n\t\t\t\t\tqueuedProgressiveLoadSectionBuilds.length === 0 ||\n\t\t\t\t\tsplatBuffer.getSplatCount() > queuedProgressiveLoadSectionBuilds[0].splatBuffer.getSplatCount()\n\t\t\t\t) {\n\t\t\t\t\tqueuedProgressiveLoadSectionBuilds.push({\n\t\t\t\t\t\tsplatBuffer,\n\t\t\t\t\t\tfirstBuild: progressiveLoadedSectionBuildCount === 0,\n\t\t\t\t\t\tfinalBuild,\n\t\t\t\t\t});\n\t\t\t\t\tprogressiveLoadedSectionBuildCount++;\n\t\t\t\t\tcheckAndBuildProgressiveLoadSections();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tconst splatSceneDownloadPromise = this.downloadSplatSceneToSplatBuffer(\n\t\t\tpath,\n\t\t\tsplatAlphaRemovalThreshold,\n\t\t\tonDownloadProgress,\n\t\t\ttrue,\n\t\t\tonProgressiveLoadSectionProgress,\n\t\t\tformat,\n\t\t\theaders,\n\t\t);\n\n\t\tconst progressiveLoadFirstSectionBuildPromise = abortablePromiseWithExtractedComponents(\n\t\t\tsplatSceneDownloadPromise.abortHandler,\n\t\t);\n\t\tconst splatSceneDownloadAndBuildPromise = abortablePromiseWithExtractedComponents();\n\n\t\tthis.addSplatSceneDownloadPromise(splatSceneDownloadPromise);\n\t\tthis.setSplatSceneDownloadAndBuildPromise(splatSceneDownloadAndBuildPromise.promise);\n\n\t\tsplatSceneDownloadPromise\n\t\t\t.then(() => {\n\t\t\t\tthis.removeSplatSceneDownloadPromise(splatSceneDownloadPromise);\n\t\t\t})\n\t\t\t.catch((e) => {\n\t\t\t\tthis.clearSplatSceneDownloadAndBuildPromise();\n\t\t\t\tthis.removeSplatSceneDownloadPromise(splatSceneDownloadPromise);\n\t\t\t\tconst error = this.updateError(e, \"Viewer::addSplatScene -> Could not load one or more scenes\");\n\t\t\t\tprogressiveLoadFirstSectionBuildPromise.reject(error);\n\t\t\t\tif (onDownloadException) onDownloadException(error);\n\t\t\t});\n\n\t\treturn progressiveLoadFirstSectionBuildPromise.promise;\n\t}\n\n\t/**\n\t * Add multiple splat scenes to the viewer and display any loading UI if appropriate.\n\t * @param {Array<object>} sceneOptions Array of per-scene options: {\n\t *\n\t *         path: Path to splat scene to be loaded\n\t *\n\t *         splatAlphaRemovalThreshold: Ignore any splats with an alpha less than the specified\n\t *                                     value (valid range: 0 - 255), defaults to 1\n\t *\n\t *         position (Array<number>):   Position of the scene, acts as an offset from its default position, defaults to [0, 0, 0]\n\t *\n\t *         rotation (Array<number>):   Rotation of the scene represented as a quaternion, defaults to [0, 0, 0, 1]\n\t *\n\t *         scale (Array<number>):      Scene's scale, defaults to [1, 1, 1]\n\t *\n\t *         headers:                    Optional HTTP headers to be sent along with splat requests\n\t *\n\t *         format (SceneFormat)        Optional, the format of the scene data (.ply, .ksplat, .splat). If not present, the\n\t *                                     file extension in 'path' will be used to determine the format (if it is present)\n\t * }\n\t * @param {boolean} showLoadingUI Display a loading spinner while the scene is loading, defaults to true\n\t * @param {function} onProgress Function to be called as file data are received\n\t * @return {AbortablePromise}\n\t */\n\taddSplatScenes(sceneOptions, showLoadingUI = true, onProgress = undefined) {\n\t\tif (this.isLoadingOrUnloading()) {\n\t\t\tthrow new Error(\"Cannot add splat scene while another load or unload is already in progress.\");\n\t\t}\n\n\t\tif (this.isDisposingOrDisposed()) {\n\t\t\tthrow new Error(\"Cannot add splat scene after dispose() is called.\");\n\t\t}\n\n\t\tconst fileCount = sceneOptions.length;\n\t\tconst percentComplete = [];\n\n\t\tlet loadingUITaskId;\n\t\tif (showLoadingUI) {\n\t\t\tthis.loadingSpinner.removeAllTasks();\n\t\t\tloadingUITaskId = this.loadingSpinner.addTask(\"Downloading...\");\n\t\t}\n\n\t\tconst onLoadProgress = (fileIndex, percent, percentLabel, loaderStatus) => {\n\t\t\tpercentComplete[fileIndex] = percent;\n\t\t\tlet totalPercent = 0;\n\t\t\tfor (let i = 0; i < fileCount; i++) totalPercent += percentComplete[i] || 0;\n\t\t\ttotalPercent = totalPercent / fileCount;\n\t\t\tpercentLabel = `${totalPercent.toFixed(2)}%`;\n\t\t\tif (showLoadingUI) {\n\t\t\t\tif (loaderStatus === LoaderStatus.Downloading) {\n\t\t\t\t\tthis.loadingSpinner.setMessageForTask(\n\t\t\t\t\t\tloadingUITaskId,\n\t\t\t\t\t\ttotalPercent == 100 ? \"Download complete!\" : `Downloading: ${percentLabel}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (onProgress) onProgress(totalPercent, percentLabel, loaderStatus);\n\t\t};\n\n\t\tconst baseDownloadPromises = [];\n\t\tconst nativeDownloadPromises = [];\n\t\tfor (let i = 0; i < sceneOptions.length; i++) {\n\t\t\tconst options = sceneOptions[i];\n\t\t\tconst format =\n\t\t\t\toptions.format !== undefined && options.format !== null\n\t\t\t\t\t? options.format\n\t\t\t\t\t: sceneFormatFromPath(options.path);\n\t\t\tconst baseDownloadPromise = this.downloadSplatSceneToSplatBuffer(\n\t\t\t\toptions.path,\n\t\t\t\toptions.splatAlphaRemovalThreshold,\n\t\t\t\tonLoadProgress.bind(this, i),\n\t\t\t\tfalse,\n\t\t\t\tundefined,\n\t\t\t\tformat,\n\t\t\t\toptions.headers,\n\t\t\t);\n\t\t\tbaseDownloadPromises.push(baseDownloadPromise);\n\t\t\tnativeDownloadPromises.push(baseDownloadPromise.promise);\n\t\t}\n\n\t\tconst downloadAndBuildPromise = new AbortablePromise(\n\t\t\t(resolve, reject) => {\n\t\t\t\tPromise.all(nativeDownloadPromises)\n\t\t\t\t\t.then((splatBuffers) => {\n\t\t\t\t\t\tif (showLoadingUI) this.loadingSpinner.removeTask(loadingUITaskId);\n\t\t\t\t\t\tif (onProgress) onProgress(0, \"0%\", LoaderStatus.Processing);\n\t\t\t\t\t\tthis.addSplatBuffers(\n\t\t\t\t\t\t\tsplatBuffers,\n\t\t\t\t\t\t\tsceneOptions,\n\t\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t\tshowLoadingUI,\n\t\t\t\t\t\t\tshowLoadingUI,\n\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t).then(() => {\n\t\t\t\t\t\t\tif (onProgress) onProgress(100, \"100%\", LoaderStatus.Processing);\n\t\t\t\t\t\t\tthis.clearSplatSceneDownloadAndBuildPromise();\n\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t});\n\t\t\t\t\t})\n\t\t\t\t\t.catch((e) => {\n\t\t\t\t\t\tif (showLoadingUI) this.loadingSpinner.removeTask(loadingUITaskId);\n\t\t\t\t\t\tthis.clearSplatSceneDownloadAndBuildPromise();\n\t\t\t\t\t\treject(this.updateError(e, \"Viewer::addSplatScenes -> Could not load one or more splat scenes.\"));\n\t\t\t\t\t})\n\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\tthis.removeSplatSceneDownloadPromise(downloadAndBuildPromise);\n\t\t\t\t\t});\n\t\t\t},\n\t\t\t(reason) => {\n\t\t\t\tfor (let baseDownloadPromise of baseDownloadPromises) {\n\t\t\t\t\tbaseDownloadPromise.abort(reason);\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\t\tthis.addSplatSceneDownloadPromise(downloadAndBuildPromise);\n\t\tthis.setSplatSceneDownloadAndBuildPromise(downloadAndBuildPromise);\n\t\treturn downloadAndBuildPromise;\n\t}\n\n\t/**\n\t * Download a splat scene and convert to SplatBuffer instance.\n\t * @param {string} path Path to splat scene to be loaded\n\t * @param {number} splatAlphaRemovalThreshold Ignore any splats with an alpha less than the specified\n\t *                                            value (valid range: 0 - 255), defaults to 1\n\t *\n\t * @param {function} onProgress Function to be called as file data are received\n\t * @param {boolean} progressiveBuild Construct file sections into splat buffers as they are downloaded\n\t * @param {function} onSectionBuilt Function to be called when new section is added to the file\n\t * @param {string} format File format of the scene\n\t * @param {object} headers Optional HTTP headers to pass to use for downloading splat scene\n\t * @return {AbortablePromise}\n\t */\n\tdownloadSplatSceneToSplatBuffer(\n\t\tpath,\n\t\tsplatAlphaRemovalThreshold = 1,\n\t\tonProgress = undefined,\n\t\tprogressiveBuild = false,\n\t\tonSectionBuilt = undefined,\n\t\tformat,\n\t\theaders,\n\t) {\n\t\ttry {\n\t\t\tif (format === SceneFormat.Splat || format === SceneFormat.KSplat || format === SceneFormat.Ply) {\n\t\t\t\tconst optimizeSplatData = progressiveBuild ? false : this.optimizeSplatData;\n\t\t\t\tif (format === SceneFormat.Splat) {\n\t\t\t\t\treturn SplatLoader.loadFromURL(\n\t\t\t\t\t\tpath,\n\t\t\t\t\t\tonProgress,\n\t\t\t\t\t\tprogressiveBuild,\n\t\t\t\t\t\tonSectionBuilt,\n\t\t\t\t\t\tsplatAlphaRemovalThreshold,\n\t\t\t\t\t\tthis.inMemoryCompressionLevel,\n\t\t\t\t\t\toptimizeSplatData,\n\t\t\t\t\t\theaders,\n\t\t\t\t\t);\n\t\t\t\t} else if (format === SceneFormat.KSplat) {\n\t\t\t\t\treturn KSplatLoader.loadFromURL(path, onProgress, progressiveBuild, onSectionBuilt, headers);\n\t\t\t\t} else if (format === SceneFormat.Ply) {\n\t\t\t\t\treturn PlyLoader.loadFromURL(\n\t\t\t\t\t\tpath,\n\t\t\t\t\t\tonProgress,\n\t\t\t\t\t\tprogressiveBuild,\n\t\t\t\t\t\tonSectionBuilt,\n\t\t\t\t\t\tsplatAlphaRemovalThreshold,\n\t\t\t\t\t\tthis.inMemoryCompressionLevel,\n\t\t\t\t\t\toptimizeSplatData,\n\t\t\t\t\t\tthis.sphericalHarmonicsDegree,\n\t\t\t\t\t\theaders,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else if (format === SceneFormat.Spz) {\n\t\t\t\treturn SpzLoader.loadFromURL(\n\t\t\t\t\tpath,\n\t\t\t\t\tonProgress,\n\t\t\t\t\tsplatAlphaRemovalThreshold,\n\t\t\t\t\tthis.inMemoryCompressionLevel,\n\t\t\t\t\tthis.optimizeSplatData,\n\t\t\t\t\tthis.sphericalHarmonicsDegree,\n\t\t\t\t\theaders,\n\t\t\t\t);\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tthrow this.updateError(e, null);\n\t\t}\n\n\t\tthrow new Error(`Viewer::downloadSplatSceneToSplatBuffer -> File format not supported: ${path}`);\n\t}\n\n\tstatic isProgressivelyLoadable(format) {\n\t\treturn format === SceneFormat.Splat || format === SceneFormat.KSplat || format === SceneFormat.Ply;\n\t}\n\n\t/**\n\t * Add one or more instances of SplatBuffer to the SplatMesh instance managed by the viewer and set up the sorting web worker.\n\t * This function will terminate the existing sort worker (if there is one).\n\t */\n\taddSplatBuffers = (function () {\n\t\treturn function (\n\t\t\tsplatBuffers,\n\t\t\tsplatBufferOptions = [],\n\t\t\tfinalBuild = true,\n\t\t\tshowLoadingUI = true,\n\t\t\tshowLoadingUIForSplatTreeBuild = true,\n\t\t\treplaceExisting = false,\n\t\t\tenableRenderBeforeFirstSort = false,\n\t\t\tpreserveVisibleRegion = true,\n\t\t) {\n\t\t\tif (this.isDisposingOrDisposed()) return Promise.resolve();\n\n\t\t\tlet splatProcessingTaskId = null;\n\t\t\tconst removeSplatProcessingTask = () => {\n\t\t\t\tif (splatProcessingTaskId !== null) {\n\t\t\t\t\tthis.loadingSpinner.removeTask(splatProcessingTaskId);\n\t\t\t\t\tsplatProcessingTaskId = null;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tthis.splatRenderReady = false;\n\t\t\treturn new Promise((resolve) => {\n\t\t\t\tif (showLoadingUI) {\n\t\t\t\t\tsplatProcessingTaskId = this.loadingSpinner.addTask(\"Processing splats...\");\n\t\t\t\t}\n\t\t\t\tdelayedExecute(() => {\n\t\t\t\t\tif (this.isDisposingOrDisposed()) {\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst buildResults = this.addSplatBuffersToMesh(\n\t\t\t\t\t\t\tsplatBuffers,\n\t\t\t\t\t\t\tsplatBufferOptions,\n\t\t\t\t\t\t\tfinalBuild,\n\t\t\t\t\t\t\tshowLoadingUIForSplatTreeBuild,\n\t\t\t\t\t\t\treplaceExisting,\n\t\t\t\t\t\t\tpreserveVisibleRegion,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tconst maxSplatCount = this.splatMesh.getMaxSplatCount();\n\t\t\t\t\t\tif (this.sortWorker && this.sortWorker.maxSplatCount !== maxSplatCount) this.disposeSortWorker();\n\t\t\t\t\t\t// If we aren't calculating the splat distances from the center on the GPU, the sorting worker needs\n\t\t\t\t\t\t// splat centers and transform indexes so that it can calculate those distance values.\n\t\t\t\t\t\tif (!this.gpuAcceleratedSort) {\n\t\t\t\t\t\t\tthis.preSortMessages.push({\n\t\t\t\t\t\t\t\tcenters: buildResults.centers.buffer,\n\t\t\t\t\t\t\t\tsceneIndexes: buildResults.sceneIndexes.buffer,\n\t\t\t\t\t\t\t\trange: {\n\t\t\t\t\t\t\t\t\tfrom: buildResults.from,\n\t\t\t\t\t\t\t\t\tto: buildResults.to,\n\t\t\t\t\t\t\t\t\tcount: buildResults.count,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst sortWorkerSetupPromise =\n\t\t\t\t\t\t\t!this.sortWorker && maxSplatCount > 0\n\t\t\t\t\t\t\t\t? this.setupSortWorker(this.splatMesh)\n\t\t\t\t\t\t\t\t: Promise.resolve();\n\t\t\t\t\t\tsortWorkerSetupPromise.then(() => {\n\t\t\t\t\t\t\tif (this.isDisposingOrDisposed()) return;\n\t\t\t\t\t\t\tthis.runSplatSort(true, true).then((sortRunning) => {\n\t\t\t\t\t\t\t\tif (!this.sortWorker || !sortRunning) {\n\t\t\t\t\t\t\t\t\tthis.splatRenderReady = true;\n\t\t\t\t\t\t\t\t\tremoveSplatProcessingTask();\n\t\t\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tif (enableRenderBeforeFirstSort) {\n\t\t\t\t\t\t\t\t\t\tthis.splatRenderReady = true;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tthis.runAfterNextSort.push(() => {\n\t\t\t\t\t\t\t\t\t\t\tthis.splatRenderReady = true;\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tthis.runAfterNextSort.push(() => {\n\t\t\t\t\t\t\t\t\t\tremoveSplatProcessingTask();\n\t\t\t\t\t\t\t\t\t\t// IMPORTANT: Do NOT show UI components here\n\t\t\t\t\t\t\t\t\t\t// Let onSplatTreeReady handle UI display when optimization is complete\n\t\t\t\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}, true);\n\t\t\t});\n\t\t};\n\t})();\n\t/**\n\t * Add one or more instances of SplatBuffer to the SplatMesh instance managed by the viewer. By default, this function is additive;\n\t * all splat buffers contained by the viewer's splat mesh before calling this function will be preserved. This behavior can be\n\t * changed by passing 'true' for 'replaceExisting'.\n\t * @param {Array<SplatBuffer>} splatBuffers SplatBuffer instances\n\t * @param {Array<object>} splatBufferOptions Array of options objects: {\n\t *\n\t *         splatAlphaRemovalThreshold: Ignore any splats with an alpha less than the specified\n\t *                                     value (valid range: 0 - 255), defaults to 1\n\t *\n\t *         position (Array<number>):   Position of the scene, acts as an offset from its default position, defaults to [0, 0, 0]\n\t *\n\t *         rotation (Array<number>):   Rotation of the scene represented as a quaternion, defaults to [0, 0, 0, 1]\n\t *\n\t *         scale (Array<number>):      Scene's scale, defaults to [1, 1, 1]\n\t * }\n\t * @param {boolean} finalBuild Will the splat mesh be in its final state after this build?\n\t * @param {boolean} showLoadingUIForSplatTreeBuild Whether or not to show the loading spinner during construction of the splat tree.\n\t * @return {object} Object containing info about the splats that are updated\n\t */\n\taddSplatBuffersToMesh = (function () {\n\t\tlet splatOptimizingTaskId;\n\n\t\treturn function (\n\t\t\tsplatBuffers,\n\t\t\tsplatBufferOptions,\n\t\t\tfinalBuild = true,\n\t\t\tshowLoadingUIForSplatTreeBuild = false,\n\t\t\treplaceExisting = false,\n\t\t\tpreserveVisibleRegion = true,\n\t\t) {\n\t\t\tif (this.isDisposingOrDisposed()) return;\n\t\t\tlet allSplatBuffers = [];\n\t\t\tlet allSplatBufferOptions = [];\n\t\t\tif (!replaceExisting) {\n\t\t\t\tallSplatBuffers = this.splatMesh.scenes.map((scene) => scene.splatBuffer) || [];\n\t\t\t\tallSplatBufferOptions = this.splatMesh.sceneOptions\n\t\t\t\t\t? this.splatMesh.sceneOptions.map((sceneOptions) => sceneOptions)\n\t\t\t\t\t: [];\n\t\t\t}\n\t\t\tallSplatBuffers.push(...splatBuffers);\n\t\t\tallSplatBufferOptions.push(...splatBufferOptions);\n\t\t\tif (this.renderer) this.splatMesh.setRenderer(this.renderer);\n\t\t\tconst onSplatTreeIndexesUpload = (finished) => {\n\t\t\t\tif (this.isDisposingOrDisposed()) return;\n\t\t\t\tconst splatCount = this.splatMesh.getSplatCount();\n\t\t\t\tif (\n\t\t\t\t\tshowLoadingUIForSplatTreeBuild &&\n\t\t\t\t\tsplatCount >= MIN_SPLAT_COUNT_TO_SHOW_SPLAT_TREE_LOADING_SPINNER\n\t\t\t\t) {\n\t\t\t\t\tif (!finished && !splatOptimizingTaskId) {\n\t\t\t\t\t\tthis.loadingSpinner.setMinimized(true, true);\n\t\t\t\t\t\tsplatOptimizingTaskId = this.loadingSpinner.addTask(\"Optimizing data structures...\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst onSplatTreeReady = (finished) => {\n\t\t\t\tif (this.isDisposingOrDisposed()) return;\n\t\t\t\tif (finished && splatOptimizingTaskId) {\n\t\t\t\t\tthis.loadingSpinner.removeTask(splatOptimizingTaskId);\n\t\t\t\t\tsplatOptimizingTaskId = null;\n\n\t\t\t\t\t// Always wait for finalBuild and finished optimization before showing UI\n\t\t\t\t\t// This ensures UI appears at the same time for both progressive and non-progressive loading\n\t\t\t\t\tif (finalBuild) {\n\t\t\t\t\t\t// Now that everything is truly finished (including optimization), show the UI components\n\t\t\t\t\t\tif (this.controlsUI) this.controlsUI.show();\n\t\t\t\t\t\tif (this.presetsUI) this.presetsUI.show();\n\n\t\t\t\t\t\t// For labels: either show existing ones or initialize with visible=true\n\t\t\t\t\t\tif (this.labelsManager) {\n\t\t\t\t\t\t\tthis.labelsManager.show();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Pass true to make labels visible now that loading is complete\n\t\t\t\t\t\t\tthis.setupLabels(true);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconsole.log(\"Loading complete - UI components are now being displayed\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst buildResults = this.splatMesh.build(\n\t\t\t\tallSplatBuffers,\n\t\t\t\tallSplatBufferOptions,\n\t\t\t\ttrue,\n\t\t\t\tfinalBuild,\n\t\t\t\tonSplatTreeIndexesUpload,\n\t\t\t\tonSplatTreeReady,\n\t\t\t\tpreserveVisibleRegion,\n\t\t\t);\n\t\t\tif (finalBuild && this.freeIntermediateSplatData) this.splatMesh.freeIntermediateSplatData();\n\t\t\treturn buildResults;\n\t\t};\n\t})();\n\n\t/**\n\t * Set up the splat sorting web worker.\n\t * @param {SplatMesh} splatMesh SplatMesh instance that contains the splats to be sorted\n\t * @return {Promise}\n\t */\n\tsetupSortWorker(splatMesh) {\n\t\tif (this.isDisposingOrDisposed()) return;\n\t\treturn new Promise((resolve) => {\n\t\t\tconst DistancesArrayType = this.integerBasedSort ? Int32Array : Float32Array;\n\t\t\tconst splatCount = splatMesh.getSplatCount();\n\t\t\tconst maxSplatCount = splatMesh.getMaxSplatCount();\n\t\t\tthis.sortWorker = createSortWorker(\n\t\t\t\tmaxSplatCount,\n\t\t\t\tthis.sharedMemoryForWorkers,\n\t\t\t\tthis.enableSIMDInSort,\n\t\t\t\tthis.integerBasedSort,\n\t\t\t\tthis.splatMesh.dynamicMode,\n\t\t\t\tthis.splatSortDistanceMapPrecision,\n\t\t\t);\n\t\t\tthis.sortWorker.onmessage = (e) => {\n\t\t\t\tif (e.data.sortDone) {\n\t\t\t\t\tthis.sortRunning = false;\n\t\t\t\t\tif (this.sharedMemoryForWorkers) {\n\t\t\t\t\t\tthis.splatMesh.updateRenderIndexes(this.sortWorkerSortedIndexes, e.data.splatRenderCount);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst sortedIndexes = new Uint32Array(e.data.sortedIndexes.buffer, 0, e.data.splatRenderCount);\n\t\t\t\t\t\tthis.splatMesh.updateRenderIndexes(sortedIndexes, e.data.splatRenderCount);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.lastSplatSortCount = this.splatSortCount;\n\n\t\t\t\t\tthis.lastSortTime = e.data.sortTime;\n\t\t\t\t\tthis.sortPromiseResolver();\n\t\t\t\t\tthis.sortPromiseResolver = null;\n\t\t\t\t\tthis.forceRenderNextFrame();\n\t\t\t\t\tif (this.runAfterNextSort.length > 0) {\n\t\t\t\t\t\tthis.runAfterNextSort.forEach((func) => {\n\t\t\t\t\t\t\tfunc();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tthis.runAfterNextSort.length = 0;\n\t\t\t\t\t}\n\t\t\t\t} else if (e.data.sortCanceled) {\n\t\t\t\t\tthis.sortRunning = false;\n\t\t\t\t} else if (e.data.sortSetupPhase1Complete) {\n\t\t\t\t\tif (this.logLevel >= LogLevel.Info) console.log(\"Sorting web worker WASM setup complete.\");\n\t\t\t\t\tif (this.sharedMemoryForWorkers) {\n\t\t\t\t\t\tthis.sortWorkerSortedIndexes = new Uint32Array(\n\t\t\t\t\t\t\te.data.sortedIndexesBuffer,\n\t\t\t\t\t\t\te.data.sortedIndexesOffset,\n\t\t\t\t\t\t\tmaxSplatCount,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.sortWorkerIndexesToSort = new Uint32Array(\n\t\t\t\t\t\t\te.data.indexesToSortBuffer,\n\t\t\t\t\t\t\te.data.indexesToSortOffset,\n\t\t\t\t\t\t\tmaxSplatCount,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.sortWorkerPrecomputedDistances = new DistancesArrayType(\n\t\t\t\t\t\t\te.data.precomputedDistancesBuffer,\n\t\t\t\t\t\t\te.data.precomputedDistancesOffset,\n\t\t\t\t\t\t\tmaxSplatCount,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.sortWorkerTransforms = new Float32Array(\n\t\t\t\t\t\t\te.data.transformsBuffer,\n\t\t\t\t\t\t\te.data.transformsOffset,\n\t\t\t\t\t\t\tConstants.MaxScenes * 16,\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.sortWorkerIndexesToSort = new Uint32Array(maxSplatCount);\n\t\t\t\t\t\tthis.sortWorkerPrecomputedDistances = new DistancesArrayType(maxSplatCount);\n\t\t\t\t\t\tthis.sortWorkerTransforms = new Float32Array(Constants.MaxScenes * 16);\n\t\t\t\t\t}\n\t\t\t\t\tfor (let i = 0; i < splatCount; i++) this.sortWorkerIndexesToSort[i] = i;\n\t\t\t\t\tthis.sortWorker.maxSplatCount = maxSplatCount;\n\n\t\t\t\t\tif (this.logLevel >= LogLevel.Info) {\n\t\t\t\t\t\tconsole.log(\"Sorting web worker ready.\");\n\t\t\t\t\t\tconst splatDataTextures = this.splatMesh.getSplatDataTextures();\n\t\t\t\t\t\tconst covariancesTextureSize = splatDataTextures.covariances.size;\n\t\t\t\t\t\tconst centersColorsTextureSize = splatDataTextures.centerColors.size;\n\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t\"Covariances texture size: \" + covariancesTextureSize.x + \" x \" + covariancesTextureSize.y,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t\"Centers/colors texture size: \" +\n\t\t\t\t\t\t\t\tcentersColorsTextureSize.x +\n\t\t\t\t\t\t\t\t\" x \" +\n\t\t\t\t\t\t\t\tcentersColorsTextureSize.y,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t};\n\t\t});\n\t}\n\n\tupdateError(error, defaultMessage) {\n\t\tif (error instanceof AbortedPromiseError) return error;\n\t\tif (error instanceof DirectLoadError) {\n\t\t\treturn new Error(\"File type or server does not support progressive loading.\");\n\t\t}\n\t\treturn defaultMessage ? new Error(defaultMessage) : error;\n\t}\n\n\tdisposeSortWorker() {\n\t\tif (this.sortWorker) this.sortWorker.terminate();\n\t\tthis.sortWorker = null;\n\t\tthis.sortPromise = null;\n\t\tif (this.sortPromiseResolver) {\n\t\t\tthis.sortPromiseResolver();\n\t\t\tthis.sortPromiseResolver = null;\n\t\t}\n\t\tthis.preSortMessages = [];\n\t\tthis.sortRunning = false;\n\t}\n\n\tremoveSplatScene(indexToRemove, showLoadingUI = true) {\n\t\treturn this.removeSplatScenes([indexToRemove], showLoadingUI);\n\t}\n\n\tremoveSplatScenes(indexesToRemove, showLoadingUI = true) {\n\t\tif (this.isLoadingOrUnloading()) {\n\t\t\tthrow new Error(\"Cannot remove splat scene while another load or unload is already in progress.\");\n\t\t}\n\n\t\tif (this.isDisposingOrDisposed()) {\n\t\t\tthrow new Error(\"Cannot remove splat scene after dispose() is called.\");\n\t\t}\n\n\t\tlet sortPromise;\n\n\t\tthis.splatSceneRemovalPromise = new Promise((resolve, reject) => {\n\t\t\tlet revmovalTaskId;\n\n\t\t\tif (showLoadingUI) {\n\t\t\t\tthis.loadingSpinner.removeAllTasks();\n\t\t\t\tthis.loadingSpinner.show();\n\t\t\t\trevmovalTaskId = this.loadingSpinner.addTask(\"Removing splat scene...\");\n\t\t\t}\n\n\t\t\tconst checkAndHideLoadingUI = () => {\n\t\t\t\tif (showLoadingUI) {\n\t\t\t\t\tthis.loadingSpinner.hide();\n\t\t\t\t\tthis.loadingSpinner.removeTask(revmovalTaskId);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst onDone = (error) => {\n\t\t\t\tcheckAndHideLoadingUI();\n\t\t\t\tthis.splatSceneRemovalPromise = null;\n\t\t\t\tif (!error) resolve();\n\t\t\t\telse reject(error);\n\t\t\t};\n\n\t\t\tconst checkForEarlyExit = () => {\n\t\t\t\tif (this.isDisposingOrDisposed()) {\n\t\t\t\t\tonDone();\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t};\n\n\t\t\tsortPromise = this.sortPromise || Promise.resolve();\n\t\t\tsortPromise.then(() => {\n\t\t\t\tif (checkForEarlyExit()) return;\n\t\t\t\tconst savedSplatBuffers = [];\n\t\t\t\tconst savedSceneOptions = [];\n\t\t\t\tconst savedSceneTransformComponents = [];\n\t\t\t\tfor (let i = 0; i < this.splatMesh.scenes.length; i++) {\n\t\t\t\t\tlet shouldRemove = false;\n\t\t\t\t\tfor (let indexToRemove of indexesToRemove) {\n\t\t\t\t\t\tif (indexToRemove === i) {\n\t\t\t\t\t\t\tshouldRemove = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!shouldRemove) {\n\t\t\t\t\t\tconst scene = this.splatMesh.scenes[i];\n\t\t\t\t\t\tsavedSplatBuffers.push(scene.splatBuffer);\n\t\t\t\t\t\tsavedSceneOptions.push(this.splatMesh.sceneOptions[i]);\n\t\t\t\t\t\tsavedSceneTransformComponents.push({\n\t\t\t\t\t\t\tposition: scene.position.clone(),\n\t\t\t\t\t\t\tquaternion: scene.quaternion.clone(),\n\t\t\t\t\t\t\tscale: scene.scale.clone(),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.disposeSortWorker();\n\t\t\t\tthis.splatMesh.dispose();\n\t\t\t\tthis.sceneRevealMode = SceneRevealMode.Instant;\n\t\t\t\tthis.createSplatMesh();\n\t\t\t\tthis.addSplatBuffers(savedSplatBuffers, savedSceneOptions, true, false, true)\n\t\t\t\t\t.then(() => {\n\t\t\t\t\t\tif (checkForEarlyExit()) return;\n\t\t\t\t\t\tcheckAndHideLoadingUI();\n\t\t\t\t\t\tthis.splatMesh.scenes.forEach((scene, index) => {\n\t\t\t\t\t\t\tscene.position.copy(savedSceneTransformComponents[index].position);\n\t\t\t\t\t\t\tscene.quaternion.copy(savedSceneTransformComponents[index].quaternion);\n\t\t\t\t\t\t\tscene.scale.copy(savedSceneTransformComponents[index].scale);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tthis.splatMesh.updateTransforms();\n\t\t\t\t\t\tthis.splatRenderReady = false;\n\n\t\t\t\t\t\tthis.runSplatSort(true).then(() => {\n\t\t\t\t\t\t\tif (checkForEarlyExit()) {\n\t\t\t\t\t\t\t\tthis.splatRenderReady = true;\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsortPromise = this.sortPromise || Promise.resolve();\n\t\t\t\t\t\t\tsortPromise.then(() => {\n\t\t\t\t\t\t\t\tthis.splatRenderReady = true;\n\t\t\t\t\t\t\t\tonDone();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t})\n\t\t\t\t\t.catch((e) => {\n\t\t\t\t\t\tonDone(e);\n\t\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\treturn this.splatSceneRemovalPromise;\n\t}\n\n\t/**\n\t * Start self-driven mode\n\t */\n\tstart() {\n\t\tif (this.selfDrivenMode) {\n\t\t\tif (this.webXRMode) {\n\t\t\t\tthis.renderer.setAnimationLoop(this.selfDrivenUpdateFunc);\n\t\t\t} else {\n\t\t\t\tthis.requestFrameId = requestAnimationFrame(this.selfDrivenUpdateFunc);\n\t\t\t}\n\t\t\tthis.selfDrivenModeRunning = true;\n\t\t} else {\n\t\t\tthrow new Error(\"Cannot start viewer unless it is in self driven mode.\");\n\t\t}\n\t}\n\n\t/**\n\t * Stop self-driven mode\n\t */\n\tstop() {\n\t\tif (this.selfDrivenMode && this.selfDrivenModeRunning) {\n\t\t\tif (this.webXRMode) {\n\t\t\t\tthis.renderer.setAnimationLoop(null);\n\t\t\t} else {\n\t\t\t\tcancelAnimationFrame(this.requestFrameId);\n\t\t\t}\n\t\t\tthis.selfDrivenModeRunning = false;\n\t\t}\n\t}\n\n\t/**\n\t * Dispose of all resources held directly and indirectly by this viewer.\n\t */\n\tasync dispose() {\n\t\tif (this.isDisposingOrDisposed()) return this.disposePromise;\n\n\t\tif (!this.keyboardInputActive) {\n\t\t\tthis.onLabelModalClose();\n\t\t}\n\n\t\tlet waitPromises = [];\n\t\tlet promisesToAbort = [];\n\t\tfor (let promiseKey in this.splatSceneDownloadPromises) {\n\t\t\tif (this.splatSceneDownloadPromises.hasOwnProperty(promiseKey)) {\n\t\t\t\tconst downloadPromiseToAbort = this.splatSceneDownloadPromises[promiseKey];\n\t\t\t\tpromisesToAbort.push(downloadPromiseToAbort);\n\t\t\t\twaitPromises.push(downloadPromiseToAbort.promise);\n\t\t\t}\n\t\t}\n\t\tif (this.sortPromise) {\n\t\t\twaitPromises.push(this.sortPromise);\n\t\t}\n\n\t\tthis.disposing = true;\n\t\tthis.disposePromise = Promise.all(waitPromises).finally(() => {\n\t\t\tthis.stop();\n\t\t\tif (this.orthographicControls) {\n\t\t\t\tthis.orthographicControls.dispose();\n\t\t\t\tthis.orthographicControls = null;\n\t\t\t}\n\t\t\tif (this.perspectiveControls) {\n\t\t\t\tthis.perspectiveControls.dispose();\n\t\t\t\tthis.perspectiveControls = null;\n\t\t\t}\n\t\t\tthis.controls = null;\n\t\t\tif (this.splatMesh) {\n\t\t\t\tthis.splatMesh.dispose();\n\t\t\t\tthis.splatMesh = null;\n\t\t\t}\n\t\t\tif (this.sceneHelper) {\n\t\t\t\tthis.sceneHelper.dispose();\n\t\t\t\tthis.sceneHelper = null;\n\t\t\t}\n\t\t\tif (this.resizeObserver) {\n\t\t\t\tthis.resizeObserver.unobserve(this.rootElement);\n\t\t\t\tthis.resizeObserver = null;\n\t\t\t}\n\t\t\tif (this.labelsManager) {\n\t\t\t\tthis.labelsManager.dispose(); // Ensure label manager is disposed\n\t\t\t\tthis.labelsManager = null;\n\t\t\t}\n\t\t\tthis.disposeSortWorker();\n\t\t\tthis.removeEventHandlers();\n\n\t\t\tthis.loadingSpinner.removeAllTasks();\n\t\t\tthis.loadingSpinner.setContainer(null);\n\t\t\tthis.loadingProgressBar.hide();\n\t\t\tthis.loadingProgressBar.setContainer(null);\n\t\t\tthis.infoPanel.setContainer(null);\n\n\t\t\tthis.camera = null;\n\t\t\tthis.threeScene = null;\n\t\t\tthis.splatRenderReady = false;\n\t\t\tthis.initialized = false;\n\t\t\tif (this.renderer) {\n\t\t\t\tif (!this.usingExternalRenderer) {\n\t\t\t\t\tthis.rootElement.removeChild(this.renderer.domElement);\n\t\t\t\t\tthis.renderer.dispose();\n\t\t\t\t}\n\t\t\t\tthis.renderer = null;\n\t\t\t}\n\t\t\tif (this.labelsManager) {\n\t\t\t\tthis.labelsManager.dispose();\n\t\t\t\tthis.labelsManager = null;\n\t\t\t}\n\n\t\t\tif (!this.usingExternalRenderer) {\n\t\t\t\tdocument.body.removeChild(this.rootElement);\n\t\t\t}\n\n\t\t\tthis.sortWorkerSortedIndexes = null;\n\t\t\tthis.sortWorkerIndexesToSort = null;\n\t\t\tthis.sortWorkerPrecomputedDistances = null;\n\t\t\tthis.sortWorkerTransforms = null;\n\t\t\tthis.disposed = true;\n\t\t\tthis.disposing = false;\n\t\t\tthis.disposePromise = null;\n\t\t});\n\t\tpromisesToAbort.forEach((toAbort) => {\n\t\t\ttoAbort.abort(\"Scene disposed\");\n\t\t});\n\t\treturn this.disposePromise;\n\t}\n\n\tselfDrivenUpdate() {\n\t\tif (this.selfDrivenMode && !this.webXRMode) {\n\t\t\tthis.requestFrameId = requestAnimationFrame(this.selfDrivenUpdateFunc);\n\t\t}\n\t\tthis.update();\n\t\tif (this.shouldRender()) {\n\t\t\tthis.render();\n\t\t\tthis.consecutiveRenderFrames++;\n\t\t} else {\n\t\t\tthis.consecutiveRenderFrames = 0;\n\t\t}\n\t\tthis.renderNextFrame = false;\n\t}\n\n\tforceRenderNextFrame() {\n\t\tthis.renderNextFrame = true;\n\t}\n\n\tshouldRender = (function () {\n\t\tlet renderCount = 0;\n\t\tconst lastCameraPosition = new THREE.Vector3();\n\t\tconst lastCameraOrientation = new THREE.Quaternion();\n\t\tconst changeEpsilon = 0.0001;\n\n\t\treturn function () {\n\t\t\tif (!this.initialized || !this.splatRenderReady || this.isDisposingOrDisposed()) return false;\n\n\t\t\tlet shouldRender = false;\n\t\t\tlet cameraChanged = false;\n\t\t\tif (this.camera) {\n\t\t\t\tconst cp = this.camera.position;\n\t\t\t\tconst co = this.camera.quaternion;\n\t\t\t\tcameraChanged =\n\t\t\t\t\tMath.abs(cp.x - lastCameraPosition.x) > changeEpsilon ||\n\t\t\t\t\tMath.abs(cp.y - lastCameraPosition.y) > changeEpsilon ||\n\t\t\t\t\tMath.abs(cp.z - lastCameraPosition.z) > changeEpsilon ||\n\t\t\t\t\tMath.abs(co.x - lastCameraOrientation.x) > changeEpsilon ||\n\t\t\t\t\tMath.abs(co.y - lastCameraOrientation.y) > changeEpsilon ||\n\t\t\t\t\tMath.abs(co.z - lastCameraOrientation.z) > changeEpsilon ||\n\t\t\t\t\tMath.abs(co.w - lastCameraOrientation.w) > changeEpsilon;\n\t\t\t}\n\n\t\t\tshouldRender =\n\t\t\t\tthis.renderMode !== RenderMode.Never &&\n\t\t\t\t(renderCount === 0 ||\n\t\t\t\t\tthis.splatMesh.visibleRegionChanging ||\n\t\t\t\t\tcameraChanged ||\n\t\t\t\t\tthis.renderMode === RenderMode.Always ||\n\t\t\t\t\tthis.dynamicMode === true ||\n\t\t\t\t\tthis.renderNextFrame);\n\n\t\t\tif (this.camera) {\n\t\t\t\tlastCameraPosition.copy(this.camera.position);\n\t\t\t\tlastCameraOrientation.copy(this.camera.quaternion);\n\t\t\t}\n\n\t\t\trenderCount++;\n\t\t\treturn shouldRender;\n\t\t};\n\t})();\n\n\trender = (function () {\n\t\treturn function () {\n\t\t\tif (!this.initialized || !this.splatRenderReady || this.isDisposingOrDisposed()) return;\n\n\t\t\tconst hasRenderables = (threeScene) => {\n\t\t\t\tfor (let child of threeScene.children) {\n\t\t\t\t\tif (child.visible) return true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t};\n\n\t\t\tconst savedAuoClear = this.renderer.autoClear;\n\t\t\tif (hasRenderables(this.threeScene)) {\n\t\t\t\tthis.renderer.render(this.threeScene, this.camera);\n\t\t\t\tthis.renderer.autoClear = false;\n\t\t\t}\n\t\t\tthis.renderer.render(this.splatMesh, this.camera);\n\t\t\tthis.renderer.autoClear = false;\n\t\t\tif (this.sceneHelper.getFocusMarkerOpacity() > 0.0) {\n\t\t\t\tthis.renderer.render(this.sceneHelper.focusMarker, this.camera);\n\t\t\t}\n\t\t\tif (this.showControlPlane) this.renderer.render(this.sceneHelper.controlPlane, this.camera);\n\t\t\tthis.renderer.autoClear = savedAuoClear;\n\t\t};\n\t})();\n\n\tupdate(renderer, camera) {\n\t\tif (this.dropInMode) this.updateForDropInMode(renderer, camera);\n\n\t\tif (!this.initialized || !this.splatRenderReady || this.isDisposingOrDisposed()) return;\n\n\t\tif (this.controls) {\n\t\t\tthis.controls.update();\n\t\t\tif (this.camera.isOrthographicCamera && !this.usingExternalCamera) {\n\t\t\t\tViewer.setCameraPositionFromZoom(this.camera, this.camera, this.controls);\n\t\t\t}\n\t\t}\n\t\tthis.runSplatSort();\n\t\tthis.updateForRendererSizeChanges();\n\t\tthis.updateSplatMesh();\n\t\tthis.updateMeshCursor();\n\t\tthis.updateFPS();\n\t\tthis.timingSensitiveUpdates();\n\t\tthis.updateInfoPanel();\n\t\tthis.updateControlPlane();\n\t}\n\n\tupdateForDropInMode(renderer, camera) {\n\t\tthis.renderer = renderer;\n\t\tif (this.splatMesh) this.splatMesh.setRenderer(this.renderer);\n\t\tthis.camera = camera;\n\t\tif (this.controls) this.controls.object = camera;\n\t\tthis.init();\n\t}\n\n\tupdateFPS = (function () {\n\t\tlet lastCalcTime = getCurrentTime();\n\t\tlet frameCount = 0;\n\n\t\treturn function () {\n\t\t\tif (this.consecutiveRenderFrames > CONSECUTIVE_RENDERED_FRAMES_FOR_FPS_CALCULATION) {\n\t\t\t\tconst currentTime = getCurrentTime();\n\t\t\t\tconst calcDelta = currentTime - lastCalcTime;\n\t\t\t\tif (calcDelta >= 1.0) {\n\t\t\t\t\tthis.currentFPS = frameCount;\n\t\t\t\t\tframeCount = 0;\n\t\t\t\t\tlastCalcTime = currentTime;\n\t\t\t\t} else {\n\t\t\t\t\tframeCount++;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.currentFPS = null;\n\t\t\t}\n\t\t};\n\t})();\n\n\tupdateForRendererSizeChanges = (function () {\n\t\tconst lastRendererSize = new THREE.Vector2();\n\t\tconst currentRendererSize = new THREE.Vector2();\n\t\tlet lastCameraOrthographic;\n\n\t\treturn function () {\n\t\t\tif (!this.usingExternalCamera) {\n\t\t\t\tthis.renderer.getSize(currentRendererSize);\n\t\t\t\tif (\n\t\t\t\t\tlastCameraOrthographic === undefined ||\n\t\t\t\t\tlastCameraOrthographic !== this.camera.isOrthographicCamera ||\n\t\t\t\t\tcurrentRendererSize.x !== lastRendererSize.x ||\n\t\t\t\t\tcurrentRendererSize.y !== lastRendererSize.y\n\t\t\t\t) {\n\t\t\t\t\tif (this.camera.isOrthographicCamera) {\n\t\t\t\t\t\tthis.camera.left = -currentRendererSize.x / 2.0;\n\t\t\t\t\t\tthis.camera.right = currentRendererSize.x / 2.0;\n\t\t\t\t\t\tthis.camera.top = currentRendererSize.y / 2.0;\n\t\t\t\t\t\tthis.camera.bottom = -currentRendererSize.y / 2.0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.camera.aspect = currentRendererSize.x / currentRendererSize.y;\n\t\t\t\t\t}\n\t\t\t\t\tthis.camera.updateProjectionMatrix();\n\t\t\t\t\tlastRendererSize.copy(currentRendererSize);\n\t\t\t\t\tlastCameraOrthographic = this.camera.isOrthographicCamera;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t})();\n\n\ttimingSensitiveUpdates = (function () {\n\t\tlet lastUpdateTime;\n\n\t\treturn function () {\n\t\t\tconst currentTime = getCurrentTime();\n\t\t\tif (!lastUpdateTime) lastUpdateTime = currentTime;\n\t\t\tconst timeDelta = currentTime - lastUpdateTime;\n\n\t\t\tthis.updateCameraTransition(currentTime);\n\t\t\tthis.updateFocusMarker(timeDelta);\n\n\t\t\tlastUpdateTime = currentTime;\n\t\t};\n\t})();\n\n\tupdateCameraTransition = (function () {\n\t\tlet tempCameraTarget = new THREE.Vector3();\n\t\tlet toPreviousTarget = new THREE.Vector3();\n\t\tlet toNextTarget = new THREE.Vector3();\n\n\t\treturn function (currentTime) {\n\t\t\tif (this.transitioningCameraTarget) {\n\t\t\t\ttoPreviousTarget.copy(this.previousCameraTarget).sub(this.camera.position).normalize();\n\t\t\t\ttoNextTarget.copy(this.nextCameraTarget).sub(this.camera.position).normalize();\n\t\t\t\tconst rotationAngle = Math.acos(toPreviousTarget.dot(toNextTarget));\n\t\t\t\tconst rotationSpeed = (rotationAngle / (Math.PI / 3)) * 0.65 + 0.3;\n\t\t\t\tconst t = (rotationSpeed / rotationAngle) * (currentTime - this.transitioningCameraTargetStartTime);\n\t\t\t\ttempCameraTarget.copy(this.previousCameraTarget).lerp(this.nextCameraTarget, t);\n\t\t\t\tthis.camera.lookAt(tempCameraTarget);\n\t\t\t\tthis.controls.target.copy(tempCameraTarget);\n\t\t\t\tif (t >= 1.0) {\n\t\t\t\t\tthis.transitioningCameraTarget = false;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t})();\n\n\tupdateFocusMarker = (function () {\n\t\tconst renderDimensions = new THREE.Vector2();\n\t\tlet wasTransitioning = false;\n\n\t\treturn function (timeDelta) {\n\t\t\tthis.getRenderDimensions(renderDimensions);\n\t\t\tif (this.transitioningCameraTarget) {\n\t\t\t\tthis.sceneHelper.setFocusMarkerVisibility(true);\n\t\t\t\tconst currentFocusMarkerOpacity = Math.max(this.sceneHelper.getFocusMarkerOpacity(), 0.0);\n\t\t\t\tlet newFocusMarkerOpacity = Math.min(\n\t\t\t\t\tcurrentFocusMarkerOpacity + FOCUS_MARKER_FADE_IN_SPEED * timeDelta,\n\t\t\t\t\t1.0,\n\t\t\t\t);\n\t\t\t\tthis.sceneHelper.setFocusMarkerOpacity(newFocusMarkerOpacity);\n\t\t\t\tthis.sceneHelper.updateFocusMarker(this.nextCameraTarget, this.camera, renderDimensions);\n\t\t\t\twasTransitioning = true;\n\t\t\t\tthis.forceRenderNextFrame();\n\t\t\t} else {\n\t\t\t\tlet currentFocusMarkerOpacity;\n\t\t\t\tif (wasTransitioning) currentFocusMarkerOpacity = 1.0;\n\t\t\t\telse currentFocusMarkerOpacity = Math.min(this.sceneHelper.getFocusMarkerOpacity(), 1.0);\n\t\t\t\tif (currentFocusMarkerOpacity > 0) {\n\t\t\t\t\tthis.sceneHelper.updateFocusMarker(this.nextCameraTarget, this.camera, renderDimensions);\n\t\t\t\t\tlet newFocusMarkerOpacity = Math.max(\n\t\t\t\t\t\tcurrentFocusMarkerOpacity - FOCUS_MARKER_FADE_OUT_SPEED * timeDelta,\n\t\t\t\t\t\t0.0,\n\t\t\t\t\t);\n\t\t\t\t\tthis.sceneHelper.setFocusMarkerOpacity(newFocusMarkerOpacity);\n\t\t\t\t\tif (newFocusMarkerOpacity === 0.0) this.sceneHelper.setFocusMarkerVisibility(false);\n\t\t\t\t}\n\t\t\t\tif (currentFocusMarkerOpacity > 0.0) this.forceRenderNextFrame();\n\t\t\t\twasTransitioning = false;\n\t\t\t}\n\t\t};\n\t})();\n\n\tupdateMeshCursor = (function () {\n\t\tconst outHits = [];\n\t\tconst renderDimensions = new THREE.Vector2();\n\n\t\treturn function () {\n\t\t\tif (this.showMeshCursor) {\n\t\t\t\tthis.forceRenderNextFrame();\n\t\t\t\tthis.getRenderDimensions(renderDimensions);\n\t\t\t\toutHits.length = 0;\n\t\t\t\tthis.raycaster.setFromCameraAndScreenPosition(this.camera, this.mousePosition, renderDimensions);\n\t\t\t\tthis.raycaster.intersectSplatMesh(this.splatMesh, outHits);\n\t\t\t\tif (outHits.length > 0) {\n\t\t\t\t\tthis.sceneHelper.setMeshCursorVisibility(true);\n\t\t\t\t\tthis.sceneHelper.positionAndOrientMeshCursor(outHits[0].origin, this.camera);\n\t\t\t\t} else {\n\t\t\t\t\tthis.sceneHelper.setMeshCursorVisibility(false);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (this.sceneHelper.getMeschCursorVisibility()) this.forceRenderNextFrame();\n\t\t\t\tthis.sceneHelper.setMeshCursorVisibility(false);\n\t\t\t}\n\t\t};\n\t})();\n\n\tupdateInfoPanel = (function () {\n\t\tconst renderDimensions = new THREE.Vector2();\n\n\t\treturn function () {\n\t\t\tif (!this.showInfo) return;\n\t\t\tconst splatCount = this.splatMesh.getSplatCount();\n\t\t\tthis.getRenderDimensions(renderDimensions);\n\t\t\tconst cameraLookAtPosition = this.controls ? this.controls.target : null;\n\t\t\tconst meshCursorPosition = this.showMeshCursor ? this.sceneHelper.meshCursor.position : null;\n\t\t\tconst splatRenderCountPct = splatCount > 0 ? (this.splatRenderCount / splatCount) * 100 : 0;\n\t\t\tthis.infoPanel.update(\n\t\t\t\trenderDimensions,\n\t\t\t\tthis.camera.position,\n\t\t\t\tcameraLookAtPosition,\n\t\t\t\tthis.camera.up,\n\t\t\t\tthis.camera.isOrthographicCamera,\n\t\t\t\tmeshCursorPosition,\n\t\t\t\tthis.currentFPS || \"N/A\",\n\t\t\t\tsplatCount,\n\t\t\t\tthis.splatRenderCount,\n\t\t\t\tsplatRenderCountPct,\n\t\t\t\tthis.lastSortTime,\n\t\t\t\tthis.focalAdjustment,\n\t\t\t\tthis.splatMesh.getSplatScale(),\n\t\t\t\tthis.splatMesh.getPointCloudModeEnabled(),\n\t\t\t);\n\t\t};\n\t})();\n\n\tupdateControlPlane() {\n\t\tif (this.showControlPlane) {\n\t\t\tthis.sceneHelper.setControlPlaneVisibility(true);\n\t\t\tthis.sceneHelper.positionAndOrientControlPlane(this.controls.target, this.camera.up);\n\t\t} else {\n\t\t\tthis.sceneHelper.setControlPlaneVisibility(false);\n\t\t}\n\t}\n\n\trunSplatSort = (function () {\n\t\tconst mvpMatrix = new THREE.Matrix4();\n\t\tconst cameraPositionArray = [];\n\t\tconst lastSortViewDir = new THREE.Vector3(0, 0, -1);\n\t\tconst sortViewDir = new THREE.Vector3(0, 0, -1);\n\t\tconst lastSortViewPos = new THREE.Vector3();\n\t\tconst sortViewOffset = new THREE.Vector3();\n\t\tconst queuedSorts = [];\n\n\t\tconst partialSorts = [\n\t\t\t{\n\t\t\t\tangleThreshold: 0.55,\n\t\t\t\tsortFractions: [0.125, 0.33333, 0.75],\n\t\t\t},\n\t\t\t{\n\t\t\t\tangleThreshold: 0.65,\n\t\t\t\tsortFractions: [0.33333, 0.66667],\n\t\t\t},\n\t\t\t{\n\t\t\t\tangleThreshold: 0.8,\n\t\t\t\tsortFractions: [0.5],\n\t\t\t},\n\t\t];\n\n\t\treturn function (force = false, forceSortAll = false) {\n\t\t\tif (!this.initialized) return Promise.resolve(false);\n\t\t\tif (this.sortRunning) return Promise.resolve(true);\n\t\t\tif (this.splatMesh.getSplatCount() <= 0) {\n\t\t\t\tthis.splatRenderCount = 0;\n\t\t\t\treturn Promise.resolve(false);\n\t\t\t}\n\n\t\t\tlet angleDiff = 0;\n\t\t\tlet positionDiff = 0;\n\t\t\tlet needsRefreshForRotation = false;\n\t\t\tlet needsRefreshForPosition = false;\n\n\t\t\tsortViewDir.set(0, 0, -1).applyQuaternion(this.camera.quaternion);\n\t\t\tangleDiff = sortViewDir.dot(lastSortViewDir);\n\t\t\tpositionDiff = sortViewOffset.copy(this.camera.position).sub(lastSortViewPos).length();\n\n\t\t\tif (!force) {\n\t\t\t\tif (!this.splatMesh.dynamicMode && queuedSorts.length === 0) {\n\t\t\t\t\tif (angleDiff <= 0.99) needsRefreshForRotation = true;\n\t\t\t\t\tif (positionDiff >= 1.0) needsRefreshForPosition = true;\n\t\t\t\t\tif (!needsRefreshForRotation && !needsRefreshForPosition) return Promise.resolve(false);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.sortRunning = true;\n\t\t\tlet { splatRenderCount, shouldSortAll } = this.gatherSceneNodesForSort();\n\t\t\tshouldSortAll = shouldSortAll || forceSortAll;\n\t\t\tthis.splatRenderCount = splatRenderCount;\n\n\t\t\tmvpMatrix.copy(this.camera.matrixWorld).invert();\n\t\t\tconst mvpCamera = this.perspectiveCamera || this.camera;\n\t\t\tmvpMatrix.premultiply(mvpCamera.projectionMatrix);\n\t\t\tif (!this.splatMesh.dynamicMode) mvpMatrix.multiply(this.splatMesh.matrixWorld);\n\n\t\t\tlet gpuAcceleratedSortPromise = Promise.resolve(true);\n\t\t\tif (this.gpuAcceleratedSort && (queuedSorts.length <= 1 || queuedSorts.length % 2 === 0)) {\n\t\t\t\tgpuAcceleratedSortPromise = this.splatMesh.computeDistancesOnGPU(\n\t\t\t\t\tmvpMatrix,\n\t\t\t\t\tthis.sortWorkerPrecomputedDistances,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tgpuAcceleratedSortPromise.then(() => {\n\t\t\t\tif (queuedSorts.length === 0) {\n\t\t\t\t\tif (this.splatMesh.dynamicMode || shouldSortAll) {\n\t\t\t\t\t\tqueuedSorts.push(this.splatRenderCount);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor (let partialSort of partialSorts) {\n\t\t\t\t\t\t\tif (angleDiff < partialSort.angleThreshold) {\n\t\t\t\t\t\t\t\tfor (let sortFraction of partialSort.sortFractions) {\n\t\t\t\t\t\t\t\t\tqueuedSorts.push(Math.floor(this.splatRenderCount * sortFraction));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqueuedSorts.push(this.splatRenderCount);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlet sortCount = Math.min(queuedSorts.shift(), this.splatRenderCount);\n\t\t\t\tthis.splatSortCount = sortCount;\n\n\t\t\t\tcameraPositionArray[0] = this.camera.position.x;\n\t\t\t\tcameraPositionArray[1] = this.camera.position.y;\n\t\t\t\tcameraPositionArray[2] = this.camera.position.z;\n\n\t\t\t\tconst sortMessage = {\n\t\t\t\t\tmodelViewProj: mvpMatrix.elements,\n\t\t\t\t\tcameraPosition: cameraPositionArray,\n\t\t\t\t\tsplatRenderCount: this.splatRenderCount,\n\t\t\t\t\tsplatSortCount: sortCount,\n\t\t\t\t\tusePrecomputedDistances: this.gpuAcceleratedSort,\n\t\t\t\t};\n\t\t\t\tif (this.splatMesh.dynamicMode) {\n\t\t\t\t\tthis.splatMesh.fillTransformsArray(this.sortWorkerTransforms);\n\t\t\t\t}\n\t\t\t\tif (!this.sharedMemoryForWorkers) {\n\t\t\t\t\tsortMessage.indexesToSort = this.sortWorkerIndexesToSort;\n\t\t\t\t\tsortMessage.transforms = this.sortWorkerTransforms;\n\t\t\t\t\tif (this.gpuAcceleratedSort) {\n\t\t\t\t\t\tsortMessage.precomputedDistances = this.sortWorkerPrecomputedDistances;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.sortPromise = new Promise((resolve) => {\n\t\t\t\t\tthis.sortPromiseResolver = resolve;\n\t\t\t\t});\n\n\t\t\t\tif (this.preSortMessages.length > 0) {\n\t\t\t\t\tthis.preSortMessages.forEach((message) => {\n\t\t\t\t\t\tthis.sortWorker.postMessage(message);\n\t\t\t\t\t});\n\t\t\t\t\tthis.preSortMessages = [];\n\t\t\t\t}\n\t\t\t\tthis.sortWorker.postMessage({\n\t\t\t\t\tsort: sortMessage,\n\t\t\t\t});\n\n\t\t\t\tif (queuedSorts.length === 0) {\n\t\t\t\t\tlastSortViewPos.copy(this.camera.position);\n\t\t\t\t\tlastSortViewDir.copy(sortViewDir);\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t});\n\n\t\t\treturn gpuAcceleratedSortPromise;\n\t\t};\n\t})();\n\n\t/**\n\t * Determine which splats to render by checking which are inside or close to the view frustum\n\t */\n\tgatherSceneNodesForSort = (function () {\n\t\tconst nodeRenderList = [];\n\t\tlet allSplatsSortBuffer = null;\n\t\tconst tempVectorYZ = new THREE.Vector3();\n\t\tconst tempVectorXZ = new THREE.Vector3();\n\t\tconst tempVector = new THREE.Vector3();\n\t\tconst modelView = new THREE.Matrix4();\n\t\tconst baseModelView = new THREE.Matrix4();\n\t\tconst sceneTransform = new THREE.Matrix4();\n\t\tconst renderDimensions = new THREE.Vector3();\n\t\tconst forward = new THREE.Vector3(0, 0, -1);\n\n\t\tconst tempMax = new THREE.Vector3();\n\t\tconst nodeSize = (node) => {\n\t\t\treturn tempMax.copy(node.max).sub(node.min).length();\n\t\t};\n\n\t\treturn function (gatherAllNodes = false) {\n\t\t\tthis.getRenderDimensions(renderDimensions);\n\t\t\tconst cameraFocalLength =\n\t\t\t\trenderDimensions.y / 2.0 / Math.tan((this.camera.fov / 2.0) * THREE.MathUtils.DEG2RAD);\n\t\t\tconst fovXOver2 = Math.atan(renderDimensions.x / 2.0 / cameraFocalLength);\n\t\t\tconst fovYOver2 = Math.atan(renderDimensions.y / 2.0 / cameraFocalLength);\n\t\t\tconst cosFovXOver2 = Math.cos(fovXOver2);\n\t\t\tconst cosFovYOver2 = Math.cos(fovYOver2);\n\n\t\t\tconst splatTree = this.splatMesh.getSplatTree();\n\n\t\t\tif (splatTree) {\n\t\t\t\tbaseModelView.copy(this.camera.matrixWorld).invert();\n\t\t\t\tif (!this.splatMesh.dynamicMode) baseModelView.multiply(this.splatMesh.matrixWorld);\n\n\t\t\t\tlet nodeRenderCount = 0;\n\t\t\t\tlet splatRenderCount = 0;\n\n\t\t\t\tfor (let s = 0; s < splatTree.subTrees.length; s++) {\n\t\t\t\t\tconst subTree = splatTree.subTrees[s];\n\t\t\t\t\tmodelView.copy(baseModelView);\n\t\t\t\t\tif (this.splatMesh.dynamicMode) {\n\t\t\t\t\t\tthis.splatMesh.getSceneTransform(s, sceneTransform);\n\t\t\t\t\t\tmodelView.multiply(sceneTransform);\n\t\t\t\t\t}\n\t\t\t\t\tconst nodeCount = subTree.nodesWithIndexes.length;\n\t\t\t\t\tfor (let i = 0; i < nodeCount; i++) {\n\t\t\t\t\t\tconst node = subTree.nodesWithIndexes[i];\n\t\t\t\t\t\tif (!node.data || !node.data.indexes || node.data.indexes.length === 0) continue;\n\t\t\t\t\t\ttempVector.copy(node.center).applyMatrix4(modelView);\n\n\t\t\t\t\t\tconst distanceToNode = tempVector.length();\n\t\t\t\t\t\ttempVector.normalize();\n\n\t\t\t\t\t\ttempVectorYZ.copy(tempVector).setX(0).normalize();\n\t\t\t\t\t\ttempVectorXZ.copy(tempVector).setY(0).normalize();\n\n\t\t\t\t\t\tconst cameraAngleXZDot = forward.dot(tempVectorXZ);\n\t\t\t\t\t\tconst cameraAngleYZDot = forward.dot(tempVectorYZ);\n\n\t\t\t\t\t\tconst ns = nodeSize(node);\n\t\t\t\t\t\tconst outOfFovY = cameraAngleYZDot < cosFovYOver2 - 0.6;\n\t\t\t\t\t\tconst outOfFovX = cameraAngleXZDot < cosFovXOver2 - 0.6;\n\t\t\t\t\t\tif (!gatherAllNodes && (outOfFovX || outOfFovY) && distanceToNode > ns) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsplatRenderCount += node.data.indexes.length;\n\t\t\t\t\t\tnodeRenderList[nodeRenderCount] = node;\n\t\t\t\t\t\tnode.data.distanceToNode = distanceToNode;\n\t\t\t\t\t\tnodeRenderCount++;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tnodeRenderList.length = nodeRenderCount;\n\t\t\t\tnodeRenderList.sort((a, b) => {\n\t\t\t\t\tif (a.data.distanceToNode < b.data.distanceToNode) return -1;\n\t\t\t\t\telse return 1;\n\t\t\t\t});\n\n\t\t\t\tlet currentByteOffset = splatRenderCount * Constants.BytesPerInt;\n\t\t\t\tfor (let i = 0; i < nodeRenderCount; i++) {\n\t\t\t\t\tconst node = nodeRenderList[i];\n\t\t\t\t\tconst windowSizeInts = node.data.indexes.length;\n\t\t\t\t\tconst windowSizeBytes = windowSizeInts * Constants.BytesPerInt;\n\t\t\t\t\tlet destView = new Uint32Array(\n\t\t\t\t\t\tthis.sortWorkerIndexesToSort.buffer,\n\t\t\t\t\t\tcurrentByteOffset - windowSizeBytes,\n\t\t\t\t\t\twindowSizeInts,\n\t\t\t\t\t);\n\t\t\t\t\tdestView.set(node.data.indexes);\n\t\t\t\t\tcurrentByteOffset -= windowSizeBytes;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tsplatRenderCount: splatRenderCount,\n\t\t\t\t\tshouldSortAll: false,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tconst totalSplatCount = this.splatMesh.getSplatCount();\n\t\t\t\tif (!allSplatsSortBuffer || allSplatsSortBuffer.length !== totalSplatCount) {\n\t\t\t\t\tallSplatsSortBuffer = new Uint32Array(totalSplatCount);\n\t\t\t\t\tfor (let i = 0; i < totalSplatCount; i++) {\n\t\t\t\t\t\tallSplatsSortBuffer[i] = i;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.sortWorkerIndexesToSort.set(allSplatsSortBuffer);\n\t\t\t\treturn {\n\t\t\t\t\tsplatRenderCount: totalSplatCount,\n\t\t\t\t\tshouldSortAll: true,\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t})();\n\n\tgetSplatMesh() {\n\t\treturn this.splatMesh;\n\t}\n\n\t/**\n\t * Get a reference to a splat scene.\n\t * @param {number} sceneIndex The index of the scene to which the reference will be returned\n\t * @return {SplatScene}\n\t */\n\tgetSplatScene(sceneIndex) {\n\t\treturn this.splatMesh.getScene(sceneIndex);\n\t}\n\n\tgetSceneCount() {\n\t\treturn this.splatMesh.getSceneCount();\n\t}\n\n\tisMobile() {\n\t\treturn navigator.userAgent.includes(\"Mobi\");\n\t}\n}\n","import * as THREE from \"three\";\nimport { Viewer } from \"./Viewer.js\";\n\n/**\n * DropInViewer: Wrapper for a Viewer instance that enables it to be added to a Three.js scene like\n * any other Three.js scene object (Mesh, Object3D, etc.)\n */\nexport class DropInViewer extends THREE.Group {\n\tconstructor(options = {}) {\n\t\tsuper();\n\n\t\toptions.selfDrivenMode = false;\n\t\toptions.useBuiltInControls = false;\n\t\toptions.rootElement = null;\n\t\toptions.dropInMode = true;\n\t\toptions.camera = undefined;\n\t\toptions.renderer = undefined;\n\n\t\tthis.viewer = new Viewer(options);\n\t\tthis.splatMesh = null;\n\t\tthis.updateSplatMesh();\n\n\t\tthis.callbackMesh = DropInViewer.createCallbackMesh();\n\t\tthis.add(this.callbackMesh);\n\t\tthis.callbackMesh.onBeforeRender = DropInViewer.onBeforeRender.bind(this, this.viewer);\n\n\t\tthis.viewer.onSplatMeshChanged(() => {\n\t\t\tthis.updateSplatMesh();\n\t\t});\n\t}\n\n\tupdateSplatMesh() {\n\t\tif (this.splatMesh !== this.viewer.splatMesh) {\n\t\t\tif (this.splatMesh) {\n\t\t\t\tthis.remove(this.splatMesh);\n\t\t\t}\n\t\t\tthis.splatMesh = this.viewer.splatMesh;\n\t\t\tthis.add(this.viewer.splatMesh);\n\t\t}\n\t}\n\n\t/**\n\t * Add a single splat scene to the viewer.\n\t * @param {string} path Path to splat scene to be loaded\n\t * @param {object} options {\n\t *\n\t *         splatAlphaRemovalThreshold: Ignore any splats with an alpha less than the specified\n\t *                                     value (valid range: 0 - 255), defaults to 1\n\t *\n\t *         showLoadingUI:         Display a loading spinner while the scene is loading, defaults to true\n\t *\n\t *         position (Array<number>):   Position of the scene, acts as an offset from its default position, defaults to [0, 0, 0]\n\t *\n\t *         rotation (Array<number>):   Rotation of the scene represented as a quaternion, defaults to [0, 0, 0, 1]\n\t *\n\t *         scale (Array<number>):      Scene's scale, defaults to [1, 1, 1]\n\t *\n\t *         onProgress:                 Function to be called as file data are received\n\t *\n\t * }\n\t * @return {AbortablePromise}\n\t */\n\taddSplatScene(path, options = {}) {\n\t\tif (options.showLoadingUI !== false) options.showLoadingUI = true;\n\t\treturn this.viewer.addSplatScene(path, options);\n\t}\n\n\t/**\n\t * Add multiple splat scenes to the viewer.\n\t * @param {Array<object>} sceneOptions Array of per-scene options: {\n\t *\n\t *         path: Path to splat scene to be loaded\n\t *\n\t *         splatAlphaRemovalThreshold: Ignore any splats with an alpha less than the specified\n\t *                                     value (valid range: 0 - 255), defaults to 1\n\t *\n\t *         position (Array<number>):   Position of the scene, acts as an offset from its default position, defaults to [0, 0, 0]\n\t *\n\t *         rotation (Array<number>):   Rotation of the scene represented as a quaternion, defaults to [0, 0, 0, 1]\n\t *\n\t *         scale (Array<number>):      Scene's scale, defaults to [1, 1, 1]\n\t * }\n\t * @param {boolean} showLoadingUI Display a loading spinner while the scene is loading, defaults to true\n\t * @return {AbortablePromise}\n\t */\n\taddSplatScenes(sceneOptions, showLoadingUI) {\n\t\tif (showLoadingUI !== false) showLoadingUI = true;\n\t\treturn this.viewer.addSplatScenes(sceneOptions, showLoadingUI);\n\t}\n\n\t/**\n\t * Get a reference to a splat scene.\n\t * @param {number} sceneIndex The index of the scene to which the reference will be returned\n\t * @return {SplatScene}\n\t */\n\tgetSplatScene(sceneIndex) {\n\t\treturn this.viewer.getSplatScene(sceneIndex);\n\t}\n\n\tremoveSplatScene(index, showLoadingUI = true) {\n\t\treturn this.viewer.removeSplatScene(index, showLoadingUI);\n\t}\n\n\tremoveSplatScenes(indexes, showLoadingUI = true) {\n\t\treturn this.viewer.removeSplatScenes(indexes, showLoadingUI);\n\t}\n\n\tgetSceneCount() {\n\t\treturn this.viewer.getSceneCount();\n\t}\n\n\tsetActiveSphericalHarmonicsDegrees(activeSphericalHarmonicsDegrees) {\n\t\tthis.viewer.setActiveSphericalHarmonicsDegrees(activeSphericalHarmonicsDegrees);\n\t}\n\n\tasync dispose() {\n\t\treturn await this.viewer.dispose();\n\t}\n\n\tstatic onBeforeRender(viewer, renderer, threeScene, camera) {\n\t\tviewer.update(renderer, camera);\n\t}\n\n\tstatic createCallbackMesh() {\n\t\tconst geometry = new THREE.SphereGeometry(1, 8, 8);\n\t\tconst material = new THREE.MeshBasicMaterial();\n\t\tmaterial.colorWrite = false;\n\t\tmaterial.depthWrite = false;\n\t\tconst mesh = new THREE.Mesh(geometry, material);\n\t\tmesh.frustumCulled = false;\n\t\treturn mesh;\n\t}\n}\n"],"names":["THREE","fromHalfFloat","RED","GREEN","BLUE","finalize","_ray","Ray","Plane","MathUtils","EventDispatcher","Vector3","MOUSE","TOUCH","Quaternion","Spherical","Vector2","_box","Box3","InstancedBufferGeometry","Float32BufferAttribute","InstancedInterleavedBuffer","InterleavedBufferAttribute","WireframeGeometry","Sphere","UniformsLib","ShaderLib","UniformsUtils","ShaderMaterial","Vector4","Matrix4","Line3","Mesh"],"mappings":"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,SAAS,CAAC;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,CAAC,CAAC;AACd;CACA,EAAE,IAAI,qBAAqB,EAAE;CAC7B,GAAG,kBAAkB,IAAI,CAAC;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,CAAC,CAAC;CACd,GAAG;AACH;CACA,EAAE,IAAI,WAAW,EAAE;CACnB,GAAG,kBAAkB,IAAI,CAAC;AAC1B;AACA;AACA,YAAY,CAAC,CAAC;CACd,GAAG,MAAM;CACT,GAAG,kBAAkB,IAAI,kDAAkD,CAAC;CAC5E,GAAG;AACH;CACA,EAAE,kBAAkB,IAAI,CAAC;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,CAAC,CAAC;AACV;CACA;CACA,EAAE,IAAI,2BAA2B,IAAI,CAAC,EAAE;CACxC,GAAG,kBAAkB,IAAI,CAAC;AAC1B;AACA,YAAY,CAAC,CAAC;AACd;CACA,GAAG,IAAI,WAAW,EAAE;CACpB,IAAI,kBAAkB,IAAI,CAAC;AAC3B;AACA,gBAAgB,CAAC,CAAC;CAClB,IAAI,MAAM;CACV,IAAI,kBAAkB,IAAI,CAAC;AAC3B;AACA,gBAAgB,CAAC,CAAC;CAClB,IAAI;AACJ;CACA,GAAG,kBAAkB,IAAI,CAAC;AAC1B;AACA;AACA;AACA,YAAY,CAAC,CAAC;AACd;CACA,GAAG,IAAI,2BAA2B,IAAI,CAAC,EAAE;CACzC,IAAI,kBAAkB,IAAI,CAAC;AAC3B;AACA;AACA;AACA;AACA;AACA,gBAAgB,CAAC,CAAC;CAClB,IAAI;AACJ;CACA;CACA;CACA;AACA;CACA;CACA,GAAG,IAAI,2BAA2B,KAAK,CAAC,EAAE;CAC1C,IAAI,kBAAkB,IAAI,CAAC;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,CAAC,CAAC;CAClB;CACA,IAAI,MAAM,IAAI,2BAA2B,KAAK,CAAC,EAAE;CACjD,IAAI,kBAAkB,IAAI,CAAC;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,CAAC,CAAC;CAClB,IAAI;AACJ;CACA;CACA,GAAG,kBAAkB,IAAI,CAAC;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,CAAC,CAAC;AACd;CACA;CACA,GAAG,IAAI,2BAA2B,IAAI,CAAC,EAAE;CACzC,IAAI,kBAAkB,IAAI,CAAC;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,CAAC,CAAC;AAClB;CACA;CACA;CACA,IAAI,IAAI,2BAA2B,KAAK,CAAC,EAAE;CAC3C,KAAK,kBAAkB,IAAI,CAAC;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,CAAC,CAAC;CACtB,KAAK;AACL;CACA;CACA,IAAI,kBAAkB,IAAI,CAAC;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,CAAC,CAAC;CAClB,IAAI;AACJ;CACA,GAAG,kBAAkB,IAAI,CAAC;AAC1B;AACA;AACA;AACA;AACA;AACA,YAAY,CAAC,CAAC;CACd,GAAG;AACH;CACA,E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ACjB,GAAG,QAAQ,EAAEA,gBAAK,CAAC,cAAc;CACjC,GAAG,SAAS,EAAE,IAAI;CAClB,GAAG,UAAU,EAAE,KAAK;CACpB,GAAG,IAAI,EAAEA,gBAAK,CAAC,UAAU;CACzB,GAAG,CAAC,CAAC;AACL;CACA,EAAE,OAAO,QAAQ,CAAC;CAClB,EAAE;AACF;CACA,CAAC,OAAO,2BAA2B;CACnC,EAAE,WAAW;CACb,EAAE,qBAAqB;CACvB,EAAE,uBAAuB;CACzB,EAAE,YAAY;CACd,GAAG;CACH,EAAE,IAAI,kBAAkB,GAAG,CAAC;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,CAAC,CAAC;AACd;CACA,EAAE,IAAI,WAAW,EAAE;CACnB,GAAG,kBAAkB,IAAI,CAAC;AAC1B;AACA,gCAAgC,EAAE,YAAY,CAAC;AAC/C,gCAAgC,EAAE,YAAY,CAAC;AAC/C;AACA;AACA;AACA,YAAY,CAAC,CAAC;CACd,GAAG,MAAM;CACT,GAAG,kBAAkB,IAAI,CAAC;AAC1B,gCAAgC,EAAE,YAAY,CAAC;AAC/C,gCAAgC,EAAE,YAAY,CAAC;AAC/C,YAAY,CAAC,CAAC;CACd,GAAG;AACH;CACA,EAAE,kBAAkB,IAAI,CAAC;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2FAA2F,EAAE,QAAQ;AACrG,OAAO,uBAAuB;AAC9B,OAAO,CAAC;AACR,2FAA2F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ACA;AACA;AACA;AACA;AACA;AACA,QAAQ,CAAC,CAAC;AACV;CACA;CACA;CACA;CACA;CACA;AACA;CACA;CACA;CACA;CACA;CACA;AACA;CACA;CACA;CACA;CACA;AACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACA;CACA;CACA;CACA;CACA;CACA,EAAE,MAAM,uBAAuB,GAAG,CAAC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,CAAC,CAAC;AACV;CACA,EAAE,MAAM,oBAAoB,GAAG,KAAK,CAAC;CACrC,EAAE,IAAI,oBAAoB,EAAE;CAC5B,GAAG,kBAAkB,IAAI,uBAAuB,CAAC;CACjD,GAAG,MAAM;CACT;CACA;CACA;CACA;CACA,GAAG,kBAAkB,IAAI,CAAC;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,EAAE,uBAAuB,CAAC;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,CAAC,CAAC;CACd,GAAG;AACH;CACA,EAAE,kBAAkB,IAAI,aAAa,CAAC,qBAAqB,EAAE,CAAC;CAC9D,EAAE,kBAAkB,IAAI,GAAG,CAAC;AAC5B;CACA,EAAE,OAAO,kBAAkB,CAAC;CAC5B,EAAE;AACF;CACA,CAAC,OAAO,mBAAmB,GAAG;CAC9B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACA;CACA;CACA;CACA;AACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACA;CACA;CACA;CACA,EAAE,IAAI,oBAAoB,GAA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CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,CAAC,CAAC;AACV;CACA;CACA,EAAE,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;CAChD,EAAE,KAAK,CAAC,SAAS,GAAG,CAAC;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,CAAC,CAAC;AACV;CACA,EAAE,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;CAC1C,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AACnD;CACA;CACA,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;CAC3B,EAAE;AACF;CACA;CACA;CACA;CACA,CAAC,iBAAiB,GAAG;CACrB;CACA,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE,OAAO;AACnC;CACA;CACA,EAAE,IAAI,CAAC,cAAc,GAAG,CAAC,KAAK,KAAK;CACnC,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACvC,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;CAC9B,GAAG,CAAC;AACJ;CACA,EAAE,IAAI,CAAC,YAAY,GAAG,CAAC,KAAK,KAAK;CACjC,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;CACxC,GAAG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AC,CAAC;CACtD,GAAG;AACH;CACA;CACA,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;CACxD;CACA,GAAG,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;CACjD,GAAG,KAAK,CAAC,SAAS,GAAG,CAAC;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,CAAC,CAAC;AACd;CACA,GAAG,IAAI,CAA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EAAE;CAC3C,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;CACzB,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;CACxB,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;CACvB,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;AACtB;CACA,CAAC,CAAC;AACF;AACAU,gBAAS,EAAE,MAAM,EAAE,GAAG;AACtB;CACA,CAAC,QAAQ,EAAEC,mBAAa,CAAC,KAAK,EAAE;CAChC,EAAEF,iBAAW,CAAC,MAAM;CACpB,EAAEA,iBAAW,CAAC,GAAG;CACjB,EAAEA,iBAAW,CAAC,IAAI;CAClB,EAAE,EAAE;AACJ;CACA,CAAC,YAAY;CACb,WAAW,CAAC;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,CAAC;AACH;CACA,CAAC,cAAc;CACf,WAAW,CAAC;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,CAAC;CACH,CAAC,CAAC;AACF;CACA,MAAM,YAAY,SAASG,oBAAc,CAAC;AAC1C;CACA,CA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","x_google_ignoreList":[58,59,60,61,62]}