@soonspacejs/plugin-gs3d-loader 2.13.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":["../../../../node_modules/@mkkellogg/gaussian-splats-3d/build/gaussian-splats-3d.module.js","../src/index.ts"],"sourcesContent":["import * as THREE from 'three';\nimport { Ray as Ray$1, Plane, MathUtils, EventDispatcher, Vector3, MOUSE, TOUCH, Quaternion, Spherical, Vector2 } from 'three';\n\n/**\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 */\nclass AbortablePromise {\n\n static idGen = 0;\n\n constructor(promiseFunc, abortHandler) {\n\n let resolver;\n let rejecter;\n this.promise = new Promise((resolve, reject) => {\n resolver = resolve;\n rejecter = reject;\n });\n\n const promiseResolve = resolver.bind(this);\n const promiseReject = rejecter.bind(this);\n\n const resolve = (...args) => {\n promiseResolve(...args);\n };\n\n const reject = (error) => {\n promiseReject(error);\n };\n\n promiseFunc(resolve.bind(this), reject.bind(this));\n this.abortHandler = abortHandler;\n this.id = AbortablePromise.idGen++;\n }\n\n then(onResolve) {\n return new AbortablePromise((resolve, reject) => {\n this.promise = this.promise\n .then((...args) => {\n const onResolveResult = onResolve(...args);\n if (onResolveResult instanceof Promise || onResolveResult instanceof AbortablePromise) {\n onResolveResult.then((...args2) => {\n resolve(...args2);\n });\n } else {\n resolve(onResolveResult);\n }\n })\n .catch((error) => {\n reject(error);\n });\n }, this.abortHandler);\n }\n\n catch(onFail) {\n return new AbortablePromise((resolve) => {\n this.promise = this.promise.then((...args) => {\n resolve(...args);\n })\n .catch(onFail);\n }, this.abortHandler);\n }\n\n abort(reason) {\n if (this.abortHandler) this.abortHandler(reason);\n }\n\n}\n\nclass AbortedPromiseError extends Error {\n\n constructor(msg) {\n super(msg);\n }\n\n}\n\nconst floatToHalf = function() {\n\n const floatView = new Float32Array(1);\n const int32View = new Int32Array(floatView.buffer);\n\n return function(val) {\n floatView[0] = val;\n const x = int32View[0];\n\n let bits = (x >> 16) & 0x8000;\n let m = (x >> 12) & 0x07ff;\n const e = (x >> 23) & 0xff;\n\n if (e < 103) return bits;\n\n if (e > 142) {\n bits |= 0x7c00;\n bits |= ((e == 255) ? 0 : 1) && (x & 0x007fffff);\n return bits;\n }\n\n if (e < 113) {\n m |= 0x0800;\n bits |= (m >> (114 - e)) + ((m >> (113 - e)) & 1);\n return bits;\n }\n\n bits |= (( e - 112) << 10) | (m >> 1);\n bits += m & 1;\n return bits;\n };\n\n}();\n\nconst uintEncodedFloat = function() {\n\n const floatView = new Float32Array(1);\n const int32View = new Int32Array(floatView.buffer);\n\n return function(f) {\n floatView[0] = f;\n return int32View[0];\n };\n\n}();\n\nconst rgbaToInteger = function(r, g, b, a) {\n return r + (g << 8) + (b << 16) + (a << 24);\n};\n\nconst rgbaArrayToInteger = function(arr, offset) {\n return arr[offset] + (arr[offset + 1] << 8) + (arr[offset + 2] << 16) + (arr[offset + 3] << 24);\n};\n\nconst fetchWithProgress = function(path, onProgress, saveChunks = true, headers) {\n\n const abortController = new AbortController();\n const signal = abortController.signal;\n let aborted = false;\n const abortHandler = (reason) => {\n abortController.abort(reason);\n aborted = true;\n };\n\n let onProgressCalledAtComplete = false;\n const localOnProgress = (percent, percentLabel, chunk, fileSize) => {\n if (onProgress && !onProgressCalledAtComplete) {\n onProgress(percent, percentLabel, chunk, fileSize);\n if (percent === 100) {\n onProgressCalledAtComplete = true;\n }\n }\n };\n\n return new AbortablePromise((resolve, reject) => {\n const fetchOptions = { signal };\n if (headers) fetchOptions.headers = headers;\n fetch(path, fetchOptions)\n .then(async (data) => {\n // Handle error conditions where data is still returned\n if (!data.ok) {\n const errorText = await data.text();\n reject(new Error(`Fetch failed: ${data.status} ${data.statusText} ${errorText}`));\n return;\n }\n\n const reader = data.body.getReader();\n let bytesDownloaded = 0;\n let _fileSize = data.headers.get('Content-Length');\n let fileSize = _fileSize ? parseInt(_fileSize) : undefined;\n\n const chunks = [];\n\n while (!aborted) {\n try {\n const { value: chunk, done } = await reader.read();\n if (done) {\n localOnProgress(100, '100%', chunk, fileSize);\n if (saveChunks) {\n const buffer = new Blob(chunks).arrayBuffer();\n resolve(buffer);\n } else {\n resolve();\n }\n break;\n }\n bytesDownloaded += chunk.length;\n let percent;\n let percentLabel;\n if (fileSize !== undefined) {\n percent = bytesDownloaded / fileSize * 100;\n percentLabel = `${percent.toFixed(2)}%`;\n }\n if (saveChunks) {\n chunks.push(chunk);\n }\n localOnProgress(percent, percentLabel, chunk, fileSize);\n } catch (error) {\n reject(error);\n return;\n }\n }\n })\n .catch((error) => {\n reject(new AbortedPromiseError(error));\n });\n }, abortHandler);\n\n};\n\nconst clamp = function(val, min, max) {\n return Math.max(Math.min(val, max), min);\n};\n\nconst getCurrentTime = function() {\n return performance.now() / 1000;\n};\n\nconst disposeAllMeshes = (object3D) => {\n if (object3D.geometry) {\n object3D.geometry.dispose();\n object3D.geometry = null;\n }\n if (object3D.material) {\n object3D.material.dispose();\n object3D.material = null;\n }\n if (object3D.children) {\n for (let child of object3D.children) {\n disposeAllMeshes(child);\n }\n }\n};\n\nconst delayedExecute = (func, fast) => {\n return new Promise((resolve) => {\n window.setTimeout(() => {\n resolve(func ? func() : undefined);\n }, fast ? 1 : 50);\n });\n};\n\n\nconst getSphericalHarmonicsComponentCountForDegree = (sphericalHarmonicsDegree = 0) => {\n let shCoeffPerSplat = 0;\n if (sphericalHarmonicsDegree === 1) {\n shCoeffPerSplat = 9;\n } else if (sphericalHarmonicsDegree === 2) {\n shCoeffPerSplat = 24;\n } else if (sphericalHarmonicsDegree === 3) {\n shCoeffPerSplat = 45;\n } else if (sphericalHarmonicsDegree > 3) {\n throw new Error('getSphericalHarmonicsComponentCountForDegree() -> Invalid spherical harmonics degree');\n }\n return shCoeffPerSplat;\n};\n\nconst nativePromiseWithExtractedComponents = () => {\n let resolver;\n let rejecter;\n const promise = new Promise((resolve, reject) => {\n resolver = resolve;\n rejecter = reject;\n });\n return {\n 'promise': promise,\n 'resolve': resolver,\n 'reject': rejecter\n };\n};\n\nconst abortablePromiseWithExtractedComponents = (abortHandler) => {\n let resolver;\n let rejecter;\n if (!abortHandler) {\n abortHandler = () => {};\n }\n const promise = new AbortablePromise((resolve, reject) => {\n resolver = resolve;\n rejecter = reject;\n }, abortHandler);\n return {\n 'promise': promise,\n 'resolve': resolver,\n 'reject': rejecter\n };\n};\n\nclass Semver {\n constructor(major, minor, patch) {\n this.major = major;\n this.minor = minor;\n this.patch = patch;\n }\n\n toString() {\n return `${this.major}_${this.minor}_${this.patch}`;\n }\n}\n\nfunction isIOS() {\n const ua = navigator.userAgent;\n return ua.indexOf('iPhone') > 0 || ua.indexOf('iPad') > 0;\n}\n\nfunction getIOSSemever() {\n if (isIOS()) {\n const extract = navigator.userAgent.match(/OS (\\d+)_(\\d+)_?(\\d+)?/);\n return new Semver(\n parseInt(extract[1] || 0, 10),\n parseInt(extract[2] || 0, 10),\n parseInt(extract[3] || 0, 10)\n );\n } else {\n return null; // or [0,0,0]\n }\n}\n\nconst BASE_COMPONENT_COUNT = 14;\n\nclass UncompressedSplatArray {\n\n static OFFSET = {\n X: 0,\n Y: 1,\n Z: 2,\n SCALE0: 3,\n SCALE1: 4,\n SCALE2: 5,\n ROTATION0: 6,\n ROTATION1: 7,\n ROTATION2: 8,\n ROTATION3: 9,\n FDC0: 10,\n FDC1: 11,\n FDC2: 12,\n OPACITY: 13,\n FRC0: 14,\n FRC1: 15,\n FRC2: 16,\n FRC3: 17,\n FRC4: 18,\n FRC5: 19,\n FRC6: 20,\n FRC7: 21,\n FRC8: 22,\n FRC9: 23,\n FRC10: 24,\n FRC11: 25,\n FRC12: 26,\n FRC13: 27,\n FRC14: 28,\n FRC15: 29,\n FRC16: 30,\n FRC17: 31,\n FRC18: 32,\n FRC19: 33,\n FRC20: 34,\n FRC21: 35,\n FRC22: 36,\n FRC23: 37\n };\n\n constructor(sphericalHarmonicsDegree = 0) {\n this.sphericalHarmonicsDegree = sphericalHarmonicsDegree;\n this.sphericalHarmonicsCount = getSphericalHarmonicsComponentCountForDegree(this.sphericalHarmonicsDegree);\n this.componentCount = this.sphericalHarmonicsCount + BASE_COMPONENT_COUNT;\n this.defaultSphericalHarmonics = new Array(this.sphericalHarmonicsCount).fill(0);\n this.splats = [];\n this.splatCount = 0;\n }\n\n static createSplat(sphericalHarmonicsDegree = 0) {\n const baseSplat = [0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0];\n let shEntries = getSphericalHarmonicsComponentCountForDegree(sphericalHarmonicsDegree);\n for (let i = 0; i < shEntries; i++) baseSplat.push(0);\n return baseSplat;\n }\n\n addSplat(splat) {\n this.splats.push(splat);\n this.splatCount++;\n }\n\n getSplat(index) {\n return this.splats[index];\n }\n\n addDefaultSplat() {\n const newSplat = UncompressedSplatArray.createSplat(this.sphericalHarmonicsDegree);\n this.addSplat(newSplat);\n return newSplat;\n }\n\n addSplatFromComonents(x, y, z, scale0, scale1, scale2, rot0, rot1, rot2, rot3, r, g, b, opacity, ...rest) {\n const newSplat = [x, y, z, scale0, scale1, scale2, rot0, rot1, rot2, rot3, r, g, b, opacity, ...this.defaultSphericalHarmonics];\n for (let i = 0; i < rest.length && i < this.sphericalHarmonicsCount; i++) {\n newSplat[i] = rest[i];\n }\n this.addSplat(newSplat);\n return newSplat;\n }\n\n addSplatFromArray(src, srcIndex) {\n const srcSplat = src.splats[srcIndex];\n const newSplat = UncompressedSplatArray.createSplat(this.sphericalHarmonicsDegree);\n for (let i = 0; i < this.componentCount && i < srcSplat.length; i++) {\n newSplat[i] = srcSplat[i];\n }\n this.addSplat(newSplat);\n }\n}\n\nclass Constants {\n\n static DefaultSplatSortDistanceMapPrecision = 16;\n static MemoryPageSize = 65536;\n static BytesPerFloat = 4;\n static BytesPerInt = 4;\n static MaxScenes = 32;\n static ProgressiveLoadSectionSize = 262144;\n static ProgressiveLoadSectionDelayDuration = 15;\n static SphericalHarmonics8BitCompressionRange = 3;\n}\n\nconst DefaultSphericalHarmonics8BitCompressionRange = Constants.SphericalHarmonics8BitCompressionRange;\nconst DefaultSphericalHarmonics8BitCompressionHalfRange = DefaultSphericalHarmonics8BitCompressionRange / 2.0;\n\nconst toHalfFloat = THREE.DataUtils.toHalfFloat.bind(THREE.DataUtils);\nconst fromHalfFloat$1 = THREE.DataUtils.fromHalfFloat.bind(THREE.DataUtils);\n\nconst toUncompressedFloat = (f, compressionLevel, isSH = false, range8BitMin, range8BitMax) => {\n if (compressionLevel === 0) {\n return f;\n } else if (compressionLevel === 1 || compressionLevel === 2 && !isSH) {\n return THREE.DataUtils.fromHalfFloat(f);\n } else if (compressionLevel === 2) {\n return fromUint8(f, range8BitMin, range8BitMax);\n }\n};\n\nconst toUint8 = (v, rangeMin, rangeMax) => {\n v = clamp(v, rangeMin, rangeMax);\n const range = (rangeMax - rangeMin);\n return clamp(Math.floor((v - rangeMin) / range * 255), 0, 255);\n};\n\nconst fromUint8 = (v, rangeMin, rangeMax) => {\n const range = (rangeMax - rangeMin);\n return (v / 255 * range + rangeMin);\n};\n\nconst fromHalfFloatToUint8 = (v, rangeMin, rangeMax) => {\n return toUint8(fromHalfFloat$1(v, rangeMin, rangeMax));\n};\n\nconst fromUint8ToHalfFloat = (v, rangeMin, rangeMax) => {\n return toHalfFloat(fromUint8(v, rangeMin, rangeMax));\n};\n\nconst dataViewFloatForCompressionLevel = (dataView, floatIndex, compressionLevel, isSH = false) => {\n if (compressionLevel === 0) {\n return dataView.getFloat32(floatIndex * 4, true);\n } else if (compressionLevel === 1 || compressionLevel === 2 && !isSH) {\n return dataView.getUint16(floatIndex * 2, true);\n } else {\n return dataView.getUint8(floatIndex, true);\n }\n};\n\nconst convertBetweenCompressionLevels = function() {\n\n const noop = (v) => v;\n\n return function(val, fromLevel, toLevel, isSH = false) {\n if (fromLevel === toLevel) return val;\n let outputConversionFunc = noop;\n\n if (fromLevel === 2 && isSH) {\n if (toLevel === 1) outputConversionFunc = fromUint8ToHalfFloat;\n else if (toLevel == 0) {\n outputConversionFunc = fromUint8;\n }\n } else if (fromLevel === 2 || fromLevel === 1) {\n if (toLevel === 0) outputConversionFunc = fromHalfFloat$1;\n else if (toLevel == 2) {\n if (!isSH) outputConversionFunc = noop;\n else outputConversionFunc = fromHalfFloatToUint8;\n }\n } else if (fromLevel === 0) {\n if (toLevel === 1) outputConversionFunc = toHalfFloat;\n else if (toLevel == 2) {\n if (!isSH) outputConversionFunc = toHalfFloat;\n else outputConversionFunc = toUint8;\n }\n }\n\n return outputConversionFunc(val);\n };\n\n}();\n\nconst copyBetweenBuffers = (srcBuffer, srcOffset, destBuffer, destOffset, byteCount = 0) => {\n const src = new Uint8Array(srcBuffer, srcOffset);\n const dest = new Uint8Array(destBuffer, destOffset);\n for (let i = 0; i < byteCount; i++) {\n dest[i] = src[i];\n }\n};\n\n/**\n * SplatBuffer: Container for splat data from a single scene/file and capable of (mediocre) compression.\n */\nclass SplatBuffer {\n\n static CurrentMajorVersion = 0;\n static CurrentMinorVersion = 1;\n\n static CenterComponentCount = 3;\n static ScaleComponentCount = 3;\n static RotationComponentCount = 4;\n static ColorComponentCount = 4;\n static CovarianceComponentCount = 6;\n\n static SplatScaleOffsetFloat = 3;\n static SplatRotationOffsetFloat = 6;\n\n static CompressionLevels = {\n 0: {\n BytesPerCenter: 12,\n BytesPerScale: 12,\n BytesPerRotation: 16,\n BytesPerColor: 4,\n ScaleOffsetBytes: 12,\n RotationffsetBytes: 24,\n ColorOffsetBytes: 40,\n SphericalHarmonicsOffsetBytes: 44,\n ScaleRange: 1,\n BytesPerSphericalHarmonicsComponent: 4,\n SphericalHarmonicsOffsetFloat: 11,\n SphericalHarmonicsDegrees: {\n 0: { BytesPerSplat: 44 },\n 1: { BytesPerSplat: 80 },\n 2: { BytesPerSplat: 140 }\n },\n },\n 1: {\n BytesPerCenter: 6,\n BytesPerScale: 6,\n BytesPerRotation: 8,\n BytesPerColor: 4,\n ScaleOffsetBytes: 6,\n RotationffsetBytes: 12,\n ColorOffsetBytes: 20,\n SphericalHarmonicsOffsetBytes: 24,\n ScaleRange: 32767,\n BytesPerSphericalHarmonicsComponent: 2,\n SphericalHarmonicsOffsetFloat: 12,\n SphericalHarmonicsDegrees: {\n 0: { BytesPerSplat: 24 },\n 1: { BytesPerSplat: 42 },\n 2: { BytesPerSplat: 72 }\n },\n },\n 2: {\n BytesPerCenter: 6,\n BytesPerScale: 6,\n BytesPerRotation: 8,\n BytesPerColor: 4,\n ScaleOffsetBytes: 6,\n RotationffsetBytes: 12,\n ColorOffsetBytes: 20,\n SphericalHarmonicsOffsetBytes: 24,\n ScaleRange: 32767,\n BytesPerSphericalHarmonicsComponent: 1,\n SphericalHarmonicsOffsetFloat: 12,\n SphericalHarmonicsDegrees: {\n 0: { BytesPerSplat: 24 },\n 1: { BytesPerSplat: 33 },\n 2: { BytesPerSplat: 48 }\n },\n }\n };\n\n static CovarianceSizeFloats = 6;\n\n static HeaderSizeBytes = 4096;\n static SectionHeaderSizeBytes = 1024;\n\n static BucketStorageSizeBytes = 12;\n static BucketStorageSizeFloats = 3;\n\n static BucketBlockSize = 5.0;\n static BucketSize = 256;\n\n constructor(bufferData, secLoadedCountsToMax = true) {\n this.constructFromBuffer(bufferData, secLoadedCountsToMax);\n }\n\n getSplatCount() {\n return this.splatCount;\n }\n\n getMaxSplatCount() {\n return this.maxSplatCount;\n }\n\n getMinSphericalHarmonicsDegree() {\n let minSphericalHarmonicsDegree = 0;\n for (let i = 0; i < this.sections.length; i++) {\n const section = this.sections[i];\n if (i === 0 || section.sphericalHarmonicsDegree < minSphericalHarmonicsDegree) {\n minSphericalHarmonicsDegree = section.sphericalHarmonicsDegree;\n }\n }\n return minSphericalHarmonicsDegree;\n }\n\n getBucketIndex(section, localSplatIndex) {\n let bucketIndex;\n const maxSplatIndexInFullBuckets = section.fullBucketCount * section.bucketSize;\n if (localSplatIndex < maxSplatIndexInFullBuckets) {\n bucketIndex = Math.floor(localSplatIndex / section.bucketSize);\n } else {\n let bucketSplatIndex = maxSplatIndexInFullBuckets;\n bucketIndex = section.fullBucketCount;\n let partiallyFullBucketIndex = 0;\n while (bucketSplatIndex < section.splatCount) {\n let currentPartiallyFilledBucketSize = section.partiallyFilledBucketLengths[partiallyFullBucketIndex];\n if (localSplatIndex >= bucketSplatIndex && localSplatIndex < bucketSplatIndex + currentPartiallyFilledBucketSize) {\n break;\n }\n bucketSplatIndex += currentPartiallyFilledBucketSize;\n bucketIndex++;\n partiallyFullBucketIndex++;\n }\n }\n return bucketIndex;\n }\n\n getSplatCenter(globalSplatIndex, outCenter, transform) {\n const sectionIndex = this.globalSplatIndexToSectionMap[globalSplatIndex];\n const section = this.sections[sectionIndex];\n const localSplatIndex = globalSplatIndex - section.splatCountOffset;\n\n const srcSplatCentersBase = section.bytesPerSplat * localSplatIndex;\n const dataView = new DataView(this.bufferData, section.dataBase + srcSplatCentersBase);\n\n const x = dataViewFloatForCompressionLevel(dataView, 0, this.compressionLevel);\n const y = dataViewFloatForCompressionLevel(dataView, 1, this.compressionLevel);\n const z = dataViewFloatForCompressionLevel(dataView, 2, this.compressionLevel);\n if (this.compressionLevel >= 1) {\n const bucketIndex = this.getBucketIndex(section, localSplatIndex);\n const bucketBase = bucketIndex * SplatBuffer.BucketStorageSizeFloats;\n const sf = section.compressionScaleFactor;\n const sr = section.compressionScaleRange;\n outCenter.x = (x - sr) * sf + section.bucketArray[bucketBase];\n outCenter.y = (y - sr) * sf + section.bucketArray[bucketBase + 1];\n outCenter.z = (z - sr) * sf + section.bucketArray[bucketBase + 2];\n } else {\n outCenter.x = x;\n outCenter.y = y;\n outCenter.z = z;\n }\n if (transform) outCenter.applyMatrix4(transform);\n }\n\n getSplatScaleAndRotation = function() {\n\n const scaleMatrix = new THREE.Matrix4();\n const rotationMatrix = new THREE.Matrix4();\n const tempMatrix = new THREE.Matrix4();\n const tempPosition = new THREE.Vector3();\n const scale = new THREE.Vector3();\n const rotation = new THREE.Quaternion();\n\n return function(index, outScale, outRotation, transform, scaleOverride) {\n const sectionIndex = this.globalSplatIndexToSectionMap[index];\n const section = this.sections[sectionIndex];\n const localSplatIndex = index - section.splatCountOffset;\n\n const srcSplatScalesBase = section.bytesPerSplat * localSplatIndex +\n SplatBuffer.CompressionLevels[this.compressionLevel].ScaleOffsetBytes;\n\n const dataView = new DataView(this.bufferData, section.dataBase + srcSplatScalesBase);\n\n scale.set(toUncompressedFloat(dataViewFloatForCompressionLevel(dataView, 0, this.compressionLevel), this.compressionLevel),\n toUncompressedFloat(dataViewFloatForCompressionLevel(dataView, 1, this.compressionLevel), this.compressionLevel),\n toUncompressedFloat(dataViewFloatForCompressionLevel(dataView, 2, this.compressionLevel), this.compressionLevel));\n if (scaleOverride) {\n if (scaleOverride.x !== undefined) scale.x = scaleOverride.x;\n if (scaleOverride.y !== undefined) scale.y = scaleOverride.y;\n if (scaleOverride.z !== undefined) scale.z = scaleOverride.z;\n }\n\n rotation.set(toUncompressedFloat(dataViewFloatForCompressionLevel(dataView, 4, this.compressionLevel), this.compressionLevel),\n toUncompressedFloat(dataViewFloatForCompressionLevel(dataView, 5, this.compressionLevel), this.compressionLevel),\n toUncompressedFloat(dataViewFloatForCompressionLevel(dataView, 6, this.compressionLevel), this.compressionLevel),\n toUncompressedFloat(dataViewFloatForCompressionLevel(dataView, 3, this.compressionLevel), this.compressionLevel));\n\n if (transform) {\n scaleMatrix.makeScale(scale.x, scale.y, scale.z);\n rotationMatrix.makeRotationFromQuaternion(rotation);\n tempMatrix.copy(scaleMatrix).multiply(rotationMatrix).multiply(transform);\n tempMatrix.decompose(tempPosition, outRotation, outScale);\n } else {\n outScale.copy(scale);\n outRotation.copy(rotation);\n }\n };\n\n }();\n\n getSplatColor(globalSplatIndex, outColor) {\n const sectionIndex = this.globalSplatIndexToSectionMap[globalSplatIndex];\n const section = this.sections[sectionIndex];\n const localSplatIndex = globalSplatIndex - section.splatCountOffset;\n\n const srcSplatColorsBase = section.bytesPerSplat * localSplatIndex +\n SplatBuffer.CompressionLevels[this.compressionLevel].ColorOffsetBytes;\n const splatColorsArray = new Uint8Array(this.bufferData, section.dataBase + srcSplatColorsBase, 4);\n\n outColor.set(splatColorsArray[0], splatColorsArray[1],\n splatColorsArray[2], splatColorsArray[3]);\n }\n\n fillSplatCenterArray(outCenterArray, transform, srcFrom, srcTo, destFrom) {\n const splatCount = this.splatCount;\n\n srcFrom = srcFrom || 0;\n srcTo = srcTo || splatCount - 1;\n if (destFrom === undefined) destFrom = srcFrom;\n\n const center = new THREE.Vector3();\n for (let i = srcFrom; i <= srcTo; i++) {\n const sectionIndex = this.globalSplatIndexToSectionMap[i];\n const section = this.sections[sectionIndex];\n const localSplatIndex = i - section.splatCountOffset;\n const centerDestBase = (i - srcFrom + destFrom) * SplatBuffer.CenterComponentCount;\n\n const srcSplatCentersBase = section.bytesPerSplat * localSplatIndex;\n const dataView = new DataView(this.bufferData, section.dataBase + srcSplatCentersBase);\n\n const x = dataViewFloatForCompressionLevel(dataView, 0, this.compressionLevel);\n const y = dataViewFloatForCompressionLevel(dataView, 1, this.compressionLevel);\n const z = dataViewFloatForCompressionLevel(dataView, 2, this.compressionLevel);\n if (this.compressionLevel >= 1) {\n const bucketIndex = this.getBucketIndex(section, localSplatIndex);\n const bucketBase = bucketIndex * SplatBuffer.BucketStorageSizeFloats;\n const sf = section.compressionScaleFactor;\n const sr = section.compressionScaleRange;\n center.x = (x - sr) * sf + section.bucketArray[bucketBase];\n center.y = (y - sr) * sf + section.bucketArray[bucketBase + 1];\n center.z = (z - sr) * sf + section.bucketArray[bucketBase + 2];\n } else {\n center.x = x;\n center.y = y;\n center.z = z;\n }\n if (transform) {\n center.applyMatrix4(transform);\n }\n outCenterArray[centerDestBase] = center.x;\n outCenterArray[centerDestBase + 1] = center.y;\n outCenterArray[centerDestBase + 2] = center.z;\n }\n }\n\n fillSplatScaleRotationArray = function() {\n\n const scaleMatrix = new THREE.Matrix4();\n const rotationMatrix = new THREE.Matrix4();\n const tempMatrix = new THREE.Matrix4();\n const scale = new THREE.Vector3();\n const rotation = new THREE.Quaternion();\n const tempPosition = new THREE.Vector3();\n\n const ensurePositiveW = (quaternion) => {\n const flip = quaternion.w < 0 ? -1 : 1;\n quaternion.x *= flip;\n quaternion.y *= flip;\n quaternion.z *= flip;\n quaternion.w *= flip;\n };\n\n return function(outScaleArray, outRotationArray, transform, srcFrom, srcTo, destFrom,\n desiredOutputCompressionLevel, scaleOverride) {\n const splatCount = this.splatCount;\n\n srcFrom = srcFrom || 0;\n srcTo = srcTo || splatCount - 1;\n if (destFrom === undefined) destFrom = srcFrom;\n\n const outputConversion = (value, srcCompressionLevel) => {\n if (srcCompressionLevel === undefined) srcCompressionLevel = this.compressionLevel;\n return convertBetweenCompressionLevels(value, srcCompressionLevel, desiredOutputCompressionLevel);\n };\n\n for (let i = srcFrom; i <= srcTo; i++) {\n const sectionIndex = this.globalSplatIndexToSectionMap[i];\n const section = this.sections[sectionIndex];\n const localSplatIndex = i - section.splatCountOffset;\n\n const srcSplatScalesBase = section.bytesPerSplat * localSplatIndex +\n SplatBuffer.CompressionLevels[this.compressionLevel].ScaleOffsetBytes;\n\n const scaleDestBase = (i - srcFrom + destFrom) * SplatBuffer.ScaleComponentCount;\n const rotationDestBase = (i - srcFrom + destFrom) * SplatBuffer.RotationComponentCount;\n const dataView = new DataView(this.bufferData, section.dataBase + srcSplatScalesBase);\n\n const srcScaleX = (scaleOverride && scaleOverride.x !== undefined) ? scaleOverride.x :\n dataViewFloatForCompressionLevel(dataView, 0, this.compressionLevel);\n const srcScaleY = (scaleOverride && scaleOverride.y !== undefined) ? scaleOverride.y :\n dataViewFloatForCompressionLevel(dataView, 1, this.compressionLevel);\n const srcScaleZ = (scaleOverride && scaleOverride.z !== undefined) ? scaleOverride.z :\n dataViewFloatForCompressionLevel(dataView, 2, this.compressionLevel);\n\n const srcRotationW = dataViewFloatForCompressionLevel(dataView, 3, this.compressionLevel);\n const srcRotationX = dataViewFloatForCompressionLevel(dataView, 4, this.compressionLevel);\n const srcRotationY = dataViewFloatForCompressionLevel(dataView, 5, this.compressionLevel);\n const srcRotationZ = dataViewFloatForCompressionLevel(dataView, 6, this.compressionLevel);\n\n scale.set(toUncompressedFloat(srcScaleX, this.compressionLevel),\n toUncompressedFloat(srcScaleY, this.compressionLevel),\n toUncompressedFloat(srcScaleZ, this.compressionLevel));\n\n rotation.set(toUncompressedFloat(srcRotationX, this.compressionLevel),\n toUncompressedFloat(srcRotationY, this.compressionLevel),\n toUncompressedFloat(srcRotationZ, this.compressionLevel),\n toUncompressedFloat(srcRotationW, this.compressionLevel)).normalize();\n\n if (transform) {\n tempPosition.set(0, 0, 0);\n scaleMatrix.makeScale(scale.x, scale.y, scale.z);\n rotationMatrix.makeRotationFromQuaternion(rotation);\n tempMatrix.identity().premultiply(scaleMatrix).premultiply(rotationMatrix);\n tempMatrix.premultiply(transform);\n tempMatrix.decompose(tempPosition, rotation, scale);\n rotation.normalize();\n }\n\n ensurePositiveW(rotation);\n\n if (outScaleArray) {\n outScaleArray[scaleDestBase] = outputConversion(scale.x, 0);\n outScaleArray[scaleDestBase + 1] = outputConversion(scale.y, 0);\n outScaleArray[scaleDestBase + 2] = outputConversion(scale.z, 0);\n }\n\n if (outRotationArray) {\n outRotationArray[rotationDestBase] = outputConversion(rotation.x, 0);\n outRotationArray[rotationDestBase + 1] = outputConversion(rotation.y, 0);\n outRotationArray[rotationDestBase + 2] = outputConversion(rotation.z, 0);\n outRotationArray[rotationDestBase + 3] = outputConversion(rotation.w, 0);\n }\n }\n };\n }();\n\n static computeCovariance = function() {\n\n const tempMatrix4 = new THREE.Matrix4();\n const scaleMatrix = new THREE.Matrix3();\n const rotationMatrix = new THREE.Matrix3();\n const covarianceMatrix = new THREE.Matrix3();\n const transformedCovariance = new THREE.Matrix3();\n const transform3x3 = new THREE.Matrix3();\n const transform3x3Transpose = new THREE.Matrix3();\n\n return function(scale, rotation, transform, outCovariance, outOffset = 0, desiredOutputCompressionLevel) {\n\n tempMatrix4.makeScale(scale.x, scale.y, scale.z);\n scaleMatrix.setFromMatrix4(tempMatrix4);\n\n tempMatrix4.makeRotationFromQuaternion(rotation);\n rotationMatrix.setFromMatrix4(tempMatrix4);\n\n covarianceMatrix.copy(rotationMatrix).multiply(scaleMatrix);\n transformedCovariance.copy(covarianceMatrix).transpose().premultiply(covarianceMatrix);\n\n if (transform) {\n transform3x3.setFromMatrix4(transform);\n transform3x3Transpose.copy(transform3x3).transpose();\n transformedCovariance.multiply(transform3x3Transpose);\n transformedCovariance.premultiply(transform3x3);\n }\n\n if (desiredOutputCompressionLevel >= 1) {\n outCovariance[outOffset] = toHalfFloat(transformedCovariance.elements[0]);\n outCovariance[outOffset + 1] = toHalfFloat(transformedCovariance.elements[3]);\n outCovariance[outOffset + 2] = toHalfFloat(transformedCovariance.elements[6]);\n outCovariance[outOffset + 3] = toHalfFloat(transformedCovariance.elements[4]);\n outCovariance[outOffset + 4] = toHalfFloat(transformedCovariance.elements[7]);\n outCovariance[outOffset + 5] = toHalfFloat(transformedCovariance.elements[8]);\n } else {\n outCovariance[outOffset] = transformedCovariance.elements[0];\n outCovariance[outOffset + 1] = transformedCovariance.elements[3];\n outCovariance[outOffset + 2] = transformedCovariance.elements[6];\n outCovariance[outOffset + 3] = transformedCovariance.elements[4];\n outCovariance[outOffset + 4] = transformedCovariance.elements[7];\n outCovariance[outOffset + 5] = transformedCovariance.elements[8];\n }\n\n };\n\n }();\n\n fillSplatCovarianceArray(covarianceArray, transform, srcFrom, srcTo, destFrom, desiredOutputCompressionLevel) {\n const splatCount = this.splatCount;\n\n const scale = new THREE.Vector3();\n const rotation = new THREE.Quaternion();\n\n srcFrom = srcFrom || 0;\n srcTo = srcTo || splatCount - 1;\n if (destFrom === undefined) destFrom = srcFrom;\n\n for (let i = srcFrom; i <= srcTo; i++) {\n const sectionIndex = this.globalSplatIndexToSectionMap[i];\n const section = this.sections[sectionIndex];\n const localSplatIndex = i - section.splatCountOffset;\n\n const covarianceDestBase = (i - srcFrom + destFrom) * SplatBuffer.CovarianceComponentCount;\n const srcSplatScalesBase = section.bytesPerSplat * localSplatIndex +\n SplatBuffer.CompressionLevels[this.compressionLevel].ScaleOffsetBytes;\n\n const dataView = new DataView(this.bufferData, section.dataBase + srcSplatScalesBase);\n\n scale.set(toUncompressedFloat(dataViewFloatForCompressionLevel(dataView, 0, this.compressionLevel), this.compressionLevel),\n toUncompressedFloat(dataViewFloatForCompressionLevel(dataView, 1, this.compressionLevel), this.compressionLevel),\n toUncompressedFloat(dataViewFloatForCompressionLevel(dataView, 2, this.compressionLevel), this.compressionLevel));\n\n rotation.set(toUncompressedFloat(dataViewFloatForCompressionLevel(dataView, 4, this.compressionLevel), this.compressionLevel),\n toUncompressedFloat(dataViewFloatForCompressionLevel(dataView, 5, this.compressionLevel), this.compressionLevel),\n toUncompressedFloat(dataViewFloatForCompressionLevel(dataView, 6, this.compressionLevel), this.compressionLevel),\n toUncompressedFloat(dataViewFloatForCompressionLevel(dataView, 3, this.compressionLevel), this.compressionLevel));\n\n SplatBuffer.computeCovariance(scale, rotation, transform, covarianceArray, covarianceDestBase, desiredOutputCompressionLevel);\n }\n }\n\n fillSplatColorArray(outColorArray, minimumAlpha, srcFrom, srcTo, destFrom) {\n const splatCount = this.splatCount;\n\n srcFrom = srcFrom || 0;\n srcTo = srcTo || splatCount - 1;\n if (destFrom === undefined) destFrom = srcFrom;\n\n for (let i = srcFrom; i <= srcTo; i++) {\n\n const sectionIndex = this.globalSplatIndexToSectionMap[i];\n const section = this.sections[sectionIndex];\n const localSplatIndex = i - section.splatCountOffset;\n\n const colorDestBase = (i - srcFrom + destFrom) * SplatBuffer.ColorComponentCount;\n const srcSplatColorsBase = section.bytesPerSplat * localSplatIndex +\n SplatBuffer.CompressionLevels[this.compressionLevel].ColorOffsetBytes;\n\n const dataView = new Uint8Array(this.bufferData, section.dataBase + srcSplatColorsBase);\n\n let alpha = dataView[3];\n alpha = (alpha >= minimumAlpha) ? alpha : 0;\n\n outColorArray[colorDestBase] = dataView[0];\n outColorArray[colorDestBase + 1] = dataView[1];\n outColorArray[colorDestBase + 2] = dataView[2];\n outColorArray[colorDestBase + 3] = alpha;\n }\n }\n\n fillSphericalHarmonicsArray = function() {\n\n const sphericalHarmonicVectors = [];\n for (let i = 0; i < 15; i++) {\n sphericalHarmonicVectors[i] = new THREE.Vector3();\n }\n\n const tempMatrix3 = new THREE.Matrix3();\n const tempMatrix4 = new THREE.Matrix4();\n\n const tempTranslation = new THREE.Vector3();\n const tempScale = new THREE.Vector3();\n const tempRotation = new THREE.Quaternion();\n\n const sh11 = [];\n const sh12 = [];\n const sh13 = [];\n\n const sh21 = [];\n const sh22 = [];\n const sh23 = [];\n const sh24 = [];\n const sh25 = [];\n\n const shIn1 = [];\n const shIn2 = [];\n const shIn3 = [];\n const shIn4 = [];\n const shIn5 = [];\n\n const shOut1 = [];\n const shOut2 = [];\n const shOut3 = [];\n const shOut4 = [];\n const shOut5 = [];\n\n const noop = (v) => v;\n\n const set3 = (array, val1, val2, val3) => {\n array[0] = val1;\n array[1] = val2;\n array[2] = val3;\n };\n\n const set3FromArray = (array, srcDestView, stride, srcBase, compressionLevel) => {\n array[0] = dataViewFloatForCompressionLevel(srcDestView, srcBase, compressionLevel, true);\n array[1] = dataViewFloatForCompressionLevel(srcDestView, srcBase + stride, compressionLevel, true);\n array[2] = dataViewFloatForCompressionLevel(srcDestView, srcBase + stride + stride, compressionLevel, true);\n };\n\n const copy3 = (srcArray, destArray) => {\n destArray[0] = srcArray[0];\n destArray[1] = srcArray[1];\n destArray[2] = srcArray[2];\n };\n\n const setOutput3 = (srcArray, destArray, destBase, conversionFunc) => {\n destArray[destBase] = conversionFunc(srcArray[0]);\n destArray[destBase + 1] = conversionFunc(srcArray[1]);\n destArray[destBase + 2] = conversionFunc(srcArray[2]);\n };\n\n const toUncompressedFloatArray3 = (src, dest, compressionLevel, range8BitMin, range8BitMax) => {\n dest[0] = toUncompressedFloat(src[0], compressionLevel, true, range8BitMin, range8BitMax);\n dest[1] = toUncompressedFloat(src[1], compressionLevel, true, range8BitMin, range8BitMax);\n dest[2] = toUncompressedFloat(src[2], compressionLevel, true, range8BitMin, range8BitMax);\n return dest;\n };\n\n return function(outSphericalHarmonicsArray, outSphericalHarmonicsDegree, transform,\n srcFrom, srcTo, destFrom, desiredOutputCompressionLevel) {\n const splatCount = this.splatCount;\n\n srcFrom = srcFrom || 0;\n srcTo = srcTo || splatCount - 1;\n if (destFrom === undefined) destFrom = srcFrom;\n\n if (transform && outSphericalHarmonicsDegree >= 1) {\n tempMatrix4.copy(transform);\n tempMatrix4.decompose(tempTranslation, tempRotation, tempScale);\n tempRotation.normalize();\n tempMatrix4.makeRotationFromQuaternion(tempRotation);\n tempMatrix3.setFromMatrix4(tempMatrix4);\n set3(sh11, tempMatrix3.elements[4], -tempMatrix3.elements[7], tempMatrix3.elements[1]);\n set3(sh12, -tempMatrix3.elements[5], tempMatrix3.elements[8], -tempMatrix3.elements[2]);\n set3(sh13, tempMatrix3.elements[3], -tempMatrix3.elements[6], tempMatrix3.elements[0]);\n }\n\n const localFromHalfFloatToUint8 = (v) => {\n return fromHalfFloatToUint8(v, this.minSphericalHarmonicsCoeff, this.maxSphericalHarmonicsCoeff);\n };\n\n const localToUint8 = (v) => {\n return toUint8(v, this.minSphericalHarmonicsCoeff, this.maxSphericalHarmonicsCoeff);\n };\n\n for (let i = srcFrom; i <= srcTo; i++) {\n\n const sectionIndex = this.globalSplatIndexToSectionMap[i];\n const section = this.sections[sectionIndex];\n outSphericalHarmonicsDegree = Math.min(outSphericalHarmonicsDegree, section.sphericalHarmonicsDegree);\n const outSphericalHarmonicsComponentsCount = getSphericalHarmonicsComponentCountForDegree(outSphericalHarmonicsDegree);\n\n const localSplatIndex = i - section.splatCountOffset;\n\n const srcSplatSHBase = section.bytesPerSplat * localSplatIndex +\n SplatBuffer.CompressionLevels[this.compressionLevel].SphericalHarmonicsOffsetBytes;\n\n const dataView = new DataView(this.bufferData, section.dataBase + srcSplatSHBase);\n\n const shDestBase = (i - srcFrom + destFrom) * outSphericalHarmonicsComponentsCount;\n\n let compressionLevelForOutputConversion = transform ? 0 : this.compressionLevel;\n let outputConversionFunc = noop;\n if (compressionLevelForOutputConversion !== desiredOutputCompressionLevel) {\n if (compressionLevelForOutputConversion === 1) {\n if (desiredOutputCompressionLevel === 0) outputConversionFunc = fromHalfFloat$1;\n else if (desiredOutputCompressionLevel == 2) outputConversionFunc = localFromHalfFloatToUint8;\n } else if (compressionLevelForOutputConversion === 0) {\n if (desiredOutputCompressionLevel === 1) outputConversionFunc = toHalfFloat;\n else if (desiredOutputCompressionLevel == 2) outputConversionFunc = localToUint8;\n }\n }\n\n const minShCoeff = this.minSphericalHarmonicsCoeff;\n const maxShCoeff = this.maxSphericalHarmonicsCoeff;\n\n if (outSphericalHarmonicsDegree >= 1) {\n\n set3FromArray(shIn1, dataView, 3, 0, this.compressionLevel);\n set3FromArray(shIn2, dataView, 3, 1, this.compressionLevel);\n set3FromArray(shIn3, dataView, 3, 2, this.compressionLevel);\n\n if (transform) {\n toUncompressedFloatArray3(shIn1, shIn1, this.compressionLevel, minShCoeff, maxShCoeff);\n toUncompressedFloatArray3(shIn2, shIn2, this.compressionLevel, minShCoeff, maxShCoeff);\n toUncompressedFloatArray3(shIn3, shIn3, this.compressionLevel, minShCoeff, maxShCoeff);\n SplatBuffer.rotateSphericalHarmonics3(shIn1, shIn2, shIn3, sh11, sh12, sh13, shOut1, shOut2, shOut3);\n } else {\n copy3(shIn1, shOut1);\n copy3(shIn2, shOut2);\n copy3(shIn3, shOut3);\n }\n\n setOutput3(shOut1, outSphericalHarmonicsArray, shDestBase, outputConversionFunc);\n setOutput3(shOut2, outSphericalHarmonicsArray, shDestBase + 3, outputConversionFunc);\n setOutput3(shOut3, outSphericalHarmonicsArray, shDestBase + 6, outputConversionFunc);\n\n if (outSphericalHarmonicsDegree >= 2) {\n\n set3FromArray(shIn1, dataView, 5, 9, this.compressionLevel);\n set3FromArray(shIn2, dataView, 5, 10, this.compressionLevel);\n set3FromArray(shIn3, dataView, 5, 11, this.compressionLevel);\n set3FromArray(shIn4, dataView, 5, 12, this.compressionLevel);\n set3FromArray(shIn5, dataView, 5, 13, this.compressionLevel);\n\n if (transform) {\n toUncompressedFloatArray3(shIn1, shIn1, this.compressionLevel, minShCoeff, maxShCoeff);\n toUncompressedFloatArray3(shIn2, shIn2, this.compressionLevel, minShCoeff, maxShCoeff);\n toUncompressedFloatArray3(shIn3, shIn3, this.compressionLevel, minShCoeff, maxShCoeff);\n toUncompressedFloatArray3(shIn4, shIn4, this.compressionLevel, minShCoeff, maxShCoeff);\n toUncompressedFloatArray3(shIn5, shIn5, this.compressionLevel, minShCoeff, maxShCoeff);\n SplatBuffer.rotateSphericalHarmonics5(shIn1, shIn2, shIn3, shIn4, shIn5,\n sh11, sh12, sh13, sh21, sh22, sh23, sh24, sh25,\n shOut1, shOut2, shOut3, shOut4, shOut5);\n } else {\n copy3(shIn1, shOut1);\n copy3(shIn2, shOut2);\n copy3(shIn3, shOut3);\n copy3(shIn4, shOut4);\n copy3(shIn5, shOut5);\n }\n\n setOutput3(shOut1, outSphericalHarmonicsArray, shDestBase + 9, outputConversionFunc);\n setOutput3(shOut2, outSphericalHarmonicsArray, shDestBase + 12, outputConversionFunc);\n setOutput3(shOut3, outSphericalHarmonicsArray, shDestBase + 15, outputConversionFunc);\n setOutput3(shOut4, outSphericalHarmonicsArray, shDestBase + 18, outputConversionFunc);\n setOutput3(shOut5, outSphericalHarmonicsArray, shDestBase + 21, outputConversionFunc);\n }\n }\n }\n };\n\n }();\n\n static dot3 = (v1, v2, v3, transformRow, outArray) => {\n outArray[0] = outArray[1] = outArray[2] = 0;\n const t0 = transformRow[0];\n const t1 = transformRow[1];\n const t2 = transformRow[2];\n SplatBuffer.addInto3(v1[0] * t0, v1[1] * t0, v1[2] * t0, outArray);\n SplatBuffer.addInto3(v2[0] * t1, v2[1] * t1, v2[2] * t1, outArray);\n SplatBuffer.addInto3(v3[0] * t2, v3[1] * t2, v3[2] * t2, outArray);\n };\n\n static addInto3 = (val1, val2, val3, destArray) => {\n destArray[0] = destArray[0] + val1;\n destArray[1] = destArray[1] + val2;\n destArray[2] = destArray[2] + val3;\n };\n\n static dot5 = (v1, v2, v3, v4, v5, transformRow, outArray) => {\n outArray[0] = outArray[1] = outArray[2] = 0;\n const t0 = transformRow[0];\n const t1 = transformRow[1];\n const t2 = transformRow[2];\n const t3 = transformRow[3];\n const t4 = transformRow[4];\n SplatBuffer.addInto3(v1[0] * t0, v1[1] * t0, v1[2] * t0, outArray);\n SplatBuffer.addInto3(v2[0] * t1, v2[1] * t1, v2[2] * t1, outArray);\n SplatBuffer.addInto3(v3[0] * t2, v3[1] * t2, v3[2] * t2, outArray);\n SplatBuffer.addInto3(v4[0] * t3, v4[1] * t3, v4[2] * t3, outArray);\n SplatBuffer.addInto3(v5[0] * t4, v5[1] * t4, v5[2] * t4, outArray);\n };\n\n static rotateSphericalHarmonics3 = (in1, in2, in3, tsh11, tsh12, tsh13, out1, out2, out3) => {\n SplatBuffer.dot3(in1, in2, in3, tsh11, out1);\n SplatBuffer.dot3(in1, in2, in3, tsh12, out2);\n SplatBuffer.dot3(in1, in2, in3, tsh13, out3);\n };\n\n static rotateSphericalHarmonics5 = (in1, in2, in3, in4, in5, tsh11, tsh12, tsh13,\n tsh21, tsh22, tsh23, tsh24, tsh25, out1, out2, out3, out4, out5) => {\n\n const kSqrt0104 = Math.sqrt(1.0 / 4.0);\n const kSqrt0304 = Math.sqrt(3.0 / 4.0);\n const kSqrt0103 = Math.sqrt(1.0 / 3.0);\n const kSqrt0403 = Math.sqrt(4.0 / 3.0);\n const kSqrt0112 = Math.sqrt(1.0 / 12.0);\n\n tsh21[0] = kSqrt0104 * ((tsh13[2] * tsh11[0] + tsh13[0] * tsh11[2]) + (tsh11[2] * tsh13[0] + tsh11[0] * tsh13[2]));\n tsh21[1] = (tsh13[1] * tsh11[0] + tsh11[1] * tsh13[0]);\n tsh21[2] = kSqrt0304 * (tsh13[1] * tsh11[1] + tsh11[1] * tsh13[1]);\n tsh21[3] = (tsh13[1] * tsh11[2] + tsh11[1] * tsh13[2]);\n tsh21[4] = kSqrt0104 * ((tsh13[2] * tsh11[2] - tsh13[0] * tsh11[0]) + (tsh11[2] * tsh13[2] - tsh11[0] * tsh13[0]));\n SplatBuffer.dot5(in1, in2, in3, in4, in5, tsh21, out1);\n\n tsh22[0] = kSqrt0104 * ((tsh12[2] * tsh11[0] + tsh12[0] * tsh11[2]) + (tsh11[2] * tsh12[0] + tsh11[0] * tsh12[2]));\n tsh22[1] = tsh12[1] * tsh11[0] + tsh11[1] * tsh12[0];\n tsh22[2] = kSqrt0304 * (tsh12[1] * tsh11[1] + tsh11[1] * tsh12[1]);\n tsh22[3] = tsh12[1] * tsh11[2] + tsh11[1] * tsh12[2];\n tsh22[4] = kSqrt0104 * ((tsh12[2] * tsh11[2] - tsh12[0] * tsh11[0]) + (tsh11[2] * tsh12[2] - tsh11[0] * tsh12[0]));\n SplatBuffer.dot5(in1, in2, in3, in4, in5, tsh22, out2);\n\n tsh23[0] = kSqrt0103 * (tsh12[2] * tsh12[0] + tsh12[0] * tsh12[2]) + -kSqrt0112 *\n ((tsh13[2] * tsh13[0] + tsh13[0] * tsh13[2]) + (tsh11[2] * tsh11[0] + tsh11[0] * tsh11[2]));\n tsh23[1] = kSqrt0403 * tsh12[1] * tsh12[0] + -kSqrt0103 * (tsh13[1] * tsh13[0] + tsh11[1] * tsh11[0]);\n tsh23[2] = tsh12[1] * tsh12[1] + -kSqrt0104 * (tsh13[1] * tsh13[1] + tsh11[1] * tsh11[1]);\n tsh23[3] = kSqrt0403 * tsh12[1] * tsh12[2] + -kSqrt0103 * (tsh13[1] * tsh13[2] + tsh11[1] * tsh11[2]);\n tsh23[4] = kSqrt0103 * (tsh12[2] * tsh12[2] - tsh12[0] * tsh12[0]) + -kSqrt0112 *\n ((tsh13[2] * tsh13[2] - tsh13[0] * tsh13[0]) + (tsh11[2] * tsh11[2] - tsh11[0] * tsh11[0]));\n SplatBuffer.dot5(in1, in2, in3, in4, in5, tsh23, out3);\n\n tsh24[0] = kSqrt0104 * ((tsh12[2] * tsh13[0] + tsh12[0] * tsh13[2]) + (tsh13[2] * tsh12[0] + tsh13[0] * tsh12[2]));\n tsh24[1] = tsh12[1] * tsh13[0] + tsh13[1] * tsh12[0];\n tsh24[2] = kSqrt0304 * (tsh12[1] * tsh13[1] + tsh13[1] * tsh12[1]);\n tsh24[3] = tsh12[1] * tsh13[2] + tsh13[1] * tsh12[2];\n tsh24[4] = kSqrt0104 * ((tsh12[2] * tsh13[2] - tsh12[0] * tsh13[0]) + (tsh13[2] * tsh12[2] - tsh13[0] * tsh12[0]));\n SplatBuffer.dot5(in1, in2, in3, in4, in5, tsh24, out4);\n\n tsh25[0] = kSqrt0104 * ((tsh13[2] * tsh13[0] + tsh13[0] * tsh13[2]) - (tsh11[2] * tsh11[0] + tsh11[0] * tsh11[2]));\n tsh25[1] = (tsh13[1] * tsh13[0] - tsh11[1] * tsh11[0]);\n tsh25[2] = kSqrt0304 * (tsh13[1] * tsh13[1] - tsh11[1] * tsh11[1]);\n tsh25[3] = (tsh13[1] * tsh13[2] - tsh11[1] * tsh11[2]);\n tsh25[4] = kSqrt0104 * ((tsh13[2] * tsh13[2] - tsh13[0] * tsh13[0]) - (tsh11[2] * tsh11[2] - tsh11[0] * tsh11[0]));\n SplatBuffer.dot5(in1, in2, in3, in4, in5, tsh25, out5);\n };\n\n static parseHeader(buffer) {\n const headerArrayUint8 = new Uint8Array(buffer, 0, SplatBuffer.HeaderSizeBytes);\n const headerArrayUint16 = new Uint16Array(buffer, 0, SplatBuffer.HeaderSizeBytes / 2);\n const headerArrayUint32 = new Uint32Array(buffer, 0, SplatBuffer.HeaderSizeBytes / 4);\n const headerArrayFloat32 = new Float32Array(buffer, 0, SplatBuffer.HeaderSizeBytes / 4);\n const versionMajor = headerArrayUint8[0];\n const versionMinor = headerArrayUint8[1];\n const maxSectionCount = headerArrayUint32[1];\n const sectionCount = headerArrayUint32[2];\n const maxSplatCount = headerArrayUint32[3];\n const splatCount = headerArrayUint32[4];\n const compressionLevel = headerArrayUint16[10];\n const sceneCenter = new THREE.Vector3(headerArrayFloat32[6], headerArrayFloat32[7], headerArrayFloat32[8]);\n\n const minSphericalHarmonicsCoeff = headerArrayFloat32[9] || -DefaultSphericalHarmonics8BitCompressionHalfRange;\n const maxSphericalHarmonicsCoeff = headerArrayFloat32[10] || DefaultSphericalHarmonics8BitCompressionHalfRange;\n\n return {\n versionMajor,\n versionMinor,\n maxSectionCount,\n sectionCount,\n maxSplatCount,\n splatCount,\n compressionLevel,\n sceneCenter,\n minSphericalHarmonicsCoeff,\n maxSphericalHarmonicsCoeff\n };\n }\n\n static writeHeaderCountsToBuffer(sectionCount, splatCount, buffer) {\n const headerArrayUint32 = new Uint32Array(buffer, 0, SplatBuffer.HeaderSizeBytes / 4);\n headerArrayUint32[2] = sectionCount;\n headerArrayUint32[4] = splatCount;\n }\n\n static writeHeaderToBuffer(header, buffer) {\n const headerArrayUint8 = new Uint8Array(buffer, 0, SplatBuffer.HeaderSizeBytes);\n const headerArrayUint16 = new Uint16Array(buffer, 0, SplatBuffer.HeaderSizeBytes / 2);\n const headerArrayUint32 = new Uint32Array(buffer, 0, SplatBuffer.HeaderSizeBytes / 4);\n const headerArrayFloat32 = new Float32Array(buffer, 0, SplatBuffer.HeaderSizeBytes / 4);\n headerArrayUint8[0] = header.versionMajor;\n headerArrayUint8[1] = header.versionMinor;\n headerArrayUint8[2] = 0; // unused for now\n headerArrayUint8[3] = 0; // unused for now\n headerArrayUint32[1] = header.maxSectionCount;\n headerArrayUint32[2] = header.sectionCount;\n headerArrayUint32[3] = header.maxSplatCount;\n headerArrayUint32[4] = header.splatCount;\n headerArrayUint16[10] = header.compressionLevel;\n headerArrayFloat32[6] = header.sceneCenter.x;\n headerArrayFloat32[7] = header.sceneCenter.y;\n headerArrayFloat32[8] = header.sceneCenter.z;\n headerArrayFloat32[9] = header.minSphericalHarmonicsCoeff || -DefaultSphericalHarmonics8BitCompressionHalfRange;\n headerArrayFloat32[10] = header.maxSphericalHarmonicsCoeff || DefaultSphericalHarmonics8BitCompressionHalfRange;\n }\n\n static parseSectionHeaders(header, buffer, offset = 0, secLoadedCountsToMax) {\n const compressionLevel = header.compressionLevel;\n\n const maxSectionCount = header.maxSectionCount;\n const sectionHeaderArrayUint16 = new Uint16Array(buffer, offset, maxSectionCount * SplatBuffer.SectionHeaderSizeBytes / 2);\n const sectionHeaderArrayUint32 = new Uint32Array(buffer, offset, maxSectionCount * SplatBuffer.SectionHeaderSizeBytes / 4);\n const sectionHeaderArrayFloat32 = new Float32Array(buffer, offset, maxSectionCount * SplatBuffer.SectionHeaderSizeBytes / 4);\n\n const sectionHeaders = [];\n let sectionHeaderBase = 0;\n let sectionHeaderBaseUint16 = sectionHeaderBase / 2;\n let sectionHeaderBaseUint32 = sectionHeaderBase / 4;\n let sectionBase = SplatBuffer.HeaderSizeBytes + header.maxSectionCount * SplatBuffer.SectionHeaderSizeBytes;\n let splatCountOffset = 0;\n for (let i = 0; i < maxSectionCount; i++) {\n const maxSplatCount = sectionHeaderArrayUint32[sectionHeaderBaseUint32 + 1];\n const bucketSize = sectionHeaderArrayUint32[sectionHeaderBaseUint32 + 2];\n const bucketCount = sectionHeaderArrayUint32[sectionHeaderBaseUint32 + 3];\n const bucketBlockSize = sectionHeaderArrayFloat32[sectionHeaderBaseUint32 + 4];\n const halfBucketBlockSize = bucketBlockSize / 2.0;\n const bucketStorageSizeBytes = sectionHeaderArrayUint16[sectionHeaderBaseUint16 + 10];\n const compressionScaleRange = sectionHeaderArrayUint32[sectionHeaderBaseUint32 + 6] ||\n SplatBuffer.CompressionLevels[compressionLevel].ScaleRange;\n const fullBucketCount = sectionHeaderArrayUint32[sectionHeaderBaseUint32 + 8];\n const partiallyFilledBucketCount = sectionHeaderArrayUint32[sectionHeaderBaseUint32 + 9];\n const bucketsMetaDataSizeBytes = partiallyFilledBucketCount * 4;\n const bucketsStorageSizeBytes = bucketStorageSizeBytes * bucketCount + bucketsMetaDataSizeBytes;\n\n const sphericalHarmonicsDegree = sectionHeaderArrayUint16[sectionHeaderBaseUint16 + 20];\n const { bytesPerSplat } = SplatBuffer.calculateComponentStorage(compressionLevel, sphericalHarmonicsDegree);\n\n const splatDataStorageSizeBytes = bytesPerSplat * maxSplatCount;\n const storageSizeBytes = splatDataStorageSizeBytes + bucketsStorageSizeBytes;\n const sectionHeader = {\n bytesPerSplat: bytesPerSplat,\n splatCountOffset: splatCountOffset,\n splatCount: secLoadedCountsToMax ? maxSplatCount : 0,\n maxSplatCount: maxSplatCount,\n bucketSize: bucketSize,\n bucketCount: bucketCount,\n bucketBlockSize: bucketBlockSize,\n halfBucketBlockSize: halfBucketBlockSize,\n bucketStorageSizeBytes: bucketStorageSizeBytes,\n bucketsStorageSizeBytes: bucketsStorageSizeBytes,\n splatDataStorageSizeBytes: splatDataStorageSizeBytes,\n storageSizeBytes: storageSizeBytes,\n compressionScaleRange: compressionScaleRange,\n compressionScaleFactor: halfBucketBlockSize / compressionScaleRange,\n base: sectionBase,\n bucketsBase: sectionBase + bucketsMetaDataSizeBytes,\n dataBase: sectionBase + bucketsStorageSizeBytes,\n fullBucketCount: fullBucketCount,\n partiallyFilledBucketCount: partiallyFilledBucketCount,\n sphericalHarmonicsDegree: sphericalHarmonicsDegree\n };\n sectionHeaders[i] = sectionHeader;\n sectionBase += storageSizeBytes;\n sectionHeaderBase += SplatBuffer.SectionHeaderSizeBytes;\n sectionHeaderBaseUint16 = sectionHeaderBase / 2;\n sectionHeaderBaseUint32 = sectionHeaderBase / 4;\n splatCountOffset += maxSplatCount;\n }\n\n return sectionHeaders;\n }\n\n\n static writeSectionHeaderToBuffer(sectionHeader, compressionLevel, buffer, offset = 0) {\n const sectionHeadeArrayUint16 = new Uint16Array(buffer, offset, SplatBuffer.SectionHeaderSizeBytes / 2);\n const sectionHeadeArrayUint32 = new Uint32Array(buffer, offset, SplatBuffer.SectionHeaderSizeBytes / 4);\n const sectionHeadeArrayFloat32 = new Float32Array(buffer, offset, SplatBuffer.SectionHeaderSizeBytes / 4);\n\n sectionHeadeArrayUint32[0] = sectionHeader.splatCount;\n sectionHeadeArrayUint32[1] = sectionHeader.maxSplatCount;\n sectionHeadeArrayUint32[2] = compressionLevel >= 1 ? sectionHeader.bucketSize : 0;\n sectionHeadeArrayUint32[3] = compressionLevel >= 1 ? sectionHeader.bucketCount : 0;\n sectionHeadeArrayFloat32[4] = compressionLevel >= 1 ? sectionHeader.bucketBlockSize : 0.0;\n sectionHeadeArrayUint16[10] = compressionLevel >= 1 ? SplatBuffer.BucketStorageSizeBytes : 0;\n sectionHeadeArrayUint32[6] = compressionLevel >= 1 ? sectionHeader.compressionScaleRange : 0;\n sectionHeadeArrayUint32[7] = sectionHeader.storageSizeBytes;\n sectionHeadeArrayUint32[8] = compressionLevel >= 1 ? sectionHeader.fullBucketCount : 0;\n sectionHeadeArrayUint32[9] = compressionLevel >= 1 ? sectionHeader.partiallyFilledBucketCount : 0;\n sectionHeadeArrayUint16[20] = sectionHeader.sphericalHarmonicsDegree;\n\n }\n\n static writeSectionHeaderSplatCountToBuffer(splatCount, buffer, offset = 0) {\n const sectionHeadeArrayUint32 = new Uint32Array(buffer, offset, SplatBuffer.SectionHeaderSizeBytes / 4);\n sectionHeadeArrayUint32[0] = splatCount;\n }\n\n constructFromBuffer(bufferData, secLoadedCountsToMax) {\n this.bufferData = bufferData;\n\n this.globalSplatIndexToLocalSplatIndexMap = [];\n this.globalSplatIndexToSectionMap = [];\n\n const header = SplatBuffer.parseHeader(this.bufferData);\n this.versionMajor = header.versionMajor;\n this.versionMinor = header.versionMinor;\n this.maxSectionCount = header.maxSectionCount;\n this.sectionCount = secLoadedCountsToMax ? header.maxSectionCount : 0;\n this.maxSplatCount = header.maxSplatCount;\n this.splatCount = secLoadedCountsToMax ? header.maxSplatCount : 0;\n this.compressionLevel = header.compressionLevel;\n this.sceneCenter = new THREE.Vector3().copy(header.sceneCenter);\n this.minSphericalHarmonicsCoeff = header.minSphericalHarmonicsCoeff;\n this.maxSphericalHarmonicsCoeff = header.maxSphericalHarmonicsCoeff;\n\n this.sections = SplatBuffer.parseSectionHeaders(header, this.bufferData, SplatBuffer.HeaderSizeBytes, secLoadedCountsToMax);\n\n this.linkBufferArrays();\n this.buildMaps();\n }\n\n static calculateComponentStorage(compressionLevel, sphericalHarmonicsDegree) {\n const bytesPerCenter = SplatBuffer.CompressionLevels[compressionLevel].BytesPerCenter;\n const bytesPerScale = SplatBuffer.CompressionLevels[compressionLevel].BytesPerScale;\n const bytesPerRotation = SplatBuffer.CompressionLevels[compressionLevel].BytesPerRotation;\n const bytesPerColor = SplatBuffer.CompressionLevels[compressionLevel].BytesPerColor;\n const sphericalHarmonicsComponentsPerSplat = getSphericalHarmonicsComponentCountForDegree(sphericalHarmonicsDegree);\n const sphericalHarmonicsBytesPerSplat = SplatBuffer.CompressionLevels[compressionLevel].BytesPerSphericalHarmonicsComponent *\n sphericalHarmonicsComponentsPerSplat;\n const bytesPerSplat = bytesPerCenter + bytesPerScale + bytesPerRotation +\n bytesPerColor + sphericalHarmonicsBytesPerSplat;\n return {\n bytesPerCenter,\n bytesPerScale,\n bytesPerRotation,\n bytesPerColor,\n sphericalHarmonicsComponentsPerSplat,\n sphericalHarmonicsBytesPerSplat,\n bytesPerSplat\n };\n }\n\n linkBufferArrays() {\n for (let i = 0; i < this.maxSectionCount; i++) {\n const section = this.sections[i];\n section.bucketArray = new Float32Array(this.bufferData, section.bucketsBase,\n section.bucketCount * SplatBuffer.BucketStorageSizeFloats);\n if (section.partiallyFilledBucketCount > 0) {\n section.partiallyFilledBucketLengths = new Uint32Array(this.bufferData, section.base,\n section.partiallyFilledBucketCount);\n }\n }\n }\n\n buildMaps() {\n let cumulativeSplatCount = 0;\n for (let i = 0; i < this.maxSectionCount; i++) {\n const section = this.sections[i];\n for (let j = 0; j < section.maxSplatCount; j++) {\n const globalSplatIndex = cumulativeSplatCount + j;\n this.globalSplatIndexToLocalSplatIndexMap[globalSplatIndex] = j;\n this.globalSplatIndexToSectionMap[globalSplatIndex] = i;\n }\n cumulativeSplatCount += section.maxSplatCount;\n }\n }\n\n updateLoadedCounts(newSectionCount, newSplatCount) {\n SplatBuffer.writeHeaderCountsToBuffer(newSectionCount, newSplatCount, this.bufferData);\n this.sectionCount = newSectionCount;\n this.splatCount = newSplatCount;\n }\n\n updateSectionLoadedCounts(sectionIndex, newSplatCount) {\n const sectionHeaderOffset = SplatBuffer.HeaderSizeBytes + SplatBuffer.SectionHeaderSizeBytes * sectionIndex;\n SplatBuffer.writeSectionHeaderSplatCountToBuffer(newSplatCount, this.bufferData, sectionHeaderOffset);\n this.sections[sectionIndex].splatCount = newSplatCount;\n }\n\n static writeSplatDataToSectionBuffer = function() {\n\n const tempCenterBuffer = new ArrayBuffer(12);\n const tempScaleBuffer = new ArrayBuffer(12);\n const tempRotationBuffer = new ArrayBuffer(16);\n const tempColorBuffer = new ArrayBuffer(4);\n const tempSHBuffer = new ArrayBuffer(256);\n const tempRot = new THREE.Quaternion();\n const tempScale = new THREE.Vector3();\n const bucketCenterDelta = new THREE.Vector3();\n\n const {\n X: OFFSET_X, Y: OFFSET_Y, Z: OFFSET_Z,\n SCALE0: OFFSET_SCALE0, SCALE1: OFFSET_SCALE1, SCALE2: OFFSET_SCALE2,\n ROTATION0: OFFSET_ROT0, ROTATION1: OFFSET_ROT1, ROTATION2: OFFSET_ROT2, ROTATION3: OFFSET_ROT3,\n FDC0: OFFSET_FDC0, FDC1: OFFSET_FDC1, FDC2: OFFSET_FDC2, OPACITY: OFFSET_OPACITY,\n FRC0: OFFSET_FRC0, FRC9: OFFSET_FRC9,\n } = UncompressedSplatArray.OFFSET;\n\n const compressPositionOffset = (v, compressionScaleFactor, compressionScaleRange) => {\n const doubleCompressionScaleRange = compressionScaleRange * 2 + 1;\n v = Math.round(v * compressionScaleFactor) + compressionScaleRange;\n return clamp(v, 0, doubleCompressionScaleRange);\n };\n\n return function(targetSplat, sectionBuffer, bufferOffset, compressionLevel, sphericalHarmonicsDegree,\n bucketCenter, compressionScaleFactor, compressionScaleRange,\n minSphericalHarmonicsCoeff = -DefaultSphericalHarmonics8BitCompressionHalfRange,\n maxSphericalHarmonicsCoeff = DefaultSphericalHarmonics8BitCompressionHalfRange) {\n\n const sphericalHarmonicsComponentsPerSplat = getSphericalHarmonicsComponentCountForDegree(sphericalHarmonicsDegree);\n const bytesPerCenter = SplatBuffer.CompressionLevels[compressionLevel].BytesPerCenter;\n const bytesPerScale = SplatBuffer.CompressionLevels[compressionLevel].BytesPerScale;\n const bytesPerRotation = SplatBuffer.CompressionLevels[compressionLevel].BytesPerRotation;\n const bytesPerColor = SplatBuffer.CompressionLevels[compressionLevel].BytesPerColor;\n\n const centerBase = bufferOffset;\n const scaleBase = centerBase + bytesPerCenter;\n const rotationBase = scaleBase + bytesPerScale;\n const colorBase = rotationBase + bytesPerRotation;\n const sphericalHarmonicsBase = colorBase + bytesPerColor;\n\n if (targetSplat[OFFSET_ROT0] !== undefined) {\n tempRot.set(targetSplat[OFFSET_ROT0], targetSplat[OFFSET_ROT1], targetSplat[OFFSET_ROT2], targetSplat[OFFSET_ROT3]);\n tempRot.normalize();\n } else {\n tempRot.set(1.0, 0.0, 0.0, 0.0);\n }\n\n if (targetSplat[OFFSET_SCALE0] !== undefined) {\n tempScale.set(targetSplat[OFFSET_SCALE0] || 0,\n targetSplat[OFFSET_SCALE1] || 0,\n targetSplat[OFFSET_SCALE2] || 0);\n } else {\n tempScale.set(0, 0, 0);\n }\n\n if (compressionLevel === 0) {\n const center = new Float32Array(sectionBuffer, centerBase, SplatBuffer.CenterComponentCount);\n const rot = new Float32Array(sectionBuffer, rotationBase, SplatBuffer.RotationComponentCount);\n const scale = new Float32Array(sectionBuffer, scaleBase, SplatBuffer.ScaleComponentCount);\n\n rot.set([tempRot.x, tempRot.y, tempRot.z, tempRot.w]);\n scale.set([tempScale.x, tempScale.y, tempScale.z]);\n center.set([targetSplat[OFFSET_X], targetSplat[OFFSET_Y], targetSplat[OFFSET_Z]]);\n\n if (sphericalHarmonicsDegree > 0) {\n const shOut = new Float32Array(sectionBuffer, sphericalHarmonicsBase, sphericalHarmonicsComponentsPerSplat);\n if (sphericalHarmonicsDegree >= 1) {\n for (let s = 0; s < 9; s++) shOut[s] = targetSplat[OFFSET_FRC0 + s] || 0;\n if (sphericalHarmonicsDegree >= 2) {\n for (let s = 0; s < 15; s++) shOut[s + 9] = targetSplat[OFFSET_FRC9 + s] || 0;\n }\n }\n }\n } else {\n const center = new Uint16Array(tempCenterBuffer, 0, SplatBuffer.CenterComponentCount);\n const rot = new Uint16Array(tempRotationBuffer, 0, SplatBuffer.RotationComponentCount);\n const scale = new Uint16Array(tempScaleBuffer, 0, SplatBuffer.ScaleComponentCount);\n\n rot.set([toHalfFloat(tempRot.x), toHalfFloat(tempRot.y), toHalfFloat(tempRot.z), toHalfFloat(tempRot.w)]);\n scale.set([toHalfFloat(tempScale.x), toHalfFloat(tempScale.y), toHalfFloat(tempScale.z)]);\n\n bucketCenterDelta.set(targetSplat[OFFSET_X], targetSplat[OFFSET_Y], targetSplat[OFFSET_Z]).sub(bucketCenter);\n bucketCenterDelta.x = compressPositionOffset(bucketCenterDelta.x, compressionScaleFactor, compressionScaleRange);\n bucketCenterDelta.y = compressPositionOffset(bucketCenterDelta.y, compressionScaleFactor, compressionScaleRange);\n bucketCenterDelta.z = compressPositionOffset(bucketCenterDelta.z, compressionScaleFactor, compressionScaleRange);\n center.set([bucketCenterDelta.x, bucketCenterDelta.y, bucketCenterDelta.z]);\n\n if (sphericalHarmonicsDegree > 0) {\n const SHArrayType = compressionLevel === 1 ? Uint16Array : Uint8Array;\n const bytesPerSHComponent = compressionLevel === 1 ? 2 : 1;\n const shOut = new SHArrayType(tempSHBuffer, 0, sphericalHarmonicsComponentsPerSplat);\n if (sphericalHarmonicsDegree >= 1) {\n for (let s = 0; s < 9; s++) {\n const srcVal = targetSplat[OFFSET_FRC0 + s] || 0;\n shOut[s] = compressionLevel === 1 ? toHalfFloat(srcVal) :\n toUint8(srcVal, minSphericalHarmonicsCoeff, maxSphericalHarmonicsCoeff);\n }\n const degree1ByteCount = 9 * bytesPerSHComponent;\n copyBetweenBuffers(shOut.buffer, 0, sectionBuffer, sphericalHarmonicsBase, degree1ByteCount);\n if (sphericalHarmonicsDegree >= 2) {\n for (let s = 0; s < 15; s++) {\n const srcVal = targetSplat[OFFSET_FRC9 + s] || 0;\n shOut[s + 9] = compressionLevel === 1 ? toHalfFloat(srcVal) :\n toUint8(srcVal, minSphericalHarmonicsCoeff, maxSphericalHarmonicsCoeff);\n }\n copyBetweenBuffers(shOut.buffer, degree1ByteCount, sectionBuffer,\n sphericalHarmonicsBase + degree1ByteCount, 15 * bytesPerSHComponent);\n }\n }\n }\n\n copyBetweenBuffers(center.buffer, 0, sectionBuffer, centerBase, 6);\n copyBetweenBuffers(scale.buffer, 0, sectionBuffer, scaleBase, 6);\n copyBetweenBuffers(rot.buffer, 0, sectionBuffer, rotationBase, 8);\n }\n\n const rgba = new Uint8ClampedArray(tempColorBuffer, 0, 4);\n rgba.set([targetSplat[OFFSET_FDC0] || 0, targetSplat[OFFSET_FDC1] || 0, targetSplat[OFFSET_FDC2] || 0]);\n rgba[3] = targetSplat[OFFSET_OPACITY] || 0;\n\n copyBetweenBuffers(rgba.buffer, 0, sectionBuffer, colorBase, 4);\n };\n\n }();\n\n static generateFromUncompressedSplatArrays(splatArrays, minimumAlpha, compressionLevel,\n sceneCenter, blockSize, bucketSize, options = []) {\n\n let shDegree = 0;\n for (let sa = 0; sa < splatArrays.length; sa ++) {\n const splatArray = splatArrays[sa];\n shDegree = Math.max(splatArray.sphericalHarmonicsDegree, shDegree);\n }\n\n let minSphericalHarmonicsCoeff;\n let maxSphericalHarmonicsCoeff;\n\n for (let sa = 0; sa < splatArrays.length; sa ++) {\n const splatArray = splatArrays[sa];\n for (let i = 0; i < splatArray.splats.length; i++) {\n const splat = splatArray.splats[i];\n for (let sc = UncompressedSplatArray.OFFSET.FRC0; sc < UncompressedSplatArray.OFFSET.FRC23 && sc < splat.length; sc++) {\n if (!minSphericalHarmonicsCoeff || splat[sc] < minSphericalHarmonicsCoeff) {\n minSphericalHarmonicsCoeff = splat[sc];\n }\n if (!maxSphericalHarmonicsCoeff || splat[sc] > maxSphericalHarmonicsCoeff) {\n maxSphericalHarmonicsCoeff = splat[sc];\n }\n }\n }\n }\n\n minSphericalHarmonicsCoeff = minSphericalHarmonicsCoeff || -DefaultSphericalHarmonics8BitCompressionHalfRange;\n maxSphericalHarmonicsCoeff = maxSphericalHarmonicsCoeff || DefaultSphericalHarmonics8BitCompressionHalfRange;\n\n const { bytesPerSplat } = SplatBuffer.calculateComponentStorage(compressionLevel, shDegree);\n const compressionScaleRange = SplatBuffer.CompressionLevels[compressionLevel].ScaleRange;\n\n const sectionBuffers = [];\n const sectionHeaderBuffers = [];\n let totalSplatCount = 0;\n\n for (let sa = 0; sa < splatArrays.length; sa ++) {\n const splatArray = splatArrays[sa];\n const validSplats = new UncompressedSplatArray(shDegree);\n for (let i = 0; i < splatArray.splatCount; i++) {\n const targetSplat = splatArray.splats[i];\n if ((targetSplat[UncompressedSplatArray.OFFSET.OPACITY] || 0) >= minimumAlpha) {\n validSplats.addSplat(targetSplat);\n }\n }\n\n const sectionOptions = options[sa] || {};\n const sectionBlockSize = (sectionOptions.blockSizeFactor || 1) * (blockSize || SplatBuffer.BucketBlockSize);\n const sectionBucketSize = Math.ceil((sectionOptions.bucketSizeFactor || 1) * (bucketSize || SplatBuffer.BucketSize));\n\n const bucketInfo = SplatBuffer.computeBucketsForUncompressedSplatArray(validSplats, sectionBlockSize, sectionBucketSize);\n const fullBucketCount = bucketInfo.fullBuckets.length;\n const partiallyFullBucketLengths = bucketInfo.partiallyFullBuckets.map((bucket) => bucket.splats.length);\n const partiallyFilledBucketCount = partiallyFullBucketLengths.length;\n const buckets = [...bucketInfo.fullBuckets, ...bucketInfo.partiallyFullBuckets];\n\n const sectionDataSizeBytes = validSplats.splats.length * bytesPerSplat;\n const bucketMetaDataSizeBytes = partiallyFilledBucketCount * 4;\n const bucketDataBytes = compressionLevel >= 1 ? buckets.length *\n SplatBuffer.BucketStorageSizeBytes + bucketMetaDataSizeBytes : 0;\n const sectionSizeBytes = sectionDataSizeBytes + bucketDataBytes;\n const sectionBuffer = new ArrayBuffer(sectionSizeBytes);\n\n const compressionScaleFactor = compressionScaleRange / (sectionBlockSize * 0.5);\n const bucketCenter = new THREE.Vector3();\n\n let outSplatCount = 0;\n for (let b = 0; b < buckets.length; b++) {\n const bucket = buckets[b];\n bucketCenter.fromArray(bucket.center);\n for (let i = 0; i < bucket.splats.length; i++) {\n let row = bucket.splats[i];\n const targetSplat = validSplats.splats[row];\n const bufferOffset = bucketDataBytes + outSplatCount * bytesPerSplat;\n SplatBuffer.writeSplatDataToSectionBuffer(targetSplat, sectionBuffer, bufferOffset, compressionLevel, shDegree,\n bucketCenter, compressionScaleFactor, compressionScaleRange,\n minSphericalHarmonicsCoeff, maxSphericalHarmonicsCoeff);\n outSplatCount++;\n }\n }\n totalSplatCount += outSplatCount;\n\n if (compressionLevel >= 1) {\n const bucketMetaDataArray = new Uint32Array(sectionBuffer, 0, partiallyFullBucketLengths.length * 4);\n for (let pfb = 0; pfb < partiallyFullBucketLengths.length; pfb ++) {\n bucketMetaDataArray[pfb] = partiallyFullBucketLengths[pfb];\n }\n const bucketArray = new Float32Array(sectionBuffer, bucketMetaDataSizeBytes,\n buckets.length * SplatBuffer.BucketStorageSizeFloats);\n for (let b = 0; b < buckets.length; b++) {\n const bucket = buckets[b];\n const base = b * 3;\n bucketArray[base] = bucket.center[0];\n bucketArray[base + 1] = bucket.center[1];\n bucketArray[base + 2] = bucket.center[2];\n }\n }\n sectionBuffers.push(sectionBuffer);\n\n const sectionHeaderBuffer = new ArrayBuffer(SplatBuffer.SectionHeaderSizeBytes);\n SplatBuffer.writeSectionHeaderToBuffer({\n maxSplatCount: outSplatCount,\n splatCount: outSplatCount,\n bucketSize: sectionBucketSize,\n bucketCount: buckets.length,\n bucketBlockSize: sectionBlockSize,\n compressionScaleRange: compressionScaleRange,\n storageSizeBytes: sectionSizeBytes,\n fullBucketCount: fullBucketCount,\n partiallyFilledBucketCount: partiallyFilledBucketCount,\n sphericalHarmonicsDegree: shDegree\n }, compressionLevel, sectionHeaderBuffer, 0);\n sectionHeaderBuffers.push(sectionHeaderBuffer);\n\n }\n\n let sectionsCumulativeSizeBytes = 0;\n for (let sectionBuffer of sectionBuffers) sectionsCumulativeSizeBytes += sectionBuffer.byteLength;\n const unifiedBufferSize = SplatBuffer.HeaderSizeBytes +\n SplatBuffer.SectionHeaderSizeBytes * sectionBuffers.length + sectionsCumulativeSizeBytes;\n const unifiedBuffer = new ArrayBuffer(unifiedBufferSize);\n\n SplatBuffer.writeHeaderToBuffer({\n versionMajor: 0,\n versionMinor: 1,\n maxSectionCount: sectionBuffers.length,\n sectionCount: sectionBuffers.length,\n maxSplatCount: totalSplatCount,\n splatCount: totalSplatCount,\n compressionLevel: compressionLevel,\n sceneCenter: sceneCenter,\n minSphericalHarmonicsCoeff: minSphericalHarmonicsCoeff,\n maxSphericalHarmonicsCoeff: maxSphericalHarmonicsCoeff\n }, unifiedBuffer);\n\n let currentUnifiedBase = SplatBuffer.HeaderSizeBytes;\n for (let sectionHeaderBuffer of sectionHeaderBuffers) {\n new Uint8Array(unifiedBuffer, currentUnifiedBase, SplatBuffer.SectionHeaderSizeBytes).set(new Uint8Array(sectionHeaderBuffer));\n currentUnifiedBase += SplatBuffer.SectionHeaderSizeBytes;\n }\n\n for (let sectionBuffer of sectionBuffers) {\n new Uint8Array(unifiedBuffer, currentUnifiedBase, sectionBuffer.byteLength).set(new Uint8Array(sectionBuffer));\n currentUnifiedBase += sectionBuffer.byteLength;\n }\n\n const splatBuffer = new SplatBuffer(unifiedBuffer);\n return splatBuffer;\n }\n\n static computeBucketsForUncompressedSplatArray(splatArray, blockSize, bucketSize) {\n let splatCount = splatArray.splatCount;\n const halfBlockSize = blockSize / 2.0;\n\n const min = new THREE.Vector3();\n const max = new THREE.Vector3();\n\n for (let i = 0; i < splatCount; i++) {\n const targetSplat = splatArray.splats[i];\n const center = [targetSplat[UncompressedSplatArray.OFFSET.X],\n targetSplat[UncompressedSplatArray.OFFSET.Y],\n targetSplat[UncompressedSplatArray.OFFSET.Z]];\n if (i === 0 || center[0] < min.x) min.x = center[0];\n if (i === 0 || center[0] > max.x) max.x = center[0];\n if (i === 0 || center[1] < min.y) min.y = center[1];\n if (i === 0 || center[1] > max.y) max.y = center[1];\n if (i === 0 || center[2] < min.z) min.z = center[2];\n if (i === 0 || center[2] > max.z) max.z = center[2];\n }\n\n const dimensions = new THREE.Vector3().copy(max).sub(min);\n const yBlocks = Math.ceil(dimensions.y / blockSize);\n const zBlocks = Math.ceil(dimensions.z / blockSize);\n\n const blockCenter = new THREE.Vector3();\n const fullBuckets = [];\n const partiallyFullBuckets = {};\n\n for (let i = 0; i < splatCount; i++) {\n const targetSplat = splatArray.splats[i];\n const center = [targetSplat[UncompressedSplatArray.OFFSET.X],\n targetSplat[UncompressedSplatArray.OFFSET.Y],\n targetSplat[UncompressedSplatArray.OFFSET.Z]];\n const xBlock = Math.floor((center[0] - min.x) / blockSize);\n const yBlock = Math.floor((center[1] - min.y) / blockSize);\n const zBlock = Math.floor((center[2] - min.z) / blockSize);\n\n blockCenter.x = xBlock * blockSize + min.x + halfBlockSize;\n blockCenter.y = yBlock * blockSize + min.y + halfBlockSize;\n blockCenter.z = zBlock * blockSize + min.z + halfBlockSize;\n\n const bucketId = xBlock * (yBlocks * zBlocks) + yBlock * zBlocks + zBlock;\n let bucket = partiallyFullBuckets[bucketId];\n if (!bucket) {\n partiallyFullBuckets[bucketId] = bucket = {\n 'splats': [],\n 'center': blockCenter.toArray()\n };\n }\n\n bucket.splats.push(i);\n if (bucket.splats.length >= bucketSize) {\n fullBuckets.push(bucket);\n partiallyFullBuckets[bucketId] = null;\n }\n }\n\n const partiallyFullBucketArray = [];\n for (let bucketId in partiallyFullBuckets) {\n if (partiallyFullBuckets.hasOwnProperty(bucketId)) {\n const bucket = partiallyFullBuckets[bucketId];\n if (bucket) {\n partiallyFullBucketArray.push(bucket);\n }\n }\n }\n\n return {\n 'fullBuckets': fullBuckets,\n 'partiallyFullBuckets': partiallyFullBucketArray,\n };\n }\n\n static preallocateUncompressed(splatCount, sphericalHarmonicsDegrees) {\n const shDescriptor = SplatBuffer.CompressionLevels[0].SphericalHarmonicsDegrees[sphericalHarmonicsDegrees];\n const splatBufferDataOffsetBytes = SplatBuffer.HeaderSizeBytes + SplatBuffer.SectionHeaderSizeBytes;\n const splatBufferSizeBytes = splatBufferDataOffsetBytes + shDescriptor.BytesPerSplat * splatCount;\n const outBuffer = new ArrayBuffer(splatBufferSizeBytes);\n SplatBuffer.writeHeaderToBuffer({\n versionMajor: SplatBuffer.CurrentMajorVersion,\n versionMinor: SplatBuffer.CurrentMinorVersion,\n maxSectionCount: 1,\n sectionCount: 1,\n maxSplatCount: splatCount,\n splatCount: splatCount,\n compressionLevel: 0,\n sceneCenter: new THREE.Vector3()\n }, outBuffer);\n\n SplatBuffer.writeSectionHeaderToBuffer({\n maxSplatCount: splatCount,\n splatCount: splatCount,\n bucketSize: 0,\n bucketCount: 0,\n bucketBlockSize: 0,\n compressionScaleRange: 0,\n storageSizeBytes: 0,\n fullBucketCount: 0,\n partiallyFilledBucketCount: 0,\n sphericalHarmonicsDegree: sphericalHarmonicsDegrees\n }, 0, outBuffer, SplatBuffer.HeaderSizeBytes);\n\n return {\n splatBuffer: new SplatBuffer(outBuffer, true),\n splatBufferDataOffsetBytes\n };\n }\n}\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 ['char', Int8Array],\n ['uchar', Uint8Array],\n ['short', Int16Array],\n ['ushort', Uint16Array],\n ['int', Int32Array],\n ['uint', Uint32Array],\n ['float', Float32Array],\n ['double', Float64Array],\n]);\n\nconst unpackUnorm = (value, bits) => {\n const t = (1 << bits) - 1;\n return (value & t) / t;\n};\n\nconst unpack111011 = (result, value) => {\n result.x = unpackUnorm(value >>> 21, 11);\n result.y = unpackUnorm(value >>> 11, 10);\n result.z = unpackUnorm(value, 11);\n};\n\nconst unpack8888 = (result, value) => {\n result.x = unpackUnorm(value >>> 24, 8);\n result.y = unpackUnorm(value >>> 16, 8);\n result.z = unpackUnorm(value >>> 8, 8);\n result.w = unpackUnorm(value, 8);\n};\n\n// unpack quaternion with 2,10,10,10 format (largest element, 3x10bit element)\nconst unpackRot = (result, value) => {\n const norm = 1.0 / (Math.sqrt(2) * 0.5);\n const a = (unpackUnorm(value >>> 20, 10) - 0.5) * norm;\n const b = (unpackUnorm(value >>> 10, 10) - 0.5) * norm;\n const c = (unpackUnorm(value, 10) - 0.5) * norm;\n const m = Math.sqrt(1.0 - (a * a + b * b + c * c));\n\n switch (value >>> 30) {\n case 0:\n result.set(m, a, b, c);\n break;\n case 1:\n result.set(a, m, b, c);\n break;\n case 2:\n result.set(a, b, m, c);\n break;\n case 3:\n result.set(a, b, c, m);\n break;\n }\n};\n\nconst lerp = (a, b, t) => {\n return a * (1 - t) + b * t;\n};\n\nconst getElementPropStorage = (element, name) => {\n return element.properties.find((p) => p.name === name && p.storage)\n ?.storage;\n};\n\nclass PlayCanvasCompressedPlyParser {\n\n static decodeHeaderText(headerText) {\n\n let element;\n let chunkElement;\n let vertexElement;\n let shElement;\n\n const headerLines = headerText.split('\\n').filter((line) => !line.startsWith('comment '));\n\n let bytesPerSplat = 0;\n let done = false;\n for (let i = 1; i < headerLines.length; ++i) {\n const words = headerLines[i].split(' ');\n\n switch (words[0]) {\n case 'format':\n if (words[1] !== 'binary_little_endian') {\n throw new Error('Unsupported ply format');\n }\n break;\n case 'element':\n element = {\n name: words[1],\n count: parseInt(words[2], 10),\n properties: [],\n storageSizeBytes: 0\n };\n if (element.name === 'chunk') chunkElement = element;\n else if (element.name === 'vertex') vertexElement = element;\n else if (element.name === 'sh') shElement = element;\n break;\n case 'property': {\n if (!DataTypeMap.has(words[1])) {\n throw new Error(\n `Unrecognized property data type '${words[1]}' in ply header`\n );\n }\n const StorageType = DataTypeMap.get(words[1]);\n const storageSizeByes = StorageType.BYTES_PER_ELEMENT * element.count;\n if (element.name === 'vertex') bytesPerSplat += StorageType.BYTES_PER_ELEMENT;\n element.properties.push({\n type: words[1],\n name: words[2],\n storage: null,\n byteSize: StorageType.BYTES_PER_ELEMENT,\n storageSizeByes: storageSizeByes\n });\n element.storageSizeBytes += storageSizeByes;\n break;\n }\n case HeaderEndToken:\n done = true;\n break;\n default:\n throw new Error(\n `Unrecognized header value '${words[0]}' in ply header`\n );\n }\n if (done) break;\n }\n\n let sphericalHarmonicsDegree = 0;\n let sphericalHarmonicsPerSplat = 0;\n if (shElement) {\n sphericalHarmonicsPerSplat = shElement.properties.length;\n if (shElement.properties.length >= 45) {\n sphericalHarmonicsDegree = 3;\n } else if (shElement.properties.length >= 24) {\n sphericalHarmonicsDegree = 2;\n } else if (shElement.properties.length >= 9) {\n sphericalHarmonicsDegree = 1;\n }\n }\n\n return {\n 'chunkElement': chunkElement,\n 'vertexElement': vertexElement,\n 'shElement': shElement,\n 'bytesPerSplat': bytesPerSplat,\n 'headerSizeBytes': headerText.indexOf(HeaderEndToken) + HeaderEndToken.length + 1,\n 'sphericalHarmonicsDegree': sphericalHarmonicsDegree,\n 'sphericalHarmonicsPerSplat': sphericalHarmonicsPerSplat\n };\n }\n\n static decodeHeader(plyBuffer) {\n\n /**\n * Searches for the first occurrence of a sequence within a buffer.\n * @example\n * find(new Uint8Array([1, 2, 3, 4]), new Uint8Array([3, 4])); // 2\n * @param {Uint8Array} buf - The buffer in which to search.\n * @param {Uint8Array} search - The sequence to search for.\n * @return {number} The index of the first occurrence of the search sequence in the buffer, or -1 if not found.\n */\n const find = (buf, search) => {\n const endIndex = buf.length - search.length;\n let i;\n let j;\n for (i = 0; i <= endIndex; ++i) {\n for (j = 0; j < search.length; ++j) {\n if (buf[i + j] !== search[j]) {\n break;\n }\n }\n if (j === search.length) {\n return i;\n }\n }\n return -1;\n };\n\n /**\n * Checks if array 'a' starts with the same elements as array 'b'.\n * @example\n * startsWith(new Uint8Array([1, 2, 3, 4]), new Uint8Array([1, 2])); // true\n * @param {Uint8Array} a - The array to check against.\n * @param {Uint8Array} b - The array of elements to look for at the start of 'a'.\n * @return {boolean} - True if 'a' starts with all elements of 'b', otherwise false.\n */\n const startsWith = (a, b) => {\n if (a.length < b.length) {\n return false;\n }\n\n for (let i = 0; i < b.length; ++i) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n\n return true;\n };\n\n let buf = new Uint8Array(plyBuffer);\n let endHeaderTokenOffset;\n\n if (buf.length >= HeaderMagicBytes.length && !startsWith(buf, HeaderMagicBytes)) {\n throw new Error('Invalid PLY header');\n }\n\n endHeaderTokenOffset = find(buf, HeaderEndTokenBytes);\n if (endHeaderTokenOffset === -1) {\n throw new Error('End of PLY header not found');\n }\n\n const headerText = new TextDecoder('ascii').decode(\n buf.slice(0, endHeaderTokenOffset)\n );\n\n const {\n chunkElement,\n vertexElement,\n shElement,\n sphericalHarmonicsDegree,\n sphericalHarmonicsPerSplat,\n bytesPerSplat\n } = PlayCanvasCompressedPlyParser.decodeHeaderText(headerText);\n\n return {\n 'headerSizeBytes': endHeaderTokenOffset + HeaderEndTokenBytes.length,\n 'bytesPerSplat': bytesPerSplat,\n 'chunkElement': chunkElement,\n 'vertexElement': vertexElement,\n 'shElement': shElement,\n 'sphericalHarmonicsDegree': sphericalHarmonicsDegree,\n 'sphericalHarmonicsPerSplat': sphericalHarmonicsPerSplat\n };\n }\n\n static readElementData(element, readBuffer, readOffset, fromIndex, toIndex, propertyFilter = null) {\n\n let dataView = readBuffer instanceof DataView ? readBuffer : new DataView(readBuffer);\n\n fromIndex = fromIndex || 0;\n toIndex = toIndex || element.count - 1;\n for (let e = fromIndex; e <= toIndex; ++e) {\n for (let j = 0; j < element.properties.length; ++j) {\n const property = element.properties[j];\n\n const StorageType = DataTypeMap.get(property.type);\n const requiredStorageSizeBytes = StorageType.BYTES_PER_ELEMENT * element.count;\n if ((!property.storage || property.storage.byteLength < requiredStorageSizeBytes) &&\n (!propertyFilter || propertyFilter(property.name))) {\n property.storage = new StorageType(element.count);\n }\n\n if (property.storage) {\n switch (property.type) {\n case 'char':\n property.storage[e] = dataView.getInt8(readOffset);\n break;\n case 'uchar':\n property.storage[e] = dataView.getUint8(readOffset);\n break;\n case 'short':\n property.storage[e] = dataView.getInt16(readOffset, true);\n break;\n case 'ushort':\n property.storage[e] = dataView.getUint16(readOffset, true);\n break;\n case 'int':\n property.storage[e] = dataView.getInt32(readOffset, true);\n break;\n case 'uint':\n property.storage[e] = dataView.getUint32(readOffset, true);\n break;\n case 'float':\n property.storage[e] = dataView.getFloat32(readOffset, true);\n break;\n case 'double':\n property.storage[e] = dataView.getFloat64(readOffset, true);\n break;\n }\n }\n\n readOffset += property.byteSize;\n }\n }\n\n return readOffset;\n }\n\n static readPly(plyBuffer, propertyFilter = null) {\n\n const header = PlayCanvasCompressedPlyParser.decodeHeader(plyBuffer);\n\n let readIndex = PlayCanvasCompressedPlyParser.readElementData(header.chunkElement, plyBuffer,\n header.headerSizeBytes, null, null, propertyFilter);\n readIndex = PlayCanvasCompressedPlyParser.readElementData(header.vertexElement, plyBuffer, readIndex, null, null, propertyFilter);\n PlayCanvasCompressedPlyParser.readElementData(header.shElement, plyBuffer, readIndex, null, null, propertyFilter);\n\n return {\n 'chunkElement': header.chunkElement,\n 'vertexElement': header.vertexElement,\n 'shElement': header.shElement,\n 'sphericalHarmonicsDegree': header.sphericalHarmonicsDegree,\n 'sphericalHarmonicsPerSplat': header.sphericalHarmonicsPerSplat\n };\n }\n\n static getElementStorageArrays(chunkElement, vertexElement, shElement) {\n const storageArrays = {};\n\n if (vertexElement) {\n const minR = getElementPropStorage(chunkElement, 'min_r');\n const minG = getElementPropStorage(chunkElement, 'min_g');\n const minB = getElementPropStorage(chunkElement, 'min_b');\n const maxR = getElementPropStorage(chunkElement, 'max_r');\n const maxG = getElementPropStorage(chunkElement, 'max_g');\n const maxB = getElementPropStorage(chunkElement, 'max_b');\n const minX = getElementPropStorage(chunkElement, 'min_x');\n const minY = getElementPropStorage(chunkElement, 'min_y');\n const minZ = getElementPropStorage(chunkElement, 'min_z');\n const maxX = getElementPropStorage(chunkElement, 'max_x');\n const maxY = getElementPropStorage(chunkElement, 'max_y');\n const maxZ = getElementPropStorage(chunkElement, 'max_z');\n const minScaleX = getElementPropStorage(chunkElement, 'min_scale_x');\n const minScaleY = getElementPropStorage(chunkElement, 'min_scale_y');\n const minScaleZ = getElementPropStorage(chunkElement, 'min_scale_z');\n const maxScaleX = getElementPropStorage(chunkElement, 'max_scale_x');\n const maxScaleY = getElementPropStorage(chunkElement, 'max_scale_y');\n const maxScaleZ = getElementPropStorage(chunkElement, 'max_scale_z');\n const position = getElementPropStorage(vertexElement, 'packed_position');\n const rotation = getElementPropStorage(vertexElement, 'packed_rotation');\n const scale = getElementPropStorage(vertexElement, 'packed_scale');\n const color = getElementPropStorage(vertexElement, 'packed_color');\n\n storageArrays['colorExtremes'] = {\n minR, maxR,\n minG, maxG,\n minB, maxB\n };\n storageArrays['positionExtremes'] = {\n minX, maxX,\n minY, maxY,\n minZ, maxZ\n };\n storageArrays['scaleExtremes'] = {\n minScaleX, maxScaleX, minScaleY,\n maxScaleY, minScaleZ, maxScaleZ\n };\n storageArrays['position'] = position;\n storageArrays['rotation'] = rotation;\n storageArrays['scale'] = scale;\n storageArrays['color'] = color;\n }\n\n if (shElement) {\n const shStorageArrays = {};\n for (let i = 0; i < 45; i++) {\n const fRestKey = `f_rest_${i}`;\n const fRest = getElementPropStorage(shElement, fRestKey);\n if (fRest) {\n shStorageArrays[fRestKey] = fRest;\n } else {\n break;\n }\n }\n storageArrays['sh'] = shStorageArrays;\n }\n\n return storageArrays;\n }\n\n static decompressBaseSplat = function() {\n\n const p = new THREE.Vector3();\n const r = new THREE.Quaternion();\n const s = new THREE.Vector3();\n const c = new THREE.Vector4();\n\n const OFFSET = UncompressedSplatArray.OFFSET;\n\n return function(index, chunkSplatIndexOffset, positionArray, positionExtremes, scaleArray, scaleExtremes,\n rotationArray, colorExtremes, colorArray, outSplat) {\n outSplat = outSplat || UncompressedSplatArray.createSplat();\n\n const chunkIndex = Math.floor((chunkSplatIndexOffset + index) / 256);\n\n unpack111011(p, positionArray[index]);\n unpackRot(r, rotationArray[index]);\n unpack111011(s, scaleArray[index]);\n unpack8888(c, colorArray[index]);\n\n outSplat[OFFSET.X] = lerp(positionExtremes.minX[chunkIndex], positionExtremes.maxX[chunkIndex], p.x);\n outSplat[OFFSET.Y] = lerp(positionExtremes.minY[chunkIndex], positionExtremes.maxY[chunkIndex], p.y);\n outSplat[OFFSET.Z] = lerp(positionExtremes.minZ[chunkIndex], positionExtremes.maxZ[chunkIndex], p.z);\n\n outSplat[OFFSET.ROTATION0] = r.x;\n outSplat[OFFSET.ROTATION1] = r.y;\n outSplat[OFFSET.ROTATION2] = r.z;\n outSplat[OFFSET.ROTATION3] = r.w;\n\n outSplat[OFFSET.SCALE0] = Math.exp(lerp(scaleExtremes.minScaleX[chunkIndex], scaleExtremes.maxScaleX[chunkIndex], s.x));\n outSplat[OFFSET.SCALE1] = Math.exp(lerp(scaleExtremes.minScaleY[chunkIndex], scaleExtremes.maxScaleY[chunkIndex], s.y));\n outSplat[OFFSET.SCALE2] = Math.exp(lerp(scaleExtremes.minScaleZ[chunkIndex], scaleExtremes.maxScaleZ[chunkIndex], s.z));\n\n if (colorExtremes.minR && colorExtremes.maxR) {\n outSplat[OFFSET.FDC0] = clamp(Math.round(lerp(colorExtremes.minR[chunkIndex], colorExtremes.maxR[chunkIndex], c.x) * 255), 0, 255);\n } else {\n outSplat[OFFSET.FDC0] = clamp(Math.floor(c.x * 255), 0, 255);\n }\n if (colorExtremes.minG && colorExtremes.maxG) {\n outSplat[OFFSET.FDC1] = clamp(Math.round(lerp(colorExtremes.minG[chunkIndex], colorExtremes.maxG[chunkIndex], c.y) * 255), 0, 255);\n } else {\n outSplat[OFFSET.FDC1] = clamp(Math.floor(c.y * 255), 0, 255);\n }\n if (colorExtremes.minB && colorExtremes.maxB) {\n outSplat[OFFSET.FDC2] = clamp(Math.round(lerp(colorExtremes.minB[chunkIndex], colorExtremes.maxB[chunkIndex], c.z) * 255), 0, 255);\n } else {\n outSplat[OFFSET.FDC2] = clamp(Math.floor(c.z * 255), 0, 255);\n }\n outSplat[OFFSET.OPACITY] = clamp(Math.floor(c.w * 255), 0, 255);\n\n return outSplat;\n };\n\n }();\n\n static decompressSphericalHarmonics = function() {\n\n const shCoeffMap = [0, 3, 8, 15];\n\n const shIndexMap = [\n 0, 1, 2, 9, 10, 11, 12, 13, 24, 25, 26, 27, 28, 29, 30,\n 3, 4, 5, 14, 15, 16, 17, 18, 31, 32, 33, 34, 35, 36, 37,\n 6, 7, 8, 19, 20, 21, 22, 23, 38, 39, 40, 41, 42, 43, 44\n ];\n\n return function(index, shArray, outSphericalHarmonicsDegree, readSphericalHarmonicsDegree, outSplat) {\n outSplat = outSplat || UncompressedSplatArray.createSplat();\n let outSHCoeff = shCoeffMap[outSphericalHarmonicsDegree];\n let readSHCoeff = shCoeffMap[readSphericalHarmonicsDegree];\n for (let j = 0; j < 3; ++j) {\n for (let k = 0; k < 15; ++k) {\n const outIndex = shIndexMap[j * 15 + k];\n if (k < outSHCoeff && k < readSHCoeff) {\n outSplat[UncompressedSplatArray.OFFSET.FRC0 + outIndex] = (shArray[j * readSHCoeff + k][index] * (8 / 255) - 4);\n }\n }\n }\n\n return outSplat;\n };\n\n }();\n\n static parseToUncompressedSplatBufferSection(chunkElement, vertexElement, fromIndex, toIndex, chunkSplatIndexOffset,\n vertexDataBuffer, outBuffer, outOffset, propertyFilter = null) {\n\n PlayCanvasCompressedPlyParser.readElementData(vertexElement, vertexDataBuffer, 0, fromIndex, toIndex, propertyFilter);\n\n const outBytesPerSplat = SplatBuffer.CompressionLevels[0].SphericalHarmonicsDegrees[0].BytesPerSplat;\n\n const { positionExtremes, scaleExtremes, colorExtremes, position, rotation, scale, color } =\n PlayCanvasCompressedPlyParser.getElementStorageArrays(chunkElement, vertexElement);\n\n const tempSplat = UncompressedSplatArray.createSplat();\n\n for (let i = fromIndex; i <= toIndex; ++i) {\n PlayCanvasCompressedPlyParser.decompressBaseSplat(i, chunkSplatIndexOffset, position, positionExtremes,\n scale, scaleExtremes, rotation, colorExtremes, color, tempSplat);\n const outBase = i * outBytesPerSplat + outOffset;\n SplatBuffer.writeSplatDataToSectionBuffer(tempSplat, outBuffer, outBase, 0, 0);\n }\n }\n\n static parseToUncompressedSplatArraySection(chunkElement, vertexElement, fromIndex, toIndex, chunkSplatIndexOffset,\n vertexDataBuffer, splatArray, propertyFilter = null) {\n\n PlayCanvasCompressedPlyParser.readElementData(vertexElement, vertexDataBuffer, 0, fromIndex, toIndex, propertyFilter);\n\n const { positionExtremes, scaleExtremes, colorExtremes, position, rotation, scale, color } =\n PlayCanvasCompressedPlyParser.getElementStorageArrays(chunkElement, vertexElement);\n\n for (let i = fromIndex; i <= toIndex; ++i) {\n const tempSplat = UncompressedSplatArray.createSplat();\n PlayCanvasCompressedPlyParser.decompressBaseSplat(i, chunkSplatIndexOffset, position, positionExtremes,\n scale, scaleExtremes, rotation, colorExtremes, color, tempSplat);\n splatArray.addSplat(tempSplat);\n }\n }\n\n static parseSphericalHarmonicsToUncompressedSplatArraySection(chunkElement, shElement, fromIndex, toIndex,\n vertexDataBuffer, vertexReadOffset, outSphericalHarmonicsDegree, readSphericalHarmonicsDegree, splatArray, propertyFilter = null) {\n\n PlayCanvasCompressedPlyParser.readElementData(shElement, vertexDataBuffer, vertexReadOffset, fromIndex, toIndex, propertyFilter);\n\n const { sh } = PlayCanvasCompressedPlyParser.getElementStorageArrays(chunkElement, undefined, shElement);\n const shArrays = Object.values(sh);\n\n for (let i = fromIndex; i <= toIndex; ++i) {\n PlayCanvasCompressedPlyParser.decompressSphericalHarmonics(\n i, shArrays, outSphericalHarmonicsDegree, readSphericalHarmonicsDegree, splatArray.splats[i]\n );\n }\n }\n\n static parseToUncompressedSplatArray(plyBuffer, outSphericalHarmonicsDegree) {\n const { chunkElement, vertexElement, shElement, sphericalHarmonicsDegree } = PlayCanvasCompressedPlyParser.readPly(plyBuffer);\n\n outSphericalHarmonicsDegree = Math.min(outSphericalHarmonicsDegree, sphericalHarmonicsDegree);\n\n const splatArray = new UncompressedSplatArray(outSphericalHarmonicsDegree);\n\n const { positionExtremes, scaleExtremes, colorExtremes, position, rotation, scale, color } =\n PlayCanvasCompressedPlyParser.getElementStorageArrays(chunkElement, vertexElement);\n\n let shArrays;\n if (outSphericalHarmonicsDegree > 0) {\n const { sh } = PlayCanvasCompressedPlyParser.getElementStorageArrays(chunkElement, undefined, shElement);\n shArrays = Object.values(sh);\n }\n\n for (let i = 0; i < vertexElement.count; ++i) {\n\n splatArray.addDefaultSplat();\n const newSplat = splatArray.getSplat(splatArray.splatCount - 1);\n\n PlayCanvasCompressedPlyParser.decompressBaseSplat(i, 0, position, positionExtremes, scale,\n scaleExtremes, rotation, colorExtremes, color, newSplat);\n\n if (outSphericalHarmonicsDegree > 0) {\n PlayCanvasCompressedPlyParser.decompressSphericalHarmonics(\n i, shArrays, outSphericalHarmonicsDegree, sphericalHarmonicsDegree, newSplat\n );\n }\n }\n\n return splatArray;\n }\n\n static parseToUncompressedSplatBuffer(plyBuffer, outSphericalHarmonicsDegree) {\n const { chunkElement, vertexElement, shElement, sphericalHarmonicsDegree } = PlayCanvasCompressedPlyParser.readPly(plyBuffer);\n\n outSphericalHarmonicsDegree = Math.min(outSphericalHarmonicsDegree, sphericalHarmonicsDegree);\n\n const {\n splatBuffer,\n splatBufferDataOffsetBytes\n } = SplatBuffer.preallocateUncompressed(vertexElement.count, outSphericalHarmonicsDegree);\n\n const { positionExtremes, scaleExtremes, colorExtremes, position, rotation, scale, color } =\n PlayCanvasCompressedPlyParser.getElementStorageArrays(chunkElement, vertexElement);\n\n let shArrays;\n if (outSphericalHarmonicsDegree > 0) {\n const { sh } = PlayCanvasCompressedPlyParser.getElementStorageArrays(chunkElement, undefined, shElement);\n shArrays = Object.values(sh);\n }\n\n const outBytesPerSplat = SplatBuffer.CompressionLevels[0].SphericalHarmonicsDegrees[outSphericalHarmonicsDegree].BytesPerSplat;\n\n const newSplat = UncompressedSplatArray.createSplat(outSphericalHarmonicsDegree);\n\n for (let i = 0; i < vertexElement.count; ++i) {\n PlayCanvasCompressedPlyParser.decompressBaseSplat(\n i, 0, position, positionExtremes, scale, scaleExtremes, rotation, colorExtremes, color, newSplat\n );\n if (outSphericalHarmonicsDegree > 0) {\n PlayCanvasCompressedPlyParser.decompressSphericalHarmonics(\n i, shArrays, outSphericalHarmonicsDegree, sphericalHarmonicsDegree, newSplat\n );\n }\n\n const outBase = i * outBytesPerSplat + splatBufferDataOffsetBytes;\n SplatBuffer.writeSplatDataToSectionBuffer(newSplat, splatBuffer.bufferData, outBase, 0, outSphericalHarmonicsDegree);\n }\n\n return splatBuffer;\n }\n\n}\n\nconst PlyFormat = {\n 'INRIAV1': 0,\n 'INRIAV2': 1,\n 'PlayCanvasCompressed': 2\n};\n\nconst [\n FieldSizeIdDouble, FieldSizeIdInt, FieldSizeIdUInt, FieldSizeIdFloat, FieldSizeIdShort, FieldSizeIdUShort, FieldSizeIdUChar\n ] = [0, 1, 2, 3, 4, 5, 6];\n\nconst FieldSizeStringMap = {\n 'double': FieldSizeIdDouble,\n 'int': FieldSizeIdInt,\n 'uint': FieldSizeIdUInt,\n 'float': FieldSizeIdFloat,\n 'short': FieldSizeIdShort,\n 'ushort': FieldSizeIdUShort,\n 'uchar': FieldSizeIdUChar,\n};\n\nconst FieldSize = {\n [FieldSizeIdDouble]: 8,\n [FieldSizeIdInt]: 4,\n [FieldSizeIdUInt]: 4,\n [FieldSizeIdFloat]: 4,\n [FieldSizeIdShort]: 2,\n [FieldSizeIdUShort]: 2,\n [FieldSizeIdUChar]: 1,\n};\n\nclass PlyParserUtils {\n\n static HeaderEndToken = 'end_header';\n\n static decodeSectionHeader(headerLines, fieldNameIdMap, headerStartLine = 0) {\n\n const extractedLines = [];\n\n let processingSection = false;\n let headerEndLine = -1;\n let vertexCount = 0;\n let endOfHeader = false;\n let sectionName = null;\n\n const fieldIds = [];\n const fieldTypes = [];\n const allFieldNames = [];\n const usedFieldNames = [];\n const fieldTypesByName = {};\n\n for (let i = headerStartLine; i < headerLines.length; i++) {\n const line = headerLines[i].trim();\n if (line.startsWith('element')) {\n if (processingSection) {\n headerEndLine--;\n break;\n } else {\n processingSection = true;\n headerStartLine = i;\n headerEndLine = i;\n const lineComponents = line.split(' ');\n let validComponents = 0;\n for (let lineComponent of lineComponents) {\n const trimmedComponent = lineComponent.trim();\n if (trimmedComponent.length > 0) {\n validComponents++;\n if (validComponents === 2) {\n sectionName = trimmedComponent;\n } else if (validComponents === 3) {\n vertexCount = parseInt(trimmedComponent);\n }\n }\n }\n }\n } else if (line.startsWith('property')) {\n const fieldMatch = line.match(/(\\w+)\\s+(\\w+)\\s+(\\w+)/);\n if (fieldMatch) {\n const fieldTypeStr = fieldMatch[2];\n const fieldName = fieldMatch[3];\n allFieldNames.push(fieldName);\n const fieldId = fieldNameIdMap[fieldName];\n fieldTypesByName[fieldName] = fieldTypeStr;\n const fieldType = FieldSizeStringMap[fieldTypeStr];\n if (fieldId !== undefined) {\n usedFieldNames.push(fieldName);\n fieldIds.push(fieldId);\n fieldTypes[fieldId] = fieldType;\n }\n }\n }\n if (line === PlyParserUtils.HeaderEndToken) {\n endOfHeader = true;\n break;\n }\n if (processingSection) {\n extractedLines.push(line);\n headerEndLine++;\n }\n }\n\n const fieldOffsets = [];\n let bytesPerVertex = 0;\n for (let fieldName of allFieldNames) {\n const fieldType = fieldTypesByName[fieldName];\n if (fieldTypesByName.hasOwnProperty(fieldName)) {\n const fieldId = fieldNameIdMap[fieldName];\n if (fieldId !== undefined) {\n fieldOffsets[fieldId] = bytesPerVertex;\n }\n }\n bytesPerVertex += FieldSize[FieldSizeStringMap[fieldType]];\n }\n\n const sphericalHarmonics = PlyParserUtils.decodeSphericalHarmonicsFromSectionHeader(allFieldNames, fieldNameIdMap);\n\n return {\n 'headerLines': extractedLines,\n 'headerStartLine': headerStartLine,\n 'headerEndLine': headerEndLine,\n 'fieldTypes': fieldTypes,\n 'fieldIds': fieldIds,\n 'fieldOffsets': fieldOffsets,\n 'bytesPerVertex': bytesPerVertex,\n 'vertexCount': vertexCount,\n 'dataSizeBytes': bytesPerVertex * vertexCount,\n 'endOfHeader': endOfHeader,\n 'sectionName': sectionName,\n 'sphericalHarmonicsDegree': sphericalHarmonics.degree,\n 'sphericalHarmonicsCoefficientsPerChannel': sphericalHarmonics.coefficientsPerChannel,\n 'sphericalHarmonicsDegree1Fields': sphericalHarmonics.degree1Fields,\n 'sphericalHarmonicsDegree2Fields': sphericalHarmonics.degree2Fields\n };\n\n }\n\n static decodeSphericalHarmonicsFromSectionHeader(fieldNames, fieldNameIdMap) {\n let sphericalHarmonicsFieldCount = 0;\n let coefficientsPerChannel = 0;\n for (let fieldName of fieldNames) {\n if (fieldName.startsWith('f_rest')) sphericalHarmonicsFieldCount++;\n }\n coefficientsPerChannel = sphericalHarmonicsFieldCount / 3;\n let degree = 0;\n if (coefficientsPerChannel >= 3) degree = 1;\n if (coefficientsPerChannel >= 8) degree = 2;\n\n let degree1Fields = [];\n let degree2Fields = [];\n\n for (let rgb = 0; rgb < 3; rgb++) {\n if (degree >= 1) {\n for (let i = 0; i < 3; i++) {\n degree1Fields.push(fieldNameIdMap['f_rest_' + (i + coefficientsPerChannel * rgb)]);\n }\n }\n if (degree >= 2) {\n for (let i = 0; i < 5; i++) {\n degree2Fields.push(fieldNameIdMap['f_rest_' + (i + coefficientsPerChannel * rgb + 3)]);\n }\n }\n }\n\n return {\n 'degree': degree,\n 'coefficientsPerChannel': coefficientsPerChannel,\n 'degree1Fields': degree1Fields,\n 'degree2Fields': degree2Fields\n };\n }\n\n static getHeaderSectionNames(headerLines) {\n const sectionNames = [];\n for (let headerLine of headerLines) {\n if (headerLine.startsWith('element')) {\n const lineComponents = headerLine.split(' ');\n let validComponents = 0;\n for (let lineComponent of lineComponents) {\n const trimmedComponent = lineComponent.trim();\n if (trimmedComponent.length > 0) {\n validComponents++;\n if (validComponents === 2) {\n sectionNames.push(trimmedComponent);\n }\n }\n }\n }\n }\n return sectionNames;\n }\n\n static checkTextForEndHeader(endHeaderTestText) {\n if (endHeaderTestText.includes(PlyParserUtils.HeaderEndToken)) {\n return true;\n }\n return false;\n }\n\n static checkBufferForEndHeader(buffer, searchOfset, chunkSize, decoder) {\n const endHeaderTestChunk = new Uint8Array(buffer, Math.max(0, searchOfset - chunkSize), chunkSize);\n const endHeaderTestText = decoder.decode(endHeaderTestChunk);\n return PlyParserUtils.checkTextForEndHeader(endHeaderTestText);\n }\n\n static extractHeaderFromBufferToText(plyBuffer) {\n const decoder = new TextDecoder();\n let headerOffset = 0;\n let headerText = '';\n const readChunkSize = 100;\n\n while (true) {\n if (headerOffset + readChunkSize >= plyBuffer.byteLength) {\n throw new Error('End of file reached while searching for end of header');\n }\n const headerChunk = new Uint8Array(plyBuffer, headerOffset, readChunkSize);\n headerText += decoder.decode(headerChunk);\n headerOffset += readChunkSize;\n\n if (PlyParserUtils.checkBufferForEndHeader(plyBuffer, headerOffset, readChunkSize * 2, decoder)) {\n break;\n }\n }\n\n return headerText;\n }\n\n static readHeaderFromBuffer(plyBuffer) {\n const decoder = new TextDecoder();\n let headerOffset = 0;\n let headerText = '';\n const readChunkSize = 100;\n\n while (true) {\n if (headerOffset + readChunkSize >= plyBuffer.byteLength) {\n throw new Error('End of file reached while searching for end of header');\n }\n const headerChunk = new Uint8Array(plyBuffer, headerOffset, readChunkSize);\n headerText += decoder.decode(headerChunk);\n headerOffset += readChunkSize;\n\n if (PlyParserUtils.checkBufferForEndHeader(plyBuffer, headerOffset, readChunkSize * 2, decoder)) {\n break;\n }\n }\n\n return headerText;\n }\n\n static convertHeaderTextToLines(headerText) {\n const headerLines = headerText.split('\\n');\n const prunedLines = [];\n for (let i = 0; i < headerLines.length; i++) {\n const line = headerLines[i].trim();\n prunedLines.push(line);\n if (line === PlyParserUtils.HeaderEndToken) {\n break;\n }\n }\n return prunedLines;\n }\n\n static determineHeaderFormatFromHeaderText(headertText) {\n const headerLines = PlyParserUtils.convertHeaderTextToLines(headertText);\n let format = PlyFormat.INRIAV1;\n for (let i = 0; i < headerLines.length; i++) {\n const line = headerLines[i].trim();\n if (line.startsWith('element chunk') || line.match(/[A-Za-z]*packed_[A-Za-z]*/)) {\n format = PlyFormat.PlayCanvasCompressed;\n } else if (line.startsWith('element codebook_centers')) {\n format = PlyFormat.INRIAV2;\n } else if (line === PlyParserUtils.HeaderEndToken) {\n break;\n }\n }\n return format;\n }\n\n static determineHeaderFormatFromPlyBuffer(plyBuffer) {\n const headertText = PlyParserUtils.extractHeaderFromBufferToText(plyBuffer);\n return PlyParserUtils.determineHeaderFormatFromHeaderText(headertText);\n }\n\n static readVertex(vertexData, header, row, dataOffset, fieldsToRead, rawVertex, normalize = true) {\n const offset = row * header.bytesPerVertex + dataOffset;\n const fieldOffsets = header.fieldOffsets;\n const fieldTypes = header.fieldTypes;\n for (let fieldId of fieldsToRead) {\n const fieldType = fieldTypes[fieldId];\n if (fieldType === FieldSizeIdFloat) {\n rawVertex[fieldId] = vertexData.getFloat32(offset + fieldOffsets[fieldId], true);\n } else if (fieldType === FieldSizeIdShort) {\n rawVertex[fieldId] = vertexData.getInt16(offset + fieldOffsets[fieldId], true);\n } else if (fieldType === FieldSizeIdUShort) {\n rawVertex[fieldId] = vertexData.getUint16(offset + fieldOffsets[fieldId], true);\n } else if (fieldType === FieldSizeIdInt) {\n rawVertex[fieldId] = vertexData.getInt32(offset + fieldOffsets[fieldId], true);\n } else if (fieldType === FieldSizeIdUInt) {\n rawVertex[fieldId] = vertexData.getUint32(offset + fieldOffsets[fieldId], true);\n } else if (fieldType === FieldSizeIdUChar) {\n if (normalize) {\n rawVertex[fieldId] = vertexData.getUint8(offset + fieldOffsets[fieldId]) / 255.0;\n } else {\n rawVertex[fieldId] = vertexData.getUint8(offset + fieldOffsets[fieldId]);\n }\n }\n }\n }\n}\n\nconst BaseFieldNamesToRead = ['scale_0', 'scale_1', 'scale_2', 'rot_0', 'rot_1', 'rot_2', 'rot_3', 'x', 'y', 'z',\n 'f_dc_0', 'f_dc_1', 'f_dc_2', 'opacity', 'red', 'green', 'blue', 'f_rest_0'];\n\nconst BaseFieldsToReadIndexes = BaseFieldNamesToRead.map((e, i) => i);\n\nconst [\n SCALE_0, SCALE_1, SCALE_2, ROT_0, ROT_1, ROT_2, ROT_3, X, Y, Z, F_DC_0, F_DC_1, F_DC_2, OPACITY, RED$1, GREEN$1, BLUE$1, F_REST_0\n ] = BaseFieldsToReadIndexes;\n\nclass INRIAV1PlyParser {\n\n static decodeHeaderLines(headerLines) {\n\n let shLineCount = 0;\n headerLines.forEach((line) => {\n if (line.includes('f_rest_')) shLineCount++;\n });\n\n let shFieldsToReadCount = 0;\n if (shLineCount >= 45) {\n shFieldsToReadCount = 45;\n } else if (shLineCount >= 24) {\n shFieldsToReadCount = 24;\n } else if (shLineCount >= 9) {\n shFieldsToReadCount = 9;\n }\n\n const shFieldIndexesToMap = Array.from(Array(Math.max(shFieldsToReadCount - 1, 0)));\n let shRemainingFieldNamesToRead = shFieldIndexesToMap.map((element, index) => `f_rest_${index + 1}`);\n\n const fieldNamesToRead = [...BaseFieldNamesToRead, ...shRemainingFieldNamesToRead];\n const fieldsToReadIndexes = fieldNamesToRead.map((e, i) => i);\n\n const fieldNameIdMap = fieldsToReadIndexes.reduce((acc, element) => {\n acc[fieldNamesToRead[element]] = element;\n return acc;\n }, {});\n const header = PlyParserUtils.decodeSectionHeader(headerLines, fieldNameIdMap, 0);\n header.splatCount = header.vertexCount;\n header.bytesPerSplat = header.bytesPerVertex;\n header.fieldsToReadIndexes = fieldsToReadIndexes;\n return header;\n }\n\n static decodeHeaderText(headerText) {\n const headerLines = PlyParserUtils.convertHeaderTextToLines(headerText);\n const header = INRIAV1PlyParser.decodeHeaderLines(headerLines);\n header.headerText = headerText;\n header.headerSizeBytes = headerText.indexOf(PlyParserUtils.HeaderEndToken) + PlyParserUtils.HeaderEndToken.length + 1;\n return header;\n }\n\n static decodeHeaderFromBuffer(plyBuffer) {\n const headerText = PlyParserUtils.readHeaderFromBuffer(plyBuffer);\n return INRIAV1PlyParser.decodeHeaderText(headerText);\n }\n\n static findSplatData(plyBuffer, header) {\n return new DataView(plyBuffer, header.headerSizeBytes);\n }\n\n static parseToUncompressedSplatBufferSection(header, fromSplat, toSplat, splatData, splatDataOffset,\n toBuffer, toOffset, outSphericalHarmonicsDegree = 0) {\n outSphericalHarmonicsDegree = Math.min(outSphericalHarmonicsDegree, header.sphericalHarmonicsDegree);\n const outBytesPerSplat = SplatBuffer.CompressionLevels[0].SphericalHarmonicsDegrees[outSphericalHarmonicsDegree].BytesPerSplat;\n\n for (let i = fromSplat; i <= toSplat; i++) {\n const parsedSplat = INRIAV1PlyParser.parseToUncompressedSplat(splatData, i, header,\n splatDataOffset, outSphericalHarmonicsDegree);\n const outBase = i * outBytesPerSplat + toOffset;\n SplatBuffer.writeSplatDataToSectionBuffer(parsedSplat, toBuffer, outBase, 0, outSphericalHarmonicsDegree);\n }\n }\n\n static parseToUncompressedSplatArraySection(header, fromSplat, toSplat, splatData, splatDataOffset,\n splatArray, outSphericalHarmonicsDegree = 0) {\n outSphericalHarmonicsDegree = Math.min(outSphericalHarmonicsDegree, header.sphericalHarmonicsDegree);\n for (let i = fromSplat; i <= toSplat; i++) {\n const parsedSplat = INRIAV1PlyParser.parseToUncompressedSplat(splatData, i, header,\n splatDataOffset, outSphericalHarmonicsDegree);\n splatArray.addSplat(parsedSplat);\n }\n }\n\n static decodeSectionSplatData(sectionSplatData, splatCount, sectionHeader, outSphericalHarmonicsDegree, toSplatArray = true) {\n outSphericalHarmonicsDegree = Math.min(outSphericalHarmonicsDegree, sectionHeader.sphericalHarmonicsDegree);\n if (toSplatArray) {\n const splatArray = new UncompressedSplatArray(outSphericalHarmonicsDegree);\n for (let row = 0; row < splatCount; row++) {\n const newSplat = INRIAV1PlyParser.parseToUncompressedSplat(sectionSplatData, row, sectionHeader,\n 0, outSphericalHarmonicsDegree);\n splatArray.addSplat(newSplat);\n }\n return splatArray;\n } else {\n const {\n splatBuffer,\n splatBufferDataOffsetBytes\n } = SplatBuffer.preallocateUncompressed(splatCount, outSphericalHarmonicsDegree);\n INRIAV1PlyParser.parseToUncompressedSplatBufferSection(\n sectionHeader, 0, splatCount - 1, sectionSplatData, 0,\n splatBuffer.bufferData, splatBufferDataOffsetBytes, outSphericalHarmonicsDegree\n );\n return splatBuffer;\n }\n }\n\n static parseToUncompressedSplat = function() {\n\n let rawSplat = [];\n const tempRotation = new THREE.Quaternion();\n\n const OFFSET_X = UncompressedSplatArray.OFFSET.X;\n const OFFSET_Y = UncompressedSplatArray.OFFSET.Y;\n const OFFSET_Z = UncompressedSplatArray.OFFSET.Z;\n\n const OFFSET_SCALE0 = UncompressedSplatArray.OFFSET.SCALE0;\n const OFFSET_SCALE1 = UncompressedSplatArray.OFFSET.SCALE1;\n const OFFSET_SCALE2 = UncompressedSplatArray.OFFSET.SCALE2;\n\n const OFFSET_ROTATION0 = UncompressedSplatArray.OFFSET.ROTATION0;\n const OFFSET_ROTATION1 = UncompressedSplatArray.OFFSET.ROTATION1;\n const OFFSET_ROTATION2 = UncompressedSplatArray.OFFSET.ROTATION2;\n const OFFSET_ROTATION3 = UncompressedSplatArray.OFFSET.ROTATION3;\n\n const OFFSET_FDC0 = UncompressedSplatArray.OFFSET.FDC0;\n const OFFSET_FDC1 = UncompressedSplatArray.OFFSET.FDC1;\n const OFFSET_FDC2 = UncompressedSplatArray.OFFSET.FDC2;\n const OFFSET_OPACITY = UncompressedSplatArray.OFFSET.OPACITY;\n\n const OFFSET_FRC = [];\n\n for (let i = 0; i < 45; i++) {\n OFFSET_FRC[i] = UncompressedSplatArray.OFFSET.FRC0 + i;\n }\n\n return function(splatData, row, header, splatDataOffset = 0, outSphericalHarmonicsDegree = 0) {\n outSphericalHarmonicsDegree = Math.min(outSphericalHarmonicsDegree, header.sphericalHarmonicsDegree);\n INRIAV1PlyParser.readSplat(splatData, header, row, splatDataOffset, rawSplat);\n const newSplat = UncompressedSplatArray.createSplat(outSphericalHarmonicsDegree);\n if (rawSplat[SCALE_0] !== undefined) {\n newSplat[OFFSET_SCALE0] = Math.exp(rawSplat[SCALE_0]);\n newSplat[OFFSET_SCALE1] = Math.exp(rawSplat[SCALE_1]);\n newSplat[OFFSET_SCALE2] = Math.exp(rawSplat[SCALE_2]);\n } else {\n newSplat[OFFSET_SCALE0] = 0.01;\n newSplat[OFFSET_SCALE1] = 0.01;\n newSplat[OFFSET_SCALE2] = 0.01;\n }\n\n if (rawSplat[F_DC_0] !== undefined) {\n const SH_C0 = 0.28209479177387814;\n newSplat[OFFSET_FDC0] = (0.5 + SH_C0 * rawSplat[F_DC_0]) * 255;\n newSplat[OFFSET_FDC1] = (0.5 + SH_C0 * rawSplat[F_DC_1]) * 255;\n newSplat[OFFSET_FDC2] = (0.5 + SH_C0 * rawSplat[F_DC_2]) * 255;\n } else if (rawSplat[RED$1] !== undefined) {\n newSplat[OFFSET_FDC0] = rawSplat[RED$1] * 255;\n newSplat[OFFSET_FDC1] = rawSplat[GREEN$1] * 255;\n newSplat[OFFSET_FDC2] = rawSplat[BLUE$1] * 255;\n } else {\n newSplat[OFFSET_FDC0] = 0;\n newSplat[OFFSET_FDC1] = 0;\n newSplat[OFFSET_FDC2] = 0;\n }\n\n if (rawSplat[OPACITY] !== undefined) {\n newSplat[OFFSET_OPACITY] = (1 / (1 + Math.exp(-rawSplat[OPACITY]))) * 255;\n }\n\n newSplat[OFFSET_FDC0] = clamp(Math.floor(newSplat[OFFSET_FDC0]), 0, 255);\n newSplat[OFFSET_FDC1] = clamp(Math.floor(newSplat[OFFSET_FDC1]), 0, 255);\n newSplat[OFFSET_FDC2] = clamp(Math.floor(newSplat[OFFSET_FDC2]), 0, 255);\n newSplat[OFFSET_OPACITY] = clamp(Math.floor(newSplat[OFFSET_OPACITY]), 0, 255);\n\n if (outSphericalHarmonicsDegree >= 1) {\n if (rawSplat[F_REST_0] !== undefined) {\n for (let i = 0; i < 9; i++) {\n newSplat[OFFSET_FRC[i]] = rawSplat[header.sphericalHarmonicsDegree1Fields[i]];\n }\n if (outSphericalHarmonicsDegree >= 2) {\n for (let i = 0; i < 15; i++) {\n newSplat[OFFSET_FRC[9 + i]] = rawSplat[header.sphericalHarmonicsDegree2Fields[i]];\n }\n }\n }\n }\n\n tempRotation.set(rawSplat[ROT_0], rawSplat[ROT_1], rawSplat[ROT_2], rawSplat[ROT_3]);\n tempRotation.normalize();\n\n newSplat[OFFSET_ROTATION0] = tempRotation.x;\n newSplat[OFFSET_ROTATION1] = tempRotation.y;\n newSplat[OFFSET_ROTATION2] = tempRotation.z;\n newSplat[OFFSET_ROTATION3] = tempRotation.w;\n\n newSplat[OFFSET_X] = rawSplat[X];\n newSplat[OFFSET_Y] = rawSplat[Y];\n newSplat[OFFSET_Z] = rawSplat[Z];\n\n return newSplat;\n };\n\n }();\n\n static readSplat(splatData, header, row, dataOffset, rawSplat) {\n return PlyParserUtils.readVertex(splatData, header, row, dataOffset, header.fieldsToReadIndexes, rawSplat, true);\n }\n\n static parseToUncompressedSplatArray(plyBuffer, outSphericalHarmonicsDegree = 0) {\n const { header, splatCount, splatData } = separatePlyHeaderAndData(plyBuffer);\n return INRIAV1PlyParser.decodeSectionSplatData(splatData, splatCount, header, outSphericalHarmonicsDegree, true);\n }\n\n static parseToUncompressedSplatBuffer(plyBuffer, outSphericalHarmonicsDegree = 0) {\n const { header, splatCount, splatData } = separatePlyHeaderAndData(plyBuffer);\n return INRIAV1PlyParser.decodeSectionSplatData(splatData, splatCount, header, outSphericalHarmonicsDegree, false);\n }\n}\n\nfunction separatePlyHeaderAndData(plyBuffer) {\n const header = INRIAV1PlyParser.decodeHeaderFromBuffer(plyBuffer);\n const splatCount = header.splatCount;\n const splatData = INRIAV1PlyParser.findSplatData(plyBuffer, header);\n return {\n header,\n splatCount,\n splatData\n };\n}\n\nconst CodeBookEntryNamesToRead = [\n 'features_dc', 'features_rest_0', 'features_rest_1', 'features_rest_2', 'features_rest_3', 'features_rest_4', 'features_rest_5',\n 'features_rest_6', 'features_rest_7', 'features_rest_8', 'features_rest_9', 'features_rest_10', 'features_rest_11', 'features_rest_12',\n 'features_rest_13', 'features_rest_14', 'opacity', 'scaling', 'rotation_re', 'rotation_im'\n];\nconst CodeBookEntriesToReadIndexes = CodeBookEntryNamesToRead.map((e, i) => i);\n\nconst [\n CB_FEATURES_DC, CB_FEATURES_REST_0, CB_FEATURES_REST_3, CB_OPACITY, CB_SCALING, CB_ROTATION_RE, CB_ROTATION_IM\n ] = [0, 1, 4, 16, 17, 18, 19];\n\nconst FieldNamesToRead = ['scale_0', 'scale_1', 'scale_2', 'rot_0', 'rot_1', 'rot_2', 'rot_3',\n 'x', 'y', 'z', 'f_dc_0', 'f_dc_1', 'f_dc_2', 'opacity', 'red', 'green', 'blue',\n 'f_rest_0', 'f_rest_1', 'f_rest_2', 'f_rest_3', 'f_rest_4', 'f_rest_5', 'f_rest_6', 'f_rest_7', 'f_rest_8',\n 'f_rest_9', 'f_rest_10', 'f_rest_11', 'f_rest_12', 'f_rest_13', 'f_rest_14', 'f_rest_15', 'f_rest_16',\n 'f_rest_17', 'f_rest_18', 'f_rest_19', 'f_rest_20', 'f_rest_21', 'f_rest_22', 'f_rest_23', 'f_rest_24',\n 'f_rest_25', 'f_rest_26', 'f_rest_27', 'f_rest_28', 'f_rest_29', 'f_rest_30', 'f_rest_31', 'f_rest_32',\n 'f_rest_33', 'f_rest_34', 'f_rest_35', 'f_rest_36', 'f_rest_37', 'f_rest_38', 'f_rest_39', 'f_rest_40',\n 'f_rest_41', 'f_rest_42', 'f_rest_43', 'f_rest_44', 'f_rest_45'\n ];\nconst FieldsToReadIndexes = FieldNamesToRead.map((e, i) => i);\n\nconst [\n PLY_SCALE_0, PLY_SCALE_1, PLY_SCALE_2, PLY_ROT_0, PLY_ROT_1, PLY_ROT_2, PLY_ROT_3, PLY_X, PLY_Y, PLY_Z,\n PLY_F_DC_0, PLY_F_DC_1, PLY_F_DC_2, PLY_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 const t = (31744 & hf) >> 10;\n const a = 1023 & hf;\n return (hf >> 15 ? -1 : 1)*(t ? t === 31 ? a ? NaN : 1/0 : Math.pow(2, t - 15) *( 1 + a / 1024) : a / 1024*6103515625e-14);\n};\n\nclass INRIAV2PlyParser {\n\n static decodeSectionHeadersFromHeaderLines(headerLines) {\n const fieldNameIdMap = FieldsToReadIndexes.reduce((acc, element) => {\n acc[FieldNamesToRead[element]] = element;\n return acc;\n }, {});\n\n const codeBookEntriesToReadIdMap = CodeBookEntriesToReadIndexes.reduce((acc, element) => {\n acc[CodeBookEntryNamesToRead[element]] = element;\n return acc;\n }, {});\n\n const sectionNames = PlyParserUtils.getHeaderSectionNames(headerLines);\n let codeBookSectionIndex;\n for (let s = 0; s < sectionNames.length; s++) {\n const sectionName = sectionNames[s];\n if (sectionName === 'codebook_centers') {\n codeBookSectionIndex = s;\n }\n }\n\n let currentStartLine = 0;\n let lastSectionFound = false;\n const sectionHeaders = [];\n let sectionIndex = 0;\n while (!lastSectionFound) {\n let sectionHeader;\n if (sectionIndex === codeBookSectionIndex) {\n sectionHeader = PlyParserUtils.decodeSectionHeader(headerLines, codeBookEntriesToReadIdMap, currentStartLine);\n } else {\n sectionHeader = PlyParserUtils.decodeSectionHeader(headerLines, fieldNameIdMap, currentStartLine);\n }\n lastSectionFound = sectionHeader.endOfHeader;\n currentStartLine = sectionHeader.headerEndLine + 1;\n if (!lastSectionFound) {\n sectionHeader.splatCount = sectionHeader.vertexCount;\n sectionHeader.bytesPerSplat = sectionHeader.bytesPerVertex;\n }\n sectionHeaders.push(sectionHeader);\n sectionIndex++;\n }\n return sectionHeaders;\n }\n\n static decodeSectionHeadersFromHeaderText(headerText) {\n const headerLines = PlyParserUtils.convertHeaderTextToLines(headerText);\n return INRIAV2PlyParser.decodeSectionHeadersFromHeaderLines(headerLines);\n }\n\n static getSplatCountFromSectionHeaders(sectionHeaders) {\n let splatCount = 0;\n for (let sectionHeader of sectionHeaders) {\n if (sectionHeader.sectionName !== 'codebook_centers') {\n splatCount += sectionHeader.vertexCount;\n }\n }\n return splatCount;\n }\n\n static decodeHeaderFromHeaderText(headerText) {\n const headerSizeBytes = headerText.indexOf(PlyParserUtils.HeaderEndToken) + PlyParserUtils.HeaderEndToken.length + 1;\n const sectionHeaders = INRIAV2PlyParser.decodeSectionHeadersFromHeaderText(headerText);\n const splatCount = INRIAV2PlyParser.getSplatCountFromSectionHeaders(sectionHeaders);\n return {\n 'headerSizeBytes': headerSizeBytes,\n 'sectionHeaders': sectionHeaders,\n 'splatCount': splatCount\n };\n }\n\n static decodeHeaderFromBuffer(plyBuffer) {\n const headerText = PlyParserUtils.readHeaderFromBuffer(plyBuffer);\n return INRIAV2PlyParser.decodeHeaderFromHeaderText(headerText);\n }\n\n static findVertexData(plyBuffer, header, targetSection) {\n let byteOffset = header.headerSizeBytes;\n for (let s = 0; s < targetSection && s < header.sectionHeaders.length; s++) {\n const sectionHeader = header.sectionHeaders[s];\n byteOffset += sectionHeader.dataSizeBytes;\n }\n return new DataView(plyBuffer, byteOffset, header.sectionHeaders[targetSection].dataSizeBytes);\n }\n\n static decodeCodeBook(codeBookData, sectionHeader) {\n\n const rawVertex = [];\n const codeBook = [];\n for (let row = 0; row < sectionHeader.vertexCount; row++) {\n PlyParserUtils.readVertex(codeBookData, sectionHeader, row, 0, CodeBookEntriesToReadIndexes, rawVertex);\n for (let index of CodeBookEntriesToReadIndexes) {\n const codeBookElementOffset = CodeBookEntriesToReadIndexes[index];\n let codeBookPage = codeBook[codeBookElementOffset];\n if (!codeBookPage) {\n codeBook[codeBookElementOffset] = codeBookPage = [];\n }\n codeBookPage.push(rawVertex[index]);\n }\n }\n for (let page = 0; page < codeBook.length; page++) {\n const codeBookPage = codeBook[page];\n const SH_C0 = 0.28209479177387814;\n for (let i = 0; i < codeBookPage.length; i++) {\n const baseValue = fromHalfFloat(codeBookPage[i]);\n if (page === CB_OPACITY) {\n codeBookPage[i] = Math.round((1 / (1 + Math.exp(-baseValue))) * 255);\n } else if (page === CB_FEATURES_DC) {\n codeBookPage[i] = Math.round((0.5 + SH_C0 * baseValue) * 255);\n } else if (page === CB_SCALING) {\n codeBookPage[i] = Math.exp(baseValue);\n } else {\n codeBookPage[i] = baseValue;\n }\n }\n }\n return codeBook;\n }\n\n static decodeSectionSplatData(sectionSplatData, splatCount, sectionHeader, codeBook, outSphericalHarmonicsDegree) {\n outSphericalHarmonicsDegree = Math.min(outSphericalHarmonicsDegree, sectionHeader.sphericalHarmonicsDegree);\n const splatArray = new UncompressedSplatArray(outSphericalHarmonicsDegree);\n for (let row = 0; row < splatCount; row++) {\n const newSplat = INRIAV2PlyParser.parseToUncompressedSplat(sectionSplatData, row, sectionHeader, codeBook,\n 0, outSphericalHarmonicsDegree);\n splatArray.addSplat(newSplat);\n }\n return splatArray;\n }\n\n static parseToUncompressedSplat = function() {\n\n let rawSplat = [];\n const tempRotation = new THREE.Quaternion();\n\n const OFFSET_X = UncompressedSplatArray.OFFSET.X;\n const OFFSET_Y = UncompressedSplatArray.OFFSET.Y;\n const OFFSET_Z = UncompressedSplatArray.OFFSET.Z;\n\n const OFFSET_SCALE0 = UncompressedSplatArray.OFFSET.SCALE0;\n const OFFSET_SCALE1 = UncompressedSplatArray.OFFSET.SCALE1;\n const OFFSET_SCALE2 = UncompressedSplatArray.OFFSET.SCALE2;\n\n const OFFSET_ROTATION0 = UncompressedSplatArray.OFFSET.ROTATION0;\n const OFFSET_ROTATION1 = UncompressedSplatArray.OFFSET.ROTATION1;\n const OFFSET_ROTATION2 = UncompressedSplatArray.OFFSET.ROTATION2;\n const OFFSET_ROTATION3 = UncompressedSplatArray.OFFSET.ROTATION3;\n\n const OFFSET_FDC0 = UncompressedSplatArray.OFFSET.FDC0;\n const OFFSET_FDC1 = UncompressedSplatArray.OFFSET.FDC1;\n const OFFSET_FDC2 = UncompressedSplatArray.OFFSET.FDC2;\n const OFFSET_OPACITY = UncompressedSplatArray.OFFSET.OPACITY;\n\n const OFFSET_FRC = [];\n\n for (let i = 0; i < 45; i++) {\n OFFSET_FRC[i] = UncompressedSplatArray.OFFSET.FRC0 + i;\n }\n\n return function(splatData, row, header, codeBook, splatDataOffset = 0, outSphericalHarmonicsDegree = 0) {\n outSphericalHarmonicsDegree = Math.min(outSphericalHarmonicsDegree, header.sphericalHarmonicsDegree);\n INRIAV2PlyParser.readSplat(splatData, header, row, splatDataOffset, rawSplat);\n const newSplat = UncompressedSplatArray.createSplat(outSphericalHarmonicsDegree);\n if (rawSplat[PLY_SCALE_0] !== undefined) {\n newSplat[OFFSET_SCALE0] = codeBook[CB_SCALING][rawSplat[PLY_SCALE_0]];\n newSplat[OFFSET_SCALE1] = codeBook[CB_SCALING][rawSplat[PLY_SCALE_1]];\n newSplat[OFFSET_SCALE2] = codeBook[CB_SCALING][rawSplat[PLY_SCALE_2]];\n } else {\n newSplat[OFFSET_SCALE0] = 0.01;\n newSplat[OFFSET_SCALE1] = 0.01;\n newSplat[OFFSET_SCALE2] = 0.01;\n }\n\n if (rawSplat[PLY_F_DC_0] !== undefined) {\n newSplat[OFFSET_FDC0] = codeBook[CB_FEATURES_DC][rawSplat[PLY_F_DC_0]];\n newSplat[OFFSET_FDC1] = codeBook[CB_FEATURES_DC][rawSplat[PLY_F_DC_1]];\n newSplat[OFFSET_FDC2] = codeBook[CB_FEATURES_DC][rawSplat[PLY_F_DC_2]];\n } else if (rawSplat[PLY_RED] !== undefined) {\n newSplat[OFFSET_FDC0] = rawSplat[PLY_RED] * 255;\n newSplat[OFFSET_FDC1] = rawSplat[PLY_GREEN] * 255;\n newSplat[OFFSET_FDC2] = rawSplat[PLY_BLUE] * 255;\n } else {\n newSplat[OFFSET_FDC0] = 0;\n newSplat[OFFSET_FDC1] = 0;\n newSplat[OFFSET_FDC2] = 0;\n }\n\n if (rawSplat[PLY_OPACITY] !== undefined) {\n newSplat[OFFSET_OPACITY] = codeBook[CB_OPACITY][rawSplat[PLY_OPACITY]];\n }\n\n newSplat[OFFSET_FDC0] = clamp(Math.floor(newSplat[OFFSET_FDC0]), 0, 255);\n newSplat[OFFSET_FDC1] = clamp(Math.floor(newSplat[OFFSET_FDC1]), 0, 255);\n newSplat[OFFSET_FDC2] = clamp(Math.floor(newSplat[OFFSET_FDC2]), 0, 255);\n newSplat[OFFSET_OPACITY] = clamp(Math.floor(newSplat[OFFSET_OPACITY]), 0, 255);\n\n if (outSphericalHarmonicsDegree >= 1 && header.sphericalHarmonicsDegree >= 1) {\n for (let i = 0; i < 9; i++) {\n const codeBookPage = codeBook[CB_FEATURES_REST_0 + i % 3];\n newSplat[OFFSET_FRC[i]] = codeBookPage[rawSplat[header.sphericalHarmonicsDegree1Fields[i]]];\n }\n if (outSphericalHarmonicsDegree >= 2 && header.sphericalHarmonicsDegree >= 2) {\n for (let i = 0; i < 15; i++) {\n const codeBookPage = codeBook[CB_FEATURES_REST_3 + i % 5];\n newSplat[OFFSET_FRC[9 + i]] = codeBookPage[rawSplat[header.sphericalHarmonicsDegree2Fields[i]]];\n }\n }\n }\n\n const rot0 = codeBook[CB_ROTATION_RE][rawSplat[PLY_ROT_0]];\n const rot1 = codeBook[CB_ROTATION_IM][rawSplat[PLY_ROT_1]];\n const rot2 = codeBook[CB_ROTATION_IM][rawSplat[PLY_ROT_2]];\n const rot3 = codeBook[CB_ROTATION_IM][rawSplat[PLY_ROT_3]];\n tempRotation.set(rot0, rot1, rot2, rot3);\n tempRotation.normalize();\n\n newSplat[OFFSET_ROTATION0] = tempRotation.x;\n newSplat[OFFSET_ROTATION1] = tempRotation.y;\n newSplat[OFFSET_ROTATION2] = tempRotation.z;\n newSplat[OFFSET_ROTATION3] = tempRotation.w;\n\n newSplat[OFFSET_X] = fromHalfFloat(rawSplat[PLY_X]);\n newSplat[OFFSET_Y] = fromHalfFloat(rawSplat[PLY_Y]);\n newSplat[OFFSET_Z] = fromHalfFloat(rawSplat[PLY_Z]);\n\n return newSplat;\n };\n\n }();\n\n static readSplat(splatData, header, row, dataOffset, rawSplat) {\n return PlyParserUtils.readVertex(splatData, header, row, dataOffset, FieldsToReadIndexes, rawSplat, false);\n }\n\n static parseToUncompressedSplatArray(plyBuffer, outSphericalHarmonicsDegree = 0) {\n const splatArrays = [];\n const header = INRIAV2PlyParser.decodeHeaderFromBuffer(plyBuffer, outSphericalHarmonicsDegree);\n let codeBook;\n\n for (let s = 0; s < header.sectionHeaders.length; s++) {\n const sectionHeader = header.sectionHeaders[s];\n if (sectionHeader.sectionName === 'codebook_centers') {\n const codeBookData = INRIAV2PlyParser.findVertexData(plyBuffer, header, s);\n codeBook = INRIAV2PlyParser.decodeCodeBook(codeBookData, sectionHeader);\n }\n }\n for (let s = 0; s < header.sectionHeaders.length; s++) {\n const sectionHeader = header.sectionHeaders[s];\n if (sectionHeader.sectionName !== 'codebook_centers') {\n const splatCount = sectionHeader.vertexCount;\n const vertexData = INRIAV2PlyParser.findVertexData(plyBuffer, header, s);\n const splatArray = INRIAV2PlyParser.decodeSectionSplatData(vertexData, splatCount, sectionHeader,\n codeBook, outSphericalHarmonicsDegree);\n splatArrays.push(splatArray);\n }\n }\n\n const unified = new UncompressedSplatArray(outSphericalHarmonicsDegree);\n for (let splatArray of splatArrays) {\n for (let splat of splatArray.splats) {\n unified.addSplat(splat);\n }\n }\n\n return unified;\n }\n}\n\nclass PlyParser {\n\n static parseToUncompressedSplatArray(plyBuffer, outSphericalHarmonicsDegree = 0) {\n const plyFormat = PlyParserUtils.determineHeaderFormatFromPlyBuffer(plyBuffer);\n if (plyFormat === PlyFormat.PlayCanvasCompressed) {\n return PlayCanvasCompressedPlyParser.parseToUncompressedSplatArray(plyBuffer, outSphericalHarmonicsDegree);\n } else if (plyFormat === PlyFormat.INRIAV1) {\n return INRIAV1PlyParser.parseToUncompressedSplatArray(plyBuffer, outSphericalHarmonicsDegree);\n } else if (plyFormat === PlyFormat.INRIAV2) {\n return INRIAV2PlyParser.parseToUncompressedSplatArray(plyBuffer, outSphericalHarmonicsDegree);\n }\n }\n\n static parseToUncompressedSplatBuffer(plyBuffer, outSphericalHarmonicsDegree = 0) {\n const plyFormat = PlyParserUtils.determineHeaderFormatFromPlyBuffer(plyBuffer);\n if (plyFormat === PlyFormat.PlayCanvasCompressed) {\n return PlayCanvasCompressedPlyParser.parseToUncompressedSplatBuffer(plyBuffer, outSphericalHarmonicsDegree);\n } else if (plyFormat === PlyFormat.INRIAV1) {\n return INRIAV1PlyParser.parseToUncompressedSplatBuffer(plyBuffer, outSphericalHarmonicsDegree);\n } else if (plyFormat === PlyFormat.INRIAV2) {\n // TODO: Implement!\n throw new Error('parseToUncompressedSplatBuffer() is not implemented for INRIA V2 PLY files');\n }\n }\n\n}\n\nclass SplatPartitioner {\n\n constructor(sectionCount, sectionFilters, groupingParameters, partitionGenerator) {\n this.sectionCount = sectionCount;\n this.sectionFilters = sectionFilters;\n this.groupingParameters = groupingParameters;\n this.partitionGenerator = partitionGenerator;\n }\n\n partitionUncompressedSplatArray(splatArray) {\n let groupingParameters;\n let sectionCount;\n let sectionFilters;\n if (this.partitionGenerator) {\n const results = this.partitionGenerator(splatArray);\n groupingParameters = results.groupingParameters;\n sectionCount = results.sectionCount;\n sectionFilters = results.sectionFilters;\n } else {\n groupingParameters = this.groupingParameters;\n sectionCount = this.sectionCount;\n sectionFilters = this.sectionFilters;\n }\n\n const newArrays = [];\n for (let s = 0; s < sectionCount; s++) {\n const sectionSplats = new UncompressedSplatArray(splatArray.sphericalHarmonicsDegree);\n const sectionFilter = sectionFilters[s];\n for (let i = 0; i < splatArray.splatCount; i++) {\n if (sectionFilter(i)) {\n sectionSplats.addSplat(splatArray.splats[i]);\n }\n }\n newArrays.push(sectionSplats);\n }\n return {\n splatArrays: newArrays,\n parameters: groupingParameters\n };\n }\n\n static getStandardPartitioner(partitionSize = 0, sceneCenter = new THREE.Vector3(),\n blockSize = SplatBuffer.BucketBlockSize, bucketSize = SplatBuffer.BucketSize) {\n\n const partitionGenerator = (splatArray) => {\n\n const OFFSET_X = UncompressedSplatArray.OFFSET.X;\n const OFFSET_Y = UncompressedSplatArray.OFFSET.Y;\n const OFFSET_Z = UncompressedSplatArray.OFFSET.Z;\n\n if (partitionSize <= 0) partitionSize = splatArray.splatCount;\n\n const center = new THREE.Vector3();\n const clampDistance = 0.5;\n const clampPoint = (point) => {\n point.x = Math.floor(point.x / clampDistance) * clampDistance;\n point.y = Math.floor(point.y / clampDistance) * clampDistance;\n point.z = Math.floor(point.z / clampDistance) * clampDistance;\n };\n splatArray.splats.forEach((splat) => {\n center.set(splat[OFFSET_X], splat[OFFSET_Y], splat[OFFSET_Z]).sub(sceneCenter);\n clampPoint(center);\n splat.centerDist = center.lengthSq();\n });\n splatArray.splats.sort((a, b) => {\n let centerADist = a.centerDist;\n let centerBDist = b.centerDist;\n if (centerADist > centerBDist) return 1;\n else return -1;\n });\n\n const sectionFilters = [];\n const groupingParameters = [];\n partitionSize = Math.min(splatArray.splatCount, partitionSize);\n const patitionCount = Math.ceil(splatArray.splatCount / partitionSize);\n let currentStartSplat = 0;\n for (let i = 0; i < patitionCount; i ++) {\n let startSplat = currentStartSplat;\n sectionFilters.push((splatIndex) => {\n return splatIndex >= startSplat && splatIndex < startSplat + partitionSize;\n });\n groupingParameters.push({\n 'blocksSize': blockSize,\n 'bucketSize': bucketSize,\n });\n currentStartSplat += partitionSize;\n }\n return {\n 'sectionCount': sectionFilters.length,\n sectionFilters,\n groupingParameters\n };\n };\n return new SplatPartitioner(undefined, undefined, undefined, partitionGenerator);\n }\n}\n\nclass SplatBufferGenerator {\n\n constructor(splatPartitioner, alphaRemovalThreshold, compressionLevel, sectionSize, sceneCenter, blockSize, bucketSize) {\n this.splatPartitioner = splatPartitioner;\n this.alphaRemovalThreshold = alphaRemovalThreshold;\n this.compressionLevel = compressionLevel;\n this.sectionSize = sectionSize;\n this.sceneCenter = sceneCenter ? new THREE.Vector3().copy(sceneCenter) : undefined;\n this.blockSize = blockSize;\n this.bucketSize = bucketSize;\n }\n\n generateFromUncompressedSplatArray(splatArray) {\n const partitionResults = this.splatPartitioner.partitionUncompressedSplatArray(splatArray);\n return SplatBuffer.generateFromUncompressedSplatArrays(partitionResults.splatArrays,\n this.alphaRemovalThreshold, this.compressionLevel,\n this.sceneCenter, this.blockSize, this.bucketSize,\n partitionResults.parameters);\n }\n\n static getStandardGenerator(alphaRemovalThreshold = 1, compressionLevel = 1, sectionSize = 0, sceneCenter = new THREE.Vector3(),\n blockSize = SplatBuffer.BucketBlockSize, bucketSize = SplatBuffer.BucketSize) {\n const splatPartitioner = SplatPartitioner.getStandardPartitioner(sectionSize, sceneCenter, blockSize, bucketSize);\n return new SplatBufferGenerator(splatPartitioner, alphaRemovalThreshold, compressionLevel,\n sectionSize, sceneCenter, blockSize, bucketSize);\n }\n}\n\nconst LoaderStatus = {\n 'Downloading': 0,\n 'Processing': 1,\n 'Done': 2\n};\n\nclass DirectLoadError extends Error {\n\n constructor(msg) {\n super(msg);\n }\n\n}\n\nconst InternalLoadType = {\n ProgressiveToSplatBuffer: 0,\n ProgressiveToSplatArray: 1,\n DownloadBeforeProcessing: 2\n};\n\nfunction storeChunksInBuffer(chunks, buffer) {\n let inBytes = 0;\n for (let chunk of chunks) inBytes += chunk.sizeBytes;\n\n if (!buffer || buffer.byteLength < inBytes) {\n buffer = new ArrayBuffer(inBytes);\n }\n\n let offset = 0;\n for (let chunk of chunks) {\n new Uint8Array(buffer, offset, chunk.sizeBytes).set(chunk.data);\n offset += chunk.sizeBytes;\n }\n\n return buffer;\n}\n\nfunction finalize$1(splatData, optimizeSplatData, minimumAlpha, compressionLevel, sectionSize, sceneCenter, blockSize, bucketSize) {\n if (optimizeSplatData) {\n const splatBufferGenerator = SplatBufferGenerator.getStandardGenerator(minimumAlpha, compressionLevel,\n sectionSize, sceneCenter,\n blockSize, bucketSize);\n return splatBufferGenerator.generateFromUncompressedSplatArray(splatData);\n } else {\n return SplatBuffer.generateFromUncompressedSplatArrays([splatData], minimumAlpha, 0, new THREE.Vector3());\n }\n}\n\nclass PlyLoader {\n\n static loadFromURL(fileName, onProgress, progressiveLoadToSplatBuffer, onProgressiveLoadSectionProgress,\n minimumAlpha, compressionLevel, optimizeSplatData = true, outSphericalHarmonicsDegree = 0,\n headers, sectionSize, sceneCenter, blockSize, bucketSize) {\n\n let internalLoadType;\n if (!progressiveLoadToSplatBuffer && !optimizeSplatData) {\n internalLoadType = InternalLoadType.DownloadBeforeProcessing;\n } else {\n if (optimizeSplatData) internalLoadType = InternalLoadType.ProgressiveToSplatArray;\n else internalLoadType = InternalLoadType.ProgressiveToSplatBuffer;\n }\n\n const directLoadSectionSizeBytes = Constants.ProgressiveLoadSectionSize;\n const splatBufferDataOffsetBytes = SplatBuffer.HeaderSizeBytes + SplatBuffer.SectionHeaderSizeBytes;\n const sectionCount = 1;\n\n let plyFormat;\n let directLoadBufferIn;\n let directLoadBufferOut;\n let directLoadSplatBuffer;\n let compressedPlyHeaderChunksBuffer;\n let maxSplatCount = 0;\n let processedBaseSplatCount = 0;\n let processedSphericalHarmonicsSplatCount = 0;\n\n let headerLoaded = false;\n let readyToLoadSplatData = false;\n let baseSplatDataLoaded = false;\n\n const loadPromise = nativePromiseWithExtractedComponents();\n\n let numBytesStreamed = 0;\n let numBytesParsed = 0;\n let numBytesDownloaded = 0;\n let endOfBaseSplatDataBytes = 0;\n let headerText = '';\n let header = null;\n let chunks = [];\n\n let standardLoadUncompressedSplatArray;\n\n const textDecoder = new TextDecoder();\n\n const localOnProgress = (percent, percentLabel, chunkData) => {\n const loadComplete = percent >= 100;\n\n if (chunkData) {\n chunks.push({\n 'data': chunkData,\n 'sizeBytes': chunkData.byteLength,\n 'startBytes': numBytesDownloaded,\n 'endBytes': numBytesDownloaded + chunkData.byteLength\n });\n numBytesDownloaded += chunkData.byteLength;\n }\n\n if (internalLoadType === InternalLoadType.DownloadBeforeProcessing) {\n if (loadComplete) {\n loadPromise.resolve(chunks);\n }\n } else {\n if (!headerLoaded) {\n headerText += textDecoder.decode(chunkData);\n if (PlyParserUtils.checkTextForEndHeader(headerText)) {\n plyFormat = PlyParserUtils.determineHeaderFormatFromHeaderText(headerText);\n if (plyFormat === PlyFormat.INRIAV1) {\n header = INRIAV1PlyParser.decodeHeaderText(headerText);\n outSphericalHarmonicsDegree = Math.min(outSphericalHarmonicsDegree, header.sphericalHarmonicsDegree);\n maxSplatCount = header.splatCount;\n readyToLoadSplatData = true;\n endOfBaseSplatDataBytes = header.headerSizeBytes + header.bytesPerSplat * maxSplatCount;\n } else if (plyFormat === PlyFormat.PlayCanvasCompressed) {\n header = PlayCanvasCompressedPlyParser.decodeHeaderText(headerText);\n outSphericalHarmonicsDegree = Math.min(outSphericalHarmonicsDegree, header.sphericalHarmonicsDegree);\n if (internalLoadType === InternalLoadType.ProgressiveToSplatBuffer && outSphericalHarmonicsDegree > 0) {\n throw new DirectLoadError(\n 'PlyLoader.loadFromURL() -> Selected PLY format has spherical ' +\n 'harmonics data that cannot be progressively loaded.'\n );\n }\n maxSplatCount = header.vertexElement.count;\n endOfBaseSplatDataBytes = header.headerSizeBytes + header.bytesPerSplat * maxSplatCount +\n header.chunkElement.storageSizeBytes;\n } else {\n if (internalLoadType === InternalLoadType.ProgressiveToSplatBuffer) {\n throw new DirectLoadError(\n 'PlyLoader.loadFromURL() -> Selected PLY format cannot be progressively loaded.'\n );\n } else {\n internalLoadType = InternalLoadType.DownloadBeforeProcessing;\n return;\n }\n }\n\n if (internalLoadType === InternalLoadType.ProgressiveToSplatBuffer) {\n const shDescriptor = SplatBuffer.CompressionLevels[0].SphericalHarmonicsDegrees[outSphericalHarmonicsDegree];\n const splatBufferSizeBytes = splatBufferDataOffsetBytes + shDescriptor.BytesPerSplat * maxSplatCount;\n directLoadBufferOut = new ArrayBuffer(splatBufferSizeBytes);\n SplatBuffer.writeHeaderToBuffer({\n versionMajor: SplatBuffer.CurrentMajorVersion,\n versionMinor: SplatBuffer.CurrentMinorVersion,\n maxSectionCount: sectionCount,\n sectionCount: sectionCount,\n maxSplatCount: maxSplatCount,\n splatCount: 0,\n compressionLevel: 0,\n sceneCenter: new THREE.Vector3()\n }, directLoadBufferOut);\n } else {\n standardLoadUncompressedSplatArray = new UncompressedSplatArray(outSphericalHarmonicsDegree);\n }\n\n numBytesStreamed = header.headerSizeBytes;\n numBytesParsed = header.headerSizeBytes;\n headerLoaded = true;\n }\n } else if (plyFormat === PlyFormat.PlayCanvasCompressed && !readyToLoadSplatData) {\n const sizeRequiredForHeaderAndChunks = header.headerSizeBytes + header.chunkElement.storageSizeBytes;\n compressedPlyHeaderChunksBuffer = storeChunksInBuffer(chunks, compressedPlyHeaderChunksBuffer);\n if (compressedPlyHeaderChunksBuffer.byteLength >= sizeRequiredForHeaderAndChunks) {\n PlayCanvasCompressedPlyParser.readElementData(header.chunkElement, compressedPlyHeaderChunksBuffer,\n header.headerSizeBytes);\n numBytesStreamed = sizeRequiredForHeaderAndChunks;\n numBytesParsed = sizeRequiredForHeaderAndChunks;\n readyToLoadSplatData = true;\n }\n }\n\n if (headerLoaded && readyToLoadSplatData && chunks.length > 0) {\n\n directLoadBufferIn = storeChunksInBuffer(chunks, directLoadBufferIn);\n\n const bytesLoadedSinceLastStreamedSection = numBytesDownloaded - numBytesStreamed;\n if (bytesLoadedSinceLastStreamedSection > directLoadSectionSizeBytes ||\n (numBytesDownloaded >= endOfBaseSplatDataBytes && !baseSplatDataLoaded) ||\n loadComplete) {\n const bytesPerSplat = baseSplatDataLoaded ? header.sphericalHarmonicsPerSplat : header.bytesPerSplat;\n const endOfBytesToProcess = baseSplatDataLoaded ? numBytesDownloaded :\n Math.min(endOfBaseSplatDataBytes, numBytesDownloaded);\n const numBytesToProcess = endOfBytesToProcess - numBytesParsed;\n const addedSplatCount = Math.floor(numBytesToProcess / bytesPerSplat);\n const numBytesToParse = addedSplatCount * bytesPerSplat;\n const numBytesLeftOver = numBytesDownloaded - numBytesParsed - numBytesToParse;\n const parsedDataViewOffset = numBytesParsed - chunks[0].startBytes;\n const dataToParse = new DataView(directLoadBufferIn, parsedDataViewOffset, numBytesToParse);\n\n if (!baseSplatDataLoaded) {\n if (internalLoadType === InternalLoadType.ProgressiveToSplatBuffer) {\n const shDesc = SplatBuffer.CompressionLevels[0].SphericalHarmonicsDegrees[outSphericalHarmonicsDegree];\n const outOffset = processedBaseSplatCount * shDesc.BytesPerSplat + splatBufferDataOffsetBytes;\n if (plyFormat === PlyFormat.PlayCanvasCompressed) {\n PlayCanvasCompressedPlyParser.parseToUncompressedSplatBufferSection(\n header.chunkElement, header.vertexElement, 0, addedSplatCount - 1,\n processedBaseSplatCount, dataToParse, directLoadBufferOut, outOffset\n );\n } else {\n INRIAV1PlyParser.parseToUncompressedSplatBufferSection(\n header, 0, addedSplatCount - 1, dataToParse, 0,\n directLoadBufferOut, outOffset, outSphericalHarmonicsDegree\n );\n }\n } else {\n if (plyFormat === PlyFormat.PlayCanvasCompressed) {\n PlayCanvasCompressedPlyParser.parseToUncompressedSplatArraySection(\n header.chunkElement, header.vertexElement, 0, addedSplatCount - 1,\n processedBaseSplatCount, dataToParse, standardLoadUncompressedSplatArray\n );\n } else {\n INRIAV1PlyParser.parseToUncompressedSplatArraySection(\n header, 0, addedSplatCount - 1, dataToParse, 0,\n standardLoadUncompressedSplatArray, outSphericalHarmonicsDegree\n );\n }\n }\n\n processedBaseSplatCount += addedSplatCount;\n\n if (internalLoadType === InternalLoadType.ProgressiveToSplatBuffer) {\n if (!directLoadSplatBuffer) {\n SplatBuffer.writeSectionHeaderToBuffer({\n maxSplatCount: maxSplatCount,\n splatCount: processedBaseSplatCount,\n bucketSize: 0,\n bucketCount: 0,\n bucketBlockSize: 0,\n compressionScaleRange: 0,\n storageSizeBytes: 0,\n fullBucketCount: 0,\n partiallyFilledBucketCount: 0,\n sphericalHarmonicsDegree: outSphericalHarmonicsDegree\n }, 0, directLoadBufferOut, SplatBuffer.HeaderSizeBytes);\n directLoadSplatBuffer = new SplatBuffer(directLoadBufferOut, false);\n }\n directLoadSplatBuffer.updateLoadedCounts(1, processedBaseSplatCount);\n }\n if (numBytesDownloaded >= endOfBaseSplatDataBytes) {\n baseSplatDataLoaded = true;\n }\n } else {\n if (plyFormat === PlyFormat.PlayCanvasCompressed) {\n if (internalLoadType === InternalLoadType.ProgressiveToSplatArray) {\n PlayCanvasCompressedPlyParser.parseSphericalHarmonicsToUncompressedSplatArraySection(\n header.chunkElement, header.shElement, processedSphericalHarmonicsSplatCount,\n processedSphericalHarmonicsSplatCount + addedSplatCount - 1,\n dataToParse, 0, outSphericalHarmonicsDegree, header.sphericalHarmonicsDegree,\n standardLoadUncompressedSplatArray\n );\n processedSphericalHarmonicsSplatCount += addedSplatCount;\n }\n }\n }\n\n if (numBytesLeftOver === 0) {\n chunks = [];\n } else {\n let keepChunks = [];\n let keepSize = 0;\n for (let i = chunks.length - 1; i >= 0; i--) {\n const chunk = chunks[i];\n keepSize += chunk.sizeBytes;\n keepChunks.unshift(chunk);\n if (keepSize >= numBytesLeftOver) break;\n }\n chunks = keepChunks;\n }\n\n numBytesStreamed += directLoadSectionSizeBytes;\n numBytesParsed += numBytesToParse;\n }\n }\n\n if (onProgressiveLoadSectionProgress && directLoadSplatBuffer) {\n onProgressiveLoadSectionProgress(directLoadSplatBuffer, loadComplete);\n }\n\n if (loadComplete) {\n if (internalLoadType === InternalLoadType.ProgressiveToSplatBuffer) {\n loadPromise.resolve(directLoadSplatBuffer);\n } else {\n loadPromise.resolve(standardLoadUncompressedSplatArray);\n }\n }\n }\n\n if (onProgress) onProgress(percent, percentLabel, LoaderStatus.Downloading);\n };\n\n if (onProgress) onProgress(0, '0%', LoaderStatus.Downloading);\n return fetchWithProgress(fileName, localOnProgress, false, headers).then(() => {\n if (onProgress) onProgress(0, '0%', LoaderStatus.Processing);\n return loadPromise.promise.then((splatData) => {\n if (onProgress) onProgress(100, '100%', LoaderStatus.Done);\n if (internalLoadType === InternalLoadType.DownloadBeforeProcessing) {\n const chunkDatas = chunks.map((chunk) => chunk.data);\n return new Blob(chunkDatas).arrayBuffer().then((plyFileData) => {\n return PlyLoader.loadFromFileData(plyFileData, minimumAlpha, compressionLevel, optimizeSplatData,\n outSphericalHarmonicsDegree, sectionSize, sceneCenter, blockSize, bucketSize);\n });\n } else if (internalLoadType === InternalLoadType.ProgressiveToSplatBuffer) {\n return splatData;\n } else {\n return delayedExecute(() => {\n return finalize$1(splatData, optimizeSplatData, minimumAlpha, compressionLevel,\n sectionSize, sceneCenter, blockSize, bucketSize);\n });\n }\n });\n });\n }\n\n static loadFromFileData(plyFileData, minimumAlpha, compressionLevel, optimizeSplatData, outSphericalHarmonicsDegree = 0,\n sectionSize, sceneCenter, blockSize, bucketSize) {\n if (optimizeSplatData) {\n return delayedExecute(() => {\n return PlyParser.parseToUncompressedSplatArray(plyFileData, outSphericalHarmonicsDegree);\n })\n .then((splatArray) => {\n return finalize$1(splatArray, optimizeSplatData, minimumAlpha, compressionLevel,\n sectionSize, sceneCenter, blockSize, bucketSize);\n });\n } else {\n return delayedExecute(() => {\n return PlyParser.parseToUncompressedSplatBuffer(plyFileData, outSphericalHarmonicsDegree);\n });\n }\n }\n}\n\nconst createStream = (data)=> {\n return new ReadableStream({\n async start(controller) {\n controller.enqueue(data);\n controller.close();\n },\n });\n};\n\nasync function decompressGzipped(data) {\n try {\n const stream = createStream(data);\n if (!stream) throw new Error('Failed to create stream from data');\n\n return await decompressGzipStream(stream);\n } catch (error) {\n console.error('Error decompressing gzipped data:', error);\n throw error;\n }\n}\n\nasync function decompressGzipStream(stream) {\n const decompressedStream = stream.pipeThrough(new DecompressionStream('gzip'));\n const response = new Response(decompressedStream);\n const buffer = await response.arrayBuffer();\n\n return new Uint8Array(buffer);\n}\n\nasync function compressGzipped(data) {\n try {\n const stream = createStream(data);\n const compressedStream = stream.pipeThrough(new CompressionStream('gzip'));\n const response = new Response(compressedStream);\n const buffer = await response.arrayBuffer();\n\n return new Uint8Array(buffer);\n } catch (error) {\n console.error('Error compressing gzipped data:', error);\n throw error;\n }\n}\n\nconst SPZ_MAGIC = 1347635022;\nconst FLAG_ANTIALIASED = 1;\nconst COLOR_SCALE = 0.15;\n\nfunction halfToFloat(h) {\n const sgn = (h >> 15) & 0x1;\n const exponent = (h >> 10) & 0x1f;\n const mantissa = h & 0x3ff;\n\n const signMul = sgn === 1 ? -1.0 : 1.0;\n if (exponent === 0) {\n return signMul * Math.pow(2, -14) * mantissa / 1024;\n }\n\n if (exponent === 31) {\n return mantissa !== 0 ? NaN : signMul * Infinity;\n }\n\n return signMul * Math.pow(2, exponent - 15) * (1 + mantissa / 1024);\n}\n\nfunction unquantizeSH(x) {\n return (x - 128.0) / 128.0;\n}\n\nfunction dimForDegree(degree) {\n switch (degree) {\n case 0: return 0;\n case 1: return 3;\n case 2: return 8;\n case 3: return 15;\n default:\n console.error(`[SPZ: ERROR] Unsupported SH degree: ${degree}`);\n return 0;\n }\n}\n\nconst unpackedSplatToUncompressedSplat = function() {\n\n let rawSplat = [];\n const tempRotation = new THREE.Quaternion();\n\n const OFFSET_X = UncompressedSplatArray.OFFSET.X;\n const OFFSET_Y = UncompressedSplatArray.OFFSET.Y;\n const OFFSET_Z = UncompressedSplatArray.OFFSET.Z;\n\n const OFFSET_SCALE0 = UncompressedSplatArray.OFFSET.SCALE0;\n const OFFSET_SCALE1 = UncompressedSplatArray.OFFSET.SCALE1;\n const OFFSET_SCALE2 = UncompressedSplatArray.OFFSET.SCALE2;\n\n const OFFSET_ROTATION0 = UncompressedSplatArray.OFFSET.ROTATION0;\n const OFFSET_ROTATION1 = UncompressedSplatArray.OFFSET.ROTATION1;\n const OFFSET_ROTATION2 = UncompressedSplatArray.OFFSET.ROTATION2;\n const OFFSET_ROTATION3 = UncompressedSplatArray.OFFSET.ROTATION3;\n\n const OFFSET_FDC0 = UncompressedSplatArray.OFFSET.FDC0;\n const OFFSET_FDC1 = UncompressedSplatArray.OFFSET.FDC1;\n const OFFSET_FDC2 = UncompressedSplatArray.OFFSET.FDC2;\n const OFFSET_OPACITY = UncompressedSplatArray.OFFSET.OPACITY;\n\n const OFFSET_FRC = [];\n\n for (let i = 0; i < 45; i++) {\n OFFSET_FRC[i] = UncompressedSplatArray.OFFSET.FRC0 + i;\n }\n\n const shCoeffMap = [dimForDegree(0), dimForDegree(1), dimForDegree(2), dimForDegree(3)];\n\n const shIndexMap = [\n 0, 1, 2, 9, 10, 11, 12, 13, 24, 25, 26, 27, 28, 29, 30,\n 3, 4, 5, 14, 15, 16, 17, 18, 31, 32, 33, 34, 35, 36, 37,\n 6, 7, 8, 19, 20, 21, 22, 23, 38, 39, 40, 41, 42, 43, 44\n ];\n\n return function(unpackedSplat, unpackedSphericalHarmonicsDegree, outSphericalHarmonicsDegree) {\n outSphericalHarmonicsDegree = Math.min(unpackedSphericalHarmonicsDegree, outSphericalHarmonicsDegree);\n\n const newSplat = UncompressedSplatArray.createSplat(outSphericalHarmonicsDegree);\n if (unpackedSplat.scale[0] !== undefined) {\n newSplat[OFFSET_SCALE0] = unpackedSplat.scale[0];\n newSplat[OFFSET_SCALE1] = unpackedSplat.scale[1];\n newSplat[OFFSET_SCALE2] = unpackedSplat.scale[2];\n } else {\n newSplat[OFFSET_SCALE0] = 0.01;\n newSplat[OFFSET_SCALE1] = 0.01;\n newSplat[OFFSET_SCALE2] = 0.01;\n }\n\n if (unpackedSplat.color[0] !== undefined) {\n newSplat[OFFSET_FDC0] = unpackedSplat.color[0];\n newSplat[OFFSET_FDC1] = unpackedSplat.color[1];\n newSplat[OFFSET_FDC2] = unpackedSplat.color[2];\n } else if (rawSplat[RED] !== undefined) {\n newSplat[OFFSET_FDC0] = rawSplat[RED] * 255;\n newSplat[OFFSET_FDC1] = rawSplat[GREEN] * 255;\n newSplat[OFFSET_FDC2] = rawSplat[BLUE] * 255;\n } else {\n newSplat[OFFSET_FDC0] = 0;\n newSplat[OFFSET_FDC1] = 0;\n newSplat[OFFSET_FDC2] = 0;\n }\n\n if (unpackedSplat.alpha !== undefined) {\n newSplat[OFFSET_OPACITY] = unpackedSplat.alpha;\n }\n\n newSplat[OFFSET_FDC0] = clamp(Math.floor(newSplat[OFFSET_FDC0]), 0, 255);\n newSplat[OFFSET_FDC1] = clamp(Math.floor(newSplat[OFFSET_FDC1]), 0, 255);\n newSplat[OFFSET_FDC2] = clamp(Math.floor(newSplat[OFFSET_FDC2]), 0, 255);\n newSplat[OFFSET_OPACITY] = clamp(Math.floor(newSplat[OFFSET_OPACITY]), 0, 255);\n\n let outSHCoeff = shCoeffMap[outSphericalHarmonicsDegree];\n let readSHCoeff = shCoeffMap[unpackedSphericalHarmonicsDegree];\n for (let j = 0; j < 3; ++j) {\n for (let k = 0; k < 15; ++k) {\n const outIndex = shIndexMap[j * 15 + k];\n if (k < outSHCoeff && k < readSHCoeff) {\n newSplat[UncompressedSplatArray.OFFSET.FRC0 + outIndex] = unpackedSplat.sh[j * readSHCoeff + k];\n }\n }\n }\n\n tempRotation.set(unpackedSplat.rotation[3], unpackedSplat.rotation[0], unpackedSplat.rotation[1], unpackedSplat.rotation[2]);\n tempRotation.normalize();\n\n newSplat[OFFSET_ROTATION0] = tempRotation.x;\n newSplat[OFFSET_ROTATION1] = tempRotation.y;\n newSplat[OFFSET_ROTATION2] = tempRotation.z;\n newSplat[OFFSET_ROTATION3] = tempRotation.w;\n\n newSplat[OFFSET_X] = unpackedSplat.position[0];\n newSplat[OFFSET_Y] = unpackedSplat.position[1];\n newSplat[OFFSET_Z] = unpackedSplat.position[2];\n\n return newSplat;\n };\n\n}();\n\n// Helper function to check sizes (matching C++ checkSizes function)\nfunction checkSizes2(packed, numPoints, shDim, usesFloat16) {\n if (packed.positions.length !== numPoints * 3 * (usesFloat16 ? 2 : 3)) return false;\n if (packed.scales.length !== numPoints * 3) return false;\n if (packed.rotations.length !== numPoints * 3) return false;\n if (packed.alphas.length !== numPoints) return false;\n if (packed.colors.length !== numPoints * 3) return false;\n if (packed.sh.length !== numPoints * shDim * 3) return false;\n return true;\n}\n\nfunction unpackGaussians(packed, outSphericalHarmonicsDegree, directToSplatBuffer, outTarget, outTargetOffset) {\n outSphericalHarmonicsDegree = Math.min(outSphericalHarmonicsDegree, packed.shDegree);\n const numPoints = packed.numPoints;\n const shDim = dimForDegree(packed.shDegree);\n const usesFloat16 = packed.positions.length === numPoints * 3 * 2;\n\n // Validate sizes\n if (!checkSizes2(packed, numPoints, shDim, usesFloat16)) {\n return null;\n }\n\n const splat = {\n position: [],\n scale: [],\n rotation: [],\n alpha: undefined,\n color: [],\n sh: []\n };\n\n let halfData;\n if (usesFloat16) {\n halfData = new Uint16Array(packed.positions.buffer, packed.positions.byteOffset, numPoints * 3);\n }\n const fullPrecisionPositionScale = 1.0 / (1 << packed.fractionalBits);\n const shCoeffPerChannelPerSplat = dimForDegree(packed.shDegree);\n const SH_C0 = 0.28209479177387814;\n\n for (let i = 0; i < numPoints; i++) {\n // Splat position\n if (usesFloat16) {\n // Decode legacy float16 format\n for (let j = 0; j < 3; j++) {\n splat.position[j] = halfToFloat(halfData[i * 3 + j]);\n }\n } else {\n // Decode 24-bit fixed point coordinates\n for (let j = 0; j < 3; j++) {\n const base = i * 9 + j * 3;\n let fixed32 = packed.positions[base];\n fixed32 |= packed.positions[base + 1] << 8;\n fixed32 |= packed.positions[base + 2] << 16;\n fixed32 |= (fixed32 & 0x800000) ? 0xff000000 : 0;\n splat.position[j] = fixed32 * fullPrecisionPositionScale;\n }\n }\n\n // Splat scale\n for (let j = 0; j < 3; j++) {\n splat.scale[j] = Math.exp(packed.scales[i * 3 + j] / 16.0 - 10.0);\n }\n\n // Splat rotation\n const r = packed.rotations.subarray(i * 3, i * 3 + 3);\n const xyz = [\n r[0] / 127.5 - 1.0,\n r[1] / 127.5 - 1.0,\n r[2] / 127.5 - 1.0\n ];\n splat.rotation[0] = xyz[0];\n splat.rotation[1] = xyz[1];\n splat.rotation[2] = xyz[2];\n const squaredNorm = xyz[0] * xyz[0] + xyz[1] * xyz[1] + xyz[2] * xyz[2];\n splat.rotation[3] = Math.sqrt(Math.max(0.0, 1.0 - squaredNorm));\n\n // Splat alpha\n // splat.alpha = invSigmoid(packed.alphas[i] / 255.0);\n splat.alpha = Math.floor(packed.alphas[i]);\n\n // Splat color\n for (let j = 0; j < 3; j++) {\n splat.color[j] = Math.floor(((((packed.colors[i * 3 + j] / 255.0) - 0.5) / COLOR_SCALE) * SH_C0 + 0.5) * 255);\n }\n\n // Splat spherical harmonics\n for (let j = 0; j < 3; j++) {\n for (let k = 0; k < shCoeffPerChannelPerSplat; k++) {\n splat.sh[j * shCoeffPerChannelPerSplat + k] = unquantizeSH(packed.sh[shCoeffPerChannelPerSplat * 3 * i + k * 3 + j]);\n }\n }\n\n const uncompressedSplat = unpackedSplatToUncompressedSplat(splat, packed.shDegree, outSphericalHarmonicsDegree);\n if (directToSplatBuffer) {\n const outBytesPerSplat = SplatBuffer.CompressionLevels[0].SphericalHarmonicsDegrees[outSphericalHarmonicsDegree].BytesPerSplat;\n const outBase = i * outBytesPerSplat + outTargetOffset;\n SplatBuffer.writeSplatDataToSectionBuffer(uncompressedSplat, outTarget, outBase, 0, outSphericalHarmonicsDegree);\n } else {\n outTarget.addSplat(uncompressedSplat);\n }\n }\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 const view = new DataView(buffer);\n let offset = 0;\n\n // Read and validate header\n const header = {\n magic: view.getUint32(offset, true),\n version: view.getUint32(offset + 4, true),\n numPoints: view.getUint32(offset + 8, true),\n shDegree: view.getUint8(offset + 12),\n fractionalBits: view.getUint8(offset + 13),\n flags: view.getUint8(offset + 14),\n reserved: view.getUint8(offset + 15)\n };\n\n offset += HEADER_SIZE;\n\n // Validate header\n if (header.magic !== SPZ_MAGIC) {\n console.error('[SPZ ERROR] deserializePackedGaussians: header not found');\n return null;\n }\n if (header.version < 1 || header.version > 2) {\n console.error(`[SPZ ERROR] deserializePackedGaussians: version not supported: ${header.version}`);\n return null;\n }\n if (header.numPoints > MAX_POINTS_TO_READ) {\n console.error(`[SPZ ERROR] deserializePackedGaussians: Too many points: ${header.numPoints}`);\n return null;\n }\n if (header.shDegree > 3) {\n console.error(`[SPZ ERROR] deserializePackedGaussians: Unsupported SH degree: ${header.shDegree}`);\n return null;\n }\n\n const numPoints = header.numPoints;\n const shDim = dimForDegree(header.shDegree);\n const usesFloat16 = header.version === 1;\n\n // Initialize result object\n const result = {\n numPoints,\n shDegree: header.shDegree,\n fractionalBits: header.fractionalBits,\n antialiased: (header.flags & FLAG_ANTIALIASED) !== 0,\n positions: new Uint8Array(numPoints * 3 * (usesFloat16 ? 2 : 3)),\n scales: new Uint8Array(numPoints * 3),\n rotations: new Uint8Array(numPoints * 3),\n alphas: new Uint8Array(numPoints),\n colors: new Uint8Array(numPoints * 3),\n sh: new Uint8Array(numPoints * shDim * 3)\n };\n\n // Read data sections\n try {\n const uint8View = new Uint8Array(buffer);\n let positionsSize = result.positions.length;\n let currentOffset = offset;\n\n result.positions.set(uint8View.slice(currentOffset, currentOffset + positionsSize));\n currentOffset += positionsSize;\n\n result.alphas.set(uint8View.slice(currentOffset, currentOffset + result.alphas.length));\n currentOffset += result.alphas.length;\n\n result.colors.set(uint8View.slice(currentOffset, currentOffset + result.colors.length));\n currentOffset += result.colors.length;\n\n result.scales.set(uint8View.slice(currentOffset, currentOffset + result.scales.length));\n currentOffset += result.scales.length;\n\n result.rotations.set(uint8View.slice(currentOffset, currentOffset + result.rotations.length));\n currentOffset += result.rotations.length;\n\n result.sh.set(uint8View.slice(currentOffset, currentOffset + result.sh.length));\n\n // Verify we read the expected amount of data\n if (currentOffset + result.sh.length !== buffer.byteLength) {\n console.error('[SPZ ERROR] deserializePackedGaussians: incorrect buffer size');\n return null;\n }\n } catch (error) {\n console.error('[SPZ ERROR] deserializePackedGaussians: read error', error);\n return null;\n }\n\n return result;\n}\n\nasync function loadSpzPacked(compressedData) {\n try {\n const decompressed = await decompressGzipped(compressedData);\n return deserializePackedGaussians(decompressed.buffer);\n } catch (error) {\n console.error('[SPZ ERROR] loadSpzPacked: decompression error', error);\n return null;\n }\n}\n\nclass SpzLoader {\n\n static loadFromURL(fileName, onProgress, minimumAlpha, compressionLevel, optimizeSplatData = true,\n outSphericalHarmonicsDegree = 0, headers, sectionSize, sceneCenter, blockSize, bucketSize) {\n if (onProgress) onProgress(0, '0%', LoaderStatus.Downloading);\n return fetchWithProgress(fileName, onProgress, true, headers).then((fileData) => {\n if (onProgress) onProgress(0, '0%', LoaderStatus.Processing);\n return SpzLoader.loadFromFileData(fileData, minimumAlpha, compressionLevel, optimizeSplatData,\n outSphericalHarmonicsDegree, sectionSize, sceneCenter, blockSize, bucketSize);\n });\n }\n\n static async loadFromFileData(spzFileData, minimumAlpha, compressionLevel, optimizeSplatData,\n outSphericalHarmonicsDegree = 0, sectionSize, sceneCenter, blockSize, bucketSize) {\n await delayedExecute();\n const packed = await loadSpzPacked(spzFileData);\n outSphericalHarmonicsDegree = Math.min(packed.shDegree, outSphericalHarmonicsDegree);\n\n const splatArray = new UncompressedSplatArray(outSphericalHarmonicsDegree);\n\n if (optimizeSplatData) {\n unpackGaussians(packed, outSphericalHarmonicsDegree, false, splatArray, 0);\n const splatBufferGenerator = SplatBufferGenerator.getStandardGenerator(minimumAlpha, compressionLevel,\n sectionSize, sceneCenter,\n blockSize, bucketSize);\n return splatBufferGenerator.generateFromUncompressedSplatArray(splatArray);\n } else {\n const {\n splatBuffer,\n splatBufferDataOffsetBytes\n } = SplatBuffer.preallocateUncompressed(packed.numPoints, outSphericalHarmonicsDegree);\n unpackGaussians(packed, outSphericalHarmonicsDegree, true, splatBuffer.bufferData, splatBufferDataOffsetBytes);\n return splatBuffer;\n }\n }\n\n}\n\nclass SplatParser {\n\n static RowSizeBytes = 32;\n static CenterSizeBytes = 12;\n static ScaleSizeBytes = 12;\n static RotationSizeBytes = 4;\n static ColorSizeBytes = 4;\n\n static parseToUncompressedSplatBufferSection(fromSplat, toSplat, fromBuffer, fromOffset, toBuffer, toOffset) {\n\n const outBytesPerCenter = SplatBuffer.CompressionLevels[0].BytesPerCenter;\n const outBytesPerScale = SplatBuffer.CompressionLevels[0].BytesPerScale;\n const outBytesPerRotation = SplatBuffer.CompressionLevels[0].BytesPerRotation;\n const outBytesPerSplat = SplatBuffer.CompressionLevels[0].SphericalHarmonicsDegrees[0].BytesPerSplat;\n\n for (let i = fromSplat; i <= toSplat; i++) {\n const inBase = i * SplatParser.RowSizeBytes + fromOffset;\n const inCenter = new Float32Array(fromBuffer, inBase, 3);\n const inScale = new Float32Array(fromBuffer, inBase + SplatParser.CenterSizeBytes, 3);\n const inColor = new Uint8Array(fromBuffer, inBase + SplatParser.CenterSizeBytes + SplatParser.ScaleSizeBytes, 4);\n const inRotation = new Uint8Array(fromBuffer, inBase + SplatParser.CenterSizeBytes + SplatParser.ScaleSizeBytes +\n SplatParser.RotationSizeBytes, 4);\n\n const quat = new THREE.Quaternion((inRotation[1] - 128) / 128, (inRotation[2] - 128) / 128,\n (inRotation[3] - 128) / 128, (inRotation[0] - 128) / 128);\n quat.normalize();\n\n const outBase = i * outBytesPerSplat + toOffset;\n const outCenter = new Float32Array(toBuffer, outBase, 3);\n const outScale = new Float32Array(toBuffer, outBase + outBytesPerCenter, 3);\n const outRotation = new Float32Array(toBuffer, outBase + outBytesPerCenter + outBytesPerScale, 4);\n const outColor = new Uint8Array(toBuffer, outBase + outBytesPerCenter + outBytesPerScale + outBytesPerRotation, 4);\n\n outCenter[0] = inCenter[0];\n outCenter[1] = inCenter[1];\n outCenter[2] = inCenter[2];\n\n outScale[0] = inScale[0];\n outScale[1] = inScale[1];\n outScale[2] = inScale[2];\n\n outRotation[0] = quat.w;\n outRotation[1] = quat.x;\n outRotation[2] = quat.y;\n outRotation[3] = quat.z;\n\n outColor[0] = inColor[0];\n outColor[1] = inColor[1];\n outColor[2] = inColor[2];\n outColor[3] = inColor[3];\n }\n }\n\n static parseToUncompressedSplatArraySection(fromSplat, toSplat, fromBuffer, fromOffset, splatArray) {\n\n for (let i = fromSplat; i <= toSplat; i++) {\n const inBase = i * SplatParser.RowSizeBytes + fromOffset;\n const inCenter = new Float32Array(fromBuffer, inBase, 3);\n const inScale = new Float32Array(fromBuffer, inBase + SplatParser.CenterSizeBytes, 3);\n const inColor = new Uint8Array(fromBuffer, inBase + SplatParser.CenterSizeBytes + SplatParser.ScaleSizeBytes, 4);\n const inRotation = new Uint8Array(fromBuffer, inBase + SplatParser.CenterSizeBytes + SplatParser.ScaleSizeBytes +\n SplatParser.RotationSizeBytes, 4);\n\n const quat = new THREE.Quaternion((inRotation[1] - 128) / 128, (inRotation[2] - 128) / 128,\n (inRotation[3] - 128) / 128, (inRotation[0] - 128) / 128);\n quat.normalize();\n\n splatArray.addSplatFromComonents(inCenter[0], inCenter[1], inCenter[2], inScale[0], inScale[1], inScale[2],\n quat.w, quat.x, quat.y, quat.z, inColor[0], inColor[1], inColor[2], inColor[3]);\n }\n }\n\n static parseStandardSplatToUncompressedSplatArray(inBuffer) {\n // Standard .splat row layout:\n // XYZ - Position (Float32)\n // XYZ - Scale (Float32)\n // RGBA - colors (uint8)\n // IJKL - quaternion/rot (uint8)\n\n const splatCount = inBuffer.byteLength / SplatParser.RowSizeBytes;\n\n const splatArray = new UncompressedSplatArray();\n\n for (let i = 0; i < splatCount; i++) {\n const inBase = i * SplatParser.RowSizeBytes;\n const inCenter = new Float32Array(inBuffer, inBase, 3);\n const inScale = new Float32Array(inBuffer, inBase + SplatParser.CenterSizeBytes, 3);\n const inColor = new Uint8Array(inBuffer, inBase + SplatParser.CenterSizeBytes + SplatParser.ScaleSizeBytes, 4);\n const inRotation = new Uint8Array(inBuffer, inBase + SplatParser.CenterSizeBytes +\n SplatParser.ScaleSizeBytes + SplatParser.ColorSizeBytes, 4);\n\n const quat = new THREE.Quaternion((inRotation[1] - 128) / 128, (inRotation[2] - 128) / 128,\n (inRotation[3] - 128) / 128, (inRotation[0] - 128) / 128);\n quat.normalize();\n\n splatArray.addSplatFromComonents(inCenter[0], inCenter[1], inCenter[2], inScale[0], inScale[1], inScale[2],\n quat.w, quat.x, quat.y, quat.z, inColor[0], inColor[1], inColor[2], inColor[3]);\n }\n\n return splatArray;\n }\n\n}\n\nfunction finalize(splatData, optimizeSplatData, minimumAlpha, compressionLevel, sectionSize, sceneCenter, blockSize, bucketSize) {\n if (optimizeSplatData) {\n const splatBufferGenerator = SplatBufferGenerator.getStandardGenerator(minimumAlpha, compressionLevel,\n sectionSize, sceneCenter,\n blockSize, bucketSize);\n return splatBufferGenerator.generateFromUncompressedSplatArray(splatData);\n } else {\n // TODO: Implement direct-to-SplatBuffer when not optimizing splat data\n return SplatBuffer.generateFromUncompressedSplatArrays([splatData], minimumAlpha, 0, new THREE.Vector3());\n }\n}\n\nclass SplatLoader {\n\n static loadFromURL(fileName, onProgress, progressiveLoadToSplatBuffer, onProgressiveLoadSectionProgress, minimumAlpha, compressionLevel,\n optimizeSplatData = true, headers, sectionSize, sceneCenter, blockSize, bucketSize) {\n\n let internalLoadType = progressiveLoadToSplatBuffer ? InternalLoadType.ProgressiveToSplatBuffer :\n InternalLoadType.ProgressiveToSplatArray;\n if (optimizeSplatData) internalLoadType = InternalLoadType.ProgressiveToSplatArray;\n\n const splatDataOffsetBytes = SplatBuffer.HeaderSizeBytes + SplatBuffer.SectionHeaderSizeBytes;\n const directLoadSectionSizeBytes = Constants.ProgressiveLoadSectionSize;\n const sectionCount = 1;\n\n let directLoadBufferIn;\n let directLoadBufferOut;\n let directLoadSplatBuffer;\n let maxSplatCount = 0;\n let splatCount = 0;\n\n let standardLoadUncompressedSplatArray;\n\n const loadPromise = nativePromiseWithExtractedComponents();\n\n let numBytesStreamed = 0;\n let numBytesLoaded = 0;\n let chunks = [];\n\n const localOnProgress = (percent, percentStr, chunk, fileSize) => {\n const loadComplete = percent >= 100;\n\n if (chunk) {\n chunks.push(chunk);\n }\n\n if (internalLoadType === InternalLoadType.DownloadBeforeProcessing) {\n if (loadComplete) {\n loadPromise.resolve(chunks);\n }\n return;\n }\n\n if (!fileSize) {\n if (progressiveLoadToSplatBuffer) {\n throw new DirectLoadError('Cannon directly load .splat because no file size info is available.');\n } else {\n internalLoadType = InternalLoadType.DownloadBeforeProcessing;\n return;\n }\n }\n\n if (!directLoadBufferIn) {\n maxSplatCount = fileSize / SplatParser.RowSizeBytes;\n directLoadBufferIn = new ArrayBuffer(fileSize);\n const bytesPerSplat = SplatBuffer.CompressionLevels[0].SphericalHarmonicsDegrees[0].BytesPerSplat;\n const splatBufferSizeBytes = splatDataOffsetBytes + bytesPerSplat * maxSplatCount;\n\n if (internalLoadType === InternalLoadType.ProgressiveToSplatBuffer) {\n directLoadBufferOut = new ArrayBuffer(splatBufferSizeBytes);\n SplatBuffer.writeHeaderToBuffer({\n versionMajor: SplatBuffer.CurrentMajorVersion,\n versionMinor: SplatBuffer.CurrentMinorVersion,\n maxSectionCount: sectionCount,\n sectionCount: sectionCount,\n maxSplatCount: maxSplatCount,\n splatCount: splatCount,\n compressionLevel: 0,\n sceneCenter: new THREE.Vector3()\n }, directLoadBufferOut);\n } else {\n standardLoadUncompressedSplatArray = new UncompressedSplatArray(0);\n }\n }\n\n if (chunk) {\n new Uint8Array(directLoadBufferIn, numBytesLoaded, chunk.byteLength).set(new Uint8Array(chunk));\n numBytesLoaded += chunk.byteLength;\n\n const bytesLoadedSinceLastSection = numBytesLoaded - numBytesStreamed;\n if (bytesLoadedSinceLastSection > directLoadSectionSizeBytes || loadComplete) {\n const bytesToUpdate = loadComplete ? bytesLoadedSinceLastSection : directLoadSectionSizeBytes;\n const addedSplatCount = bytesToUpdate / SplatParser.RowSizeBytes;\n const newSplatCount = splatCount + addedSplatCount;\n\n if (internalLoadType === InternalLoadType.ProgressiveToSplatBuffer) {\n SplatParser.parseToUncompressedSplatBufferSection(splatCount, newSplatCount - 1, directLoadBufferIn, 0,\n directLoadBufferOut, splatDataOffsetBytes);\n } else {\n SplatParser.parseToUncompressedSplatArraySection(splatCount, newSplatCount - 1, directLoadBufferIn, 0,\n standardLoadUncompressedSplatArray);\n }\n\n splatCount = newSplatCount;\n\n if (internalLoadType === InternalLoadType.ProgressiveToSplatBuffer) {\n if (!directLoadSplatBuffer) {\n SplatBuffer.writeSectionHeaderToBuffer({\n maxSplatCount: maxSplatCount,\n splatCount: splatCount,\n bucketSize: 0,\n bucketCount: 0,\n bucketBlockSize: 0,\n compressionScaleRange: 0,\n storageSizeBytes: 0,\n fullBucketCount: 0,\n partiallyFilledBucketCount: 0\n }, 0, directLoadBufferOut, SplatBuffer.HeaderSizeBytes);\n directLoadSplatBuffer = new SplatBuffer(directLoadBufferOut, false);\n }\n directLoadSplatBuffer.updateLoadedCounts(1, splatCount);\n if (onProgressiveLoadSectionProgress) {\n onProgressiveLoadSectionProgress(directLoadSplatBuffer, loadComplete);\n }\n }\n\n numBytesStreamed += directLoadSectionSizeBytes;\n }\n }\n\n if (loadComplete) {\n if (internalLoadType === InternalLoadType.ProgressiveToSplatBuffer) {\n loadPromise.resolve(directLoadSplatBuffer);\n } else {\n loadPromise.resolve(standardLoadUncompressedSplatArray);\n }\n }\n\n if (onProgress) onProgress(percent, percentStr, LoaderStatus.Downloading);\n };\n\n if (onProgress) onProgress(0, '0%', LoaderStatus.Downloading);\n return fetchWithProgress(fileName, localOnProgress, false, headers).then(() => {\n if (onProgress) onProgress(0, '0%', LoaderStatus.Processing);\n return loadPromise.promise.then((splatData) => {\n if (onProgress) onProgress(100, '100%', LoaderStatus.Done);\n if (internalLoadType === InternalLoadType.DownloadBeforeProcessing) {\n return new Blob(chunks).arrayBuffer().then((splatData) => {\n return SplatLoader.loadFromFileData(splatData, minimumAlpha, compressionLevel, optimizeSplatData,\n sectionSize, sceneCenter, blockSize, bucketSize);\n });\n } else if (internalLoadType === InternalLoadType.ProgressiveToSplatBuffer) {\n return splatData;\n } else {\n return delayedExecute(() => {\n return finalize(splatData, optimizeSplatData, minimumAlpha, compressionLevel,\n sectionSize, sceneCenter, blockSize, bucketSize);\n });\n }\n });\n });\n }\n\n static loadFromFileData(splatFileData, minimumAlpha, compressionLevel, optimizeSplatData,\n sectionSize, sceneCenter, blockSize, bucketSize) {\n return delayedExecute(() => {\n const splatArray = SplatParser.parseStandardSplatToUncompressedSplatArray(splatFileData);\n return finalize(splatArray, optimizeSplatData, minimumAlpha, compressionLevel,\n sectionSize, sceneCenter, blockSize, bucketSize);\n });\n }\n\n}\n\nclass KSplatLoader {\n\n static checkVersion(buffer) {\n const minVersionMajor = SplatBuffer.CurrentMajorVersion;\n const minVersionMinor = SplatBuffer.CurrentMinorVersion;\n const header = SplatBuffer.parseHeader(buffer);\n if (header.versionMajor === minVersionMajor &&\n header.versionMinor >= minVersionMinor ||\n header.versionMajor > minVersionMajor) {\n return true;\n } else {\n throw new Error(`KSplat version not supported: v${header.versionMajor}.${header.versionMinor}. ` +\n `Minimum required: v${minVersionMajor}.${minVersionMinor}`);\n }\n };\n\n static loadFromURL(fileName, externalOnProgress, progressiveLoadToSplatBuffer, onSectionBuilt, headers) {\n let directLoadBuffer;\n let directLoadSplatBuffer;\n\n let headerBuffer;\n let header;\n let headerLoaded = false;\n let headerLoading = false;\n\n let sectionHeadersBuffer;\n let sectionHeaders = [];\n let sectionHeadersLoaded = false;\n let sectionHeadersLoading = false;\n\n let numBytesLoaded = 0;\n let numBytesProgressivelyLoaded = 0;\n let totalBytesToDownload = 0;\n\n let downloadComplete = false;\n let loadComplete = false;\n let loadSectionQueued = false;\n\n let chunks = [];\n\n const directLoadPromise = nativePromiseWithExtractedComponents();\n\n const checkAndLoadHeader = () => {\n if (!headerLoaded && !headerLoading && numBytesLoaded >= SplatBuffer.HeaderSizeBytes) {\n headerLoading = true;\n const headerAssemblyPromise = new Blob(chunks).arrayBuffer();\n headerAssemblyPromise.then((bufferData) => {\n headerBuffer = new ArrayBuffer(SplatBuffer.HeaderSizeBytes);\n new Uint8Array(headerBuffer).set(new Uint8Array(bufferData, 0, SplatBuffer.HeaderSizeBytes));\n KSplatLoader.checkVersion(headerBuffer);\n headerLoading = false;\n headerLoaded = true;\n header = SplatBuffer.parseHeader(headerBuffer);\n window.setTimeout(() => {\n checkAndLoadSectionHeaders();\n }, 1);\n });\n }\n };\n\n let queuedCheckAndLoadSectionsCount = 0;\n const queueCheckAndLoadSections = () => {\n if (queuedCheckAndLoadSectionsCount === 0) {\n queuedCheckAndLoadSectionsCount++;\n window.setTimeout(() => {\n queuedCheckAndLoadSectionsCount--;\n checkAndLoadSections();\n }, 1);\n }\n };\n\n const checkAndLoadSectionHeaders = () => {\n const performLoad = () => {\n sectionHeadersLoading = true;\n const sectionHeadersAssemblyPromise = new Blob(chunks).arrayBuffer();\n sectionHeadersAssemblyPromise.then((bufferData) => {\n sectionHeadersLoading = false;\n sectionHeadersLoaded = true;\n sectionHeadersBuffer = new ArrayBuffer(header.maxSectionCount * SplatBuffer.SectionHeaderSizeBytes);\n new Uint8Array(sectionHeadersBuffer).set(new Uint8Array(bufferData, SplatBuffer.HeaderSizeBytes,\n header.maxSectionCount * SplatBuffer.SectionHeaderSizeBytes));\n sectionHeaders = SplatBuffer.parseSectionHeaders(header, sectionHeadersBuffer, 0, false);\n let totalSectionStorageStorageByes = 0;\n for (let i = 0; i < header.maxSectionCount; i++) {\n totalSectionStorageStorageByes += sectionHeaders[i].storageSizeBytes;\n }\n const totalStorageSizeBytes = SplatBuffer.HeaderSizeBytes + header.maxSectionCount *\n SplatBuffer.SectionHeaderSizeBytes + totalSectionStorageStorageByes;\n if (!directLoadBuffer) {\n directLoadBuffer = new ArrayBuffer(totalStorageSizeBytes);\n let offset = 0;\n for (let i = 0; i < chunks.length; i++) {\n const chunk = chunks[i];\n new Uint8Array(directLoadBuffer, offset, chunk.byteLength).set(new Uint8Array(chunk));\n offset += chunk.byteLength;\n }\n }\n\n totalBytesToDownload = SplatBuffer.HeaderSizeBytes + SplatBuffer.SectionHeaderSizeBytes * header.maxSectionCount;\n for (let i = 0; i <= sectionHeaders.length && i < header.maxSectionCount; i++) {\n totalBytesToDownload += sectionHeaders[i].storageSizeBytes;\n }\n\n queueCheckAndLoadSections();\n });\n };\n\n if (!sectionHeadersLoading && !sectionHeadersLoaded && headerLoaded &&\n numBytesLoaded >= SplatBuffer.HeaderSizeBytes + SplatBuffer.SectionHeaderSizeBytes * header.maxSectionCount) {\n performLoad();\n }\n };\n\n const checkAndLoadSections = () => {\n if (loadSectionQueued) return;\n loadSectionQueued = true;\n const checkAndLoadFunc = () => {\n loadSectionQueued = false;\n if (sectionHeadersLoaded) {\n\n if (loadComplete) return;\n\n downloadComplete = numBytesLoaded >= totalBytesToDownload;\n\n let bytesLoadedSinceLastSection = numBytesLoaded - numBytesProgressivelyLoaded;\n if (bytesLoadedSinceLastSection > Constants.ProgressiveLoadSectionSize || downloadComplete) {\n\n numBytesProgressivelyLoaded += Constants.ProgressiveLoadSectionSize;\n loadComplete = numBytesProgressivelyLoaded >= totalBytesToDownload;\n\n if (!directLoadSplatBuffer) directLoadSplatBuffer = new SplatBuffer(directLoadBuffer, false);\n\n const baseDataOffset = SplatBuffer.HeaderSizeBytes + SplatBuffer.SectionHeaderSizeBytes * header.maxSectionCount;\n let sectionBase = 0;\n let reachedSections = 0;\n let loadedSplatCount = 0;\n for (let i = 0; i < header.maxSectionCount; i++) {\n const sectionHeader = sectionHeaders[i];\n const bucketsDataOffset = sectionBase + sectionHeader.partiallyFilledBucketCount * 4 +\n sectionHeader.bucketStorageSizeBytes * sectionHeader.bucketCount;\n const bytesRequiredToReachSectionSplatData = baseDataOffset + bucketsDataOffset;\n if (numBytesProgressivelyLoaded >= bytesRequiredToReachSectionSplatData) {\n reachedSections++;\n const bytesPastSSectionSplatDataStart = numBytesProgressivelyLoaded - bytesRequiredToReachSectionSplatData;\n const baseDescriptor = SplatBuffer.CompressionLevels[header.compressionLevel];\n const shDesc = baseDescriptor.SphericalHarmonicsDegrees[sectionHeader.sphericalHarmonicsDegree];\n const bytesPerSplat = shDesc.BytesPerSplat;\n let loadedSplatsForSection = Math.floor(bytesPastSSectionSplatDataStart / bytesPerSplat);\n loadedSplatsForSection = Math.min(loadedSplatsForSection, sectionHeader.maxSplatCount);\n loadedSplatCount += loadedSplatsForSection;\n directLoadSplatBuffer.updateLoadedCounts(reachedSections, loadedSplatCount);\n directLoadSplatBuffer.updateSectionLoadedCounts(i, loadedSplatsForSection);\n } else {\n break;\n }\n sectionBase += sectionHeader.storageSizeBytes;\n }\n\n onSectionBuilt(directLoadSplatBuffer, loadComplete);\n\n const percentComplete = numBytesProgressivelyLoaded / totalBytesToDownload * 100;\n const percentLabel = (percentComplete).toFixed(2) + '%';\n\n if (externalOnProgress) externalOnProgress(percentComplete, percentLabel, LoaderStatus.Downloading);\n\n if (loadComplete) {\n directLoadPromise.resolve(directLoadSplatBuffer);\n } else {\n checkAndLoadSections();\n }\n }\n }\n };\n window.setTimeout(checkAndLoadFunc, Constants.ProgressiveLoadSectionDelayDuration);\n };\n\n const localOnProgress = (percent, percentStr, chunk) => {\n if (chunk) {\n chunks.push(chunk);\n if (directLoadBuffer) {\n new Uint8Array(directLoadBuffer, numBytesLoaded, chunk.byteLength).set(new Uint8Array(chunk));\n }\n numBytesLoaded += chunk.byteLength;\n }\n if (progressiveLoadToSplatBuffer) {\n checkAndLoadHeader();\n checkAndLoadSectionHeaders();\n checkAndLoadSections();\n } else {\n if (externalOnProgress) externalOnProgress(percent, percentStr, LoaderStatus.Downloading);\n }\n };\n\n return fetchWithProgress(fileName, localOnProgress, !progressiveLoadToSplatBuffer, headers).then((fullBuffer) => {\n if (externalOnProgress) externalOnProgress(0, '0%', LoaderStatus.Processing);\n const loadPromise = progressiveLoadToSplatBuffer ? directLoadPromise.promise : KSplatLoader.loadFromFileData(fullBuffer);\n return loadPromise.then((splatBuffer) => {\n if (externalOnProgress) externalOnProgress(100, '100%', LoaderStatus.Done);\n return splatBuffer;\n });\n });\n }\n\n static loadFromFileData(fileData) {\n return delayedExecute(() => {\n KSplatLoader.checkVersion(fileData);\n return new SplatBuffer(fileData);\n });\n }\n\n static downloadFile = function() {\n\n let downLoadLink;\n\n return function(splatBuffer, fileName) {\n const blob = new Blob([splatBuffer.bufferData], {\n type: 'application/octet-stream',\n });\n\n if (!downLoadLink) {\n downLoadLink = document.createElement('a');\n document.body.appendChild(downLoadLink);\n }\n downLoadLink.download = fileName;\n downLoadLink.href = URL.createObjectURL(blob);\n downLoadLink.click();\n };\n\n }();\n\n}\n\nconst SceneFormat = {\n 'Splat': 0,\n 'KSplat': 1,\n 'Ply': 2,\n 'Spz': 3\n};\n\nconst sceneFormatFromPath = (path) => {\n if (path.endsWith('.ply')) return SceneFormat.Ply;\n else if (path.endsWith('.splat')) return SceneFormat.Splat;\n else if (path.endsWith('.ksplat')) return SceneFormat.KSplat;\n else if (path.endsWith('.spz')) return SceneFormat.Spz;\n return null;\n};\n\nvar Utils = /*#__PURE__*/Object.freeze({\n __proto__: null,\n sceneFormatFromPath: sceneFormatFromPath\n});\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\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$1();\nconst _plane = new Plane();\nconst TILT_LIMIT = Math.cos( 70 * MathUtils.DEG2RAD );\n\nclass OrbitControls extends EventDispatcher {\n\n constructor( object, domElement ) {\n\n super();\n\n this.object = object;\n this.domElement = domElement;\n this.domElement.style.touchAction = 'none'; // disable touch scroll\n\n // Set to false to disable this control\n this.enabled = true;\n\n // \"target\" sets the location of focus, where the object orbits around\n this.target = new Vector3();\n\n // How far you can dolly in and out ( PerspectiveCamera only )\n this.minDistance = 0;\n this.maxDistance = Infinity;\n\n // How far you can zoom in and out ( OrthographicCamera only )\n this.minZoom = 0;\n this.maxZoom = Infinity;\n\n // How far you can orbit vertically, upper and lower limits.\n // Range is 0 to Math.PI radians.\n this.minPolarAngle = 0; // radians\n this.maxPolarAngle = Math.PI; // radians\n\n // How far you can orbit horizontally, upper and lower limits.\n // If set, the interval [min, max] must be a sub-interval of [- 2 PI, 2 PI], with ( max - min < 2 PI )\n this.minAzimuthAngle = - Infinity; // radians\n this.maxAzimuthAngle = Infinity; // radians\n\n // Set to true to enable damping (inertia)\n // If damping is enabled, you must call controls.update() in your animation loop\n this.enableDamping = false;\n this.dampingFactor = 0.05;\n\n // This option actually enables dollying in and out; left as \"zoom\" for backwards compatibility.\n // Set to false to disable zooming\n this.enableZoom = true;\n this.zoomSpeed = 1.0;\n\n // Set to false to disable rotating\n this.enableRotate = true;\n this.rotateSpeed = 1.0;\n\n // Set to false to disable panning\n this.enablePan = true;\n this.panSpeed = 1.0;\n this.screenSpacePanning = true; // if false, pan orthogonal to world-space direction camera.up\n this.keyPanSpeed = 7.0; // pixels moved per arrow key push\n this.zoomToCursor = false;\n\n // Set to true to automatically rotate around the target\n // If auto-rotate is enabled, you must call controls.update() in your animation loop\n this.autoRotate = false;\n this.autoRotateSpeed = 2.0; // 30 seconds per orbit when fps is 60\n\n // The four arrow keys\n this.keys = { LEFT: 'KeyA', UP: 'KeyW', RIGHT: 'KeyD', BOTTOM: 'KeyS' };\n\n // Mouse buttons\n this.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.PAN };\n\n // Touch fingers\n this.touches = { ONE: TOUCH.ROTATE, TWO: TOUCH.DOLLY_PAN };\n\n // for reset\n this.target0 = this.target.clone();\n this.position0 = this.object.position.clone();\n this.zoom0 = this.object.zoom;\n\n // the target DOM element for key events\n this._domElementKeyEvents = null;\n\n //\n // public methods\n //\n\n this.getPolarAngle = function() {\n\n return spherical.phi;\n\n };\n\n this.getAzimuthalAngle = function() {\n\n return spherical.theta;\n\n };\n\n this.getDistance = function() {\n\n return this.object.position.distanceTo( this.target );\n\n };\n\n this.listenToKeyEvents = function( domElement ) {\n\n domElement.addEventListener( 'keydown', onKeyDown );\n this._domElementKeyEvents = domElement;\n\n };\n\n this.stopListenToKeyEvents = function() {\n\n this._domElementKeyEvents.removeEventListener( 'keydown', onKeyDown );\n this._domElementKeyEvents = null;\n\n };\n\n this.saveState = function() {\n\n scope.target0.copy( scope.target );\n scope.position0.copy( scope.object.position );\n scope.zoom0 = scope.object.zoom;\n\n };\n\n this.reset = function() {\n\n scope.target.copy( scope.target0 );\n scope.object.position.copy( scope.position0 );\n scope.object.zoom = scope.zoom0;\n this.clearDampedRotation();\n this.clearDampedPan();\n\n scope.object.updateProjectionMatrix();\n scope.dispatchEvent( _changeEvent );\n\n scope.update();\n\n state = STATE.NONE;\n\n };\n\n this.clearDampedRotation = function() {\n sphericalDelta.theta = 0.0;\n sphericalDelta.phi = 0.0;\n };\n\n this.clearDampedPan = function() {\n panOffset.set(0, 0, 0);\n };\n\n // this method is exposed, but perhaps it would be better if we can make it private...\n this.update = function() {\n\n const offset = new Vector3();\n\n // so camera.up is the orbit axis\n const quat = new Quaternion().setFromUnitVectors( object.up, new Vector3( 0, 1, 0 ) );\n const quatInverse = quat.clone().invert();\n\n const lastPosition = new Vector3();\n const lastQuaternion = new Quaternion();\n const lastTargetPosition = new Vector3();\n\n const twoPI = 2 * Math.PI;\n\n return function update() {\n\n quat.setFromUnitVectors( object.up, new Vector3( 0, 1, 0 ) );\n quatInverse.copy(quat).invert();\n\n const position = scope.object.position;\n\n offset.copy( position ).sub( scope.target );\n\n // rotate offset to \"y-axis-is-up\" space\n offset.applyQuaternion( quat );\n\n // angle from z-axis around y-axis\n spherical.setFromVector3( offset );\n\n if ( scope.autoRotate && state === STATE.NONE ) {\n\n rotateLeft( getAutoRotationAngle() );\n\n }\n\n if ( scope.enableDamping ) {\n\n spherical.theta += sphericalDelta.theta * scope.dampingFactor;\n spherical.phi += sphericalDelta.phi * scope.dampingFactor;\n\n } else {\n\n spherical.theta += sphericalDelta.theta;\n spherical.phi += sphericalDelta.phi;\n\n }\n\n // restrict theta to be between desired limits\n\n let min = scope.minAzimuthAngle;\n let max = scope.maxAzimuthAngle;\n\n if ( isFinite( min ) && isFinite( max ) ) {\n\n if ( min < - Math.PI ) min += twoPI; else if ( min > Math.PI ) min -= twoPI;\n\n if ( max < - Math.PI ) max += twoPI; else if ( max > Math.PI ) max -= twoPI;\n\n if ( min <= max ) {\n\n spherical.theta = Math.max( min, Math.min( max, spherical.theta ) );\n\n } else {\n\n spherical.theta = ( spherical.theta > ( min + max ) / 2 ) ?\n Math.max( min, spherical.theta ) :\n Math.min( max, spherical.theta );\n\n }\n\n }\n\n // restrict phi to be between desired limits\n spherical.phi = Math.max( scope.minPolarAngle, Math.min( scope.maxPolarAngle, spherical.phi ) );\n\n spherical.makeSafe();\n\n\n // move target to panned location\n\n if ( scope.enableDamping === true ) {\n\n scope.target.addScaledVector( panOffset, scope.dampingFactor );\n\n } else {\n\n scope.target.add( panOffset );\n\n }\n\n // adjust the camera position based on zoom only if we're not zooming to the cursor or if it's an ortho camera\n // we adjust zoom later in these cases\n if ( scope.zoomToCursor && performCursorZoom || scope.object.isOrthographicCamera ) {\n\n spherical.radius = clampDistance( spherical.radius );\n\n } else {\n\n spherical.radius = clampDistance( spherical.radius * scale );\n\n }\n\n\n offset.setFromSpherical( spherical );\n\n // rotate offset back to \"camera-up-vector-is-up\" space\n offset.applyQuaternion( quatInverse );\n\n position.copy( scope.target ).add( offset );\n\n scope.object.lookAt( scope.target );\n\n if ( scope.enableDamping === true ) {\n\n sphericalDelta.theta *= ( 1 - scope.dampingFactor );\n sphericalDelta.phi *= ( 1 - scope.dampingFactor );\n\n panOffset.multiplyScalar( 1 - scope.dampingFactor );\n\n } else {\n\n sphericalDelta.set( 0, 0, 0 );\n\n panOffset.set( 0, 0, 0 );\n\n }\n\n // adjust camera position\n let zoomChanged = false;\n if ( scope.zoomToCursor && performCursorZoom ) {\n\n let newRadius = null;\n if ( scope.object.isPerspectiveCamera ) {\n\n // move the camera down the pointer ray\n // this method avoids floating point error\n const prevRadius = offset.length();\n newRadius = clampDistance( prevRadius * scale );\n\n const radiusDelta = prevRadius - newRadius;\n scope.object.position.addScaledVector( dollyDirection, radiusDelta );\n scope.object.updateMatrixWorld();\n\n } else if ( scope.object.isOrthographicCamera ) {\n\n // adjust the ortho camera position based on zoom changes\n const mouseBefore = new Vector3( mouse.x, mouse.y, 0 );\n mouseBefore.unproject( scope.object );\n\n scope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom / scale ) );\n scope.object.updateProjectionMatrix();\n zoomChanged = true;\n\n const mouseAfter = new Vector3( mouse.x, mouse.y, 0 );\n mouseAfter.unproject( scope.object );\n\n scope.object.position.sub( mouseAfter ).add( mouseBefore );\n scope.object.updateMatrixWorld();\n\n newRadius = offset.length();\n\n } else {\n\n console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled.' );\n scope.zoomToCursor = false;\n\n }\n\n // handle the placement of the target\n if ( newRadius !== null ) {\n\n if ( this.screenSpacePanning ) {\n\n // position the orbit target in front of the new camera position\n scope.target.set( 0, 0, - 1 )\n .transformDirection( scope.object.matrix )\n .multiplyScalar( newRadius )\n .add( scope.object.position );\n\n } else {\n\n // get the ray and translation plane to compute target\n _ray.origin.copy( scope.object.position );\n _ray.direction.set( 0, 0, - 1 ).transformDirection( scope.object.matrix );\n\n // if the camera is 20 degrees above the horizon then don't adjust the focus target to avoid\n // extremely large values\n if ( Math.abs( scope.object.up.dot( _ray.direction ) ) < TILT_LIMIT ) {\n\n object.lookAt( scope.target );\n\n } else {\n\n _plane.setFromNormalAndCoplanarPoint( scope.object.up, scope.target );\n _ray.intersectPlane( _plane, scope.target );\n\n }\n\n }\n\n }\n\n } else if ( scope.object.isOrthographicCamera ) {\n\n scope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom / scale ) );\n scope.object.updateProjectionMatrix();\n zoomChanged = true;\n\n }\n\n scale = 1;\n performCursorZoom = false;\n\n // update condition is:\n // min(camera displacement, camera rotation in radians)^2 > EPS\n // using small-angle approximation cos(x/2) = 1 - x^2 / 8\n\n if ( zoomChanged ||\n lastPosition.distanceToSquared( scope.object.position ) > EPS ||\n 8 * ( 1 - lastQuaternion.dot( scope.object.quaternion ) ) > EPS ||\n lastTargetPosition.distanceToSquared( scope.target ) > 0 ) {\n\n scope.dispatchEvent( _changeEvent );\n\n lastPosition.copy( scope.object.position );\n lastQuaternion.copy( scope.object.quaternion );\n lastTargetPosition.copy( scope.target );\n\n zoomChanged = false;\n\n return true;\n\n }\n\n return false;\n\n };\n\n }();\n\n this.dispose = function() {\n\n scope.domElement.removeEventListener( 'contextmenu', onContextMenu );\n\n scope.domElement.removeEventListener( 'pointerdown', onPointerDown );\n scope.domElement.removeEventListener( 'pointercancel', onPointerUp );\n scope.domElement.removeEventListener( 'wheel', onMouseWheel );\n\n scope.domElement.removeEventListener( 'pointermove', onPointerMove );\n scope.domElement.removeEventListener( 'pointerup', onPointerUp );\n\n\n if ( scope._domElementKeyEvents !== null ) {\n\n scope._domElementKeyEvents.removeEventListener( 'keydown', onKeyDown );\n scope._domElementKeyEvents = null;\n\n }\n\n };\n\n //\n // internals\n //\n\n const scope = this;\n\n const STATE = {\n NONE: - 1,\n ROTATE: 0,\n DOLLY: 1,\n PAN: 2,\n TOUCH_ROTATE: 3,\n TOUCH_PAN: 4,\n TOUCH_DOLLY_PAN: 5,\n TOUCH_DOLLY_ROTATE: 6\n };\n\n let state = STATE.NONE;\n\n const EPS = 0.000001;\n\n // current position in spherical coordinates\n const spherical = new Spherical();\n const sphericalDelta = new Spherical();\n\n let scale = 1;\n const panOffset = new Vector3();\n\n const rotateStart = new Vector2();\n const rotateEnd = new Vector2();\n const rotateDelta = new Vector2();\n\n const panStart = new Vector2();\n const panEnd = new Vector2();\n const panDelta = new Vector2();\n\n const dollyStart = new Vector2();\n const dollyEnd = new Vector2();\n const dollyDelta = new Vector2();\n\n const dollyDirection = new Vector3();\n const mouse = new Vector2();\n let performCursorZoom = false;\n\n const pointers = [];\n const pointerPositions = {};\n\n function getAutoRotationAngle() {\n\n return 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;\n\n }\n\n function getZoomScale() {\n\n return Math.pow( 0.95, scope.zoomSpeed );\n\n }\n\n function rotateLeft( angle ) {\n\n sphericalDelta.theta -= angle;\n\n }\n\n function rotateUp( angle ) {\n\n sphericalDelta.phi -= angle;\n\n }\n\n const panLeft = function() {\n\n const v = new Vector3();\n\n return function panLeft( distance, objectMatrix ) {\n\n v.setFromMatrixColumn( objectMatrix, 0 ); // get X column of objectMatrix\n v.multiplyScalar( - distance );\n\n panOffset.add( v );\n\n };\n\n }();\n\n const panUp = function() {\n\n const v = new Vector3();\n\n return function panUp( distance, objectMatrix ) {\n\n if ( scope.screenSpacePanning === true ) {\n\n v.setFromMatrixColumn( objectMatrix, 1 );\n\n } else {\n\n v.setFromMatrixColumn( objectMatrix, 0 );\n v.crossVectors( scope.object.up, v );\n\n }\n\n v.multiplyScalar( distance );\n\n panOffset.add( v );\n\n };\n\n }();\n\n // deltaX and deltaY are in pixels; right and down are positive\n const pan = function() {\n\n const offset = new Vector3();\n\n return function pan( deltaX, deltaY ) {\n\n const element = scope.domElement;\n\n if ( scope.object.isPerspectiveCamera ) {\n\n // perspective\n const position = scope.object.position;\n offset.copy( position ).sub( scope.target );\n let targetDistance = offset.length();\n\n // half of the fov is center to top of screen\n targetDistance *= Math.tan( ( scope.object.fov / 2 ) * Math.PI / 180.0 );\n\n // we use only clientHeight here so aspect ratio does not distort speed\n panLeft( 2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix );\n panUp( 2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix );\n\n } else if ( scope.object.isOrthographicCamera ) {\n\n // orthographic\n panLeft( deltaX * ( scope.object.right - scope.object.left ) /\n scope.object.zoom / element.clientWidth, scope.object.matrix );\n panUp( deltaY * ( scope.object.top - scope.object.bottom ) / scope.object.zoom /\n element.clientHeight, scope.object.matrix );\n\n } else {\n\n // camera neither orthographic nor perspective\n console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.' );\n scope.enablePan = false;\n\n }\n\n };\n\n }();\n\n function dollyOut( dollyScale ) {\n\n if ( scope.object.isPerspectiveCamera || scope.object.isOrthographicCamera ) {\n\n scale /= dollyScale;\n\n } else {\n\n console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n scope.enableZoom = false;\n\n }\n\n }\n\n function dollyIn( dollyScale ) {\n\n if ( scope.object.isPerspectiveCamera || scope.object.isOrthographicCamera ) {\n\n scale *= dollyScale;\n\n } else {\n\n console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n scope.enableZoom = false;\n\n }\n\n }\n\n function updateMouseParameters( event ) {\n\n if ( ! scope.zoomToCursor ) {\n\n return;\n\n }\n\n performCursorZoom = true;\n\n const rect = scope.domElement.getBoundingClientRect();\n const x = event.clientX - rect.left;\n const y = event.clientY - rect.top;\n const w = rect.width;\n const h = rect.height;\n\n mouse.x = ( x / w ) * 2 - 1;\n mouse.y = - ( y / h ) * 2 + 1;\n\n dollyDirection.set( mouse.x, mouse.y, 1 ).unproject( object ).sub( object.position ).normalize();\n\n }\n\n function clampDistance( dist ) {\n\n return Math.max( scope.minDistance, Math.min( scope.maxDistance, dist ) );\n\n }\n\n //\n // event callbacks - update the object state\n //\n\n function handleMouseDownRotate( event ) {\n\n rotateStart.set( event.clientX, event.clientY );\n\n }\n\n function handleMouseDownDolly( event ) {\n\n updateMouseParameters( event );\n dollyStart.set( event.clientX, event.clientY );\n\n }\n\n function handleMouseDownPan( event ) {\n\n panStart.set( event.clientX, event.clientY );\n\n }\n\n function handleMouseMoveRotate( event ) {\n\n rotateEnd.set( event.clientX, event.clientY );\n\n rotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed );\n\n const element = scope.domElement;\n\n rotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, height\n\n rotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight );\n\n rotateStart.copy( rotateEnd );\n\n scope.update();\n\n }\n\n function handleMouseMoveDolly( event ) {\n\n dollyEnd.set( event.clientX, event.clientY );\n\n dollyDelta.subVectors( dollyEnd, dollyStart );\n\n if ( dollyDelta.y > 0 ) {\n\n dollyOut( getZoomScale() );\n\n } else if ( dollyDelta.y < 0 ) {\n\n dollyIn( getZoomScale() );\n\n }\n\n dollyStart.copy( dollyEnd );\n\n scope.update();\n\n }\n\n function handleMouseMovePan( event ) {\n\n panEnd.set( event.clientX, event.clientY );\n\n panDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed );\n\n pan( panDelta.x, panDelta.y );\n\n panStart.copy( panEnd );\n\n scope.update();\n\n }\n\n function handleMouseWheel( event ) {\n\n updateMouseParameters( event );\n\n if ( event.deltaY < 0 ) {\n\n dollyIn( getZoomScale() );\n\n } else if ( event.deltaY > 0 ) {\n\n dollyOut( getZoomScale() );\n\n }\n\n scope.update();\n\n }\n\n function handleKeyDown( event ) {\n\n let needsUpdate = false;\n\n switch ( event.code ) {\n\n case scope.keys.UP:\n\n if ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n rotateUp( 2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight );\n\n } else {\n\n pan( 0, scope.keyPanSpeed );\n\n }\n\n needsUpdate = true;\n break;\n\n case scope.keys.BOTTOM:\n\n if ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n rotateUp( - 2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight );\n\n } else {\n\n pan( 0, - scope.keyPanSpeed );\n\n }\n\n needsUpdate = true;\n break;\n\n case scope.keys.LEFT:\n\n if ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n rotateLeft( 2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight );\n\n } else {\n\n pan( scope.keyPanSpeed, 0 );\n\n }\n\n needsUpdate = true;\n break;\n\n case scope.keys.RIGHT:\n\n if ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n rotateLeft( - 2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight );\n\n } else {\n\n pan( - scope.keyPanSpeed, 0 );\n\n }\n\n needsUpdate = true;\n break;\n\n }\n\n if ( needsUpdate ) {\n\n // prevent the browser from scrolling on cursor keys\n event.preventDefault();\n\n scope.update();\n\n }\n\n\n }\n\n function handleTouchStartRotate() {\n\n if ( pointers.length === 1 ) {\n\n rotateStart.set( pointers[0].pageX, pointers[0].pageY );\n\n } else {\n\n const x = 0.5 * ( pointers[0].pageX + pointers[1].pageX );\n const y = 0.5 * ( pointers[0].pageY + pointers[1].pageY );\n\n rotateStart.set( x, y );\n\n }\n\n }\n\n function handleTouchStartPan() {\n\n if ( pointers.length === 1 ) {\n\n panStart.set( pointers[0].pageX, pointers[0].pageY );\n\n } else {\n\n const x = 0.5 * ( pointers[0].pageX + pointers[1].pageX );\n const y = 0.5 * ( pointers[0].pageY + pointers[1].pageY );\n\n panStart.set( x, y );\n\n }\n\n }\n\n function handleTouchStartDolly() {\n\n const dx = pointers[0].pageX - pointers[1].pageX;\n const dy = pointers[0].pageY - pointers[1].pageY;\n\n const distance = Math.sqrt( dx * dx + dy * dy );\n\n dollyStart.set( 0, distance );\n\n }\n\n function handleTouchStartDollyPan() {\n\n if ( scope.enableZoom ) handleTouchStartDolly();\n\n if ( scope.enablePan ) handleTouchStartPan();\n\n }\n\n function handleTouchStartDollyRotate() {\n\n if ( scope.enableZoom ) handleTouchStartDolly();\n\n if ( scope.enableRotate ) handleTouchStartRotate();\n\n }\n\n function handleTouchMoveRotate( event ) {\n\n if ( pointers.length == 1 ) {\n\n rotateEnd.set( event.pageX, event.pageY );\n\n } else {\n\n const position = getSecondPointerPosition( event );\n\n const x = 0.5 * ( event.pageX + position.x );\n const y = 0.5 * ( event.pageY + position.y );\n\n rotateEnd.set( x, y );\n\n }\n\n rotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed );\n\n const element = scope.domElement;\n\n rotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, height\n\n rotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight );\n\n rotateStart.copy( rotateEnd );\n\n }\n\n function handleTouchMovePan( event ) {\n\n if ( pointers.length === 1 ) {\n\n panEnd.set( event.pageX, event.pageY );\n\n } else {\n\n const position = getSecondPointerPosition( event );\n\n const x = 0.5 * ( event.pageX + position.x );\n const y = 0.5 * ( event.pageY + position.y );\n\n panEnd.set( x, y );\n\n }\n\n panDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed );\n\n pan( panDelta.x, panDelta.y );\n\n panStart.copy( panEnd );\n\n }\n\n function handleTouchMoveDolly( event ) {\n\n const position = getSecondPointerPosition( event );\n\n const dx = event.pageX - position.x;\n const dy = event.pageY - position.y;\n\n const distance = Math.sqrt( dx * dx + dy * dy );\n\n dollyEnd.set( 0, distance );\n\n dollyDelta.set( 0, Math.pow( dollyEnd.y / dollyStart.y, scope.zoomSpeed ) );\n\n dollyOut( dollyDelta.y );\n\n dollyStart.copy( dollyEnd );\n\n }\n\n function handleTouchMoveDollyPan( event ) {\n\n if ( scope.enableZoom ) handleTouchMoveDolly( event );\n\n if ( scope.enablePan ) handleTouchMovePan( event );\n\n }\n\n function handleTouchMoveDollyRotate( event ) {\n\n if ( scope.enableZoom ) handleTouchMoveDolly( event );\n\n if ( scope.enableRotate ) handleTouchMoveRotate( event );\n\n }\n\n //\n // event handlers - FSM: listen for events and reset state\n //\n\n function onPointerDown( event ) {\n\n if ( scope.enabled === false ) return;\n\n if ( pointers.length === 0 ) {\n\n scope.domElement.setPointerCapture( event.pointerId );\n\n scope.domElement.addEventListener( 'pointermove', onPointerMove );\n scope.domElement.addEventListener( 'pointerup', onPointerUp );\n\n }\n\n //\n\n addPointer( event );\n\n if ( event.pointerType === 'touch' ) {\n\n onTouchStart( event );\n\n } else {\n\n onMouseDown( event );\n\n }\n\n }\n\n function onPointerMove( event ) {\n\n if ( scope.enabled === false ) return;\n\n if ( event.pointerType === 'touch' ) {\n\n onTouchMove( event );\n\n } else {\n\n onMouseMove( event );\n\n }\n\n }\n\n function onPointerUp( event ) {\n\n removePointer( event );\n\n if ( pointers.length === 0 ) {\n\n scope.domElement.releasePointerCapture( event.pointerId );\n\n scope.domElement.removeEventListener( 'pointermove', onPointerMove );\n scope.domElement.removeEventListener( 'pointerup', onPointerUp );\n\n }\n\n scope.dispatchEvent( _endEvent );\n\n state = STATE.NONE;\n\n }\n\n function onMouseDown( event ) {\n\n let mouseAction;\n\n switch ( event.button ) {\n\n case 0:\n\n mouseAction = scope.mouseButtons.LEFT;\n break;\n\n case 1:\n\n mouseAction = scope.mouseButtons.MIDDLE;\n break;\n\n case 2:\n\n mouseAction = scope.mouseButtons.RIGHT;\n break;\n\n default:\n\n mouseAction = - 1;\n\n }\n\n switch ( mouseAction ) {\n\n case MOUSE.DOLLY:\n\n if ( scope.enableZoom === false ) return;\n\n handleMouseDownDolly( event );\n\n state = STATE.DOLLY;\n\n break;\n\n case MOUSE.ROTATE:\n\n if ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n if ( scope.enablePan === false ) return;\n\n handleMouseDownPan( event );\n\n state = STATE.PAN;\n\n } else {\n\n if ( scope.enableRotate === false ) return;\n\n handleMouseDownRotate( event );\n\n state = STATE.ROTATE;\n\n }\n\n break;\n\n case MOUSE.PAN:\n\n if ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n if ( scope.enableRotate === false ) return;\n\n handleMouseDownRotate( event );\n\n state = STATE.ROTATE;\n\n } else {\n\n if ( scope.enablePan === false ) return;\n\n handleMouseDownPan( event );\n\n state = STATE.PAN;\n\n }\n\n break;\n\n default:\n\n state = STATE.NONE;\n\n }\n\n if ( state !== STATE.NONE ) {\n\n scope.dispatchEvent( _startEvent );\n\n }\n\n }\n\n function onMouseMove( event ) {\n\n switch ( state ) {\n\n case STATE.ROTATE:\n\n if ( scope.enableRotate === false ) return;\n\n handleMouseMoveRotate( event );\n\n break;\n\n case STATE.DOLLY:\n\n if ( scope.enableZoom === false ) return;\n\n handleMouseMoveDolly( event );\n\n break;\n\n case STATE.PAN:\n\n if ( scope.enablePan === false ) return;\n\n handleMouseMovePan( event );\n\n break;\n\n }\n\n }\n\n function onMouseWheel( event ) {\n\n if ( scope.enabled === false || scope.enableZoom === false || state !== STATE.NONE ) return;\n\n event.preventDefault();\n\n scope.dispatchEvent( _startEvent );\n\n handleMouseWheel( event );\n\n scope.dispatchEvent( _endEvent );\n\n }\n\n function onKeyDown( event ) {\n\n if ( scope.enabled === false || scope.enablePan === false ) return;\n\n handleKeyDown( event );\n\n }\n\n function onTouchStart( event ) {\n\n trackPointer( event );\n\n switch ( pointers.length ) {\n\n case 1:\n\n switch ( scope.touches.ONE ) {\n\n case TOUCH.ROTATE:\n\n if ( scope.enableRotate === false ) return;\n\n handleTouchStartRotate();\n\n state = STATE.TOUCH_ROTATE;\n\n break;\n\n case TOUCH.PAN:\n\n if ( scope.enablePan === false ) return;\n\n handleTouchStartPan();\n\n state = STATE.TOUCH_PAN;\n\n break;\n\n default:\n\n state = STATE.NONE;\n\n }\n\n break;\n\n case 2:\n\n switch ( scope.touches.TWO ) {\n\n case TOUCH.DOLLY_PAN:\n\n if ( scope.enableZoom === false && scope.enablePan === false ) return;\n\n handleTouchStartDollyPan();\n\n state = STATE.TOUCH_DOLLY_PAN;\n\n break;\n\n case TOUCH.DOLLY_ROTATE:\n\n if ( scope.enableZoom === false && scope.enableRotate === false ) return;\n\n handleTouchStartDollyRotate();\n\n state = STATE.TOUCH_DOLLY_ROTATE;\n\n break;\n\n default:\n\n state = STATE.NONE;\n\n }\n\n break;\n\n default:\n\n state = STATE.NONE;\n\n }\n\n if ( state !== STATE.NONE ) {\n\n scope.dispatchEvent( _startEvent );\n\n }\n\n }\n\n function onTouchMove( event ) {\n\n trackPointer( event );\n\n switch ( state ) {\n\n case STATE.TOUCH_ROTATE:\n\n if ( scope.enableRotate === false ) return;\n\n handleTouchMoveRotate( event );\n\n scope.update();\n\n break;\n\n case STATE.TOUCH_PAN:\n\n if ( scope.enablePan === false ) return;\n\n handleTouchMovePan( event );\n\n scope.update();\n\n break;\n\n case STATE.TOUCH_DOLLY_PAN:\n\n if ( scope.enableZoom === false && scope.enablePan === false ) return;\n\n handleTouchMoveDollyPan( event );\n\n scope.update();\n\n break;\n\n case STATE.TOUCH_DOLLY_ROTATE:\n\n if ( scope.enableZoom === false && scope.enableRotate === false ) return;\n\n handleTouchMoveDollyRotate( event );\n\n scope.update();\n\n break;\n\n default:\n\n state = STATE.NONE;\n\n }\n\n }\n\n function onContextMenu( event ) {\n\n if ( scope.enabled === false ) return;\n\n event.preventDefault();\n\n }\n\n function addPointer( event ) {\n\n pointers.push( event );\n\n }\n\n function removePointer( event ) {\n\n delete pointerPositions[event.pointerId];\n\n for ( let i = 0; i < pointers.length; i ++ ) {\n\n if ( pointers[i].pointerId == event.pointerId ) {\n\n pointers.splice( i, 1 );\n return;\n\n }\n\n }\n\n }\n\n function trackPointer( event ) {\n\n let position = pointerPositions[event.pointerId];\n\n if ( position === undefined ) {\n\n position = new Vector2();\n pointerPositions[event.pointerId] = position;\n\n }\n\n position.set( event.pageX, event.pageY );\n\n }\n\n function getSecondPointerPosition( event ) {\n\n const pointer = ( event.pointerId === pointers[0].pointerId ) ? pointers[1] : pointers[0];\n\n return pointerPositions[pointer.pointerId];\n\n }\n\n //\n\n scope.domElement.addEventListener( 'contextmenu', onContextMenu );\n\n scope.domElement.addEventListener( 'pointerdown', onPointerDown );\n scope.domElement.addEventListener( 'pointercancel', onPointerUp );\n scope.domElement.addEventListener( 'wheel', onMouseWheel, { passive: false } );\n\n // force an update at start\n\n this.update();\n\n }\n\n}\n\nconst fadeElement = (element, out, displayStyle, duration, onComplete) => {\n const startTime = performance.now();\n\n let startOpacity = element.style.display === 'none' ? 0 : parseFloat(element.style.opacity);\n if (isNaN(startOpacity)) startOpacity = 1;\n\n const interval = window.setInterval(() => {\n const currentTime = performance.now();\n const elapsed = currentTime - startTime;\n\n let t = Math.min(elapsed / duration, 1.0);\n if (t > 0.999) t = 1;\n\n let opacity;\n if (out) {\n opacity = (1.0 - t) * startOpacity;\n if (opacity < 0.0001) opacity = 0;\n } else {\n opacity = (1.0 - startOpacity) * t + startOpacity;\n }\n\n if (opacity > 0) {\n element.style.display = displayStyle;\n element.style.opacity = opacity;\n } else {\n element.style.display = 'none';\n }\n\n if (t >= 1) {\n if (onComplete) onComplete();\n window.clearInterval(interval);\n }\n }, 16);\n return interval;\n};\n\nconst cancelFade = (interval) => {\n window.clearInterval(interval);\n};\n\nconst STANDARD_FADE_DURATION = 500;\n\nclass LoadingSpinner {\n\n static elementIDGen = 0;\n\n constructor(message, container) {\n\n this.taskIDGen = 0;\n this.elementID = LoadingSpinner.elementIDGen++;\n\n this.tasks = [];\n\n this.message = message || 'Loading...';\n this.container = container || document.body;\n\n this.spinnerContainerOuter = document.createElement('div');\n this.spinnerContainerOuter.className = `spinnerOuterContainer${this.elementID}`;\n this.spinnerContainerOuter.style.display = 'none';\n\n this.spinnerContainerPrimary = document.createElement('div');\n this.spinnerContainerPrimary.className = `spinnerContainerPrimary${this.elementID}`;\n this.spinnerPrimary = document.createElement('div');\n this.spinnerPrimary.classList.add(`spinner${this.elementID}`, `spinnerPrimary${this.elementID}`);\n this.messageContainerPrimary = document.createElement('div');\n this.messageContainerPrimary.classList.add(`messageContainer${this.elementID}`, `messageContainerPrimary${this.elementID}`);\n this.messageContainerPrimary.innerHTML = this.message;\n\n this.spinnerContainerMin = document.createElement('div');\n this.spinnerContainerMin.className = `spinnerContainerMin${this.elementID}`;\n this.spinnerMin = document.createElement('div');\n this.spinnerMin.classList.add(`spinner${this.elementID}`, `spinnerMin${this.elementID}`);\n this.messageContainerMin = document.createElement('div');\n this.messageContainerMin.classList.add(`messageContainer${this.elementID}`, `messageContainerMin${this.elementID}`);\n this.messageContainerMin.innerHTML = this.message;\n\n this.spinnerContainerPrimary.appendChild(this.spinnerPrimary);\n this.spinnerContainerPrimary.appendChild(this.messageContainerPrimary);\n this.spinnerContainerOuter.appendChild(this.spinnerContainerPrimary);\n\n this.spinnerContainerMin.appendChild(this.spinnerMin);\n this.spinnerContainerMin.appendChild(this.messageContainerMin);\n this.spinnerContainerOuter.appendChild(this.spinnerContainerMin);\n\n const style = document.createElement('style');\n style.innerHTML = `\n\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 color: #ffffff;\n text-align: center;\n vertical-align: middle;\n }\n\n .spinner${this.elementID} {\n padding: 15px;\n background: #07e8d6;\n z-index:99999;\n \n aspect-ratio: 1;\n border-radius: 50%;\n --_m: \n conic-gradient(#0000,#000),\n linear-gradient(#000 0 0) content-box;\n -webkit-mask: var(--_m);\n mask: var(--_m);\n -webkit-mask-composite: source-out;\n mask-composite: subtract;\n box-sizing: border-box;\n animation: load 1s linear infinite;\n }\n\n .spinnerContainerPrimary${this.elementID} {\n z-index:99999;\n background-color: rgba(128, 128, 128, 0.75);\n border: #666666 1px solid;\n border-radius: 5px;\n padding-top: 20px;\n padding-bottom: 10px;\n margin: 0;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-80px, -80px);\n width: 180px;\n pointer-events: auto;\n }\n\n .spinnerPrimary${this.elementID} {\n width: 120px;\n margin-left: 30px;\n }\n\n .messageContainerPrimary${this.elementID} {\n padding-top: 15px;\n }\n\n .spinnerContainerMin${this.elementID} {\n z-index:99999;\n background-color: rgba(128, 128, 128, 0.75);\n border: #666666 1px solid;\n border-radius: 5px;\n padding-top: 20px;\n padding-bottom: 15px;\n margin: 0;\n position: absolute;\n bottom: 50px;\n left: 50%;\n transform: translate(-50%, 0);\n display: flex;\n flex-direction: left;\n pointer-events: auto;\n min-width: 250px;\n }\n\n .messageContainerMin${this.elementID} {\n margin-right: 15px;\n }\n\n .spinnerMin${this.elementID} {\n width: 50px;\n height: 50px;\n margin-left: 15px;\n margin-right: 25px;\n }\n\n .messageContainerMin${this.elementID} {\n padding-top: 15px;\n }\n \n @keyframes load {\n to{transform: rotate(1turn)}\n }\n\n `;\n this.spinnerContainerOuter.appendChild(style);\n this.container.appendChild(this.spinnerContainerOuter);\n\n this.setMinimized(false, true);\n\n this.fadeTransitions = [];\n }\n\n addTask(message) {\n const newTask = {\n 'message': message,\n 'id': this.taskIDGen++\n };\n this.tasks.push(newTask);\n this.update();\n return newTask.id;\n }\n\n removeTask(id) {\n let index = 0;\n for (let task of this.tasks) {\n if (task.id === id) {\n this.tasks.splice(index, 1);\n break;\n }\n index++;\n }\n this.update();\n }\n\n removeAllTasks() {\n this.tasks = [];\n this.update();\n }\n\n setMessageForTask(id, message) {\n for (let task of this.tasks) {\n if (task.id === id) {\n task.message = message;\n break;\n }\n }\n this.update();\n }\n\n update() {\n if (this.tasks.length > 0) {\n this.show();\n this.setMessage(this.tasks[this.tasks.length - 1].message);\n } else {\n this.hide();\n }\n }\n\n show() {\n this.spinnerContainerOuter.style.display = 'block';\n this.visible = true;\n }\n\n hide() {\n this.spinnerContainerOuter.style.display = 'none';\n this.visible = false;\n }\n\n setContainer(container) {\n if (this.container && this.spinnerContainerOuter.parentElement === this.container) {\n this.container.removeChild(this.spinnerContainerOuter);\n }\n if (container) {\n this.container = container;\n this.container.appendChild(this.spinnerContainerOuter);\n this.spinnerContainerOuter.style.zIndex = this.container.style.zIndex + 1;\n }\n }\n\n setMinimized(minimized, instant) {\n const showHideSpinner = (element, show, instant, displayStyle, fadeTransitionsIndex) => {\n if (instant) {\n element.style.display = show ? displayStyle : 'none';\n } else {\n this.fadeTransitions[fadeTransitionsIndex] = fadeElement(element, !show, displayStyle, STANDARD_FADE_DURATION, () => {\n this.fadeTransitions[fadeTransitionsIndex] = null;\n });\n }\n };\n showHideSpinner(this.spinnerContainerPrimary, !minimized, instant, 'block', 0);\n showHideSpinner(this.spinnerContainerMin, minimized, instant, 'flex', 1);\n this.minimized = minimized;\n }\n\n setMessage(msg) {\n this.messageContainerPrimary.innerHTML = msg;\n this.messageContainerMin.innerHTML = msg;\n }\n}\n\nclass LoadingProgressBar {\n\n constructor(container) {\n\n this.idGen = 0;\n\n this.tasks = [];\n\n this.container = container || document.body;\n\n this.progressBarContainerOuter = document.createElement('div');\n this.progressBarContainerOuter.className = 'progressBarOuterContainer';\n this.progressBarContainerOuter.style.display = 'none';\n\n this.progressBarBox = document.createElement('div');\n this.progressBarBox.className = 'progressBarBox';\n\n this.progressBarBackground = document.createElement('div');\n this.progressBarBackground.className = 'progressBarBackground';\n\n this.progressBar = document.createElement('div');\n this.progressBar.className = 'progressBar';\n\n this.progressBarBackground.appendChild(this.progressBar);\n this.progressBarBox.appendChild(this.progressBarBackground);\n this.progressBarContainerOuter.appendChild(this.progressBarBox);\n\n const style = document.createElement('style');\n style.innerHTML = `\n\n .progressBarOuterContainer {\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 .progressBarBox {\n z-index:99999;\n padding: 7px 9px 5px 7px;\n background-color: rgba(190, 190, 190, 0.75);\n border: #555555 1px solid;\n border-radius: 15px;\n margin: 0;\n position: absolute;\n bottom: 50px;\n left: 50%;\n transform: translate(-50%, 0);\n width: 180px;\n height: 30px;\n pointer-events: auto;\n }\n\n .progressBarBackground {\n width: 100%;\n height: 25px;\n border-radius:10px;\n background-color: rgba(128, 128, 128, 0.75);\n border: #444444 1px solid;\n box-shadow: inset 0 0 10px #333333;\n }\n\n .progressBar {\n height: 25px;\n width: 0px;\n border-radius:10px;\n background-color: rgba(0, 200, 0, 0.75);\n box-shadow: inset 0 0 10px #003300;\n }\n\n `;\n this.progressBarContainerOuter.appendChild(style);\n this.container.appendChild(this.progressBarContainerOuter);\n }\n\n show() {\n this.progressBarContainerOuter.style.display = 'block';\n }\n\n hide() {\n this.progressBarContainerOuter.style.display = 'none';\n }\n\n setProgress(progress) {\n this.progressBar.style.width = progress + '%';\n }\n\n setContainer(container) {\n if (this.container && this.progressBarContainerOuter.parentElement === this.container) {\n this.container.removeChild(this.progressBarContainerOuter);\n }\n if (container) {\n this.container = container;\n this.container.appendChild(this.progressBarContainerOuter);\n this.progressBarContainerOuter.style.zIndex = this.container.style.zIndex + 1;\n }\n }\n\n}\n\nclass InfoPanel {\n\n constructor(container) {\n\n this.container = container || document.body;\n\n this.infoCells = {};\n\n const layout = [\n ['Camera position', 'cameraPosition'],\n ['Camera look-at', 'cameraLookAt'],\n ['Camera up', 'cameraUp'],\n ['Camera mode', 'orthographicCamera'],\n ['Cursor position', 'cursorPosition'],\n ['FPS', 'fps'],\n ['Rendering:', 'renderSplatCount'],\n ['Sort time', 'sortTime'],\n ['Render window', 'renderWindow'],\n ['Focal adjustment', 'focalAdjustment'],\n ['Splat scale', 'splatScale'],\n ['Point cloud mode', 'pointCloudMode']\n ];\n\n this.infoPanelContainer = document.createElement('div');\n const style = document.createElement('style');\n style.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 this.infoPanelContainer.append(style);\n\n this.infoPanel = document.createElement('div');\n this.infoPanel.className = 'infoPanel';\n\n const infoTable = document.createElement('div');\n infoTable.style.display = 'table';\n\n for (let layoutEntry of layout) {\n const row = document.createElement('div');\n row.style.display = 'table-row';\n row.className = 'info-panel-row';\n\n const labelCell = document.createElement('div');\n labelCell.style.display = 'table-cell';\n labelCell.innerHTML = `${layoutEntry[0]}: `;\n labelCell.classList.add('info-panel-cell', 'label-cell');\n\n const spacerCell = document.createElement('div');\n spacerCell.style.display = 'table-cell';\n spacerCell.style.width = '10px';\n spacerCell.innerHTML = ' ';\n spacerCell.className = 'info-panel-cell';\n\n const infoCell = document.createElement('div');\n infoCell.style.display = 'table-cell';\n infoCell.innerHTML = '';\n infoCell.className = 'info-panel-cell';\n\n this.infoCells[layoutEntry[1]] = infoCell;\n\n row.appendChild(labelCell);\n row.appendChild(spacerCell);\n row.appendChild(infoCell);\n\n infoTable.appendChild(row);\n }\n\n this.infoPanel.appendChild(infoTable);\n this.infoPanelContainer.append(this.infoPanel);\n this.infoPanelContainer.style.display = 'none';\n this.container.appendChild(this.infoPanelContainer);\n\n this.visible = false;\n }\n\n update = function(renderDimensions, cameraPosition, cameraLookAtPosition, cameraUp, orthographicCamera,\n meshCursorPosition, currentFPS, splatCount, splatRenderCount,\n splatRenderCountPct, lastSortTime, focalAdjustment, splatScale, pointCloudMode) {\n\n const cameraPosString = `${cameraPosition.x.toFixed(5)}, ${cameraPosition.y.toFixed(5)}, ${cameraPosition.z.toFixed(5)}`;\n if (this.infoCells.cameraPosition.innerHTML !== cameraPosString) {\n this.infoCells.cameraPosition.innerHTML = cameraPosString;\n }\n\n if (cameraLookAtPosition) {\n const cla = cameraLookAtPosition;\n const cameraLookAtString = `${cla.x.toFixed(5)}, ${cla.y.toFixed(5)}, ${cla.z.toFixed(5)}`;\n if (this.infoCells.cameraLookAt.innerHTML !== cameraLookAtString) {\n this.infoCells.cameraLookAt.innerHTML = cameraLookAtString;\n }\n }\n\n const cameraUpString = `${cameraUp.x.toFixed(5)}, ${cameraUp.y.toFixed(5)}, ${cameraUp.z.toFixed(5)}`;\n if (this.infoCells.cameraUp.innerHTML !== cameraUpString) {\n this.infoCells.cameraUp.innerHTML = cameraUpString;\n }\n\n this.infoCells.orthographicCamera.innerHTML = orthographicCamera ? 'Orthographic' : 'Perspective';\n\n if (meshCursorPosition) {\n const cursPos = meshCursorPosition;\n const cursorPosString = `${cursPos.x.toFixed(5)}, ${cursPos.y.toFixed(5)}, ${cursPos.z.toFixed(5)}`;\n this.infoCells.cursorPosition.innerHTML = cursorPosString;\n } else {\n this.infoCells.cursorPosition.innerHTML = 'N/A';\n }\n\n this.infoCells.fps.innerHTML = currentFPS;\n this.infoCells.renderWindow.innerHTML = `${renderDimensions.x} x ${renderDimensions.y}`;\n\n this.infoCells.renderSplatCount.innerHTML =\n `${splatRenderCount} splats out of ${splatCount} (${splatRenderCountPct.toFixed(2)}%)`;\n\n this.infoCells.sortTime.innerHTML = `${lastSortTime.toFixed(3)} ms`;\n this.infoCells.focalAdjustment.innerHTML = `${focalAdjustment.toFixed(3)}`;\n this.infoCells.splatScale.innerHTML = `${splatScale.toFixed(3)}`;\n this.infoCells.pointCloudMode.innerHTML = `${pointCloudMode}`;\n };\n\n setContainer(container) {\n if (this.container && this.infoPanelContainer.parentElement === this.container) {\n this.container.removeChild(this.infoPanelContainer);\n }\n if (container) {\n this.container = container;\n this.container.appendChild(this.infoPanelContainer);\n this.infoPanelContainer.style.zIndex = this.container.style.zIndex + 1;\n }\n }\n\n show() {\n this.infoPanelContainer.style.display = 'block';\n this.visible = true;\n }\n\n hide() {\n this.infoPanelContainer.style.display = 'none';\n this.visible = false;\n }\n\n}\n\nconst _axis = new THREE.Vector3();\n\nclass ArrowHelper extends THREE.Object3D {\n\n constructor(dir = new THREE.Vector3(0, 0, 1), origin = new THREE.Vector3(0, 0, 0), length = 1,\n radius = 0.1, color = 0xffff00, headLength = length * 0.2, headRadius = headLength * 0.2) {\n super();\n\n this.type = 'ArrowHelper';\n\n const lineGeometry = new THREE.CylinderGeometry(radius, radius, length, 32);\n lineGeometry.translate(0, length / 2.0, 0);\n const coneGeometry = new THREE.CylinderGeometry( 0, headRadius, headLength, 32);\n coneGeometry.translate(0, length, 0);\n\n this.position.copy( origin );\n\n this.line = new THREE.Mesh(lineGeometry, new THREE.MeshBasicMaterial({color: color, toneMapped: false}));\n this.line.matrixAutoUpdate = false;\n this.add(this.line);\n\n this.cone = new THREE.Mesh(coneGeometry, new THREE.MeshBasicMaterial({color: color, toneMapped: false}));\n this.cone.matrixAutoUpdate = false;\n this.add(this.cone);\n\n this.setDirection(dir);\n }\n\n setDirection( dir ) {\n if (dir.y > 0.99999) {\n this.quaternion.set(0, 0, 0, 1);\n } else if (dir.y < - 0.99999) {\n this.quaternion.set(1, 0, 0, 0);\n } else {\n _axis.set(dir.z, 0, -dir.x).normalize();\n const radians = Math.acos(dir.y);\n this.quaternion.setFromAxisAngle(_axis, radians);\n }\n }\n\n setColor( color ) {\n this.line.material.color.set(color);\n this.cone.material.color.set(color);\n }\n\n copy(source) {\n super.copy(source, false);\n this.line.copy(source.line);\n this.cone.copy(source.cone);\n return this;\n }\n\n dispose() {\n this.line.geometry.dispose();\n this.line.material.dispose();\n this.cone.geometry.dispose();\n this.cone.material.dispose();\n }\n\n}\n\nclass SceneHelper {\n\n constructor(threeScene) {\n this.threeScene = threeScene;\n this.splatRenderTarget = null;\n this.renderTargetCopyQuad = null;\n this.renderTargetCopyCamera = null;\n this.meshCursor = null;\n this.focusMarker = null;\n this.controlPlane = null;\n this.debugRoot = null;\n this.secondaryDebugRoot = null;\n }\n\n updateSplatRenderTargetForRenderDimensions(width, height) {\n this.destroySplatRendertarget();\n this.splatRenderTarget = new THREE.WebGLRenderTarget(width, height, {\n format: THREE.RGBAFormat,\n stencilBuffer: false,\n depthBuffer: true,\n\n });\n this.splatRenderTarget.depthTexture = new THREE.DepthTexture(width, height);\n this.splatRenderTarget.depthTexture.format = THREE.DepthFormat;\n this.splatRenderTarget.depthTexture.type = THREE.UnsignedIntType;\n }\n\n destroySplatRendertarget() {\n if (this.splatRenderTarget) {\n this.splatRenderTarget = null;\n }\n }\n\n setupRenderTargetCopyObjects() {\n const uniforms = {\n 'sourceColorTexture': {\n 'type': 't',\n 'value': null\n },\n 'sourceDepthTexture': {\n 'type': 't',\n 'value': null\n },\n };\n const renderTargetCopyMaterial = new THREE.ShaderMaterial({\n vertexShader: `\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = vec4( position.xy, 0.0, 1.0 ); \n }\n `,\n fragmentShader: `\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 uniforms: uniforms,\n depthWrite: false,\n depthTest: false,\n transparent: true,\n blending: THREE.CustomBlending,\n blendSrc: THREE.SrcAlphaFactor,\n blendSrcAlpha: THREE.SrcAlphaFactor,\n blendDst: THREE.OneMinusSrcAlphaFactor,\n blendDstAlpha: THREE.OneMinusSrcAlphaFactor\n });\n renderTargetCopyMaterial.extensions.fragDepth = true;\n this.renderTargetCopyQuad = new THREE.Mesh(new THREE.PlaneGeometry(2, 2), renderTargetCopyMaterial);\n this.renderTargetCopyCamera = new THREE.OrthographicCamera(-1, 1, 1, -1, 0, 1);\n }\n\n destroyRenderTargetCopyObjects() {\n if (this.renderTargetCopyQuad) {\n disposeAllMeshes(this.renderTargetCopyQuad);\n this.renderTargetCopyQuad = null;\n }\n }\n\n setupMeshCursor() {\n if (!this.meshCursor) {\n const coneGeometry = new THREE.ConeGeometry(0.5, 1.5, 32);\n const coneMaterial = new THREE.MeshBasicMaterial({color: 0xFFFFFF});\n\n const downArrow = new THREE.Mesh(coneGeometry, coneMaterial);\n downArrow.rotation.set(0, 0, Math.PI);\n downArrow.position.set(0, 1, 0);\n const upArrow = new THREE.Mesh(coneGeometry, coneMaterial);\n upArrow.position.set(0, -1, 0);\n const leftArrow = new THREE.Mesh(coneGeometry, coneMaterial);\n leftArrow.rotation.set(0, 0, Math.PI / 2.0);\n leftArrow.position.set(1, 0, 0);\n const rightArrow = new THREE.Mesh(coneGeometry, coneMaterial);\n rightArrow.rotation.set(0, 0, -Math.PI / 2.0);\n rightArrow.position.set(-1, 0, 0);\n\n this.meshCursor = new THREE.Object3D();\n this.meshCursor.add(downArrow);\n this.meshCursor.add(upArrow);\n this.meshCursor.add(leftArrow);\n this.meshCursor.add(rightArrow);\n this.meshCursor.scale.set(0.1, 0.1, 0.1);\n this.threeScene.add(this.meshCursor);\n this.meshCursor.visible = false;\n }\n }\n\n destroyMeshCursor() {\n if (this.meshCursor) {\n disposeAllMeshes(this.meshCursor);\n this.threeScene.remove(this.meshCursor);\n this.meshCursor = null;\n }\n }\n\n setMeshCursorVisibility(visible) {\n this.meshCursor.visible = visible;\n }\n\n getMeschCursorVisibility() {\n return this.meshCursor.visible;\n }\n\n setMeshCursorPosition(position) {\n this.meshCursor.position.copy(position);\n }\n\n positionAndOrientMeshCursor(position, camera) {\n this.meshCursor.position.copy(position);\n this.meshCursor.up.copy(camera.up);\n this.meshCursor.lookAt(camera.position);\n }\n\n setupFocusMarker() {\n if (!this.focusMarker) {\n const sphereGeometry = new THREE.SphereGeometry(.5, 32, 32);\n const focusMarkerMaterial = SceneHelper.buildFocusMarkerMaterial();\n focusMarkerMaterial.depthTest = false;\n focusMarkerMaterial.depthWrite = false;\n focusMarkerMaterial.transparent = true;\n this.focusMarker = new THREE.Mesh(sphereGeometry, focusMarkerMaterial);\n }\n }\n\n destroyFocusMarker() {\n if (this.focusMarker) {\n disposeAllMeshes(this.focusMarker);\n this.focusMarker = null;\n }\n }\n\n updateFocusMarker = function() {\n\n const tempPosition = new THREE.Vector3();\n const tempMatrix = new THREE.Matrix4();\n const toCamera = new THREE.Vector3();\n\n return function(position, camera, viewport) {\n tempMatrix.copy(camera.matrixWorld).invert();\n tempPosition.copy(position).applyMatrix4(tempMatrix);\n tempPosition.normalize().multiplyScalar(10);\n tempPosition.applyMatrix4(camera.matrixWorld);\n toCamera.copy(camera.position).sub(position);\n const toCameraDistance = toCamera.length();\n this.focusMarker.position.copy(position);\n this.focusMarker.scale.set(toCameraDistance, toCameraDistance, toCameraDistance);\n this.focusMarker.material.uniforms.realFocusPosition.value.copy(position);\n this.focusMarker.material.uniforms.viewport.value.copy(viewport);\n this.focusMarker.material.uniformsNeedUpdate = true;\n };\n\n }();\n\n setFocusMarkerVisibility(visible) {\n this.focusMarker.visible = visible;\n }\n\n setFocusMarkerOpacity(opacity) {\n this.focusMarker.material.uniforms.opacity.value = opacity;\n this.focusMarker.material.uniformsNeedUpdate = true;\n }\n\n getFocusMarkerOpacity() {\n return this.focusMarker.material.uniforms.opacity.value;\n }\n\n setupControlPlane() {\n if (!this.controlPlane) {\n const planeGeometry = new THREE.PlaneGeometry(1, 1);\n planeGeometry.rotateX(-Math.PI / 2);\n const planeMaterial = new THREE.MeshBasicMaterial({color: 0xffffff});\n planeMaterial.transparent = true;\n planeMaterial.opacity = 0.6;\n planeMaterial.depthTest = false;\n planeMaterial.depthWrite = false;\n planeMaterial.side = THREE.DoubleSide;\n const planeMesh = new THREE.Mesh(planeGeometry, planeMaterial);\n\n const arrowDir = new THREE.Vector3(0, 1, 0);\n arrowDir.normalize();\n const arrowOrigin = new THREE.Vector3(0, 0, 0);\n const arrowLength = 0.5;\n const arrowRadius = 0.01;\n const arrowColor = 0x00dd00;\n const arrowHelper = new ArrowHelper(arrowDir, arrowOrigin, arrowLength, arrowRadius, arrowColor, 0.1, 0.03);\n\n this.controlPlane = new THREE.Object3D();\n this.controlPlane.add(planeMesh);\n this.controlPlane.add(arrowHelper);\n }\n }\n\n destroyControlPlane() {\n if (this.controlPlane) {\n disposeAllMeshes(this.controlPlane);\n this.controlPlane = null;\n }\n }\n\n setControlPlaneVisibility(visible) {\n this.controlPlane.visible = visible;\n }\n\n positionAndOrientControlPlane = function() {\n\n const tempQuaternion = new THREE.Quaternion();\n const defaultUp = new THREE.Vector3(0, 1, 0);\n\n return function(position, up) {\n tempQuaternion.setFromUnitVectors(defaultUp, up);\n this.controlPlane.position.copy(position);\n this.controlPlane.quaternion.copy(tempQuaternion);\n };\n\n }();\n\n addDebugMeshes() {\n this.debugRoot = this.createDebugMeshes();\n this.secondaryDebugRoot = this.createSecondaryDebugMeshes();\n this.threeScene.add(this.debugRoot);\n this.threeScene.add(this.secondaryDebugRoot);\n }\n\n destroyDebugMeshes() {\n for (let debugRoot of [this.debugRoot, this.secondaryDebugRoot]) {\n if (debugRoot) {\n disposeAllMeshes(debugRoot);\n this.threeScene.remove(debugRoot);\n }\n }\n this.debugRoot = null;\n this.secondaryDebugRoot = null;\n }\n\n createDebugMeshes(renderOrder) {\n const sphereGeometry = new THREE.SphereGeometry(1, 32, 32);\n const debugMeshRoot = new THREE.Object3D();\n\n const createMesh = (color, position) => {\n let sphereMesh = new THREE.Mesh(sphereGeometry, SceneHelper.buildDebugMaterial(color));\n sphereMesh.renderOrder = renderOrder;\n debugMeshRoot.add(sphereMesh);\n sphereMesh.position.fromArray(position);\n };\n\n createMesh(0xff0000, [-50, 0, 0]);\n createMesh(0xff0000, [50, 0, 0]);\n createMesh(0x00ff00, [0, 0, -50]);\n createMesh(0x00ff00, [0, 0, 50]);\n createMesh(0xffaa00, [5, 0, 5]);\n\n return debugMeshRoot;\n }\n\n createSecondaryDebugMeshes(renderOrder) {\n const boxGeometry = new THREE.BoxGeometry(3, 3, 3);\n const debugMeshRoot = new THREE.Object3D();\n\n let boxColor = 0xBBBBBB;\n const createMesh = (position) => {\n let boxMesh = new THREE.Mesh(boxGeometry, SceneHelper.buildDebugMaterial(boxColor));\n boxMesh.renderOrder = renderOrder;\n debugMeshRoot.add(boxMesh);\n boxMesh.position.fromArray(position);\n };\n\n let separation = 10;\n createMesh([-separation, 0, -separation]);\n createMesh([-separation, 0, separation]);\n createMesh([separation, 0, -separation]);\n createMesh([separation, 0, separation]);\n\n return debugMeshRoot;\n }\n\n static buildDebugMaterial(color) {\n const 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 const 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 const uniforms = {\n 'color': {\n 'type': 'v3',\n 'value': new THREE.Color(color)\n },\n };\n\n const material = new THREE.ShaderMaterial({\n uniforms: uniforms,\n vertexShader: vertexShaderSource,\n fragmentShader: fragmentShaderSource,\n transparent: false,\n depthTest: true,\n depthWrite: true,\n side: THREE.FrontSide\n });\n material.extensions.fragDepth = true;\n\n return material;\n }\n\n static buildFocusMarkerMaterial(color) {\n const 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 const 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 const uniforms = {\n 'color': {\n 'type': 'v3',\n 'value': new THREE.Color(color)\n },\n 'realFocusPosition': {\n 'type': 'v3',\n 'value': new THREE.Vector3()\n },\n 'viewport': {\n 'type': 'v2',\n 'value': new THREE.Vector2()\n },\n 'opacity': {\n 'value': 0.0\n }\n };\n\n const material = new THREE.ShaderMaterial({\n uniforms: uniforms,\n vertexShader: vertexShaderSource,\n fragmentShader: fragmentShaderSource,\n transparent: true,\n depthTest: false,\n depthWrite: false,\n side: THREE.FrontSide\n });\n\n return material;\n }\n\n dispose() {\n this.destroyMeshCursor();\n this.destroyFocusMarker();\n this.destroyDebugMeshes();\n this.destroyControlPlane();\n this.destroyRenderTargetCopyObjects();\n this.destroySplatRendertarget();\n }\n}\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\nclass Ray {\n\n constructor(origin = new THREE.Vector3(), direction = new THREE.Vector3()) {\n this.origin = new THREE.Vector3();\n this.direction = new THREE.Vector3();\n this.setParameters(origin, direction);\n }\n\n setParameters(origin, direction) {\n this.origin.copy(origin);\n this.direction.copy(direction).normalize();\n }\n\n boxContainsPoint(box, point, epsilon) {\n return point.x < box.min.x - epsilon || point.x > box.max.x + epsilon ||\n point.y < box.min.y - epsilon || point.y > box.max.y + epsilon ||\n point.z < box.min.z - epsilon || point.z > box.max.z + epsilon ? false : true;\n }\n\n intersectBox = function() {\n\n const planeIntersectionPoint = new THREE.Vector3();\n const planeIntersectionPointArray = [];\n const originArray = [];\n const directionArray = [];\n\n return function(box, outHit) {\n\n originArray[0] = this.origin.x;\n originArray[1] = this.origin.y;\n originArray[2] = this.origin.z;\n directionArray[0] = this.direction.x;\n directionArray[1] = this.direction.y;\n directionArray[2] = this.direction.z;\n\n if (this.boxContainsPoint(box, this.origin, 0.0001)) {\n if (outHit) {\n outHit.origin.copy(this.origin);\n outHit.normal.set(0, 0, 0);\n outHit.distance = -1;\n }\n return true;\n }\n\n for (let i = 0; i < 3; i++) {\n if (directionArray[i] == 0.0) continue;\n\n const hitNormal = i == 0 ? VectorRight : i == 1 ? VectorUp : VectorBackward;\n const extremeVec = directionArray[i] < 0 ? box.max : box.min;\n let multiplier = -Math.sign(directionArray[i]);\n planeIntersectionPointArray[0] = i == 0 ? extremeVec.x : i == 1 ? extremeVec.y : extremeVec.z;\n let toSide = planeIntersectionPointArray[0] - originArray[i];\n\n if (toSide * multiplier < 0) {\n const idx1 = (i + 1) % 3;\n const idx2 = (i + 2) % 3;\n planeIntersectionPointArray[2] = directionArray[idx1] / directionArray[i] * toSide + originArray[idx1];\n planeIntersectionPointArray[1] = directionArray[idx2] / directionArray[i] * toSide + originArray[idx2];\n planeIntersectionPoint.set(planeIntersectionPointArray[i],\n planeIntersectionPointArray[idx2],\n planeIntersectionPointArray[idx1]);\n if (this.boxContainsPoint(box, planeIntersectionPoint, 0.0001)) {\n if (outHit) {\n outHit.origin.copy(planeIntersectionPoint);\n outHit.normal.copy(hitNormal).multiplyScalar(multiplier);\n outHit.distance = planeIntersectionPoint.sub(this.origin).length();\n }\n return true;\n }\n }\n }\n\n return false;\n };\n\n }();\n\n intersectSphere = function() {\n\n const toSphereCenterVec = new THREE.Vector3();\n\n return function(center, radius, outHit) {\n toSphereCenterVec.copy(center).sub(this.origin);\n const toClosestApproach = toSphereCenterVec.dot(this.direction);\n const toClosestApproachSq = toClosestApproach * toClosestApproach;\n const toSphereCenterSq = toSphereCenterVec.dot(toSphereCenterVec);\n const diffSq = toSphereCenterSq - toClosestApproachSq;\n const radiusSq = radius * radius;\n\n if (diffSq > radiusSq) return false;\n\n const thc = Math.sqrt(radiusSq - diffSq);\n const t0 = toClosestApproach - thc;\n const t1 = toClosestApproach + thc;\n\n if (t1 < 0) return false;\n let t = t0 < 0 ? t1 : t0;\n\n if (outHit) {\n outHit.origin.copy(this.origin).addScaledVector(this.direction, t);\n outHit.normal.copy(outHit.origin).sub(center).normalize();\n outHit.distance = t;\n }\n return true;\n };\n\n }();\n}\n\nclass Hit {\n\n constructor() {\n this.origin = new THREE.Vector3();\n this.normal = new THREE.Vector3();\n this.distance = 0;\n this.splatIndex = 0;\n }\n\n set(origin, normal, distance, splatIndex) {\n this.origin.copy(origin);\n this.normal.copy(normal);\n this.distance = distance;\n this.splatIndex = splatIndex;\n }\n\n clone() {\n const hitClone = new Hit();\n hitClone.origin.copy(this.origin);\n hitClone.normal.copy(this.normal);\n hitClone.distance = this.distance;\n hitClone.splatIndex = this.splatIndex;\n return hitClone;\n }\n\n}\n\nconst SplatRenderMode = {\n ThreeD: 0,\n TwoD: 1\n};\n\nclass Raycaster {\n\n constructor(origin, direction, raycastAgainstTrueSplatEllipsoid = false) {\n this.ray = new Ray(origin, direction);\n this.raycastAgainstTrueSplatEllipsoid = raycastAgainstTrueSplatEllipsoid;\n }\n\n setFromCameraAndScreenPosition = function() {\n\n const ndcCoords = new THREE.Vector2();\n\n return function(camera, screenPosition, screenDimensions) {\n ndcCoords.x = screenPosition.x / screenDimensions.x * 2.0 - 1.0;\n ndcCoords.y = (screenDimensions.y - screenPosition.y) / screenDimensions.y * 2.0 - 1.0;\n if (camera.isPerspectiveCamera) {\n this.ray.origin.setFromMatrixPosition(camera.matrixWorld);\n this.ray.direction.set(ndcCoords.x, ndcCoords.y, 0.5 ).unproject(camera).sub(this.ray.origin).normalize();\n this.camera = camera;\n } else if (camera.isOrthographicCamera) {\n this.ray.origin.set(ndcCoords.x, ndcCoords.y,\n (camera.near + camera.far) / (camera.near - camera.far)).unproject(camera);\n this.ray.direction.set(0, 0, -1).transformDirection(camera.matrixWorld);\n this.camera = camera;\n } else {\n throw new Error('Raycaster::setFromCameraAndScreenPosition() -> Unsupported camera type');\n }\n };\n\n }();\n\n intersectSplatMesh = function() {\n\n const toLocal = new THREE.Matrix4();\n const fromLocal = new THREE.Matrix4();\n const sceneTransform = new THREE.Matrix4();\n const localRay = new Ray();\n const tempPoint = new THREE.Vector3();\n\n return function(splatMesh, outHits = []) {\n const splatTree = splatMesh.getSplatTree();\n\n if (!splatTree) return;\n\n for (let s = 0; s < splatTree.subTrees.length; s++) {\n const subTree = splatTree.subTrees[s];\n\n fromLocal.copy(splatMesh.matrixWorld);\n if (splatMesh.dynamicMode) {\n splatMesh.getSceneTransform(s, sceneTransform);\n fromLocal.multiply(sceneTransform);\n }\n toLocal.copy(fromLocal).invert();\n\n localRay.origin.copy(this.ray.origin).applyMatrix4(toLocal);\n localRay.direction.copy(this.ray.origin).add(this.ray.direction);\n localRay.direction.applyMatrix4(toLocal).sub(localRay.origin).normalize();\n\n const outHitsForSubTree = [];\n if (subTree.rootNode) {\n this.castRayAtSplatTreeNode(localRay, splatTree, subTree.rootNode, outHitsForSubTree);\n }\n\n outHitsForSubTree.forEach((hit) => {\n hit.origin.applyMatrix4(fromLocal);\n hit.normal.applyMatrix4(fromLocal).normalize();\n hit.distance = tempPoint.copy(hit.origin).sub(this.ray.origin).length();\n });\n\n outHits.push(...outHitsForSubTree);\n }\n\n outHits.sort((a, b) => {\n if (a.distance > b.distance) return 1;\n else return -1;\n });\n\n return outHits;\n };\n\n }();\n\n castRayAtSplatTreeNode = function() {\n\n const tempColor = new THREE.Vector4();\n const tempCenter = new THREE.Vector3();\n const tempScale = new THREE.Vector3();\n const tempRotation = new THREE.Quaternion();\n const tempHit = new Hit();\n const scaleEpsilon = 0.0000001;\n\n const origin = new THREE.Vector3(0, 0, 0);\n const uniformScaleMatrix = new THREE.Matrix4();\n const scaleMatrix = new THREE.Matrix4();\n const rotationMatrix = new THREE.Matrix4();\n const toSphereSpace = new THREE.Matrix4();\n const fromSphereSpace = new THREE.Matrix4();\n const tempRay = new Ray();\n\n return function(ray, splatTree, node, outHits = []) {\n if (!ray.intersectBox(node.boundingBox)) {\n return;\n }\n if (node.data && node.data.indexes && node.data.indexes.length > 0) {\n for (let i = 0; i < node.data.indexes.length; i++) {\n\n const splatGlobalIndex = node.data.indexes[i];\n const splatSceneIndex = splatTree.splatMesh.getSceneIndexForSplat(splatGlobalIndex);\n const splatScene = splatTree.splatMesh.getScene(splatSceneIndex);\n if (!splatScene.visible) continue;\n\n splatTree.splatMesh.getSplatColor(splatGlobalIndex, tempColor);\n splatTree.splatMesh.getSplatCenter(splatGlobalIndex, tempCenter);\n splatTree.splatMesh.getSplatScaleAndRotation(splatGlobalIndex, tempScale, tempRotation);\n\n if (tempScale.x <= scaleEpsilon || tempScale.y <= scaleEpsilon ||\n splatTree.splatMesh.splatRenderMode === SplatRenderMode.ThreeD && tempScale.z <= scaleEpsilon) {\n continue;\n }\n\n if (!this.raycastAgainstTrueSplatEllipsoid) {\n let radius = (tempScale.x + tempScale.y);\n let componentCount = 2;\n if (splatTree.splatMesh.splatRenderMode === SplatRenderMode.ThreeD) {\n radius += tempScale.z;\n componentCount = 3;\n }\n radius = radius / componentCount;\n if (ray.intersectSphere(tempCenter, radius, tempHit)) {\n const hitClone = tempHit.clone();\n hitClone.splatIndex = splatGlobalIndex;\n outHits.push(hitClone);\n }\n } else {\n scaleMatrix.makeScale(tempScale.x, tempScale.y, tempScale.z);\n rotationMatrix.makeRotationFromQuaternion(tempRotation);\n const uniformScale = Math.log10(tempColor.w) * 2.0;\n uniformScaleMatrix.makeScale(uniformScale, uniformScale, uniformScale);\n fromSphereSpace.copy(uniformScaleMatrix).multiply(rotationMatrix).multiply(scaleMatrix);\n toSphereSpace.copy(fromSphereSpace).invert();\n tempRay.origin.copy(ray.origin).sub(tempCenter).applyMatrix4(toSphereSpace);\n tempRay.direction.copy(ray.origin).add(ray.direction).sub(tempCenter);\n tempRay.direction.applyMatrix4(toSphereSpace).sub(tempRay.origin).normalize();\n if (tempRay.intersectSphere(origin, 1.0, tempHit)) {\n const hitClone = tempHit.clone();\n hitClone.splatIndex = splatGlobalIndex;\n hitClone.origin.applyMatrix4(fromSphereSpace).add(tempCenter);\n outHits.push(hitClone);\n }\n }\n }\n }\n if (node.children && node.children.length > 0) {\n for (let child of node.children) {\n this.castRayAtSplatTreeNode(ray, splatTree, child, outHits);\n }\n }\n return outHits;\n };\n\n }();\n}\n\nclass SplatMaterial {\n\n static buildVertexShaderBase(dynamicMode = false, enableOptionalEffects = false, maxSphericalHarmonicsDegree = 0, customVars = '') {\n let 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 if (enableOptionalEffects) {\n vertexShaderSource += `\n uniform float sceneOpacity[${Constants.MaxScenes}];\n uniform int sceneVisibility[${Constants.MaxScenes}];\n `;\n }\n\n if (dynamicMode) {\n vertexShaderSource += `\n uniform highp mat4 transforms[${Constants.MaxScenes}];\n `;\n }\n\n vertexShaderSource += `\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 if (enableOptionalEffects) {\n vertexShaderSource += `\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 }\n\n if (dynamicMode) {\n vertexShaderSource += `\n mat4 transform = transforms[sceneIndex];\n mat4 transformModelViewMatrix = viewMatrix * transform;\n `;\n } else {\n vertexShaderSource += `mat4 transformModelViewMatrix = modelViewMatrix;`;\n }\n\n vertexShaderSource += `\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 // Proceed to sampling and rendering 1st degree spherical harmonics\n if (maxSphericalHarmonicsDegree >= 1) {\n\n vertexShaderSource += ` \n if (sphericalHarmonicsDegree >= 1) {\n `;\n\n if (dynamicMode) {\n vertexShaderSource += `\n vec3 worldViewDir = normalize(splatCenter - vec3(inverse(transform) * vec4(cameraPosition, 1.0)));\n `;\n } else {\n vertexShaderSource += `\n vec3 worldViewDir = normalize(splatCenter - cameraPosition);\n `;\n }\n\n vertexShaderSource += `\n vec3 sh1;\n vec3 sh2;\n vec3 sh3;\n `;\n\n if (maxSphericalHarmonicsDegree >= 2) {\n vertexShaderSource += `\n vec3 sh4;\n vec3 sh5;\n vec3 sh6;\n vec3 sh7;\n vec3 sh8;\n `;\n }\n\n // Determining how to sample spherical harmonics textures to get the coefficients for calculations for a given degree\n // depends on how many total degrees (maxSphericalHarmonicsDegree) are present in the textures. This is because that\n // number affects how they are packed in the textures, and therefore the offset & stride required to access them.\n\n // Sample spherical harmonics textures with 1 degree worth of data for 1st degree calculations, and store in sh1, sh2, and sh3\n if (maxSphericalHarmonicsDegree === 1) {\n vertexShaderSource += `\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 // Sample spherical harmonics textures with 2 degrees worth of data for 1st degree calculations, and store in sh1, sh2, and sh3\n } else if (maxSphericalHarmonicsDegree === 2) {\n vertexShaderSource += `\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 }\n\n // Perform 1st degree spherical harmonics calculations\n vertexShaderSource += `\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 // Proceed to sampling and rendering 2nd degree spherical harmonics\n if (maxSphericalHarmonicsDegree >= 2) {\n\n vertexShaderSource += `\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 // Sample spherical harmonics textures with 2 degrees worth of data for 2nd degree calculations,\n // and store in sh4, sh5, sh6, sh7, and sh8\n if (maxSphericalHarmonicsDegree === 2) {\n vertexShaderSource += `\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 }\n\n // Perform 2nd degree spherical harmonics calculations\n vertexShaderSource += `\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 }\n\n vertexShaderSource += `\n\n vColor.rgb = clamp(vColor.rgb, vec3(0.), vec3(1.));\n\n }\n\n `;\n }\n\n return vertexShaderSource;\n }\n\n static getVertexShaderFadeIn() {\n return `\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 }\n\n static getUniforms(dynamicMode = false, enableOptionalEffects = false, maxSphericalHarmonicsDegree = 0,\n splatScale = 1.0, pointCloudModeEnabled = false) {\n\n const uniforms = {\n 'sceneCenter': {\n 'type': 'v3',\n 'value': new THREE.Vector3()\n },\n 'fadeInComplete': {\n 'type': 'i',\n 'value': 0\n },\n 'orthographicMode': {\n 'type': 'i',\n 'value': 0\n },\n 'visibleRegionFadeStartRadius': {\n 'type': 'f',\n 'value': 0.0\n },\n 'visibleRegionRadius': {\n 'type': 'f',\n 'value': 0.0\n },\n 'currentTime': {\n 'type': 'f',\n 'value': 0.0\n },\n 'firstRenderTime': {\n 'type': 'f',\n 'value': 0.0\n },\n 'centersColorsTexture': {\n 'type': 't',\n 'value': null\n },\n 'sphericalHarmonicsTexture': {\n 'type': 't',\n 'value': null\n },\n 'sphericalHarmonicsTextureR': {\n 'type': 't',\n 'value': null\n },\n 'sphericalHarmonicsTextureG': {\n 'type': 't',\n 'value': null\n },\n 'sphericalHarmonicsTextureB': {\n 'type': 't',\n 'value': null\n },\n 'sphericalHarmonics8BitCompressionRangeMin': {\n 'type': 'f',\n 'value': []\n },\n 'sphericalHarmonics8BitCompressionRangeMax': {\n 'type': 'f',\n 'value': []\n },\n 'focal': {\n 'type': 'v2',\n 'value': new THREE.Vector2()\n },\n 'orthoZoom': {\n 'type': 'f',\n 'value': 1.0\n },\n 'inverseFocalAdjustment': {\n 'type': 'f',\n 'value': 1.0\n },\n 'viewport': {\n 'type': 'v2',\n 'value': new THREE.Vector2()\n },\n 'basisViewport': {\n 'type': 'v2',\n 'value': new THREE.Vector2()\n },\n 'debugColor': {\n 'type': 'v3',\n 'value': new THREE.Color()\n },\n 'centersColorsTextureSize': {\n 'type': 'v2',\n 'value': new THREE.Vector2(1024, 1024)\n },\n 'sphericalHarmonicsDegree': {\n 'type': 'i',\n 'value': maxSphericalHarmonicsDegree\n },\n 'sphericalHarmonicsTextureSize': {\n 'type': 'v2',\n 'value': new THREE.Vector2(1024, 1024)\n },\n 'sphericalHarmonics8BitMode': {\n 'type': 'i',\n 'value': 0\n },\n 'sphericalHarmonicsMultiTextureMode': {\n 'type': 'i',\n 'value': 0\n },\n 'splatScale': {\n 'type': 'f',\n 'value': splatScale\n },\n 'pointCloudModeEnabled': {\n 'type': 'i',\n 'value': pointCloudModeEnabled ? 1 : 0\n },\n 'sceneIndexesTexture': {\n 'type': 't',\n 'value': null\n },\n 'sceneIndexesTextureSize': {\n 'type': 'v2',\n 'value': new THREE.Vector2(1024, 1024)\n },\n 'sceneCount': {\n 'type': 'i',\n 'value': 1\n }\n };\n for (let i = 0; i < Constants.MaxScenes; i++) {\n uniforms.sphericalHarmonics8BitCompressionRangeMin.value.push(-Constants.SphericalHarmonics8BitCompressionRange / 2.0);\n uniforms.sphericalHarmonics8BitCompressionRangeMax.value.push(Constants.SphericalHarmonics8BitCompressionRange / 2.0);\n }\n\n if (enableOptionalEffects) {\n const sceneOpacity = [];\n for (let i = 0; i < Constants.MaxScenes; i++) {\n sceneOpacity.push(1.0);\n }\n uniforms['sceneOpacity'] ={\n 'type': 'f',\n 'value': sceneOpacity\n };\n\n const sceneVisibility = [];\n for (let i = 0; i < Constants.MaxScenes; i++) {\n sceneVisibility.push(1);\n }\n uniforms['sceneVisibility'] ={\n 'type': 'i',\n 'value': sceneVisibility\n };\n }\n\n if (dynamicMode) {\n const transformMatrices = [];\n for (let i = 0; i < Constants.MaxScenes; i++) {\n transformMatrices.push(new THREE.Matrix4());\n }\n uniforms['transforms'] = {\n 'type': 'mat4',\n 'value': transformMatrices\n };\n }\n\n return uniforms;\n }\n\n}\n\nclass SplatMaterial3D {\n\n /**\n * Build the Three.js material that is used to render the splats.\n * @param {number} dynamicMode If true, it means the scene geometry represented by this splat mesh is not stationary or\n * that the splat count might change\n * @param {boolean} enableOptionalEffects When true, allows for usage of extra properties and attributes in the shader for effects\n * such as opacity adjustment. Default is false for performance reasons.\n * @param {boolean} antialiased If true, calculate compensation factor to deal with gaussians being rendered at a significantly\n * different resolution than that of their training\n * @param {number} maxScreenSpaceSplatSize The maximum clip space splat size\n * @param {number} splatScale Value by which all splats are scaled in screen-space (default is 1.0)\n * @param {number} pointCloudModeEnabled Render all splats as screen-space circles\n * @param {number} maxSphericalHarmonicsDegree Degree of spherical harmonics to utilize in rendering splats\n * @return {THREE.ShaderMaterial}\n */\n static build(dynamicMode = false, enableOptionalEffects = false, antialiased = false, maxScreenSpaceSplatSize = 2048,\n splatScale = 1.0, pointCloudModeEnabled = false, maxSphericalHarmonicsDegree = 0, kernel2DSize = 0.3) {\n\n const 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 let vertexShaderSource = SplatMaterial.buildVertexShaderBase(dynamicMode, enableOptionalEffects,\n maxSphericalHarmonicsDegree, customVertexVars);\n vertexShaderSource += SplatMaterial3D.buildVertexShaderProjection(antialiased, enableOptionalEffects,\n maxScreenSpaceSplatSize, kernel2DSize);\n const fragmentShaderSource = SplatMaterial3D.buildFragmentShader();\n\n const uniforms = SplatMaterial.getUniforms(dynamicMode, enableOptionalEffects,\n maxSphericalHarmonicsDegree, splatScale, pointCloudModeEnabled);\n\n uniforms['covariancesTextureSize'] = {\n 'type': 'v2',\n 'value': new THREE.Vector2(1024, 1024)\n };\n uniforms['covariancesTexture'] = {\n 'type': 't',\n 'value': null\n };\n uniforms['covariancesTextureHalfFloat'] = {\n 'type': 't',\n 'value': null\n };\n uniforms['covariancesAreHalfFloat'] = {\n 'type': 'i',\n 'value': 0\n };\n\n const material = new THREE.ShaderMaterial({\n uniforms: uniforms,\n vertexShader: vertexShaderSource,\n fragmentShader: fragmentShaderSource,\n transparent: true,\n alphaTest: 1.0,\n blending: THREE.NormalBlending,\n depthTest: true,\n depthWrite: false,\n side: THREE.DoubleSide\n });\n\n return material;\n }\n\n static buildVertexShaderProjection(antialiased, enableOptionalEffects, maxScreenSpaceSplatSize, kernel2DSize) {\n let 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 if (antialiased) {\n vertexShaderSource += `\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 } else {\n vertexShaderSource += `\n cov2Dm[0][0] += ${kernel2DSize};\n cov2Dm[1][1] += ${kernel2DSize};\n `;\n }\n\n vertexShaderSource += `\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(maxScreenSpaceSplatSize)}.0);\n vec2 basisVector2 = eigenVector2 * splatScale * min(sqrt8 * sqrt(eigenValue2), ${parseInt(maxScreenSpaceSplatSize)}.0);\n `;\n\n if (enableOptionalEffects) {\n vertexShaderSource += `\n vColor.a *= splatOpacityFromScene;\n `;\n }\n\n vertexShaderSource += `\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 vertexShaderSource += SplatMaterial.getVertexShaderFadeIn();\n vertexShaderSource += `}`;\n\n return vertexShaderSource;\n }\n\n static buildFragmentShader() {\n let 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 fragmentShaderSource += `\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 return fragmentShaderSource;\n }\n\n}\n\nclass SplatMaterial2D {\n\n /**\n * Build the Three.js material that is used to render the splats.\n * @param {number} dynamicMode If true, it means the scene geometry represented by this splat mesh is not stationary or\n * that the splat count might change\n * @param {boolean} enableOptionalEffects When true, allows for usage of extra properties and attributes in the shader for effects\n * such as opacity adjustment. Default is false for performance reasons.\n * @param {number} splatScale Value by which all splats are scaled in screen-space (default is 1.0)\n * @param {number} pointCloudModeEnabled Render all splats as screen-space circles\n * @param {number} maxSphericalHarmonicsDegree Degree of spherical harmonics to utilize in rendering splats\n * @return {THREE.ShaderMaterial}\n */\n static build(dynamicMode = false, enableOptionalEffects = false, splatScale = 1.0,\n pointCloudModeEnabled = false, maxSphericalHarmonicsDegree = 0) {\n\n const 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 let vertexShaderSource = SplatMaterial.buildVertexShaderBase(dynamicMode, enableOptionalEffects,\n maxSphericalHarmonicsDegree, customVertexVars);\n vertexShaderSource += SplatMaterial2D.buildVertexShaderProjection();\n const fragmentShaderSource = SplatMaterial2D.buildFragmentShader();\n\n const uniforms = SplatMaterial.getUniforms(dynamicMode, enableOptionalEffects,\n maxSphericalHarmonicsDegree, splatScale, pointCloudModeEnabled);\n\n uniforms['scaleRotationsTexture'] = {\n 'type': 't',\n 'value': null\n };\n uniforms['scaleRotationsTextureSize'] = {\n 'type': 'v2',\n 'value': new THREE.Vector2(1024, 1024)\n };\n\n const material = new THREE.ShaderMaterial({\n uniforms: uniforms,\n vertexShader: vertexShaderSource,\n fragmentShader: fragmentShaderSource,\n transparent: true,\n alphaTest: 1.0,\n blending: THREE.NormalBlending,\n depthTest: true,\n depthWrite: false,\n side: THREE.DoubleSide\n });\n\n return material;\n }\n\n static buildVertexShaderProjection() {\n\n // Original CUDA code for calculating splat-to-screen transformation, for reference\n /*\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 // Compute a 2D-to-2D mapping matrix from a tangent plane into a image plane\n // given a 2D gaussian parameters. T = WH (from the paper: https://arxiv.org/pdf/2403.17888)\n let 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 // Original CUDA code for projection to 2D, for reference\n /*\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 // Computing the bounding box of the 2D Gaussian and its center\n // The center of the bounding box is used to create a low pass filter.\n // This code is based off the reference implementation and creates an AABB aligned\n // with the screen for the quad to be rendered.\n const 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 const useRefImplementation = false;\n if (useRefImplementation) {\n vertexShaderSource += referenceQuadGeneration;\n } else {\n // Create a quad that is aligned with the eigen vectors of the projected gaussian for rendering.\n // This is a different approach than the reference implementation, similar to how the rendering of\n // 3D gaussians in this viewer differs from the reference implementation. If the quad is too small\n // (smaller than a pixel), then revert to the reference implementation.\n vertexShaderSource += `\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 }\n\n vertexShaderSource += SplatMaterial.getVertexShaderFadeIn();\n vertexShaderSource += `}`;\n\n return vertexShaderSource;\n }\n\n static buildFragmentShader() {\n\n // Original CUDA code for splat intersection, for reference\n /*\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 let 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 return fragmentShaderSource;\n }\n}\n\nclass SplatGeometry {\n\n /**\n * Build the Three.js geometry that will be used to render the splats. The geometry is instanced and is made up of\n * vertices for a single quad as well as an attribute buffer for the splat indexes.\n * @param {number} maxSplatCount The maximum number of splats that the geometry will need to accomodate\n * @return {THREE.InstancedBufferGeometry}\n */\n static build(maxSplatCount) {\n\n const baseGeometry = new THREE.BufferGeometry();\n baseGeometry.setIndex([0, 1, 2, 0, 2, 3]);\n\n // Vertices for the instanced quad\n const positionsArray = new Float32Array(4 * 3);\n const positions = new THREE.BufferAttribute(positionsArray, 3);\n baseGeometry.setAttribute('position', positions);\n positions.setXYZ(0, -1.0, -1.0, 0.0);\n positions.setXYZ(1, -1.0, 1.0, 0.0);\n positions.setXYZ(2, 1.0, 1.0, 0.0);\n positions.setXYZ(3, 1.0, -1.0, 0.0);\n positions.needsUpdate = true;\n\n const geometry = new THREE.InstancedBufferGeometry().copy(baseGeometry);\n\n // Splat index buffer\n const splatIndexArray = new Uint32Array(maxSplatCount);\n const splatIndexes = new THREE.InstancedBufferAttribute(splatIndexArray, 1, false);\n splatIndexes.setUsage(THREE.DynamicDrawUsage);\n geometry.setAttribute('splatIndex', splatIndexes);\n\n geometry.instanceCount = 0;\n\n return geometry;\n }\n}\n\n/**\n * SplatScene: Descriptor for a single splat scene managed by an instance of SplatMesh.\n */\nclass SplatScene extends THREE.Object3D {\n\n constructor(splatBuffer, position = new THREE.Vector3(), quaternion = new THREE.Quaternion(),\n scale = new THREE.Vector3(1, 1, 1), minimumAlpha = 1, opacity = 1.0, visible = true) {\n super();\n this.splatBuffer = splatBuffer;\n this.position.copy(position);\n this.quaternion.copy(quaternion);\n this.scale.copy(scale);\n this.transform = new THREE.Matrix4();\n this.minimumAlpha = minimumAlpha;\n this.opacity = opacity;\n this.visible = visible;\n }\n\n copyTransformData(otherScene) {\n this.position.copy(otherScene.position);\n this.quaternion.copy(otherScene.quaternion);\n this.scale.copy(otherScene.scale);\n this.transform.copy(otherScene.transform);\n }\n\n updateTransform(dynamicMode) {\n if (dynamicMode) {\n if (this.matrixWorldAutoUpdate) this.updateWorldMatrix(true, false);\n this.transform.copy(this.matrixWorld);\n } else {\n if (this.matrixAutoUpdate) this.updateMatrix();\n this.transform.copy(this.matrix);\n }\n }\n}\n\nclass SplatTreeNode {\n\n static idGen = 0;\n\n constructor(min, max, depth, id) {\n this.min = new THREE.Vector3().copy(min);\n this.max = new THREE.Vector3().copy(max);\n this.boundingBox = new THREE.Box3(this.min, this.max);\n this.center = new THREE.Vector3().copy(this.max).sub(this.min).multiplyScalar(0.5).add(this.min);\n this.depth = depth;\n this.children = [];\n this.data = null;\n this.id = id || SplatTreeNode.idGen++;\n }\n\n}\n\nclass SplatSubTree {\n\n constructor(maxDepth, maxCentersPerNode) {\n this.maxDepth = maxDepth;\n this.maxCentersPerNode = maxCentersPerNode;\n this.sceneDimensions = new THREE.Vector3();\n this.sceneMin = new THREE.Vector3();\n this.sceneMax = new THREE.Vector3();\n this.rootNode = null;\n this.nodesWithIndexes = [];\n this.splatMesh = null;\n }\n\n static convertWorkerSubTreeNode(workerSubTreeNode) {\n const minVector = new THREE.Vector3().fromArray(workerSubTreeNode.min);\n const maxVector = new THREE.Vector3().fromArray(workerSubTreeNode.max);\n const convertedNode = new SplatTreeNode(minVector, maxVector, workerSubTreeNode.depth, workerSubTreeNode.id);\n if (workerSubTreeNode.data.indexes) {\n convertedNode.data = {\n 'indexes': []\n };\n for (let index of workerSubTreeNode.data.indexes) {\n convertedNode.data.indexes.push(index);\n }\n }\n if (workerSubTreeNode.children) {\n for (let child of workerSubTreeNode.children) {\n convertedNode.children.push(SplatSubTree.convertWorkerSubTreeNode(child));\n }\n }\n return convertedNode;\n }\n\n static convertWorkerSubTree(workerSubTree, splatMesh) {\n const convertedSubTree = new SplatSubTree(workerSubTree.maxDepth, workerSubTree.maxCentersPerNode);\n convertedSubTree.sceneMin = new THREE.Vector3().fromArray(workerSubTree.sceneMin);\n convertedSubTree.sceneMax = new THREE.Vector3().fromArray(workerSubTree.sceneMax);\n\n convertedSubTree.splatMesh = splatMesh;\n convertedSubTree.rootNode = SplatSubTree.convertWorkerSubTreeNode(workerSubTree.rootNode);\n\n\n const visitLeavesFromNode = (node, visitFunc) => {\n if (node.children.length === 0) visitFunc(node);\n for (let child of node.children) {\n visitLeavesFromNode(child, visitFunc);\n }\n };\n\n convertedSubTree.nodesWithIndexes = [];\n visitLeavesFromNode(convertedSubTree.rootNode, (node) => {\n if (node.data && node.data.indexes && node.data.indexes.length > 0) {\n convertedSubTree.nodesWithIndexes.push(node);\n }\n });\n\n return convertedSubTree;\n }\n}\n\nfunction createSplatTreeWorker(self) {\n\n let WorkerSplatTreeNodeIDGen = 0;\n\n class WorkerBox3 {\n\n constructor(min, max) {\n this.min = [min[0], min[1], min[2]];\n this.max = [max[0], max[1], max[2]];\n }\n\n containsPoint(point) {\n return point[0] >= this.min[0] && point[0] <= this.max[0] &&\n point[1] >= this.min[1] && point[1] <= this.max[1] &&\n point[2] >= this.min[2] && point[2] <= this.max[2];\n }\n }\n\n class WorkerSplatSubTree {\n\n constructor(maxDepth, maxCentersPerNode) {\n this.maxDepth = maxDepth;\n this.maxCentersPerNode = maxCentersPerNode;\n this.sceneDimensions = [];\n this.sceneMin = [];\n this.sceneMax = [];\n this.rootNode = null;\n this.addedIndexes = {};\n this.nodesWithIndexes = [];\n this.splatMesh = null;\n this.disposed = false;\n }\n\n }\n\n class WorkerSplatTreeNode {\n\n constructor(min, max, depth, id) {\n this.min = [min[0], min[1], min[2]];\n this.max = [max[0], max[1], max[2]];\n this.center = [(max[0] - min[0]) * 0.5 + min[0],\n (max[1] - min[1]) * 0.5 + min[1],\n (max[2] - min[2]) * 0.5 + min[2]];\n this.depth = depth;\n this.children = [];\n this.data = null;\n this.id = id || WorkerSplatTreeNodeIDGen++;\n }\n\n }\n\n processSplatTreeNode = function(tree, node, indexToCenter, sceneCenters) {\n const splatCount = node.data.indexes.length;\n\n if (splatCount < tree.maxCentersPerNode || node.depth > tree.maxDepth) {\n const newIndexes = [];\n for (let i = 0; i < node.data.indexes.length; i++) {\n if (!tree.addedIndexes[node.data.indexes[i]]) {\n newIndexes.push(node.data.indexes[i]);\n tree.addedIndexes[node.data.indexes[i]] = true;\n }\n }\n node.data.indexes = newIndexes;\n node.data.indexes.sort((a, b) => {\n if (a > b) return 1;\n else return -1;\n });\n tree.nodesWithIndexes.push(node);\n return;\n }\n\n const nodeDimensions = [node.max[0] - node.min[0],\n node.max[1] - node.min[1],\n node.max[2] - node.min[2]];\n const halfDimensions = [nodeDimensions[0] * 0.5,\n nodeDimensions[1] * 0.5,\n nodeDimensions[2] * 0.5];\n const nodeCenter = [node.min[0] + halfDimensions[0],\n node.min[1] + halfDimensions[1],\n node.min[2] + halfDimensions[2]];\n\n const childrenBounds = [\n // top section, clockwise from upper-left (looking from above, +Y)\n new WorkerBox3([nodeCenter[0] - halfDimensions[0], nodeCenter[1], nodeCenter[2] - halfDimensions[2]],\n [nodeCenter[0], nodeCenter[1] + halfDimensions[1], nodeCenter[2]]),\n new WorkerBox3([nodeCenter[0], nodeCenter[1], nodeCenter[2] - halfDimensions[2]],\n [nodeCenter[0] + halfDimensions[0], nodeCenter[1] + halfDimensions[1], nodeCenter[2]]),\n new WorkerBox3([nodeCenter[0], nodeCenter[1], nodeCenter[2]],\n [nodeCenter[0] + halfDimensions[0], nodeCenter[1] + halfDimensions[1], nodeCenter[2] + halfDimensions[2]]),\n new WorkerBox3([nodeCenter[0] - halfDimensions[0], nodeCenter[1], nodeCenter[2]],\n [nodeCenter[0], nodeCenter[1] + halfDimensions[1], nodeCenter[2] + halfDimensions[2]]),\n\n // bottom section, clockwise from lower-left (looking from above, +Y)\n new WorkerBox3([nodeCenter[0] - halfDimensions[0], nodeCenter[1] - halfDimensions[1], nodeCenter[2] - halfDimensions[2]],\n [nodeCenter[0], nodeCenter[1], nodeCenter[2]]),\n new WorkerBox3([nodeCenter[0], nodeCenter[1] - halfDimensions[1], nodeCenter[2] - halfDimensions[2]],\n [nodeCenter[0] + halfDimensions[0], nodeCenter[1], nodeCenter[2]]),\n new WorkerBox3([nodeCenter[0], nodeCenter[1] - halfDimensions[1], nodeCenter[2]],\n [nodeCenter[0] + halfDimensions[0], nodeCenter[1], nodeCenter[2] + halfDimensions[2]]),\n new WorkerBox3([nodeCenter[0] - halfDimensions[0], nodeCenter[1] - halfDimensions[1], nodeCenter[2]],\n [nodeCenter[0], nodeCenter[1], nodeCenter[2] + halfDimensions[2]]),\n ];\n\n const splatCounts = [];\n const baseIndexes = [];\n for (let i = 0; i < childrenBounds.length; i++) {\n splatCounts[i] = 0;\n baseIndexes[i] = [];\n }\n\n const center = [0, 0, 0];\n for (let i = 0; i < splatCount; i++) {\n const splatGlobalIndex = node.data.indexes[i];\n const centerBase = indexToCenter[splatGlobalIndex];\n center[0] = sceneCenters[centerBase];\n center[1] = sceneCenters[centerBase + 1];\n center[2] = sceneCenters[centerBase + 2];\n for (let j = 0; j < childrenBounds.length; j++) {\n if (childrenBounds[j].containsPoint(center)) {\n splatCounts[j]++;\n baseIndexes[j].push(splatGlobalIndex);\n }\n }\n }\n\n for (let i = 0; i < childrenBounds.length; i++) {\n const childNode = new WorkerSplatTreeNode(childrenBounds[i].min, childrenBounds[i].max, node.depth + 1);\n childNode.data = {\n 'indexes': baseIndexes[i]\n };\n node.children.push(childNode);\n }\n\n node.data = {};\n for (let child of node.children) {\n processSplatTreeNode(tree, child, indexToCenter, sceneCenters);\n }\n return;\n };\n\n const buildSubTree = (sceneCenters, maxDepth, maxCentersPerNode) => {\n\n const sceneMin = [0, 0, 0];\n const sceneMax = [0, 0, 0];\n const indexes = [];\n const centerCount = Math.floor(sceneCenters.length / 4);\n for ( let i = 0; i < centerCount; i ++) {\n const base = i * 4;\n const x = sceneCenters[base];\n const y = sceneCenters[base + 1];\n const z = sceneCenters[base + 2];\n const index = Math.round(sceneCenters[base + 3]);\n if (i === 0 || x < sceneMin[0]) sceneMin[0] = x;\n if (i === 0 || x > sceneMax[0]) sceneMax[0] = x;\n if (i === 0 || y < sceneMin[1]) sceneMin[1] = y;\n if (i === 0 || y > sceneMax[1]) sceneMax[1] = y;\n if (i === 0 || z < sceneMin[2]) sceneMin[2] = z;\n if (i === 0 || z > sceneMax[2]) sceneMax[2] = z;\n indexes.push(index);\n }\n const subTree = new WorkerSplatSubTree(maxDepth, maxCentersPerNode);\n subTree.sceneMin = sceneMin;\n subTree.sceneMax = sceneMax;\n subTree.rootNode = new WorkerSplatTreeNode(subTree.sceneMin, subTree.sceneMax, 0);\n subTree.rootNode.data = {\n 'indexes': indexes\n };\n\n return subTree;\n };\n\n function createSplatTree(allCenters, maxDepth, maxCentersPerNode) {\n const indexToCenter = [];\n for (let sceneCenters of allCenters) {\n const centerCount = Math.floor(sceneCenters.length / 4);\n for ( let i = 0; i < centerCount; i ++) {\n const base = i * 4;\n const index = Math.round(sceneCenters[base + 3]);\n indexToCenter[index] = base;\n }\n }\n const subTrees = [];\n for (let sceneCenters of allCenters) {\n const subTree = buildSubTree(sceneCenters, maxDepth, maxCentersPerNode);\n subTrees.push(subTree);\n processSplatTreeNode(subTree, subTree.rootNode, indexToCenter, sceneCenters);\n }\n self.postMessage({\n 'subTrees': subTrees\n });\n }\n\n self.onmessage = (e) => {\n if (e.data.process) {\n createSplatTree(e.data.process.centers, e.data.process.maxDepth, e.data.process.maxCentersPerNode);\n }\n };\n}\n\nfunction workerProcessCenters(splatTreeWorker, centers, transferBuffers, maxDepth, maxCentersPerNode) {\n splatTreeWorker.postMessage({\n 'process': {\n 'centers': centers,\n 'maxDepth': maxDepth,\n 'maxCentersPerNode': maxCentersPerNode\n }\n }, transferBuffers);\n}\n\nfunction checkAndCreateWorker() {\n const splatTreeWorker = new Worker(\n URL.createObjectURL(\n new Blob(['(', createSplatTreeWorker.toString(), ')(self)'], {\n type: 'application/javascript',\n }),\n ),\n );\n return splatTreeWorker;\n}\n\n/**\n * SplatTree: Octree tailored to splat data from a SplatMesh instance\n */\nclass SplatTree {\n\n constructor(maxDepth, maxCentersPerNode) {\n this.maxDepth = maxDepth;\n this.maxCentersPerNode = maxCentersPerNode;\n this.subTrees = [];\n this.splatMesh = null;\n }\n\n\n dispose() {\n this.diposeSplatTreeWorker();\n this.disposed = true;\n }\n\n diposeSplatTreeWorker() {\n if (this.splatTreeWorker) this.splatTreeWorker.terminate();\n this.splatTreeWorker = null;\n };\n\n /**\n * Construct this instance of SplatTree from an instance of SplatMesh.\n *\n * @param {SplatMesh} splatMesh The instance of SplatMesh from which to construct this splat tree.\n * @param {function} filterFunc Optional function to filter out unwanted splats.\n * @param {function} onIndexesUpload Function to be called when the upload of splat centers to the splat tree\n * builder worker starts and finishes.\n * @param {function} onSplatTreeConstruction Function to be called when the conversion of the local splat tree from\n * the format produced by the splat tree builder worker starts and ends.\n * @return {undefined}\n */\n processSplatMesh = function(splatMesh, filterFunc = () => true, onIndexesUpload, onSplatTreeConstruction) {\n if (!this.splatTreeWorker) this.splatTreeWorker = checkAndCreateWorker();\n\n this.splatMesh = splatMesh;\n this.subTrees = [];\n const center = new THREE.Vector3();\n\n const addCentersForScene = (splatOffset, splatCount) => {\n const sceneCenters = new Float32Array(splatCount * 4);\n let addedCount = 0;\n for (let i = 0; i < splatCount; i++) {\n const globalSplatIndex = i + splatOffset;\n if (filterFunc(globalSplatIndex)) {\n splatMesh.getSplatCenter(globalSplatIndex, center);\n const addBase = addedCount * 4;\n sceneCenters[addBase] = center.x;\n sceneCenters[addBase + 1] = center.y;\n sceneCenters[addBase + 2] = center.z;\n sceneCenters[addBase + 3] = globalSplatIndex;\n addedCount++;\n }\n }\n return sceneCenters;\n };\n\n return new Promise((resolve) => {\n\n const checkForEarlyExit = () => {\n if (this.disposed) {\n this.diposeSplatTreeWorker();\n resolve();\n return true;\n }\n return false;\n };\n\n if (onIndexesUpload) onIndexesUpload(false);\n\n delayedExecute(() => {\n\n if (checkForEarlyExit()) return;\n\n const allCenters = [];\n if (splatMesh.dynamicMode) {\n let splatOffset = 0;\n for (let s = 0; s < splatMesh.scenes.length; s++) {\n const scene = splatMesh.getScene(s);\n const splatCount = scene.splatBuffer.getSplatCount();\n const sceneCenters = addCentersForScene(splatOffset, splatCount);\n allCenters.push(sceneCenters);\n splatOffset += splatCount;\n }\n } else {\n const sceneCenters = addCentersForScene(0, splatMesh.getSplatCount());\n allCenters.push(sceneCenters);\n }\n\n this.splatTreeWorker.onmessage = (e) => {\n\n if (checkForEarlyExit()) return;\n\n if (e.data.subTrees) {\n\n if (onSplatTreeConstruction) onSplatTreeConstruction(false);\n\n delayedExecute(() => {\n\n if (checkForEarlyExit()) return;\n\n for (let workerSubTree of e.data.subTrees) {\n const convertedSubTree = SplatSubTree.convertWorkerSubTree(workerSubTree, splatMesh);\n this.subTrees.push(convertedSubTree);\n }\n this.diposeSplatTreeWorker();\n\n if (onSplatTreeConstruction) onSplatTreeConstruction(true);\n\n delayedExecute(() => {\n resolve();\n });\n\n });\n }\n };\n\n delayedExecute(() => {\n if (checkForEarlyExit()) return;\n if (onIndexesUpload) onIndexesUpload(true);\n const transferBuffers = allCenters.map((array) => array.buffer);\n workerProcessCenters(this.splatTreeWorker, allCenters, transferBuffers, this.maxDepth, this.maxCentersPerNode);\n });\n\n });\n\n });\n\n };\n\n countLeaves() {\n\n let leafCount = 0;\n this.visitLeaves(() => {\n leafCount++;\n });\n\n return leafCount;\n }\n\n visitLeaves(visitFunc) {\n\n const visitLeavesFromNode = (node, visitFunc) => {\n if (node.children.length === 0) visitFunc(node);\n for (let child of node.children) {\n visitLeavesFromNode(child, visitFunc);\n }\n };\n\n for (let subTree of this.subTrees) {\n visitLeavesFromNode(subTree.rootNode, visitFunc);\n }\n }\n\n}\n\nfunction WebGLExtensions( gl ) {\n\n const extensions = {};\n\n function getExtension( name ) {\n\n if ( extensions[name] !== undefined ) {\n\n return extensions[name];\n\n }\n\n let extension;\n\n switch ( name ) {\n\n case 'WEBGL_depth_texture':\n extension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) ||\n gl.getExtension( 'WEBKIT_WEBGL_depth_texture' );\n break;\n\n case 'EXT_texture_filter_anisotropic':\n extension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) ||\n gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) ||\n gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' );\n break;\n\n case 'WEBGL_compressed_texture_s3tc':\n extension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) ||\n gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) ||\n gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' );\n break;\n\n case 'WEBGL_compressed_texture_pvrtc':\n extension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) ||\n gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' );\n break;\n\n default:\n extension = gl.getExtension( name );\n\n }\n\n extensions[name] = extension;\n\n return extension;\n\n }\n\n return {\n\n has: function( name ) {\n\n return getExtension( name ) !== null;\n\n },\n\n init: function( capabilities ) {\n\n if ( capabilities.isWebGL2 ) {\n\n getExtension( 'EXT_color_buffer_float' );\n getExtension( 'WEBGL_clip_cull_distance' );\n\n } else {\n\n getExtension( 'WEBGL_depth_texture' );\n getExtension( 'OES_texture_float' );\n getExtension( 'OES_texture_half_float' );\n getExtension( 'OES_texture_half_float_linear' );\n getExtension( 'OES_standard_derivatives' );\n getExtension( 'OES_element_index_uint' );\n getExtension( 'OES_vertex_array_object' );\n getExtension( 'ANGLE_instanced_arrays' );\n\n }\n\n getExtension( 'OES_texture_float_linear' );\n getExtension( 'EXT_color_buffer_half_float' );\n getExtension( 'WEBGL_multisampled_render_to_texture' );\n\n },\n\n get: function( name ) {\n\n const extension = getExtension( name );\n\n if ( extension === null ) {\n\n console.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' );\n\n }\n\n return extension;\n\n }\n\n };\n\n}\n\nfunction WebGLCapabilities( gl, extensions, parameters ) {\n\n let maxAnisotropy;\n\n function getMaxAnisotropy() {\n\n if ( maxAnisotropy !== undefined ) return maxAnisotropy;\n\n if ( extensions.has( 'EXT_texture_filter_anisotropic' ) === true ) {\n\n const extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n maxAnisotropy = gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT );\n\n } else {\n\n maxAnisotropy = 0;\n\n }\n\n return maxAnisotropy;\n\n }\n\n function getMaxPrecision( precision ) {\n\n if ( precision === 'highp' ) {\n\n if ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.HIGH_FLOAT ).precision > 0 &&\n gl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.HIGH_FLOAT ).precision > 0 ) {\n\n return 'highp';\n\n }\n\n precision = 'mediump';\n\n }\n\n if ( precision === 'mediump' ) {\n\n if ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.MEDIUM_FLOAT ).precision > 0 &&\n gl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT ).precision > 0 ) {\n\n return 'mediump';\n\n }\n\n }\n\n return 'lowp';\n\n }\n\n const isWebGL2 = typeof WebGL2RenderingContext !== 'undefined' && gl.constructor.name === 'WebGL2RenderingContext';\n\n let precision = parameters.precision !== undefined ? parameters.precision : 'highp';\n const maxPrecision = getMaxPrecision( precision );\n\n if ( maxPrecision !== precision ) {\n\n console.warn( 'THREE.WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.' );\n precision = maxPrecision;\n\n }\n\n const drawBuffers = isWebGL2 || extensions.has( 'WEBGL_draw_buffers' );\n\n const logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;\n\n const maxTextures = gl.getParameter( gl.MAX_TEXTURE_IMAGE_UNITS );\n const maxVertexTextures = gl.getParameter( gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS );\n const maxTextureSize = gl.getParameter( gl.MAX_TEXTURE_SIZE );\n const maxCubemapSize = gl.getParameter( gl.MAX_CUBE_MAP_TEXTURE_SIZE );\n\n const maxAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS );\n const maxVertexUniforms = gl.getParameter( gl.MAX_VERTEX_UNIFORM_VECTORS );\n const maxVaryings = gl.getParameter( gl.MAX_VARYING_VECTORS );\n const maxFragmentUniforms = gl.getParameter( gl.MAX_FRAGMENT_UNIFORM_VECTORS );\n\n const vertexTextures = maxVertexTextures > 0;\n const floatFragmentTextures = isWebGL2 || extensions.has( 'OES_texture_float' );\n const floatVertexTextures = vertexTextures && floatFragmentTextures;\n\n const maxSamples = isWebGL2 ? gl.getParameter( gl.MAX_SAMPLES ) : 0;\n\n return {\n\n isWebGL2: isWebGL2,\n\n drawBuffers: drawBuffers,\n\n getMaxAnisotropy: getMaxAnisotropy,\n getMaxPrecision: getMaxPrecision,\n\n precision: precision,\n logarithmicDepthBuffer: logarithmicDepthBuffer,\n\n maxTextures: maxTextures,\n maxVertexTextures: maxVertexTextures,\n maxTextureSize: maxTextureSize,\n maxCubemapSize: maxCubemapSize,\n\n maxAttributes: maxAttributes,\n maxVertexUniforms: maxVertexUniforms,\n maxVaryings: maxVaryings,\n maxFragmentUniforms: maxFragmentUniforms,\n\n vertexTextures: vertexTextures,\n floatFragmentTextures: floatFragmentTextures,\n floatVertexTextures: floatVertexTextures,\n\n maxSamples: maxSamples\n\n };\n\n}\n\nconst SceneRevealMode = {\n Default: 0,\n Gradual: 1,\n Instant: 2\n};\n\nconst LogLevel = {\n None: 0,\n Error: 1,\n Warning: 2,\n Info: 3,\n Debug: 4\n};\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 */\nclass SplatMesh extends THREE.Mesh {\n\n constructor(splatRenderMode = SplatRenderMode.ThreeD, dynamicMode = false, enableOptionalEffects = false,\n halfPrecisionCovariancesOnGPU = false, devicePixelRatio = 1, enableDistancesComputationOnGPU = true,\n integerBasedDistancesComputation = false, antialiased = false, maxScreenSpaceSplatSize = 1024, logLevel = LogLevel.None,\n sphericalHarmonicsDegree = 0, sceneFadeInRateMultiplier = 1.0, kernel2DSize = 0.3) {\n super(dummyGeometry, dummyMaterial);\n\n // Reference to a Three.js renderer\n this.renderer = undefined;\n\n // Determine how the splats are rendered\n this.splatRenderMode = splatRenderMode;\n\n // When 'dynamicMode' is true, scenes are assumed to be non-static. Dynamic scenes are handled differently\n // and certain optimizations cannot be made for them. Additionally, by default, all splat data retrieved from\n // this splat mesh will not have their scene transform applied to them if the splat mesh is dynamic. That\n // can be overriden via parameters to the individual functions that are used to retrieve splat data.\n this.dynamicMode = dynamicMode;\n\n // When true, allows for usage of extra properties and attributes during rendering for effects such as opacity adjustment.\n // Default is false for performance reasons. These properties are separate from transform properties (scale, rotation, position)\n // that are enabled by the 'dynamicScene' parameter.\n this.enableOptionalEffects = enableOptionalEffects;\n\n // Use 16-bit floating point values when storing splat covariance data in textures, instead of 32-bit\n this.halfPrecisionCovariancesOnGPU = halfPrecisionCovariancesOnGPU;\n\n // Ratio of the resolution in physical pixels to the resolution in CSS pixels for the current display device\n this.devicePixelRatio = devicePixelRatio;\n\n // Use a transform feedback to calculate splat distances from the camera\n this.enableDistancesComputationOnGPU = enableDistancesComputationOnGPU;\n\n // Use a faster integer-based approach for calculating splat distances from the camera\n this.integerBasedDistancesComputation = integerBasedDistancesComputation;\n\n // When true, will perform additional steps during rendering to address artifacts caused by the rendering of gaussians at a\n // substantially different resolution than that at which they were rendered during training. This will only work correctly\n // for models that were trained using a process that utilizes this compensation calculation. For more details:\n // https://github.com/nerfstudio-project/gsplat/pull/117\n // https://github.com/graphdeco-inria/gaussian-splatting/issues/294#issuecomment-1772688093\n this.antialiased = antialiased;\n\n // The size of the 2D kernel used for splat rendering\n // This will adjust the 2D kernel size after the projection\n this.kernel2DSize = kernel2DSize;\n\n // Specify the maximum clip space splat size, can help deal with large splats that get too unwieldy\n this.maxScreenSpaceSplatSize = maxScreenSpaceSplatSize;\n\n // The verbosity of console logging\n this.logLevel = logLevel;\n\n // Degree 0 means no spherical harmonics\n this.sphericalHarmonicsDegree = sphericalHarmonicsDegree;\n this.minSphericalHarmonicsDegree = 0;\n\n this.sceneFadeInRateMultiplier = sceneFadeInRateMultiplier;\n\n // The individual splat scenes stored in this splat mesh, each containing their own transform\n this.scenes = [];\n\n // Special octree tailored to SplatMesh instances\n this.splatTree = null;\n this.baseSplatTree = null;\n\n // Cache textures and the intermediate data used to populate them\n this.splatDataTextures = {};\n\n this.distancesTransformFeedback = {\n 'id': null,\n 'vertexShader': null,\n 'fragmentShader': null,\n 'program': null,\n 'centersBuffer': null,\n 'sceneIndexesBuffer': null,\n 'outDistancesBuffer': null,\n 'centersLoc': -1,\n 'modelViewProjLoc': -1,\n 'sceneIndexesLoc': -1,\n 'transformsLocs': []\n };\n\n this.globalSplatIndexToLocalSplatIndexMap = [];\n this.globalSplatIndexToSceneIndexMap = [];\n\n this.lastBuildSplatCount = 0;\n this.lastBuildScenes = [];\n this.lastBuildMaxSplatCount = 0;\n this.lastBuildSceneCount = 0;\n this.firstRenderTime = -1;\n this.finalBuild = false;\n\n this.webGLUtils = null;\n\n this.boundingBox = new THREE.Box3();\n this.calculatedSceneCenter = new THREE.Vector3();\n this.maxSplatDistanceFromSceneCenter = 0;\n this.visibleRegionBufferRadius = 0;\n this.visibleRegionRadius = 0;\n this.visibleRegionFadeStartRadius = 0;\n this.visibleRegionChanging = false;\n\n this.splatScale = 1.0;\n this.pointCloudModeEnabled = false;\n\n this.disposed = false;\n this.lastRenderer = null;\n this.visible = false;\n }\n\n /**\n * Build a container for each scene managed by this splat mesh based on an instance of SplatBuffer, along with optional\n * transform data (position, scale, rotation) passed to the splat mesh during the build process.\n * @param {Array<THREE.Matrix4>} splatBuffers SplatBuffer instances containing splats for each scene\n * @param {Array<object>} sceneOptions Array of options objects: {\n *\n * position (Array<number>): Position of the scene, acts as an offset from its default position, defaults to [0, 0, 0]\n *\n * rotation (Array<number>): Rotation of the scene represented as a quaternion, defaults to [0, 0, 0, 1]\n *\n * scale (Array<number>): Scene's scale, defaults to [1, 1, 1]\n * }\n * @return {Array<THREE.Matrix4>}\n */\n static buildScenes(parentObject, splatBuffers, sceneOptions) {\n const scenes = [];\n scenes.length = splatBuffers.length;\n for (let i = 0; i < splatBuffers.length; i++) {\n const splatBuffer = splatBuffers[i];\n const options = sceneOptions[i] || {};\n let positionArray = options['position'] || [0, 0, 0];\n let rotationArray = options['rotation'] || [0, 0, 0, 1];\n let scaleArray = options['scale'] || [1, 1, 1];\n const position = new THREE.Vector3().fromArray(positionArray);\n const rotation = new THREE.Quaternion().fromArray(rotationArray);\n const scale = new THREE.Vector3().fromArray(scaleArray);\n const scene = SplatMesh.createScene(splatBuffer, position, rotation, scale,\n options.splatAlphaRemovalThreshold || 1, options.opacity, options.visible);\n parentObject.add(scene);\n scenes[i] = scene;\n }\n return scenes;\n }\n\n static createScene(splatBuffer, position, rotation, scale, minimumAlpha, opacity = 1.0, visible = true) {\n return new SplatScene(splatBuffer, position, rotation, scale, minimumAlpha, opacity, visible);\n }\n\n /**\n * Build data structures that map global splat indexes (based on a unified index across all splat buffers) to\n * local data within a single scene.\n * @param {Array<SplatBuffer>} splatBuffers Instances of SplatBuffer off which to build the maps\n * @return {object}\n */\n static buildSplatIndexMaps(splatBuffers) {\n const localSplatIndexMap = [];\n const sceneIndexMap = [];\n let totalSplatCount = 0;\n for (let s = 0; s < splatBuffers.length; s++) {\n const splatBuffer = splatBuffers[s];\n const maxSplatCount = splatBuffer.getMaxSplatCount();\n for (let i = 0; i < maxSplatCount; i++) {\n localSplatIndexMap[totalSplatCount] = i;\n sceneIndexMap[totalSplatCount] = s;\n totalSplatCount++;\n }\n }\n return {\n localSplatIndexMap,\n sceneIndexMap\n };\n }\n\n /**\n * Build an instance of SplatTree (a specialized octree) for the given splat mesh.\n * @param {Array<number>} minAlphas Array of minimum splat slphas for each scene\n * @param {function} onSplatTreeIndexesUpload Function to be called when the upload of splat centers to the splat tree\n * builder worker starts and finishes.\n * @param {function} onSplatTreeConstruction Function to be called when the conversion of the local splat tree from\n * the format produced by the splat tree builder worker starts and ends.\n * @return {SplatTree}\n */\n buildSplatTree = function(minAlphas = [], onSplatTreeIndexesUpload, onSplatTreeConstruction) {\n return new Promise((resolve) => {\n this.disposeSplatTree();\n // TODO: expose SplatTree constructor parameters (maximumDepth and maxCentersPerNode) so that they can\n // be configured on a per-scene basis\n this.baseSplatTree = new SplatTree(8, 1000);\n const buildStartTime = performance.now();\n const splatColor = new THREE.Vector4();\n this.baseSplatTree.processSplatMesh(this, (splatIndex) => {\n this.getSplatColor(splatIndex, splatColor);\n const sceneIndex = this.getSceneIndexForSplat(splatIndex);\n const minAlpha = minAlphas[sceneIndex] || 1;\n return splatColor.w >= minAlpha;\n }, onSplatTreeIndexesUpload, onSplatTreeConstruction)\n .then(() => {\n const buildTime = performance.now() - buildStartTime;\n if (this.logLevel >= LogLevel.Info) console.log('SplatTree build: ' + buildTime + ' ms');\n if (this.disposed) {\n resolve();\n } else {\n\n this.splatTree = this.baseSplatTree;\n this.baseSplatTree = null;\n\n let leavesWithVertices = 0;\n let avgSplatCount = 0;\n let maxSplatCount = 0;\n let nodeCount = 0;\n\n this.splatTree.visitLeaves((node) => {\n const nodeSplatCount = node.data.indexes.length;\n if (nodeSplatCount > 0) {\n avgSplatCount += nodeSplatCount;\n maxSplatCount = Math.max(maxSplatCount, nodeSplatCount);\n nodeCount++;\n leavesWithVertices++;\n }\n });\n if (this.logLevel >= LogLevel.Info) {\n console.log(`SplatTree leaves: ${this.splatTree.countLeaves()}`);\n console.log(`SplatTree leaves with splats:${leavesWithVertices}`);\n avgSplatCount = avgSplatCount / nodeCount;\n console.log(`Avg splat count per node: ${avgSplatCount}`);\n console.log(`Total splat count: ${this.getSplatCount()}`);\n }\n resolve();\n }\n });\n });\n };\n\n /**\n * Construct this instance of SplatMesh.\n * @param {Array<SplatBuffer>} splatBuffers The base splat data, instances of SplatBuffer\n * @param {Array<object>} sceneOptions Dynamic options for each scene {\n *\n * splatAlphaRemovalThreshold: Ignore any splats with an alpha less than the specified\n * value (valid range: 0 - 255), defaults to 1\n *\n * position (Array<number>): Position of the scene, acts as an offset from its default position, defaults to [0, 0, 0]\n *\n * rotation (Array<number>): Rotation of the scene represented as a quaternion, defaults to [0, 0, 0, 1]\n *\n * scale (Array<number>): Scene's scale, defaults to [1, 1, 1]\n *\n * }\n * @param {boolean} keepSceneTransforms For a scene that already exists and is being overwritten, this flag\n * says to keep the transform from the existing scene.\n * @param {boolean} finalBuild Will the splat mesh be in its final state after this build?\n * @param {function} onSplatTreeIndexesUpload Function to be called when the upload of splat centers to the splat tree\n * builder worker starts and finishes.\n * @param {function} onSplatTreeConstruction Function to be called when the conversion of the local splat tree from\n * the format produced by the splat tree builder worker starts and ends.\n * @return {object} Object containing info about the splats that are updated\n */\n build(splatBuffers, sceneOptions, keepSceneTransforms = true, finalBuild = false,\n onSplatTreeIndexesUpload, onSplatTreeConstruction, preserveVisibleRegion = true) {\n\n this.sceneOptions = sceneOptions;\n this.finalBuild = finalBuild;\n\n const maxSplatCount = SplatMesh.getTotalMaxSplatCountForSplatBuffers(splatBuffers);\n\n const newScenes = SplatMesh.buildScenes(this, splatBuffers, sceneOptions);\n if (keepSceneTransforms) {\n for (let i = 0; i < this.scenes.length && i < newScenes.length; i++) {\n const newScene = newScenes[i];\n const existingScene = this.getScene(i);\n newScene.copyTransformData(existingScene);\n }\n }\n this.scenes = newScenes;\n\n let minSphericalHarmonicsDegree = 3;\n for (let splatBuffer of splatBuffers) {\n const splatBufferSphericalHarmonicsDegree = splatBuffer.getMinSphericalHarmonicsDegree();\n if (splatBufferSphericalHarmonicsDegree < minSphericalHarmonicsDegree) {\n minSphericalHarmonicsDegree = splatBufferSphericalHarmonicsDegree;\n }\n }\n this.minSphericalHarmonicsDegree = Math.min(minSphericalHarmonicsDegree, this.sphericalHarmonicsDegree);\n\n let splatBuffersChanged = false;\n if (splatBuffers.length !== this.lastBuildScenes.length) {\n splatBuffersChanged = true;\n } else {\n for (let i = 0; i < splatBuffers.length; i++) {\n const splatBuffer = splatBuffers[i];\n if (splatBuffer !== this.lastBuildScenes[i].splatBuffer) {\n splatBuffersChanged = true;\n break;\n }\n }\n }\n\n let isUpdateBuild = true;\n if (this.scenes.length !== 1 ||\n this.lastBuildSceneCount !== this.scenes.length ||\n this.lastBuildMaxSplatCount !== maxSplatCount ||\n splatBuffersChanged) {\n isUpdateBuild = false;\n }\n\n if (!isUpdateBuild) {\n this.boundingBox = new THREE.Box3();\n if (!preserveVisibleRegion) {\n this.maxSplatDistanceFromSceneCenter = 0;\n this.visibleRegionBufferRadius = 0;\n this.visibleRegionRadius = 0;\n this.visibleRegionFadeStartRadius = 0;\n this.firstRenderTime = -1;\n }\n this.lastBuildScenes = [];\n this.lastBuildSplatCount = 0;\n this.lastBuildMaxSplatCount = 0;\n this.disposeMeshData();\n this.geometry = SplatGeometry.build(maxSplatCount);\n if (this.splatRenderMode === SplatRenderMode.ThreeD) {\n this.material = SplatMaterial3D.build(this.dynamicMode, this.enableOptionalEffects, this.antialiased,\n this.maxScreenSpaceSplatSize, this.splatScale, this.pointCloudModeEnabled,\n this.minSphericalHarmonicsDegree, this.kernel2DSize);\n } else {\n this.material = SplatMaterial2D.build(this.dynamicMode, this.enableOptionalEffects,\n this.splatScale, this.pointCloudModeEnabled, this.minSphericalHarmonicsDegree);\n }\n\n const indexMaps = SplatMesh.buildSplatIndexMaps(splatBuffers);\n this.globalSplatIndexToLocalSplatIndexMap = indexMaps.localSplatIndexMap;\n this.globalSplatIndexToSceneIndexMap = indexMaps.sceneIndexMap;\n }\n\n const splatBufferSplatCount = this.getSplatCount(true);\n if (this.enableDistancesComputationOnGPU) this.setupDistancesComputationTransformFeedback();\n const dataUpdateResults = this.refreshGPUDataFromSplatBuffers(isUpdateBuild);\n\n for (let i = 0; i < this.scenes.length; i++) {\n this.lastBuildScenes[i] = this.scenes[i];\n }\n this.lastBuildSplatCount = splatBufferSplatCount;\n this.lastBuildMaxSplatCount = this.getMaxSplatCount();\n this.lastBuildSceneCount = this.scenes.length;\n\n if (finalBuild && this.scenes.length > 0) {\n this.buildSplatTree(sceneOptions.map(options => options.splatAlphaRemovalThreshold || 1),\n onSplatTreeIndexesUpload, onSplatTreeConstruction)\n .then(() => {\n if (this.onSplatTreeReadyCallback) this.onSplatTreeReadyCallback(this.splatTree);\n this.onSplatTreeReadyCallback = null;\n });\n }\n\n this.visible = (this.scenes.length > 0);\n\n return dataUpdateResults;\n }\n\n freeIntermediateSplatData() {\n\n const deleteTextureData = (texture) => {\n delete texture.source.data;\n delete texture.image;\n texture.onUpdate = null;\n };\n\n delete this.splatDataTextures.baseData.covariances;\n delete this.splatDataTextures.baseData.centers;\n delete this.splatDataTextures.baseData.colors;\n delete this.splatDataTextures.baseData.sphericalHarmonics;\n\n delete this.splatDataTextures.centerColors.data;\n delete this.splatDataTextures.covariances.data;\n if (this.splatDataTextures.sphericalHarmonics) {\n delete this.splatDataTextures.sphericalHarmonics.data;\n }\n if (this.splatDataTextures.sceneIndexes) {\n delete this.splatDataTextures.sceneIndexes.data;\n }\n\n this.splatDataTextures.centerColors.texture.needsUpdate = true;\n this.splatDataTextures.centerColors.texture.onUpdate = () => {\n deleteTextureData(this.splatDataTextures.centerColors.texture);\n };\n\n this.splatDataTextures.covariances.texture.needsUpdate = true;\n this.splatDataTextures.covariances.texture.onUpdate = () => {\n deleteTextureData(this.splatDataTextures.covariances.texture);\n };\n\n if (this.splatDataTextures.sphericalHarmonics) {\n if (this.splatDataTextures.sphericalHarmonics.texture) {\n this.splatDataTextures.sphericalHarmonics.texture.needsUpdate = true;\n this.splatDataTextures.sphericalHarmonics.texture.onUpdate = () => {\n deleteTextureData(this.splatDataTextures.sphericalHarmonics.texture);\n };\n } else {\n this.splatDataTextures.sphericalHarmonics.textures.forEach((texture) => {\n texture.needsUpdate = true;\n texture.onUpdate = () => {\n deleteTextureData(texture);\n };\n });\n }\n }\n if (this.splatDataTextures.sceneIndexes) {\n this.splatDataTextures.sceneIndexes.texture.needsUpdate = true;\n this.splatDataTextures.sceneIndexes.texture.onUpdate = () => {\n deleteTextureData(this.splatDataTextures.sceneIndexes.texture);\n };\n }\n }\n /**\n * Dispose all resources held by the splat mesh\n */\n dispose() {\n this.disposeMeshData();\n this.disposeTextures();\n this.disposeSplatTree();\n if (this.enableDistancesComputationOnGPU) {\n if (this.computeDistancesOnGPUSyncTimeout) {\n clearTimeout(this.computeDistancesOnGPUSyncTimeout);\n this.computeDistancesOnGPUSyncTimeout = null;\n }\n this.disposeDistancesComputationGPUResources();\n }\n this.scenes = [];\n this.distancesTransformFeedback = {\n 'id': null,\n 'vertexShader': null,\n 'fragmentShader': null,\n 'program': null,\n 'centersBuffer': null,\n 'sceneIndexesBuffer': null,\n 'outDistancesBuffer': null,\n 'centersLoc': -1,\n 'modelViewProjLoc': -1,\n 'sceneIndexesLoc': -1,\n 'transformsLocs': []\n };\n this.renderer = null;\n\n this.globalSplatIndexToLocalSplatIndexMap = [];\n this.globalSplatIndexToSceneIndexMap = [];\n\n this.lastBuildSplatCount = 0;\n this.lastBuildScenes = [];\n this.lastBuildMaxSplatCount = 0;\n this.lastBuildSceneCount = 0;\n this.firstRenderTime = -1;\n this.finalBuild = false;\n\n this.webGLUtils = null;\n\n this.boundingBox = new THREE.Box3();\n this.calculatedSceneCenter = new THREE.Vector3();\n this.maxSplatDistanceFromSceneCenter = 0;\n this.visibleRegionBufferRadius = 0;\n this.visibleRegionRadius = 0;\n this.visibleRegionFadeStartRadius = 0;\n this.visibleRegionChanging = false;\n\n this.splatScale = 1.0;\n this.pointCloudModeEnabled = false;\n\n this.disposed = true;\n this.lastRenderer = null;\n this.visible = false;\n }\n\n /**\n * Dispose of only the Three.js mesh resources (geometry, material, and texture)\n */\n disposeMeshData() {\n if (this.geometry && this.geometry !== dummyGeometry) {\n this.geometry.dispose();\n this.geometry = null;\n }\n if (this.material) {\n this.material.dispose();\n this.material = null;\n }\n }\n\n disposeTextures() {\n for (let textureKey in this.splatDataTextures) {\n if (this.splatDataTextures.hasOwnProperty(textureKey)) {\n const textureContainer = this.splatDataTextures[textureKey];\n if (textureContainer.texture) {\n textureContainer.texture.dispose();\n textureContainer.texture = null;\n }\n }\n }\n this.splatDataTextures = null;\n }\n\n disposeSplatTree() {\n if (this.splatTree) {\n this.splatTree.dispose();\n this.splatTree = null;\n }\n if (this.baseSplatTree) {\n this.baseSplatTree.dispose();\n this.baseSplatTree = null;\n }\n }\n\n getSplatTree() {\n return this.splatTree;\n }\n\n onSplatTreeReady(callback) {\n this.onSplatTreeReadyCallback = callback;\n }\n\n /**\n * Get copies of data that are necessary for splat distance computation: splat center positions and splat\n * scene indexes (necessary for applying dynamic scene transformations during distance computation)\n * @param {*} start The index at which to start copying data\n * @param {*} end The index at which to stop copying data\n * @return {object}\n */\n getDataForDistancesComputation(start, end) {\n const centers = this.integerBasedDistancesComputation ?\n this.getIntegerCenters(start, end, true) :\n this.getFloatCenters(start, end, true);\n const sceneIndexes = this.getSceneIndexes(start, end);\n return {\n centers,\n sceneIndexes\n };\n }\n\n /**\n * Refresh data textures and GPU buffers with splat data from the splat buffers belonging to this mesh.\n * @param {boolean} sinceLastBuildOnly Specify whether or not to only update for splats that have been added since the last build.\n * @return {object}\n */\n refreshGPUDataFromSplatBuffers(sinceLastBuildOnly) {\n const splatCount = this.getSplatCount(true);\n this.refreshDataTexturesFromSplatBuffers(sinceLastBuildOnly);\n const updateStart = sinceLastBuildOnly ? this.lastBuildSplatCount : 0;\n const { centers, sceneIndexes } = this.getDataForDistancesComputation(updateStart, splatCount - 1);\n if (this.enableDistancesComputationOnGPU) {\n this.refreshGPUBuffersForDistancesComputation(centers, sceneIndexes, sinceLastBuildOnly);\n }\n return {\n 'from': updateStart,\n 'to': splatCount - 1,\n 'count': splatCount - updateStart,\n 'centers': centers,\n 'sceneIndexes': sceneIndexes\n };\n }\n\n /**\n * Update the GPU buffers that are used for computing splat distances on the GPU.\n * @param {Array<number>} centers Splat center positions\n * @param {Array<number>} sceneIndexes Indexes of the scene to which each splat belongs\n * @param {boolean} sinceLastBuildOnly Specify whether or not to only update for splats that have been added since the last build.\n */\n refreshGPUBuffersForDistancesComputation(centers, sceneIndexes, sinceLastBuildOnly = false) {\n const offset = sinceLastBuildOnly ? this.lastBuildSplatCount : 0;\n this.updateGPUCentersBufferForDistancesComputation(sinceLastBuildOnly, centers, offset);\n this.updateGPUTransformIndexesBufferForDistancesComputation(sinceLastBuildOnly, sceneIndexes, offset);\n }\n\n /**\n * Refresh data textures with data from the splat buffers for this mesh.\n * @param {boolean} sinceLastBuildOnly Specify whether or not to only update for splats that have been added since the last build.\n */\n refreshDataTexturesFromSplatBuffers(sinceLastBuildOnly) {\n const splatCount = this.getSplatCount(true);\n const fromSplat = this.lastBuildSplatCount;\n const toSplat = splatCount - 1;\n\n if (!sinceLastBuildOnly) {\n this.setupDataTextures();\n this.updateBaseDataFromSplatBuffers();\n } else {\n this.updateBaseDataFromSplatBuffers(fromSplat, toSplat);\n }\n\n this.updateDataTexturesFromBaseData(fromSplat, toSplat);\n this.updateVisibleRegion(sinceLastBuildOnly);\n }\n\n setupDataTextures() {\n const maxSplatCount = this.getMaxSplatCount();\n const splatCount = this.getSplatCount(true);\n\n this.disposeTextures();\n\n const computeDataTextureSize = (elementsPerTexel, elementsPerSplat) => {\n const texSize = new THREE.Vector2(4096, 1024);\n while (texSize.x * texSize.y * elementsPerTexel < maxSplatCount * elementsPerSplat) texSize.y *= 2;\n return texSize;\n };\n\n const getCovariancesElementsPertexelStored = (compressionLevel) => {\n return compressionLevel >= 1 ? COVARIANCES_ELEMENTS_PER_TEXEL_COMPRESSED_STORED : COVARIANCES_ELEMENTS_PER_TEXEL_STORED;\n };\n\n const getCovariancesInitialTextureSpecs = (compressionLevel) => {\n const elementsPerTexelStored = getCovariancesElementsPertexelStored(compressionLevel);\n const texSize = computeDataTextureSize(elementsPerTexelStored, 6);\n return {elementsPerTexelStored, texSize};\n };\n\n let covarianceCompressionLevel = this.getTargetCovarianceCompressionLevel();\n const scaleRotationCompressionLevel = 0;\n const shCompressionLevel = this.getTargetSphericalHarmonicsCompressionLevel();\n\n let covariances;\n let scales;\n let rotations;\n if (this.splatRenderMode === SplatRenderMode.ThreeD) {\n const initialCovTexSpecs = getCovariancesInitialTextureSpecs(covarianceCompressionLevel);\n if (initialCovTexSpecs.texSize.x * initialCovTexSpecs.texSize.y > MAX_TEXTURE_TEXELS && covarianceCompressionLevel === 0) {\n covarianceCompressionLevel = 1;\n }\n covariances = new Float32Array(maxSplatCount * COVARIANCES_ELEMENTS_PER_SPLAT);\n } else {\n scales = new Float32Array(maxSplatCount * 3);\n rotations = new Float32Array(maxSplatCount * 4);\n }\n\n const centers = new Float32Array(maxSplatCount * 3);\n const colors = new Uint8Array(maxSplatCount * 4);\n\n let SphericalHarmonicsArrayType = Float32Array;\n if (shCompressionLevel === 1) SphericalHarmonicsArrayType = Uint16Array;\n else if (shCompressionLevel === 2) SphericalHarmonicsArrayType = Uint8Array;\n const shComponentCount = getSphericalHarmonicsComponentCountForDegree(this.minSphericalHarmonicsDegree);\n const shData = this.minSphericalHarmonicsDegree ? new SphericalHarmonicsArrayType(maxSplatCount * shComponentCount) : undefined;\n\n // set up centers/colors data texture\n const centersColsTexSize = computeDataTextureSize(CENTER_COLORS_ELEMENTS_PER_TEXEL, 4);\n const paddedCentersCols = new Uint32Array(centersColsTexSize.x * centersColsTexSize.y * CENTER_COLORS_ELEMENTS_PER_TEXEL);\n SplatMesh.updateCenterColorsPaddedData(0, splatCount - 1, centers, colors, paddedCentersCols);\n\n const centersColsTex = new THREE.DataTexture(paddedCentersCols, centersColsTexSize.x, centersColsTexSize.y,\n THREE.RGBAIntegerFormat, THREE.UnsignedIntType);\n centersColsTex.internalFormat = 'RGBA32UI';\n centersColsTex.needsUpdate = true;\n this.material.uniforms.centersColorsTexture.value = centersColsTex;\n this.material.uniforms.centersColorsTextureSize.value.copy(centersColsTexSize);\n this.material.uniformsNeedUpdate = true;\n\n this.splatDataTextures = {\n 'baseData': {\n 'covariances': covariances,\n 'scales': scales,\n 'rotations': rotations,\n 'centers': centers,\n 'colors': colors,\n 'sphericalHarmonics': shData\n },\n 'centerColors': {\n 'data': paddedCentersCols,\n 'texture': centersColsTex,\n 'size': centersColsTexSize\n }\n };\n\n if (this.splatRenderMode === SplatRenderMode.ThreeD) {\n // set up covariances data texture\n\n const covTexSpecs = getCovariancesInitialTextureSpecs(covarianceCompressionLevel);\n const covariancesElementsPerTexelStored = covTexSpecs.elementsPerTexelStored;\n const covTexSize = covTexSpecs.texSize;\n\n let CovariancesDataType = covarianceCompressionLevel >= 1 ? Uint32Array : Float32Array;\n const covariancesElementsPerTexelAllocated = covarianceCompressionLevel >= 1 ?\n COVARIANCES_ELEMENTS_PER_TEXEL_COMPRESSED_ALLOCATED :\n COVARIANCES_ELEMENTS_PER_TEXEL_ALLOCATED;\n const covariancesTextureData = new CovariancesDataType(covTexSize.x * covTexSize.y * covariancesElementsPerTexelAllocated);\n\n if (covarianceCompressionLevel === 0) {\n covariancesTextureData.set(covariances);\n } else {\n SplatMesh.updatePaddedCompressedCovariancesTextureData(covariances, covariancesTextureData, 0, 0, covariances.length);\n }\n\n let covTex;\n if (covarianceCompressionLevel >= 1) {\n covTex = new THREE.DataTexture(covariancesTextureData, covTexSize.x, covTexSize.y,\n THREE.RGBAIntegerFormat, THREE.UnsignedIntType);\n covTex.internalFormat = 'RGBA32UI';\n this.material.uniforms.covariancesTextureHalfFloat.value = covTex;\n } else {\n covTex = new THREE.DataTexture(covariancesTextureData, covTexSize.x, covTexSize.y, THREE.RGBAFormat, THREE.FloatType);\n this.material.uniforms.covariancesTexture.value = covTex;\n\n // For some reason a usampler2D needs to have a valid texture attached or WebGL complains\n const dummyTex = new THREE.DataTexture(new Uint32Array(32), 2, 2, THREE.RGBAIntegerFormat, THREE.UnsignedIntType);\n dummyTex.internalFormat = 'RGBA32UI';\n this.material.uniforms.covariancesTextureHalfFloat.value = dummyTex;\n dummyTex.needsUpdate = true;\n }\n covTex.needsUpdate = true;\n\n this.material.uniforms.covariancesAreHalfFloat.value = (covarianceCompressionLevel >= 1) ? 1 : 0;\n this.material.uniforms.covariancesTextureSize.value.copy(covTexSize);\n\n this.splatDataTextures['covariances'] = {\n 'data': covariancesTextureData,\n 'texture': covTex,\n 'size': covTexSize,\n 'compressionLevel': covarianceCompressionLevel,\n 'elementsPerTexelStored': covariancesElementsPerTexelStored,\n 'elementsPerTexelAllocated': covariancesElementsPerTexelAllocated\n };\n } else {\n // set up scale & rotations data texture\n const elementsPerSplat = 6;\n const scaleRotationsTexSize = computeDataTextureSize(SCALES_ROTATIONS_ELEMENTS_PER_TEXEL, elementsPerSplat);\n let ScaleRotationsDataType = scaleRotationCompressionLevel >= 1 ? Uint16Array : Float32Array;\n let scaleRotationsTextureType = scaleRotationCompressionLevel >= 1 ? THREE.HalfFloatType : THREE.FloatType;\n const paddedScaleRotations = new ScaleRotationsDataType(scaleRotationsTexSize.x * scaleRotationsTexSize.y *\n SCALES_ROTATIONS_ELEMENTS_PER_TEXEL);\n\n SplatMesh.updateScaleRotationsPaddedData(0, splatCount - 1, scales, rotations, paddedScaleRotations);\n\n const scaleRotationsTex = new THREE.DataTexture(paddedScaleRotations, scaleRotationsTexSize.x, scaleRotationsTexSize.y,\n THREE.RGBAFormat, scaleRotationsTextureType);\n scaleRotationsTex.needsUpdate = true;\n this.material.uniforms.scaleRotationsTexture.value = scaleRotationsTex;\n this.material.uniforms.scaleRotationsTextureSize.value.copy(scaleRotationsTexSize);\n\n this.splatDataTextures['scaleRotations'] = {\n 'data': paddedScaleRotations,\n 'texture': scaleRotationsTex,\n 'size': scaleRotationsTexSize,\n 'compressionLevel': scaleRotationCompressionLevel\n };\n }\n\n if (shData) {\n const shTextureType = shCompressionLevel === 2 ? THREE.UnsignedByteType : THREE.HalfFloatType;\n\n let paddedSHComponentCount = shComponentCount;\n if (paddedSHComponentCount % 2 !== 0) paddedSHComponentCount++;\n const shElementsPerTexel = 4;\n const texelFormat = shElementsPerTexel === 4 ? THREE.RGBAFormat : THREE.RGFormat;\n let shTexSize = computeDataTextureSize(shElementsPerTexel, paddedSHComponentCount);\n\n // Use one texture for all spherical harmonics data\n if (shTexSize.x * shTexSize.y <= MAX_TEXTURE_TEXELS) {\n const paddedSHArraySize = shTexSize.x * shTexSize.y * shElementsPerTexel;\n const paddedSHArray = new SphericalHarmonicsArrayType(paddedSHArraySize);\n for (let c = 0; c < splatCount; c++) {\n const srcBase = shComponentCount * c;\n const destBase = paddedSHComponentCount * c;\n for (let i = 0; i < shComponentCount; i++) {\n paddedSHArray[destBase + i] = shData[srcBase + i];\n }\n }\n\n const shTexture = new THREE.DataTexture(paddedSHArray, shTexSize.x, shTexSize.y, texelFormat, shTextureType);\n shTexture.needsUpdate = true;\n this.material.uniforms.sphericalHarmonicsTexture.value = shTexture;\n this.splatDataTextures['sphericalHarmonics'] = {\n 'componentCount': shComponentCount,\n 'paddedComponentCount': paddedSHComponentCount,\n 'data': paddedSHArray,\n 'textureCount': 1,\n 'texture': shTexture,\n 'size': shTexSize,\n 'compressionLevel': shCompressionLevel,\n 'elementsPerTexel': shElementsPerTexel\n };\n // Use three textures for spherical harmonics data, one per color channel\n } else {\n const shComponentCountPerChannel = shComponentCount / 3;\n paddedSHComponentCount = shComponentCountPerChannel;\n if (paddedSHComponentCount % 2 !== 0) paddedSHComponentCount++;\n shTexSize = computeDataTextureSize(shElementsPerTexel, paddedSHComponentCount);\n\n const paddedSHArraySize = shTexSize.x * shTexSize.y * shElementsPerTexel;\n const textureUniforms = [this.material.uniforms.sphericalHarmonicsTextureR,\n this.material.uniforms.sphericalHarmonicsTextureG,\n this.material.uniforms.sphericalHarmonicsTextureB];\n const paddedSHArrays = [];\n const shTextures = [];\n for (let t = 0; t < 3; t++) {\n const paddedSHArray = new SphericalHarmonicsArrayType(paddedSHArraySize);\n paddedSHArrays.push(paddedSHArray);\n for (let c = 0; c < splatCount; c++) {\n const srcBase = shComponentCount * c;\n const destBase = paddedSHComponentCount * c;\n if (shComponentCountPerChannel >= 3) {\n for (let i = 0; i < 3; i++) paddedSHArray[destBase + i] = shData[srcBase + t * 3 + i];\n if (shComponentCountPerChannel >= 8) {\n for (let i = 0; i < 5; i++) paddedSHArray[destBase + 3 + i] = shData[srcBase + 9 + t * 5 + i];\n }\n }\n }\n\n const shTexture = new THREE.DataTexture(paddedSHArray, shTexSize.x, shTexSize.y, texelFormat, shTextureType);\n shTextures.push(shTexture);\n shTexture.needsUpdate = true;\n textureUniforms[t].value = shTexture;\n }\n\n this.material.uniforms.sphericalHarmonicsMultiTextureMode.value = 1;\n this.splatDataTextures['sphericalHarmonics'] = {\n 'componentCount': shComponentCount,\n 'componentCountPerChannel': shComponentCountPerChannel,\n 'paddedComponentCount': paddedSHComponentCount,\n 'data': paddedSHArrays,\n 'textureCount': 3,\n 'textures': shTextures,\n 'size': shTexSize,\n 'compressionLevel': shCompressionLevel,\n 'elementsPerTexel': shElementsPerTexel\n };\n }\n\n this.material.uniforms.sphericalHarmonicsTextureSize.value.copy(shTexSize);\n this.material.uniforms.sphericalHarmonics8BitMode.value = shCompressionLevel === 2 ? 1 : 0;\n for (let s = 0; s < this.scenes.length; s++) {\n const splatBuffer = this.scenes[s].splatBuffer;\n this.material.uniforms.sphericalHarmonics8BitCompressionRangeMin.value[s] =\n splatBuffer.minSphericalHarmonicsCoeff;\n this.material.uniforms.sphericalHarmonics8BitCompressionRangeMax.value[s] =\n splatBuffer.maxSphericalHarmonicsCoeff;\n }\n this.material.uniformsNeedUpdate = true;\n }\n\n const sceneIndexesTexSize = computeDataTextureSize(SCENE_INDEXES_ELEMENTS_PER_TEXEL, 4);\n const paddedTransformIndexes = new Uint32Array(sceneIndexesTexSize.x *\n sceneIndexesTexSize.y * SCENE_INDEXES_ELEMENTS_PER_TEXEL);\n for (let c = 0; c < splatCount; c++) paddedTransformIndexes[c] = this.globalSplatIndexToSceneIndexMap[c];\n const sceneIndexesTexture = new THREE.DataTexture(paddedTransformIndexes, sceneIndexesTexSize.x, sceneIndexesTexSize.y,\n THREE.RedIntegerFormat, THREE.UnsignedIntType);\n sceneIndexesTexture.internalFormat = 'R32UI';\n sceneIndexesTexture.needsUpdate = true;\n this.material.uniforms.sceneIndexesTexture.value = sceneIndexesTexture;\n this.material.uniforms.sceneIndexesTextureSize.value.copy(sceneIndexesTexSize);\n this.material.uniformsNeedUpdate = true;\n this.splatDataTextures['sceneIndexes'] = {\n 'data': paddedTransformIndexes,\n 'texture': sceneIndexesTexture,\n 'size': sceneIndexesTexSize\n };\n this.material.uniforms.sceneCount.value = this.scenes.length;\n }\n\n updateBaseDataFromSplatBuffers(fromSplat, toSplat) {\n const covarancesTextureDesc = this.splatDataTextures['covariances'];\n const covarianceCompressionLevel = covarancesTextureDesc ? covarancesTextureDesc.compressionLevel : undefined;\n const scaleRotationsTextureDesc = this.splatDataTextures['scaleRotations'];\n const scaleRotationCompressionLevel = scaleRotationsTextureDesc ? scaleRotationsTextureDesc.compressionLevel : undefined;\n const shITextureDesc = this.splatDataTextures['sphericalHarmonics'];\n const shCompressionLevel = shITextureDesc ? shITextureDesc.compressionLevel : 0;\n\n this.fillSplatDataArrays(this.splatDataTextures.baseData.covariances, this.splatDataTextures.baseData.scales,\n this.splatDataTextures.baseData.rotations, this.splatDataTextures.baseData.centers,\n this.splatDataTextures.baseData.colors, this.splatDataTextures.baseData.sphericalHarmonics, undefined,\n covarianceCompressionLevel, scaleRotationCompressionLevel, shCompressionLevel,\n fromSplat, toSplat, fromSplat);\n }\n\n updateDataTexturesFromBaseData(fromSplat, toSplat) {\n const covarancesTextureDesc = this.splatDataTextures['covariances'];\n const covarianceCompressionLevel = covarancesTextureDesc ? covarancesTextureDesc.compressionLevel : undefined;\n const scaleRotationsTextureDesc = this.splatDataTextures['scaleRotations'];\n const scaleRotationCompressionLevel = scaleRotationsTextureDesc ? scaleRotationsTextureDesc.compressionLevel : undefined;\n const shTextureDesc = this.splatDataTextures['sphericalHarmonics'];\n const shCompressionLevel = shTextureDesc ? shTextureDesc.compressionLevel : 0;\n\n // Update center & color data texture\n const centerColorsTextureDescriptor = this.splatDataTextures['centerColors'];\n const paddedCenterColors = centerColorsTextureDescriptor.data;\n const centerColorsTexture = centerColorsTextureDescriptor.texture;\n SplatMesh.updateCenterColorsPaddedData(fromSplat, toSplat, this.splatDataTextures.baseData.centers,\n this.splatDataTextures.baseData.colors, paddedCenterColors);\n const centerColorsTextureProps = this.renderer ? this.renderer.properties.get(centerColorsTexture) : null;\n if (!centerColorsTextureProps || !centerColorsTextureProps.__webglTexture) {\n centerColorsTexture.needsUpdate = true;\n } else {\n this.updateDataTexture(paddedCenterColors, centerColorsTextureDescriptor.texture, centerColorsTextureDescriptor.size,\n centerColorsTextureProps, CENTER_COLORS_ELEMENTS_PER_TEXEL, CENTER_COLORS_ELEMENTS_PER_SPLAT, 4,\n fromSplat, toSplat);\n }\n\n // update covariance data texture\n if (covarancesTextureDesc) {\n const covariancesTexture = covarancesTextureDesc.texture;\n const covarancesStartElement = fromSplat * COVARIANCES_ELEMENTS_PER_SPLAT;\n const covariancesEndElement = toSplat * COVARIANCES_ELEMENTS_PER_SPLAT;\n\n if (covarianceCompressionLevel === 0) {\n for (let i = covarancesStartElement; i <= covariancesEndElement; i++) {\n const covariance = this.splatDataTextures.baseData.covariances[i];\n covarancesTextureDesc.data[i] = covariance;\n }\n } else {\n SplatMesh.updatePaddedCompressedCovariancesTextureData(this.splatDataTextures.baseData.covariances,\n covarancesTextureDesc.data,\n fromSplat * covarancesTextureDesc.elementsPerTexelAllocated,\n covarancesStartElement, covariancesEndElement);\n }\n\n const covariancesTextureProps = this.renderer ? this.renderer.properties.get(covariancesTexture) : null;\n if (!covariancesTextureProps || !covariancesTextureProps.__webglTexture) {\n covariancesTexture.needsUpdate = true;\n } else {\n if (covarianceCompressionLevel === 0) {\n this.updateDataTexture(covarancesTextureDesc.data, covarancesTextureDesc.texture, covarancesTextureDesc.size,\n covariancesTextureProps, covarancesTextureDesc.elementsPerTexelStored,\n COVARIANCES_ELEMENTS_PER_SPLAT, 4, fromSplat, toSplat);\n } else {\n this.updateDataTexture(covarancesTextureDesc.data, covarancesTextureDesc.texture, covarancesTextureDesc.size,\n covariancesTextureProps, covarancesTextureDesc.elementsPerTexelAllocated,\n covarancesTextureDesc.elementsPerTexelAllocated, 2, fromSplat, toSplat);\n }\n }\n }\n\n // update scale and rotation data texture\n if (scaleRotationsTextureDesc) {\n const paddedScaleRotations = scaleRotationsTextureDesc.data;\n const scaleRotationsTexture = scaleRotationsTextureDesc.texture;\n const elementsPerSplat = 6;\n const bytesPerElement = scaleRotationCompressionLevel === 0 ? 4 : 2;\n\n SplatMesh.updateScaleRotationsPaddedData(fromSplat, toSplat, this.splatDataTextures.baseData.scales,\n this.splatDataTextures.baseData.rotations, paddedScaleRotations);\n const scaleRotationsTextureProps = this.renderer ? this.renderer.properties.get(scaleRotationsTexture) : null;\n if (!scaleRotationsTextureProps || !scaleRotationsTextureProps.__webglTexture) {\n scaleRotationsTexture.needsUpdate = true;\n } else {\n this.updateDataTexture(paddedScaleRotations, scaleRotationsTextureDesc.texture, scaleRotationsTextureDesc.size,\n scaleRotationsTextureProps, SCALES_ROTATIONS_ELEMENTS_PER_TEXEL, elementsPerSplat, bytesPerElement,\n fromSplat, toSplat);\n }\n }\n\n // update spherical harmonics data texture\n const shData = this.splatDataTextures.baseData.sphericalHarmonics;\n if (shData) {\n let shBytesPerElement = 4;\n if (shCompressionLevel === 1) shBytesPerElement = 2;\n else if (shCompressionLevel === 2) shBytesPerElement = 1;\n\n const updateTexture = (shTexture, shTextureSize, elementsPerTexel, paddedSHArray, paddedSHComponentCount) => {\n const shTextureProps = this.renderer ? this.renderer.properties.get(shTexture) : null;\n if (!shTextureProps || !shTextureProps.__webglTexture) {\n shTexture.needsUpdate = true;\n } else {\n this.updateDataTexture(paddedSHArray, shTexture, shTextureSize, shTextureProps, elementsPerTexel,\n paddedSHComponentCount, shBytesPerElement, fromSplat, toSplat);\n }\n };\n\n const shComponentCount = shTextureDesc.componentCount;\n const paddedSHComponentCount = shTextureDesc.paddedComponentCount;\n\n // Update for the case of a single texture for all spherical harmonics data\n if (shTextureDesc.textureCount === 1) {\n const paddedSHArray = shTextureDesc.data;\n for (let c = fromSplat; c <= toSplat; c++) {\n const srcBase = shComponentCount * c;\n const destBase = paddedSHComponentCount * c;\n for (let i = 0; i < shComponentCount; i++) {\n paddedSHArray[destBase + i] = shData[srcBase + i];\n }\n }\n updateTexture(shTextureDesc.texture, shTextureDesc.size,\n shTextureDesc.elementsPerTexel, paddedSHArray, paddedSHComponentCount);\n // Update for the case of spherical harmonics data split among three textures, one for each color channel\n } else {\n const shComponentCountPerChannel = shTextureDesc.componentCountPerChannel;\n for (let t = 0; t < 3; t++) {\n const paddedSHArray = shTextureDesc.data[t];\n for (let c = fromSplat; c <= toSplat; c++) {\n const srcBase = shComponentCount * c;\n const destBase = paddedSHComponentCount * c;\n if (shComponentCountPerChannel >= 3) {\n for (let i = 0; i < 3; i++) paddedSHArray[destBase + i] = shData[srcBase + t * 3 + i];\n if (shComponentCountPerChannel >= 8) {\n for (let i = 0; i < 5; i++) paddedSHArray[destBase + 3 + i] = shData[srcBase + 9 + t * 5 + i];\n }\n }\n }\n updateTexture(shTextureDesc.textures[t], shTextureDesc.size,\n shTextureDesc.elementsPerTexel, paddedSHArray, paddedSHComponentCount);\n }\n }\n }\n\n // update scene index & transform data\n const sceneIndexesTexDesc = this.splatDataTextures['sceneIndexes'];\n const paddedSceneIndexes = sceneIndexesTexDesc.data;\n for (let c = this.lastBuildSplatCount; c <= toSplat; c++) {\n paddedSceneIndexes[c] = this.globalSplatIndexToSceneIndexMap[c];\n }\n const sceneIndexesTexture = sceneIndexesTexDesc.texture;\n const sceneIndexesTextureProps = this.renderer ? this.renderer.properties.get(sceneIndexesTexture) : null;\n if (!sceneIndexesTextureProps || !sceneIndexesTextureProps.__webglTexture) {\n sceneIndexesTexture.needsUpdate = true;\n } else {\n this.updateDataTexture(paddedSceneIndexes, sceneIndexesTexDesc.texture, sceneIndexesTexDesc.size,\n sceneIndexesTextureProps, 1, 1, 1, this.lastBuildSplatCount, toSplat);\n }\n }\n\n getTargetCovarianceCompressionLevel() {\n return this.halfPrecisionCovariancesOnGPU ? 1 : 0;\n }\n\n getTargetSphericalHarmonicsCompressionLevel() {\n return Math.max(1, this.getMaximumSplatBufferCompressionLevel());\n }\n\n getMaximumSplatBufferCompressionLevel() {\n let maxCompressionLevel;\n for (let i = 0; i < this.scenes.length; i++) {\n const scene = this.getScene(i);\n const splatBuffer = scene.splatBuffer;\n if (i === 0 || splatBuffer.compressionLevel > maxCompressionLevel) {\n maxCompressionLevel = splatBuffer.compressionLevel;\n }\n }\n return maxCompressionLevel;\n }\n\n getMinimumSplatBufferCompressionLevel() {\n let minCompressionLevel;\n for (let i = 0; i < this.scenes.length; i++) {\n const scene = this.getScene(i);\n const splatBuffer = scene.splatBuffer;\n if (i === 0 || splatBuffer.compressionLevel < minCompressionLevel) {\n minCompressionLevel = splatBuffer.compressionLevel;\n }\n }\n return minCompressionLevel;\n }\n\n static computeTextureUpdateRegion(startSplat, endSplat, textureWidth, elementsPerTexel, elementsPerSplat) {\n const texelsPerSplat = elementsPerSplat / elementsPerTexel;\n\n const startSplatTexels = startSplat * texelsPerSplat;\n const startRow = Math.floor(startSplatTexels / textureWidth);\n const startRowElement = startRow * textureWidth * elementsPerTexel;\n\n const endSplatTexels = endSplat * texelsPerSplat;\n const endRow = Math.floor(endSplatTexels / textureWidth);\n const endRowEndElement = endRow * textureWidth * elementsPerTexel + (textureWidth * elementsPerTexel);\n\n return {\n 'dataStart': startRowElement,\n 'dataEnd': endRowEndElement,\n 'startRow': startRow,\n 'endRow': endRow\n };\n }\n\n updateDataTexture(paddedData, texture, textureSize, textureProps, elementsPerTexel, elementsPerSplat, bytesPerElement, from, to) {\n const gl = this.renderer.getContext();\n const updateRegion = SplatMesh.computeTextureUpdateRegion(from, to, textureSize.x, elementsPerTexel, elementsPerSplat);\n const updateElementCount = updateRegion.dataEnd - updateRegion.dataStart;\n const updateDataView = new paddedData.constructor(paddedData.buffer,\n updateRegion.dataStart * bytesPerElement, updateElementCount);\n const updateHeight = updateRegion.endRow - updateRegion.startRow + 1;\n const glType = this.webGLUtils.convert(texture.type);\n const glFormat = this.webGLUtils.convert(texture.format, texture.colorSpace);\n const currentTexture = gl.getParameter(gl.TEXTURE_BINDING_2D);\n gl.bindTexture(gl.TEXTURE_2D, textureProps.__webglTexture);\n gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, updateRegion.startRow,\n textureSize.x, updateHeight, glFormat, glType, updateDataView);\n gl.bindTexture(gl.TEXTURE_2D, currentTexture);\n }\n\n static updatePaddedCompressedCovariancesTextureData(sourceData, textureData, textureDataStartIndex, fromElement, toElement) {\n let textureDataView = new DataView(textureData.buffer);\n let textureDataIndex = textureDataStartIndex;\n let sequentialCount = 0;\n for (let i = fromElement; i <= toElement; i+=2) {\n textureDataView.setUint16(textureDataIndex * 2, sourceData[i], true);\n textureDataView.setUint16(textureDataIndex * 2 + 2, sourceData[i + 1], true);\n textureDataIndex += 2;\n sequentialCount++;\n if (sequentialCount >= 3) {\n textureDataIndex += 2;\n sequentialCount = 0;\n }\n }\n }\n\n static updateCenterColorsPaddedData(from, to, centers, colors, paddedCenterColors) {\n for (let c = from; c <= to; c++) {\n const colorsBase = c * 4;\n const centersBase = c * 3;\n const centerColorsBase = c * 4;\n paddedCenterColors[centerColorsBase] = rgbaArrayToInteger(colors, colorsBase);\n paddedCenterColors[centerColorsBase + 1] = uintEncodedFloat(centers[centersBase]);\n paddedCenterColors[centerColorsBase + 2] = uintEncodedFloat(centers[centersBase + 1]);\n paddedCenterColors[centerColorsBase + 3] = uintEncodedFloat(centers[centersBase + 2]);\n }\n }\n\n static updateScaleRotationsPaddedData(from, to, scales, rotations, paddedScaleRotations) {\n const combinedSize = 6;\n for (let c = from; c <= to; c++) {\n const scaleBase = c * 3;\n const rotationBase = c * 4;\n const scaleRotationsBase = c * combinedSize;\n\n paddedScaleRotations[scaleRotationsBase] = scales[scaleBase];\n paddedScaleRotations[scaleRotationsBase + 1] = scales[scaleBase + 1];\n paddedScaleRotations[scaleRotationsBase + 2] = scales[scaleBase + 2];\n\n paddedScaleRotations[scaleRotationsBase + 3] = rotations[rotationBase];\n paddedScaleRotations[scaleRotationsBase + 4] = rotations[rotationBase + 1];\n paddedScaleRotations[scaleRotationsBase + 5] = rotations[rotationBase + 2];\n }\n }\n\n updateVisibleRegion(sinceLastBuildOnly) {\n const splatCount = this.getSplatCount(true);\n const tempCenter = new THREE.Vector3();\n if (!sinceLastBuildOnly) {\n const avgCenter = new THREE.Vector3();\n this.scenes.forEach((scene) => {\n avgCenter.add(scene.splatBuffer.sceneCenter);\n });\n avgCenter.multiplyScalar(1.0 / this.scenes.length);\n this.calculatedSceneCenter.copy(avgCenter);\n this.material.uniforms.sceneCenter.value.copy(this.calculatedSceneCenter);\n this.material.uniformsNeedUpdate = true;\n }\n\n const startSplatFormMaxDistanceCalc = sinceLastBuildOnly ? this.lastBuildSplatCount : 0;\n for (let i = startSplatFormMaxDistanceCalc; i < splatCount; i++) {\n this.getSplatCenter(i, tempCenter, true);\n const distFromCSceneCenter = tempCenter.sub(this.calculatedSceneCenter).length();\n if (distFromCSceneCenter > this.maxSplatDistanceFromSceneCenter) this.maxSplatDistanceFromSceneCenter = distFromCSceneCenter;\n }\n\n if (this.maxSplatDistanceFromSceneCenter - this.visibleRegionBufferRadius > VISIBLE_REGION_EXPANSION_DELTA) {\n this.visibleRegionBufferRadius = this.maxSplatDistanceFromSceneCenter;\n this.visibleRegionRadius = Math.max(this.visibleRegionBufferRadius - VISIBLE_REGION_EXPANSION_DELTA, 0.0);\n }\n if (this.finalBuild) this.visibleRegionRadius = this.visibleRegionBufferRadius = this.maxSplatDistanceFromSceneCenter;\n this.updateVisibleRegionFadeDistance();\n }\n\n updateVisibleRegionFadeDistance(sceneRevealMode = SceneRevealMode.Default) {\n const fastFadeRate = SCENE_FADEIN_RATE_FAST * this.sceneFadeInRateMultiplier;\n const gradualFadeRate = SCENE_FADEIN_RATE_GRADUAL * this.sceneFadeInRateMultiplier;\n const defaultFadeInRate = this.finalBuild ? fastFadeRate : gradualFadeRate;\n const fadeInRate = sceneRevealMode === SceneRevealMode.Default ? defaultFadeInRate : gradualFadeRate;\n this.visibleRegionFadeStartRadius = (this.visibleRegionRadius - this.visibleRegionFadeStartRadius) *\n fadeInRate + this.visibleRegionFadeStartRadius;\n const fadeInPercentage = (this.visibleRegionBufferRadius > 0) ?\n (this.visibleRegionFadeStartRadius / this.visibleRegionBufferRadius) : 0;\n const fadeInComplete = fadeInPercentage > 0.99;\n const shaderFadeInComplete = (fadeInComplete || sceneRevealMode === SceneRevealMode.Instant) ? 1 : 0;\n\n this.material.uniforms.visibleRegionFadeStartRadius.value = this.visibleRegionFadeStartRadius;\n this.material.uniforms.visibleRegionRadius.value = this.visibleRegionRadius;\n this.material.uniforms.firstRenderTime.value = this.firstRenderTime;\n this.material.uniforms.currentTime.value = performance.now();\n this.material.uniforms.fadeInComplete.value = shaderFadeInComplete;\n this.material.uniformsNeedUpdate = true;\n this.visibleRegionChanging = !fadeInComplete;\n }\n\n /**\n * Set the indexes of splats that should be rendered; should be sorted in desired render order.\n * @param {Uint32Array} globalIndexes Sorted index list of splats to be rendered\n * @param {number} renderSplatCount Total number of splats to be rendered. Necessary because we may not want to render\n * every splat.\n */\n updateRenderIndexes(globalIndexes, renderSplatCount) {\n const geometry = this.geometry;\n geometry.attributes.splatIndex.set(globalIndexes);\n geometry.attributes.splatIndex.needsUpdate = true;\n if (renderSplatCount > 0 && this.firstRenderTime === -1) this.firstRenderTime = performance.now();\n geometry.instanceCount = renderSplatCount;\n geometry.setDrawRange(0, renderSplatCount);\n }\n\n /**\n * Update the transforms for each scene in this splat mesh from their individual components (position,\n * quaternion, and scale)\n */\n updateTransforms() {\n for (let i = 0; i < this.scenes.length; i++) {\n const scene = this.getScene(i);\n scene.updateTransform(this.dynamicMode);\n }\n }\n\n updateUniforms = function() {\n\n const viewport = new THREE.Vector2();\n\n return function(renderDimensions, cameraFocalLengthX, cameraFocalLengthY,\n orthographicMode, orthographicZoom, inverseFocalAdjustment) {\n const splatCount = this.getSplatCount();\n if (splatCount > 0) {\n viewport.set(renderDimensions.x * this.devicePixelRatio,\n renderDimensions.y * this.devicePixelRatio);\n this.material.uniforms.viewport.value.copy(viewport);\n this.material.uniforms.basisViewport.value.set(1.0 / viewport.x, 1.0 / viewport.y);\n this.material.uniforms.focal.value.set(cameraFocalLengthX, cameraFocalLengthY);\n this.material.uniforms.orthographicMode.value = orthographicMode ? 1 : 0;\n this.material.uniforms.orthoZoom.value = orthographicZoom;\n this.material.uniforms.inverseFocalAdjustment.value = inverseFocalAdjustment;\n if (this.dynamicMode) {\n for (let i = 0; i < this.scenes.length; i++) {\n this.material.uniforms.transforms.value[i].copy(this.getScene(i).transform);\n }\n }\n if (this.enableOptionalEffects) {\n for (let i = 0; i < this.scenes.length; i++) {\n this.material.uniforms.sceneOpacity.value[i] = clamp(this.getScene(i).opacity, 0.0, 1.0);\n this.material.uniforms.sceneVisibility.value[i] = this.getScene(i).visible ? 1 : 0;\n this.material.uniformsNeedUpdate = true;\n }\n }\n this.material.uniformsNeedUpdate = true;\n }\n };\n\n }();\n\n setSplatScale(splatScale = 1) {\n this.splatScale = splatScale;\n this.material.uniforms.splatScale.value = splatScale;\n this.material.uniformsNeedUpdate = true;\n }\n\n getSplatScale() {\n return this.splatScale;\n }\n\n setPointCloudModeEnabled(enabled) {\n this.pointCloudModeEnabled = enabled;\n this.material.uniforms.pointCloudModeEnabled.value = enabled ? 1 : 0;\n this.material.uniformsNeedUpdate = true;\n }\n\n getPointCloudModeEnabled() {\n return this.pointCloudModeEnabled;\n }\n\n getSplatDataTextures() {\n return this.splatDataTextures;\n }\n\n getSplatCount(includeSinceLastBuild = false) {\n if (!includeSinceLastBuild) return this.lastBuildSplatCount;\n else return SplatMesh.getTotalSplatCountForScenes(this.scenes);\n }\n\n static getTotalSplatCountForScenes(scenes) {\n let totalSplatCount = 0;\n for (let scene of scenes) {\n if (scene && scene.splatBuffer) totalSplatCount += scene.splatBuffer.getSplatCount();\n }\n return totalSplatCount;\n }\n\n static getTotalSplatCountForSplatBuffers(splatBuffers) {\n let totalSplatCount = 0;\n for (let splatBuffer of splatBuffers) totalSplatCount += splatBuffer.getSplatCount();\n return totalSplatCount;\n }\n\n getMaxSplatCount() {\n return SplatMesh.getTotalMaxSplatCountForScenes(this.scenes);\n }\n\n static getTotalMaxSplatCountForScenes(scenes) {\n let totalSplatCount = 0;\n for (let scene of scenes) {\n if (scene && scene.splatBuffer) totalSplatCount += scene.splatBuffer.getMaxSplatCount();\n }\n return totalSplatCount;\n }\n\n static getTotalMaxSplatCountForSplatBuffers(splatBuffers) {\n let totalSplatCount = 0;\n for (let splatBuffer of splatBuffers) totalSplatCount += splatBuffer.getMaxSplatCount();\n return totalSplatCount;\n }\n\n disposeDistancesComputationGPUResources() {\n\n if (!this.renderer) return;\n\n const gl = this.renderer.getContext();\n\n if (this.distancesTransformFeedback.vao) {\n gl.deleteVertexArray(this.distancesTransformFeedback.vao);\n this.distancesTransformFeedback.vao = null;\n }\n if (this.distancesTransformFeedback.program) {\n gl.deleteProgram(this.distancesTransformFeedback.program);\n gl.deleteShader(this.distancesTransformFeedback.vertexShader);\n gl.deleteShader(this.distancesTransformFeedback.fragmentShader);\n this.distancesTransformFeedback.program = null;\n this.distancesTransformFeedback.vertexShader = null;\n this.distancesTransformFeedback.fragmentShader = null;\n }\n this.disposeDistancesComputationGPUBufferResources();\n if (this.distancesTransformFeedback.id) {\n gl.deleteTransformFeedback(this.distancesTransformFeedback.id);\n this.distancesTransformFeedback.id = null;\n }\n }\n\n disposeDistancesComputationGPUBufferResources() {\n\n if (!this.renderer) return;\n\n const gl = this.renderer.getContext();\n\n if (this.distancesTransformFeedback.centersBuffer) {\n this.distancesTransformFeedback.centersBuffer = null;\n gl.deleteBuffer(this.distancesTransformFeedback.centersBuffer);\n }\n if (this.distancesTransformFeedback.outDistancesBuffer) {\n gl.deleteBuffer(this.distancesTransformFeedback.outDistancesBuffer);\n this.distancesTransformFeedback.outDistancesBuffer = null;\n }\n }\n\n /**\n * Set the Three.js renderer used by this splat mesh\n * @param {THREE.WebGLRenderer} renderer Instance of THREE.WebGLRenderer\n */\n setRenderer(renderer) {\n if (renderer !== this.renderer) {\n this.renderer = renderer;\n const gl = this.renderer.getContext();\n const extensions = new WebGLExtensions(gl);\n const capabilities = new WebGLCapabilities(gl, extensions, {});\n extensions.init(capabilities);\n this.webGLUtils = new THREE.WebGLUtils(gl, extensions, capabilities);\n if (this.enableDistancesComputationOnGPU && this.getSplatCount() > 0) {\n this.setupDistancesComputationTransformFeedback();\n const { centers, sceneIndexes } = this.getDataForDistancesComputation(0, this.getSplatCount() - 1);\n this.refreshGPUBuffersForDistancesComputation(centers, sceneIndexes);\n }\n }\n }\n\n setupDistancesComputationTransformFeedback = function() {\n\n let currentMaxSplatCount;\n\n return function() {\n const maxSplatCount = this.getMaxSplatCount();\n\n if (!this.renderer) return;\n\n const rebuildGPUObjects = (this.lastRenderer !== this.renderer);\n const rebuildBuffers = currentMaxSplatCount !== maxSplatCount;\n\n if (!rebuildGPUObjects && !rebuildBuffers) return;\n\n if (rebuildGPUObjects) {\n this.disposeDistancesComputationGPUResources();\n } else if (rebuildBuffers) {\n this.disposeDistancesComputationGPUBufferResources();\n }\n\n const gl = this.renderer.getContext();\n\n const createShader = (gl, type, source) => {\n const shader = gl.createShader(type);\n if (!shader) {\n console.error('Fatal error: gl could not create a shader object.');\n return null;\n }\n\n gl.shaderSource(shader, source);\n gl.compileShader(shader);\n\n const compiled = gl.getShaderParameter(shader, gl.COMPILE_STATUS);\n if (!compiled) {\n let typeName = 'unknown';\n if (type === gl.VERTEX_SHADER) typeName = 'vertex shader';\n else if (type === gl.FRAGMENT_SHADER) typeName = 'fragement shader';\n const errors = gl.getShaderInfoLog(shader);\n console.error('Failed to compile ' + typeName + ' with these errors:' + errors);\n gl.deleteShader(shader);\n return null;\n }\n\n return shader;\n };\n\n let vsSource;\n if (this.integerBasedDistancesComputation) {\n vsSource =\n `#version 300 es\n in ivec4 center;\n flat out int distance;`;\n if (this.dynamicMode) {\n vsSource += `\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 } else {\n vsSource += `\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 }\n } else {\n vsSource =\n `#version 300 es\n in vec4 center;\n flat out float distance;`;\n if (this.dynamicMode) {\n vsSource += `\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 } else {\n vsSource += `\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 }\n }\n\n const fsSource =\n `#version 300 es\n precision lowp float;\n out vec4 fragColor;\n void main(){}\n `;\n\n const currentVao = gl.getParameter(gl.VERTEX_ARRAY_BINDING);\n const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);\n const currentProgramDeleted = currentProgram ? gl.getProgramParameter(currentProgram, gl.DELETE_STATUS) : false;\n\n if (rebuildGPUObjects) {\n this.distancesTransformFeedback.vao = gl.createVertexArray();\n }\n\n gl.bindVertexArray(this.distancesTransformFeedback.vao);\n\n if (rebuildGPUObjects) {\n const program = gl.createProgram();\n const vertexShader = createShader(gl, gl.VERTEX_SHADER, vsSource);\n const fragmentShader = createShader(gl, gl.FRAGMENT_SHADER, fsSource);\n if (!vertexShader || !fragmentShader) {\n throw new Error('Could not compile shaders for distances computation on GPU.');\n }\n gl.attachShader(program, vertexShader);\n gl.attachShader(program, fragmentShader);\n gl.transformFeedbackVaryings(program, ['distance'], gl.SEPARATE_ATTRIBS);\n gl.linkProgram(program);\n\n const linked = gl.getProgramParameter(program, gl.LINK_STATUS);\n if (!linked) {\n const error = gl.getProgramInfoLog(program);\n console.error('Fatal error: Failed to link program: ' + error);\n gl.deleteProgram(program);\n gl.deleteShader(fragmentShader);\n gl.deleteShader(vertexShader);\n throw new Error('Could not link shaders for distances computation on GPU.');\n }\n\n this.distancesTransformFeedback.program = program;\n this.distancesTransformFeedback.vertexShader = vertexShader;\n this.distancesTransformFeedback.vertexShader = fragmentShader;\n }\n\n gl.useProgram(this.distancesTransformFeedback.program);\n\n this.distancesTransformFeedback.centersLoc =\n gl.getAttribLocation(this.distancesTransformFeedback.program, 'center');\n if (this.dynamicMode) {\n this.distancesTransformFeedback.sceneIndexesLoc =\n gl.getAttribLocation(this.distancesTransformFeedback.program, 'sceneIndex');\n for (let i = 0; i < this.scenes.length; i++) {\n this.distancesTransformFeedback.transformsLocs[i] =\n gl.getUniformLocation(this.distancesTransformFeedback.program, `transforms[${i}]`);\n }\n } else {\n this.distancesTransformFeedback.modelViewProjLoc =\n gl.getUniformLocation(this.distancesTransformFeedback.program, 'modelViewProj');\n }\n\n if (rebuildGPUObjects || rebuildBuffers) {\n this.distancesTransformFeedback.centersBuffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, this.distancesTransformFeedback.centersBuffer);\n gl.enableVertexAttribArray(this.distancesTransformFeedback.centersLoc);\n if (this.integerBasedDistancesComputation) {\n gl.vertexAttribIPointer(this.distancesTransformFeedback.centersLoc, 4, gl.INT, 0, 0);\n } else {\n gl.vertexAttribPointer(this.distancesTransformFeedback.centersLoc, 4, gl.FLOAT, false, 0, 0);\n }\n\n if (this.dynamicMode) {\n this.distancesTransformFeedback.sceneIndexesBuffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, this.distancesTransformFeedback.sceneIndexesBuffer);\n gl.enableVertexAttribArray(this.distancesTransformFeedback.sceneIndexesLoc);\n gl.vertexAttribIPointer(this.distancesTransformFeedback.sceneIndexesLoc, 1, gl.UNSIGNED_INT, 0, 0);\n }\n }\n\n if (rebuildGPUObjects || rebuildBuffers) {\n this.distancesTransformFeedback.outDistancesBuffer = gl.createBuffer();\n }\n gl.bindBuffer(gl.ARRAY_BUFFER, this.distancesTransformFeedback.outDistancesBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, maxSplatCount * 4, gl.STATIC_READ);\n\n if (rebuildGPUObjects) {\n this.distancesTransformFeedback.id = gl.createTransformFeedback();\n }\n gl.bindTransformFeedback(gl.TRANSFORM_FEEDBACK, this.distancesTransformFeedback.id);\n gl.bindBufferBase(gl.TRANSFORM_FEEDBACK_BUFFER, 0, this.distancesTransformFeedback.outDistancesBuffer);\n\n if (currentProgram && currentProgramDeleted !== true) gl.useProgram(currentProgram);\n if (currentVao) gl.bindVertexArray(currentVao);\n\n this.lastRenderer = this.renderer;\n currentMaxSplatCount = maxSplatCount;\n };\n\n }();\n\n /**\n * Refresh GPU buffers used for computing splat distances with centers data from the scenes for this mesh.\n * @param {boolean} isUpdate Specify whether or not to update the GPU buffer or to initialize & fill\n * @param {Array<number>} centers The splat centers data\n * @param {number} offsetSplats Offset in the GPU buffer at which to start updating data, specified in splats\n */\n updateGPUCentersBufferForDistancesComputation(isUpdate, centers, offsetSplats) {\n\n if (!this.renderer) return;\n\n const gl = this.renderer.getContext();\n\n const currentVao = gl.getParameter(gl.VERTEX_ARRAY_BINDING);\n gl.bindVertexArray(this.distancesTransformFeedback.vao);\n\n const ArrayType = this.integerBasedDistancesComputation ? Uint32Array : Float32Array;\n const attributeBytesPerCenter = 16;\n const subBufferOffset = offsetSplats * attributeBytesPerCenter;\n\n gl.bindBuffer(gl.ARRAY_BUFFER, this.distancesTransformFeedback.centersBuffer);\n\n if (isUpdate) {\n gl.bufferSubData(gl.ARRAY_BUFFER, subBufferOffset, centers);\n } else {\n const maxArray = new ArrayType(this.getMaxSplatCount() * attributeBytesPerCenter);\n maxArray.set(centers);\n gl.bufferData(gl.ARRAY_BUFFER, maxArray, gl.STATIC_DRAW);\n }\n\n gl.bindBuffer(gl.ARRAY_BUFFER, null);\n\n if (currentVao) gl.bindVertexArray(currentVao);\n }\n\n /**\n * Refresh GPU buffers used for pre-computing splat distances with centers data from the scenes for this mesh.\n * @param {boolean} isUpdate Specify whether or not to update the GPU buffer or to initialize & fill\n * @param {Array<number>} sceneIndexes The splat scene indexes\n * @param {number} offsetSplats Offset in the GPU buffer at which to start updating data, specified in splats\n */\n updateGPUTransformIndexesBufferForDistancesComputation(isUpdate, sceneIndexes, offsetSplats) {\n\n if (!this.renderer || !this.dynamicMode) return;\n\n const gl = this.renderer.getContext();\n\n const currentVao = gl.getParameter(gl.VERTEX_ARRAY_BINDING);\n gl.bindVertexArray(this.distancesTransformFeedback.vao);\n\n const subBufferOffset = offsetSplats * 4;\n\n gl.bindBuffer(gl.ARRAY_BUFFER, this.distancesTransformFeedback.sceneIndexesBuffer);\n\n if (isUpdate) {\n gl.bufferSubData(gl.ARRAY_BUFFER, subBufferOffset, sceneIndexes);\n } else {\n const maxArray = new Uint32Array(this.getMaxSplatCount() * 4);\n maxArray.set(sceneIndexes);\n gl.bufferData(gl.ARRAY_BUFFER, maxArray, gl.STATIC_DRAW);\n }\n gl.bindBuffer(gl.ARRAY_BUFFER, null);\n\n if (currentVao) gl.bindVertexArray(currentVao);\n }\n\n /**\n * Get a typed array containing a mapping from global splat indexes to their scene index.\n * @param {number} start Starting splat index to store\n * @param {number} end Ending splat index to store\n * @return {Uint32Array}\n */\n getSceneIndexes(start, end) {\n\n let sceneIndexes;\n const fillCount = end - start + 1;\n sceneIndexes = new Uint32Array(fillCount);\n for (let i = start; i <= end; i++) {\n sceneIndexes[i] = this.globalSplatIndexToSceneIndexMap[i];\n }\n\n return sceneIndexes;\n }\n\n /**\n * Fill 'array' with the transforms for each scene in this splat mesh.\n * @param {Array} array Empty array to be filled with scene transforms. If not empty, contents will be overwritten.\n */\n fillTransformsArray = function() {\n\n const tempArray = [];\n\n return function(array) {\n if (tempArray.length !== array.length) tempArray.length = array.length;\n for (let i = 0; i < this.scenes.length; i++) {\n const sceneTransform = this.getScene(i).transform;\n const sceneTransformElements = sceneTransform.elements;\n for (let j = 0; j < 16; j++) {\n tempArray[i * 16 + j] = sceneTransformElements[j];\n }\n }\n array.set(tempArray);\n };\n\n }();\n\n computeDistancesOnGPU = function() {\n\n const tempMatrix = new THREE.Matrix4();\n\n return function(modelViewProjMatrix, outComputedDistances) {\n if (!this.renderer) return;\n\n // console.time(\"gpu_compute_distances\");\n const gl = this.renderer.getContext();\n\n const currentVao = gl.getParameter(gl.VERTEX_ARRAY_BINDING);\n const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);\n const currentProgramDeleted = currentProgram ? gl.getProgramParameter(currentProgram, gl.DELETE_STATUS) : false;\n\n gl.bindVertexArray(this.distancesTransformFeedback.vao);\n gl.useProgram(this.distancesTransformFeedback.program);\n\n gl.enable(gl.RASTERIZER_DISCARD);\n\n if (this.dynamicMode) {\n for (let i = 0; i < this.scenes.length; i++) {\n tempMatrix.copy(this.getScene(i).transform);\n tempMatrix.premultiply(modelViewProjMatrix);\n\n if (this.integerBasedDistancesComputation) {\n const iTempMatrix = SplatMesh.getIntegerMatrixArray(tempMatrix);\n const iTransform = [iTempMatrix[2], iTempMatrix[6], iTempMatrix[10], iTempMatrix[14]];\n gl.uniform4i(this.distancesTransformFeedback.transformsLocs[i], iTransform[0], iTransform[1],\n iTransform[2], iTransform[3]);\n } else {\n gl.uniformMatrix4fv(this.distancesTransformFeedback.transformsLocs[i], false, tempMatrix.elements);\n }\n }\n } else {\n if (this.integerBasedDistancesComputation) {\n const iViewProjMatrix = SplatMesh.getIntegerMatrixArray(modelViewProjMatrix);\n const iViewProj = [iViewProjMatrix[2], iViewProjMatrix[6], iViewProjMatrix[10]];\n gl.uniform3i(this.distancesTransformFeedback.modelViewProjLoc, iViewProj[0], iViewProj[1], iViewProj[2]);\n } else {\n const viewProj = [modelViewProjMatrix.elements[2], modelViewProjMatrix.elements[6], modelViewProjMatrix.elements[10]];\n gl.uniform3f(this.distancesTransformFeedback.modelViewProjLoc, viewProj[0], viewProj[1], viewProj[2]);\n }\n }\n\n gl.bindBuffer(gl.ARRAY_BUFFER, this.distancesTransformFeedback.centersBuffer);\n gl.enableVertexAttribArray(this.distancesTransformFeedback.centersLoc);\n if (this.integerBasedDistancesComputation) {\n gl.vertexAttribIPointer(this.distancesTransformFeedback.centersLoc, 4, gl.INT, 0, 0);\n } else {\n gl.vertexAttribPointer(this.distancesTransformFeedback.centersLoc, 4, gl.FLOAT, false, 0, 0);\n }\n\n if (this.dynamicMode) {\n gl.bindBuffer(gl.ARRAY_BUFFER, this.distancesTransformFeedback.sceneIndexesBuffer);\n gl.enableVertexAttribArray(this.distancesTransformFeedback.sceneIndexesLoc);\n gl.vertexAttribIPointer(this.distancesTransformFeedback.sceneIndexesLoc, 1, gl.UNSIGNED_INT, 0, 0);\n }\n\n gl.bindTransformFeedback(gl.TRANSFORM_FEEDBACK, this.distancesTransformFeedback.id);\n gl.bindBufferBase(gl.TRANSFORM_FEEDBACK_BUFFER, 0, this.distancesTransformFeedback.outDistancesBuffer);\n\n gl.beginTransformFeedback(gl.POINTS);\n gl.drawArrays(gl.POINTS, 0, this.getSplatCount());\n gl.endTransformFeedback();\n\n gl.bindBufferBase(gl.TRANSFORM_FEEDBACK_BUFFER, 0, null);\n gl.bindTransformFeedback(gl.TRANSFORM_FEEDBACK, null);\n\n gl.disable(gl.RASTERIZER_DISCARD);\n\n const sync = gl.fenceSync(gl.SYNC_GPU_COMMANDS_COMPLETE, 0);\n gl.flush();\n\n const promise = new Promise((resolve) => {\n const checkSync = () => {\n if (this.disposed) {\n resolve();\n } else {\n const timeout = 0;\n const bitflags = 0;\n const status = gl.clientWaitSync(sync, bitflags, timeout);\n switch (status) {\n case gl.TIMEOUT_EXPIRED:\n this.computeDistancesOnGPUSyncTimeout = setTimeout(checkSync);\n return this.computeDistancesOnGPUSyncTimeout;\n case gl.WAIT_FAILED:\n throw new Error('should never get here');\n default:\n this.computeDistancesOnGPUSyncTimeout = null;\n gl.deleteSync(sync);\n const currentVao = gl.getParameter(gl.VERTEX_ARRAY_BINDING);\n gl.bindVertexArray(this.distancesTransformFeedback.vao);\n gl.bindBuffer(gl.ARRAY_BUFFER, this.distancesTransformFeedback.outDistancesBuffer);\n gl.getBufferSubData(gl.ARRAY_BUFFER, 0, outComputedDistances);\n gl.bindBuffer(gl.ARRAY_BUFFER, null);\n\n if (currentVao) gl.bindVertexArray(currentVao);\n\n // console.timeEnd(\"gpu_compute_distances\");\n\n resolve();\n }\n }\n };\n this.computeDistancesOnGPUSyncTimeout = setTimeout(checkSync);\n });\n\n if (currentProgram && currentProgramDeleted !== true) gl.useProgram(currentProgram);\n if (currentVao) gl.bindVertexArray(currentVao);\n\n return promise;\n };\n\n }();\n\n /**\n * Given a global splat index, return corresponding local data (splat buffer, index of splat in that splat\n * buffer, and the corresponding transform)\n * @param {number} globalIndex Global splat index\n * @param {object} paramsObj Object in which to store local data\n * @param {boolean} returnSceneTransform By default, the transform of the scene to which the splat at 'globalIndex' belongs will be\n * returned via the 'sceneTransform' property of 'paramsObj' only if the splat mesh is static.\n * If 'returnSceneTransform' is true, the 'sceneTransform' property will always contain the scene\n * transform, and if 'returnSceneTransform' is false, the 'sceneTransform' property will always\n * be null.\n */\n getLocalSplatParameters(globalIndex, paramsObj, returnSceneTransform) {\n if (returnSceneTransform === undefined || returnSceneTransform === null) {\n returnSceneTransform = this.dynamicMode ? false : true;\n }\n paramsObj.splatBuffer = this.getSplatBufferForSplat(globalIndex);\n paramsObj.localIndex = this.getSplatLocalIndex(globalIndex);\n paramsObj.sceneTransform = returnSceneTransform ? this.getSceneTransformForSplat(globalIndex) : null;\n }\n\n /**\n * Fill arrays with splat data and apply transforms if appropriate. Each array is optional.\n * @param {Float32Array} covariances Target storage for splat covariances\n * @param {Float32Array} scales Target storage for splat scales\n * @param {Float32Array} rotations Target storage for splat rotations\n * @param {Float32Array} centers Target storage for splat centers\n * @param {Uint8Array} colors Target storage for splat colors\n * @param {Float32Array} sphericalHarmonics Target storage for spherical harmonics\n * @param {boolean} applySceneTransform By default, scene transforms are applied to relevant splat data only if the splat mesh is\n * static. If 'applySceneTransform' is true, scene transforms will always be applied and if\n * it is false, they will never be applied. If undefined, the default behavior will apply.\n * @param {number} covarianceCompressionLevel The compression level for covariances in the destination array\n * @param {number} sphericalHarmonicsCompressionLevel The compression level for spherical harmonics in the destination array\n * @param {number} srcStart The start location from which to pull source data\n * @param {number} srcEnd The end location from which to pull source data\n * @param {number} destStart The start location from which to write data\n */\n fillSplatDataArrays(covariances, scales, rotations, centers, colors, sphericalHarmonics, applySceneTransform,\n covarianceCompressionLevel = 0, scaleRotationCompressionLevel = 0, sphericalHarmonicsCompressionLevel = 1,\n srcStart, srcEnd, destStart = 0, sceneIndex) {\n const scaleOverride = new THREE.Vector3();\n scaleOverride.x = undefined;\n scaleOverride.y = undefined;\n if (this.splatRenderMode === SplatRenderMode.ThreeD) {\n scaleOverride.z = undefined;\n } else {\n scaleOverride.z = 1;\n }\n const tempTransform = new THREE.Matrix4();\n\n let startSceneIndex = 0;\n let endSceneIndex = this.scenes.length - 1;\n if (sceneIndex !== undefined && sceneIndex !== null && sceneIndex >= 0 && sceneIndex <= this.scenes.length) {\n startSceneIndex = sceneIndex;\n endSceneIndex = sceneIndex;\n }\n for (let i = startSceneIndex; i <= endSceneIndex; i++) {\n if (applySceneTransform === undefined || applySceneTransform === null) {\n applySceneTransform = this.dynamicMode ? false : true;\n }\n\n const scene = this.getScene(i);\n const splatBuffer = scene.splatBuffer;\n let sceneTransform;\n if (applySceneTransform) {\n this.getSceneTransform(i, tempTransform);\n sceneTransform = tempTransform;\n }\n if (covariances) {\n splatBuffer.fillSplatCovarianceArray(covariances, sceneTransform, srcStart, srcEnd, destStart, covarianceCompressionLevel);\n }\n if (scales || rotations) {\n if (!scales || !rotations) {\n throw new Error('SplatMesh::fillSplatDataArrays() -> \"scales\" and \"rotations\" must both be valid.');\n }\n splatBuffer.fillSplatScaleRotationArray(scales, rotations, sceneTransform,\n srcStart, srcEnd, destStart, scaleRotationCompressionLevel, scaleOverride);\n }\n if (centers) splatBuffer.fillSplatCenterArray(centers, sceneTransform, srcStart, srcEnd, destStart);\n if (colors) splatBuffer.fillSplatColorArray(colors, scene.minimumAlpha, srcStart, srcEnd, destStart);\n if (sphericalHarmonics) {\n splatBuffer.fillSphericalHarmonicsArray(sphericalHarmonics, this.minSphericalHarmonicsDegree,\n sceneTransform, srcStart, srcEnd, destStart, sphericalHarmonicsCompressionLevel);\n }\n destStart += splatBuffer.getSplatCount();\n }\n }\n\n /**\n * Convert splat centers, which are floating point values, to an array of integers and multiply\n * each by 1000. Centers will get transformed as appropriate before conversion to integer.\n * @param {number} start The index at which to start retrieving data\n * @param {number} end The index at which to stop retrieving data\n * @param {boolean} padFour Enforce alignment of 4 by inserting a 1 after every 3 values\n * @return {Int32Array}\n */\n getIntegerCenters(start, end, padFour = false) {\n const splatCount = end - start + 1;\n const floatCenters = new Float32Array(splatCount * 3);\n this.fillSplatDataArrays(null, null, null, floatCenters, null, null, undefined, undefined, undefined, undefined, start);\n let intCenters;\n let componentCount = padFour ? 4 : 3;\n intCenters = new Int32Array(splatCount * componentCount);\n for (let i = 0; i < splatCount; i++) {\n for (let t = 0; t < 3; t++) {\n intCenters[i * componentCount + t] = Math.round(floatCenters[i * 3 + t] * 1000.0);\n }\n if (padFour) intCenters[i * componentCount + 3] = 1000;\n }\n return intCenters;\n }\n\n /**\n * Returns an array of splat centers, transformed as appropriate, optionally padded.\n * @param {number} start The index at which to start retrieving data\n * @param {number} end The index at which to stop retrieving data\n * @param {boolean} padFour Enforce alignment of 4 by inserting a 1 after every 3 values\n * @return {Float32Array}\n */\n getFloatCenters(start, end, padFour = false) {\n const splatCount = end - start + 1;\n const floatCenters = new Float32Array(splatCount * 3);\n this.fillSplatDataArrays(null, null, null, floatCenters, null, null, undefined, undefined, undefined, undefined, start);\n if (!padFour) return floatCenters;\n let paddedFloatCenters = new Float32Array(splatCount * 4);\n for (let i = 0; i < splatCount; i++) {\n for (let t = 0; t < 3; t++) {\n paddedFloatCenters[i * 4 + t] = floatCenters[i * 3 + t];\n }\n paddedFloatCenters[i * 4 + 3] = 1.0;\n }\n return paddedFloatCenters;\n }\n\n /**\n * Get the center for a splat, transformed as appropriate.\n * @param {number} globalIndex Global index of splat\n * @param {THREE.Vector3} outCenter THREE.Vector3 instance in which to store splat center\n * @param {boolean} applySceneTransform By default, if the splat mesh is static, the transform of the scene to which the splat at\n * 'globalIndex' belongs will be applied to the splat center. If 'applySceneTransform' is true,\n * the scene transform will always be applied and if 'applySceneTransform' is false, the\n * scene transform will never be applied. If undefined, the default behavior will apply.\n */\n getSplatCenter = function() {\n\n const paramsObj = {};\n\n return function(globalIndex, outCenter, applySceneTransform) {\n this.getLocalSplatParameters(globalIndex, paramsObj, applySceneTransform);\n paramsObj.splatBuffer.getSplatCenter(paramsObj.localIndex, outCenter, paramsObj.sceneTransform);\n };\n\n }();\n\n /**\n * Get the scale and rotation for a splat, transformed as appropriate.\n * @param {number} globalIndex Global index of splat\n * @param {THREE.Vector3} outScale THREE.Vector3 instance in which to store splat scale\n * @param {THREE.Quaternion} outRotation THREE.Quaternion instance in which to store splat rotation\n * @param {boolean} applySceneTransform By default, if the splat mesh is static, the transform of the scene to which the splat at\n * 'globalIndex' belongs will be applied to the splat scale and rotation. If\n * 'applySceneTransform' is true, the scene transform will always be applied and if\n * 'applySceneTransform' is false, the scene transform will never be applied. If undefined,\n * the default behavior will apply.\n */\n getSplatScaleAndRotation = function() {\n\n const paramsObj = {};\n const scaleOverride = new THREE.Vector3();\n\n return function(globalIndex, outScale, outRotation, applySceneTransform) {\n this.getLocalSplatParameters(globalIndex, paramsObj, applySceneTransform);\n scaleOverride.x = undefined;\n scaleOverride.y = undefined;\n scaleOverride.z = undefined;\n if (this.splatRenderMode === SplatRenderMode.TwoD) scaleOverride.z = 0;\n paramsObj.splatBuffer.getSplatScaleAndRotation(paramsObj.localIndex, outScale, outRotation,\n paramsObj.sceneTransform, scaleOverride);\n };\n\n }();\n\n /**\n * Get the color for a splat.\n * @param {number} globalIndex Global index of splat\n * @param {THREE.Vector4} outColor THREE.Vector4 instance in which to store splat color\n */\n getSplatColor = function() {\n\n const paramsObj = {};\n\n return function(globalIndex, outColor) {\n this.getLocalSplatParameters(globalIndex, paramsObj);\n paramsObj.splatBuffer.getSplatColor(paramsObj.localIndex, outColor);\n };\n\n }();\n\n /**\n * Store the transform of the scene at 'sceneIndex' in 'outTransform'.\n * @param {number} sceneIndex Index of the desired scene\n * @param {THREE.Matrix4} outTransform Instance of THREE.Matrix4 in which to store the scene's transform\n */\n getSceneTransform(sceneIndex, outTransform) {\n const scene = this.getScene(sceneIndex);\n scene.updateTransform(this.dynamicMode);\n outTransform.copy(scene.transform);\n }\n\n /**\n * Get the scene at 'sceneIndex'.\n * @param {number} sceneIndex Index of the desired scene\n * @return {SplatScene}\n */\n getScene(sceneIndex) {\n if (sceneIndex < 0 || sceneIndex >= this.scenes.length) {\n throw new Error('SplatMesh::getScene() -> Invalid scene index.');\n }\n return this.scenes[sceneIndex];\n }\n\n getSceneCount() {\n return this.scenes.length;\n }\n\n getSplatBufferForSplat(globalIndex) {\n return this.getScene(this.globalSplatIndexToSceneIndexMap[globalIndex]).splatBuffer;\n }\n\n getSceneIndexForSplat(globalIndex) {\n return this.globalSplatIndexToSceneIndexMap[globalIndex];\n }\n\n getSceneTransformForSplat(globalIndex) {\n return this.getScene(this.globalSplatIndexToSceneIndexMap[globalIndex]).transform;\n }\n\n getSplatLocalIndex(globalIndex) {\n return this.globalSplatIndexToLocalSplatIndexMap[globalIndex];\n }\n\n static getIntegerMatrixArray(matrix) {\n const matrixElements = matrix.elements;\n const intMatrixArray = [];\n for (let i = 0; i < 16; i++) {\n intMatrixArray[i] = Math.round(matrixElements[i] * 1000.0);\n }\n return intMatrixArray;\n }\n\n computeBoundingBox(applySceneTransforms = false, sceneIndex) {\n let splatCount = this.getSplatCount();\n if (sceneIndex !== undefined && sceneIndex !== null) {\n if (sceneIndex < 0 || sceneIndex >= this.scenes.length) {\n throw new Error('SplatMesh::computeBoundingBox() -> Invalid scene index.');\n }\n splatCount = this.scenes[sceneIndex].splatBuffer.getSplatCount();\n }\n\n const floatCenters = new Float32Array(splatCount * 3);\n this.fillSplatDataArrays(null, null, null, floatCenters, null, null, applySceneTransforms,\n undefined, undefined, undefined, undefined, sceneIndex);\n\n const min = new THREE.Vector3();\n const max = new THREE.Vector3();\n for (let i = 0; i < splatCount; i++) {\n const offset = i * 3;\n const x = floatCenters[offset];\n const y = floatCenters[offset + 1];\n const z = floatCenters[offset + 2];\n if (i === 0 || x < min.x) min.x = x;\n if (i === 0 || y < min.y) min.y = y;\n if (i === 0 || z < min.z) min.z = z;\n if (i === 0 || x > max.x) max.x = x;\n if (i === 0 || y > max.y) max.y = y;\n if (i === 0 || z > max.z) max.z = z;\n }\n\n return new THREE.Box3(min, max);\n }\n}\n\nvar SorterWasm = \"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\";\n\nvar SorterWasmNoSIMD = \"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\";\n\nvar SorterWasmNonShared = \"AGFzbQEAAAAADwhkeWxpbmsuMAEEAAAAAAEXAmAAAGAQf39/f39/f39/f39/f39/fwACDwEDZW52Bm1lbW9yeQIAAAMDAgABBz4DEV9fd2FzbV9jYWxsX2N0b3JzAAAYX193YXNtX2FwcGx5X2RhdGFfcmVsb2NzAAALc29ydEluZGV4ZXMAAQrrDwICAAvlDwQBfAN7B30DfyALIAprIQwCQAJAIA4EQCANBEBB+P///wchCkGIgICAeCENIAsgDE0NAyAMIQUDQCADIAVBAnQiAWogAiAAIAFqKAIAQQJ0aigCACIBNgIAIAEgCiABIApIGyEKIAEgDSABIA1KGyENIAVBAWoiBSALRw0ACwwDCyAPBEAgCyAMTQ0CQX8hD0H4////ByEKQYiAgIB4IQ0gDCECA0AgDyAHIAAgAkECdCIcaigCACIdQQJ0aigCACIbRwRAAn8gBf0JAjggCCAbQQZ0aiIO/QkCDCAOKgIc/SABIA4qAiz9IAIgDioCPP0gA/3mASAF/QkCKCAO/QkCCCAOKgIY/SABIA4qAij9IAIgDioCOP0gA/3mASAF/QkCCCAO/QkCACAOKgIQ/SABIA4qAiD9IAIgDioCMP0gA/3mASAF/QkCGCAO/QkCBCAOKgIU/SABIA4qAiT9IAIgDioCNP0gA/3mAf3kAf3kAf3kASIR/V/9DAAAAAAAQI9AAAAAAABAj0AiEv3yASIT/SEBIhCZRAAAAAAAAOBBYwRAIBCqDAELQYCAgIB4CyEOAn8gE/0hACIQmUQAAAAAAADgQWMEQCAQqgwBC0GAgICAeAv9ESAO/RwBAn8gESAR/Q0ICQoLDA0ODwABAgMAAQID/V8gEv3yASIR/SEAIhCZRAAAAAAAAOBBYwRAIBCqDAELQYCAgIB4C/0cAgJ/IBH9IQEiEJlEAAAAAAAA4EFjBEAgEKoMAQtBgICAgHgL/RwDIRIgGyEPCyADIBxqIAEgHUEEdGr9AAAAIBL9tQEiEf0bACAR/RsBaiAR/RsCaiAR/RsDaiIONgIAIA4gCiAKIA5KGyEKIA4gDSANIA5IGyENIAJBAWoiAiALRw0ACwwDCwJ/IAUqAgi7/RQgBSoCGLv9IgH9DAAAAAAAQI9AAAAAAABAj0D98gEiEf0hASIQmUQAAAAAAADgQWMEQCAQqgwBC0GAgICAeAshDgJ/IBH9IQAiEJlEAAAAAAAA4EFjBEAgEKoMAQtBgICAgHgLAn8gBSoCKLtEAAAAAABAj0CiIhCZRAAAAAAAAOBBYwRAIBCqDAELQYCAgIB4CyEFQfj///8HIQpBiICAgHghDSALIAxNDQL9ESAO/RwBIAX9HAIhEiAMIQUDQCADIAVBAnQiAmogASAAIAJqKAIAQQR0av0AAAAgEv21ASIR/RsAIBH9GwFqIBH9GwJqIgI2AgAgAiAKIAIgCkgbIQogAiANIAIgDUobIQ0gBUEBaiIFIAtHDQALDAILIA0EQEH4////ByEKQYiAgIB4IQ0gCyAMTQ0CIAwhBQNAIAMgBUECdCIBagJ/IAIgACABaigCAEECdGoqAgC7RAAAAAAAALBAoiIQmUQAAAAAAADgQWMEQCAQqgwBC0GAgICAeAsiDjYCACAKIA4gCiAOSBshCiANIA4gDSAOShshDSAFQQFqIgUgC0cNAAsMAgsgD0UEQCALIAxNDQEgBSoCKCEUIAUqAhghFSAFKgIIIRZB+P///wchCkGIgICAeCENIAwhBQNAAn8gFCABIAAgBUECdCIHaigCAEEEdGoiAioCCJQgFiACKgIAlCAVIAIqAgSUkpK7RAAAAAAAALBAoiIQmUQAAAAAAADgQWMEQCAQqgwBC0GAgICAeAshDiADIAdqIA42AgAgCiAOIAogDkgbIQogDSAOIA0gDkobIQ0gBUEBaiIFIAtHDQALDAILIAsgDE0NAEF/IQ9B+P///wchCkGIgICAeCENIAwhAgNAIA8gByAAIAJBAnQiG2ooAgBBAnQiHGooAgAiDkcEQCAFKgI4IhQgCCAOQQZ0aiIPKgI8lCAFKgIoIhUgDyoCOJQgBSoCCCIWIA8qAjCUIAUqAhgiFyAPKgI0lJKSkiEYIBQgDyoCLJQgFSAPKgIolCAWIA8qAiCUIBcgDyoCJJSSkpIhGSAUIA8qAhyUIBUgDyoCGJQgFiAPKgIQlCAXIA8qAhSUkpKSIRogFCAPKgIMlCAVIA8qAgiUIBYgDyoCAJQgFyAPKgIElJKSkiEUIA4hDwsgAyAbagJ/IBggASAcQQJ0aiIOKgIMlCAZIA4qAgiUIBQgDioCAJQgGiAOKgIElJKSkrtEAAAAAAAAsECiIhCZRAAAAAAAAOBBYwRAIBCqDAELQYCAgIB4CyIONgIAIAogDiAKIA5IGyEKIA0gDiANIA5KGyENIAJBAWoiAiALRw0ACwwBC0GIgICAeCENQfj///8HIQoLIAsgDEsEQCAJQQFrsyANsiAKspOVIRQgDCENA0ACfyAUIAMgDUECdGoiASgCACAKa7KUIhWLQwAAAE9dBEAgFagMAQtBgICAgHgLIQ4gASAONgIAIAQgDkECdGoiASABKAIAQQFqNgIAIA1BAWoiDSALRw0ACwsgCUECTwRAIAQoAgAhDUEBIQoDQCAEIApBAnRqIgEgASgCACANaiINNgIAIApBAWoiCiAJRw0ACwsgDEEASgRAIAwhCgNAIAYgCkEBayIBQQJ0IgJqIAAgAmooAgA2AgAgCkEBSyABIQoNAAsLIAsgDEoEQCALIQoDQCAGIAsgBCADIApBAWsiCkECdCIBaigCAEECdGoiAigCACIFa0ECdGogACABaigCADYCACACIAVBAWs2AgAgCiAMSg0ACwsL\";\n\nvar SorterWasmNoSIMDNonShared = \"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\";\n\nfunction sortWorker(self) {\n\n let wasmInstance;\n let wasmMemory;\n let useSharedMemory;\n let integerBasedSort;\n let dynamicMode;\n let splatCount;\n let indexesToSortOffset;\n let sortedIndexesOffset;\n let sceneIndexesOffset;\n let transformsOffset;\n let precomputedDistancesOffset;\n let mappedDistancesOffset;\n let frequenciesOffset;\n let centersOffset;\n let modelViewProjOffset;\n let countsZero;\n let sortedIndexesOut;\n let distanceMapRange;\n let uploadedSplatCount;\n let Constants;\n\n function sort(splatSortCount, splatRenderCount, modelViewProj,\n usePrecomputedDistances, copyIndexesToSort, copyPrecomputedDistances, copyTransforms) {\n const sortStartTime = performance.now();\n\n if (!useSharedMemory) {\n const indexesToSort = new Uint32Array(wasmMemory, indexesToSortOffset, copyIndexesToSort.byteLength / Constants.BytesPerInt);\n indexesToSort.set(copyIndexesToSort);\n const transforms = new Float32Array(wasmMemory, transformsOffset, copyTransforms.byteLength / Constants.BytesPerFloat);\n transforms.set(copyTransforms);\n if (usePrecomputedDistances) {\n let precomputedDistances;\n if (integerBasedSort) {\n precomputedDistances = new Int32Array(wasmMemory, precomputedDistancesOffset,\n copyPrecomputedDistances.byteLength / Constants.BytesPerInt);\n } else {\n precomputedDistances = new Float32Array(wasmMemory, precomputedDistancesOffset,\n copyPrecomputedDistances.byteLength / Constants.BytesPerFloat);\n }\n precomputedDistances.set(copyPrecomputedDistances);\n }\n }\n\n if (!countsZero) countsZero = new Uint32Array(distanceMapRange);\n new Float32Array(wasmMemory, modelViewProjOffset, 16).set(modelViewProj);\n new Uint32Array(wasmMemory, frequenciesOffset, distanceMapRange).set(countsZero);\n wasmInstance.exports.sortIndexes(indexesToSortOffset, centersOffset, precomputedDistancesOffset,\n mappedDistancesOffset, frequenciesOffset, modelViewProjOffset,\n sortedIndexesOffset, sceneIndexesOffset, transformsOffset, distanceMapRange,\n splatSortCount, splatRenderCount, splatCount, usePrecomputedDistances, integerBasedSort,\n dynamicMode);\n\n const sortMessage = {\n 'sortDone': true,\n 'splatSortCount': splatSortCount,\n 'splatRenderCount': splatRenderCount,\n 'sortTime': 0\n };\n if (!useSharedMemory) {\n const sortedIndexes = new Uint32Array(wasmMemory, sortedIndexesOffset, splatRenderCount);\n if (!sortedIndexesOut || sortedIndexesOut.length < splatRenderCount) {\n sortedIndexesOut = new Uint32Array(splatRenderCount);\n }\n sortedIndexesOut.set(sortedIndexes);\n sortMessage.sortedIndexes = sortedIndexesOut;\n }\n const sortEndTime = performance.now();\n\n sortMessage.sortTime = sortEndTime - sortStartTime;\n\n self.postMessage(sortMessage);\n }\n\n self.onmessage = (e) => {\n if (e.data.centers) {\n centers = e.data.centers;\n sceneIndexes = e.data.sceneIndexes;\n if (integerBasedSort) {\n new Int32Array(wasmMemory, centersOffset + e.data.range.from * Constants.BytesPerInt * 4,\n e.data.range.count * 4).set(new Int32Array(centers));\n } else {\n new Float32Array(wasmMemory, centersOffset + e.data.range.from * Constants.BytesPerFloat * 4,\n e.data.range.count * 4).set(new Float32Array(centers));\n }\n if (dynamicMode) {\n new Uint32Array(wasmMemory, sceneIndexesOffset + e.data.range.from * 4,\n e.data.range.count).set(new Uint32Array(sceneIndexes));\n }\n uploadedSplatCount = e.data.range.from + e.data.range.count;\n } else if (e.data.sort) {\n const renderCount = Math.min(e.data.sort.splatRenderCount || 0, uploadedSplatCount);\n const sortCount = Math.min(e.data.sort.splatSortCount || 0, uploadedSplatCount);\n const usePrecomputedDistances = e.data.sort.usePrecomputedDistances;\n\n let copyIndexesToSort;\n let copyPrecomputedDistances;\n let copyTransforms;\n if (!useSharedMemory) {\n copyIndexesToSort = e.data.sort.indexesToSort;\n copyTransforms = e.data.sort.transforms;\n if (usePrecomputedDistances) copyPrecomputedDistances = e.data.sort.precomputedDistances;\n }\n sort(sortCount, renderCount, e.data.sort.modelViewProj, usePrecomputedDistances,\n copyIndexesToSort, copyPrecomputedDistances, copyTransforms);\n } else if (e.data.init) {\n // Yep, this is super hacky and gross :(\n Constants = e.data.init.Constants;\n\n splatCount = e.data.init.splatCount;\n useSharedMemory = e.data.init.useSharedMemory;\n integerBasedSort = e.data.init.integerBasedSort;\n dynamicMode = e.data.init.dynamicMode;\n distanceMapRange = e.data.init.distanceMapRange;\n uploadedSplatCount = 0;\n\n const CENTERS_BYTES_PER_ENTRY = integerBasedSort ? (Constants.BytesPerInt * 4) : (Constants.BytesPerFloat * 4);\n\n const sorterWasmBytes = new Uint8Array(e.data.init.sorterWasmBytes);\n\n const matrixSize = 16 * Constants.BytesPerFloat;\n const memoryRequiredForIndexesToSort = splatCount * Constants.BytesPerInt;\n const memoryRequiredForCenters = splatCount * CENTERS_BYTES_PER_ENTRY;\n const memoryRequiredForModelViewProjectionMatrix = matrixSize;\n const memoryRequiredForPrecomputedDistances = integerBasedSort ?\n (splatCount * Constants.BytesPerInt) : (splatCount * Constants.BytesPerFloat);\n const memoryRequiredForMappedDistances = splatCount * Constants.BytesPerInt;\n const memoryRequiredForSortedIndexes = splatCount * Constants.BytesPerInt;\n const memoryRequiredForIntermediateSortBuffers = integerBasedSort ? (distanceMapRange * Constants.BytesPerInt * 2) :\n (distanceMapRange * Constants.BytesPerFloat * 2);\n const memoryRequiredforTransformIndexes = dynamicMode ? (splatCount * Constants.BytesPerInt) : 0;\n const memoryRequiredforTransforms = dynamicMode ? (Constants.MaxScenes * matrixSize) : 0;\n const extraMemory = Constants.MemoryPageSize * 32;\n\n const totalRequiredMemory = memoryRequiredForIndexesToSort +\n memoryRequiredForCenters +\n memoryRequiredForModelViewProjectionMatrix +\n memoryRequiredForPrecomputedDistances +\n memoryRequiredForMappedDistances +\n memoryRequiredForIntermediateSortBuffers +\n memoryRequiredForSortedIndexes +\n memoryRequiredforTransformIndexes +\n memoryRequiredforTransforms +\n extraMemory;\n const totalPagesRequired = Math.floor(totalRequiredMemory / Constants.MemoryPageSize ) + 1;\n const sorterWasmImport = {\n module: {},\n env: {\n memory: new WebAssembly.Memory({\n initial: totalPagesRequired,\n maximum: totalPagesRequired,\n shared: true,\n }),\n }\n };\n WebAssembly.compile(sorterWasmBytes)\n .then((wasmModule) => {\n return WebAssembly.instantiate(wasmModule, sorterWasmImport);\n })\n .then((instance) => {\n wasmInstance = instance;\n indexesToSortOffset = 0;\n centersOffset = indexesToSortOffset + memoryRequiredForIndexesToSort;\n modelViewProjOffset = centersOffset + memoryRequiredForCenters;\n precomputedDistancesOffset = modelViewProjOffset + memoryRequiredForModelViewProjectionMatrix;\n mappedDistancesOffset = precomputedDistancesOffset + memoryRequiredForPrecomputedDistances;\n frequenciesOffset = mappedDistancesOffset + memoryRequiredForMappedDistances;\n sortedIndexesOffset = frequenciesOffset + memoryRequiredForIntermediateSortBuffers;\n sceneIndexesOffset = sortedIndexesOffset + memoryRequiredForSortedIndexes;\n transformsOffset = sceneIndexesOffset + memoryRequiredforTransformIndexes;\n wasmMemory = sorterWasmImport.env.memory.buffer;\n if (useSharedMemory) {\n self.postMessage({\n 'sortSetupPhase1Complete': true,\n 'indexesToSortBuffer': wasmMemory,\n 'indexesToSortOffset': indexesToSortOffset,\n 'sortedIndexesBuffer': wasmMemory,\n 'sortedIndexesOffset': sortedIndexesOffset,\n 'precomputedDistancesBuffer': wasmMemory,\n 'precomputedDistancesOffset': precomputedDistancesOffset,\n 'transformsBuffer': wasmMemory,\n 'transformsOffset': transformsOffset\n });\n } else {\n self.postMessage({\n 'sortSetupPhase1Complete': true\n });\n }\n });\n }\n };\n}\n\nfunction createSortWorker(splatCount, useSharedMemory, enableSIMDInSort, integerBasedSort, dynamicMode,\n splatSortDistanceMapPrecision = Constants.DefaultSplatSortDistanceMapPrecision) {\n const worker = new Worker(\n URL.createObjectURL(\n new Blob(['(', sortWorker.toString(), ')(self)'], {\n type: 'application/javascript',\n }),\n ),\n );\n\n let sourceWasm = SorterWasm;\n\n // iOS makes choosing the right WebAssembly configuration tricky :(\n const iOSSemVer = isIOS() ? getIOSSemever() : null;\n if (!enableSIMDInSort && !useSharedMemory) {\n sourceWasm = SorterWasmNoSIMD;\n // Testing on various devices has shown that even when shared memory is disabled, the WASM module with shared\n // memory can still be used most of the time -- the exception seems to be iOS devices below 16.4\n if (iOSSemVer && iOSSemVer.major <= 16 && iOSSemVer.minor < 4) {\n sourceWasm = SorterWasmNoSIMDNonShared;\n }\n } else if (!enableSIMDInSort) {\n sourceWasm = SorterWasmNoSIMD;\n } else if (!useSharedMemory) {\n // Same issue with shared memory as above on iOS devices\n if (iOSSemVer && iOSSemVer.major <= 16 && iOSSemVer.minor < 4) {\n sourceWasm = SorterWasmNonShared;\n }\n }\n\n const sorterWasmBinaryString = atob(sourceWasm);\n const sorterWasmBytes = new Uint8Array(sorterWasmBinaryString.length);\n for (let i = 0; i < sorterWasmBinaryString.length; i++) {\n sorterWasmBytes[i] = sorterWasmBinaryString.charCodeAt(i);\n }\n\n worker.postMessage({\n 'init': {\n 'sorterWasmBytes': sorterWasmBytes.buffer,\n 'splatCount': splatCount,\n 'useSharedMemory': useSharedMemory,\n 'integerBasedSort': integerBasedSort,\n 'dynamicMode': dynamicMode,\n 'distanceMapRange': 1 << splatSortDistanceMapPrecision,\n // Super hacky\n 'Constants': {\n 'BytesPerFloat': Constants.BytesPerFloat,\n 'BytesPerInt': Constants.BytesPerInt,\n 'MemoryPageSize': Constants.MemoryPageSize,\n 'MaxScenes': Constants.MaxScenes\n }\n }\n });\n return worker;\n}\n\nconst WebXRMode = {\n None: 0,\n VR: 1,\n AR: 2\n};\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\nclass VRButton {\n\n static createButton( renderer, sessionInit = {} ) {\n\n const button = document.createElement( 'button' );\n\n function showEnterVR( /* device */ ) {\n\n let currentSession = null;\n\n async function onSessionStarted( session ) {\n\n session.addEventListener( 'end', onSessionEnded );\n\n await renderer.xr.setSession( session );\n button.textContent = 'EXIT VR';\n\n currentSession = session;\n\n }\n\n function onSessionEnded( /* event */ ) {\n\n currentSession.removeEventListener( 'end', onSessionEnded );\n\n button.textContent = 'ENTER VR';\n\n currentSession = null;\n\n }\n\n //\n\n button.style.display = '';\n\n button.style.cursor = 'pointer';\n button.style.left = 'calc(50% - 50px)';\n button.style.width = '100px';\n\n button.textContent = 'ENTER VR';\n\n // WebXR's requestReferenceSpace only works if the corresponding feature\n // was requested at session creation time. For simplicity, just ask for\n // the interesting ones as optional features, but be aware that the\n // requestReferenceSpace call will fail if it turns out to be unavailable.\n // ('local' is always available for immersive sessions and doesn't need to\n // be requested separately.)\n\n const sessionOptions = {\n ...sessionInit,\n optionalFeatures: [\n 'local-floor',\n 'bounded-floor',\n 'layers',\n ...( sessionInit.optionalFeatures || [] )\n ],\n };\n\n button.onmouseenter = function() {\n\n button.style.opacity = '1.0';\n\n };\n\n button.onmouseleave = function() {\n\n button.style.opacity = '0.5';\n\n };\n\n button.onclick = function() {\n\n if ( currentSession === null ) {\n\n navigator.xr.requestSession( 'immersive-vr', sessionOptions ).then( onSessionStarted );\n\n } else {\n\n currentSession.end();\n\n if ( navigator.xr.offerSession !== undefined ) {\n\n navigator.xr.offerSession( 'immersive-vr', sessionOptions )\n .then( onSessionStarted )\n .catch( ( err ) => {\n\n console.warn( err );\n\n } );\n\n }\n\n }\n\n };\n\n if ( navigator.xr.offerSession !== undefined ) {\n\n navigator.xr.offerSession( 'immersive-vr', sessionOptions )\n .then( onSessionStarted )\n .catch( ( err ) => {\n\n console.warn( err );\n\n } );\n\n }\n\n }\n\n function disableButton() {\n\n button.style.display = '';\n\n button.style.cursor = 'auto';\n button.style.left = 'calc(50% - 75px)';\n button.style.width = '150px';\n\n button.onmouseenter = null;\n button.onmouseleave = null;\n\n button.onclick = null;\n\n }\n\n function showWebXRNotFound() {\n\n disableButton();\n\n button.textContent = 'VR NOT SUPPORTED';\n\n }\n\n function showVRNotAllowed( exception ) {\n\n disableButton();\n\n console.warn( 'Exception when trying to call xr.isSessionSupported', exception );\n\n button.textContent = 'VR NOT ALLOWED';\n\n }\n\n function stylizeElement( element ) {\n\n element.style.position = 'absolute';\n element.style.bottom = '20px';\n element.style.padding = '12px 6px';\n element.style.border = '1px solid #fff';\n element.style.borderRadius = '4px';\n element.style.background = 'rgba(0,0,0,0.1)';\n element.style.color = '#fff';\n element.style.font = 'normal 13px sans-serif';\n element.style.textAlign = 'center';\n element.style.opacity = '0.5';\n element.style.outline = 'none';\n element.style.zIndex = '999';\n\n }\n\n if ( 'xr' in navigator ) {\n\n button.id = 'VRButton';\n button.style.display = 'none';\n\n stylizeElement( button );\n\n navigator.xr.isSessionSupported( 'immersive-vr' ).then( function( supported ) {\n\n supported ? showEnterVR() : showWebXRNotFound();\n\n if ( supported && VRButton.xrSessionIsGranted ) {\n\n button.click();\n\n }\n\n } ).catch( showVRNotAllowed );\n\n return button;\n\n } else {\n\n const message = document.createElement( 'a' );\n\n if ( window.isSecureContext === false ) {\n\n message.href = document.location.href.replace( /^http:/, 'https:' );\n message.innerHTML = 'WEBXR NEEDS HTTPS'; // TODO Improve message\n\n } else {\n\n message.href = 'https://immersiveweb.dev/';\n message.innerHTML = 'WEBXR NOT AVAILABLE';\n\n }\n\n message.style.left = 'calc(50% - 90px)';\n message.style.width = '180px';\n message.style.textDecoration = 'none';\n\n stylizeElement( message );\n\n return message;\n\n }\n\n }\n\n static registerSessionGrantedListener() {\n\n if ( typeof navigator !== 'undefined' && 'xr' in navigator ) {\n\n // WebXRViewer (based on Firefox) has a bug where addEventListener\n // throws a silent exception and aborts execution entirely.\n if ( /WebXRViewer\\//i.test( navigator.userAgent ) ) return;\n\n navigator.xr.addEventListener( 'sessiongranted', () => {\n\n VRButton.xrSessionIsGranted = true;\n\n } );\n\n }\n\n }\n\n}\n\nVRButton.xrSessionIsGranted = false;\nVRButton.registerSessionGrantedListener();\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\nclass ARButton {\n\n static createButton( renderer, sessionInit = {} ) {\n\n const button = document.createElement( 'button' );\n\n function showStartAR( /* device */ ) {\n\n if ( sessionInit.domOverlay === undefined ) {\n\n const overlay = document.createElement( 'div' );\n overlay.style.display = 'none';\n document.body.appendChild( overlay );\n\n const svg = document.createElementNS( 'http://www.w3.org/2000/svg', 'svg' );\n svg.setAttribute( 'width', 38 );\n svg.setAttribute( 'height', 38 );\n svg.style.position = 'absolute';\n svg.style.right = '20px';\n svg.style.top = '20px';\n svg.addEventListener( 'click', function() {\n\n currentSession.end();\n\n } );\n overlay.appendChild( svg );\n\n const path = document.createElementNS( 'http://www.w3.org/2000/svg', 'path' );\n path.setAttribute( 'd', 'M 12,12 L 28,28 M 28,12 12,28' );\n path.setAttribute( 'stroke', '#fff' );\n path.setAttribute( 'stroke-width', 2 );\n svg.appendChild( path );\n\n if ( sessionInit.optionalFeatures === undefined ) {\n\n sessionInit.optionalFeatures = [];\n\n }\n\n sessionInit.optionalFeatures.push( 'dom-overlay' );\n sessionInit.domOverlay = { root: overlay };\n\n }\n\n //\n\n let currentSession = null;\n\n async function onSessionStarted( session ) {\n\n session.addEventListener( 'end', onSessionEnded );\n\n renderer.xr.setReferenceSpaceType( 'local' );\n\n await renderer.xr.setSession( session );\n\n button.textContent = 'STOP AR';\n sessionInit.domOverlay.root.style.display = '';\n\n currentSession = session;\n\n }\n\n function onSessionEnded( /* event */ ) {\n\n currentSession.removeEventListener( 'end', onSessionEnded );\n\n button.textContent = 'START AR';\n sessionInit.domOverlay.root.style.display = 'none';\n\n currentSession = null;\n\n }\n\n //\n\n button.style.display = '';\n\n button.style.cursor = 'pointer';\n button.style.left = 'calc(50% - 50px)';\n button.style.width = '100px';\n\n button.textContent = 'START AR';\n\n button.onmouseenter = function() {\n\n button.style.opacity = '1.0';\n\n };\n\n button.onmouseleave = function() {\n\n button.style.opacity = '0.5';\n\n };\n\n button.onclick = function() {\n\n if ( currentSession === null ) {\n\n navigator.xr.requestSession( 'immersive-ar', sessionInit ).then( onSessionStarted );\n\n } else {\n\n currentSession.end();\n\n if ( navigator.xr.offerSession !== undefined ) {\n\n navigator.xr.offerSession( 'immersive-ar', sessionInit )\n .then( onSessionStarted )\n .catch( ( err ) => {\n\n console.warn( err );\n\n } );\n\n }\n\n }\n\n };\n\n if ( navigator.xr.offerSession !== undefined ) {\n\n navigator.xr.offerSession( 'immersive-ar', sessionInit )\n .then( onSessionStarted )\n .catch( ( err ) => {\n\n console.warn( err );\n\n } );\n\n }\n\n }\n\n function disableButton() {\n\n button.style.display = '';\n\n button.style.cursor = 'auto';\n button.style.left = 'calc(50% - 75px)';\n button.style.width = '150px';\n\n button.onmouseenter = null;\n button.onmouseleave = null;\n\n button.onclick = null;\n\n }\n\n function showARNotSupported() {\n\n disableButton();\n\n button.textContent = 'AR NOT SUPPORTED';\n\n }\n\n function showARNotAllowed( exception ) {\n\n disableButton();\n\n console.warn( 'Exception when trying to call xr.isSessionSupported', exception );\n\n button.textContent = 'AR NOT ALLOWED';\n\n }\n\n function stylizeElement( element ) {\n\n element.style.position = 'absolute';\n element.style.bottom = '20px';\n element.style.padding = '12px 6px';\n element.style.border = '1px solid #fff';\n element.style.borderRadius = '4px';\n element.style.background = 'rgba(0,0,0,0.1)';\n element.style.color = '#fff';\n element.style.font = 'normal 13px sans-serif';\n element.style.textAlign = 'center';\n element.style.opacity = '0.5';\n element.style.outline = 'none';\n element.style.zIndex = '999';\n\n }\n\n if ( 'xr' in navigator ) {\n\n button.id = 'ARButton';\n button.style.display = 'none';\n\n stylizeElement( button );\n\n navigator.xr.isSessionSupported( 'immersive-ar' ).then( function( supported ) {\n\n supported ? showStartAR() : showARNotSupported();\n\n } ).catch( showARNotAllowed );\n\n return button;\n\n } else {\n\n const message = document.createElement( 'a' );\n\n if ( window.isSecureContext === false ) {\n\n message.href = document.location.href.replace( /^http:/, 'https:' );\n message.innerHTML = 'WEBXR NEEDS HTTPS'; // TODO Improve message\n\n } else {\n\n message.href = 'https://immersiveweb.dev/';\n message.innerHTML = 'WEBXR NOT AVAILABLE';\n\n }\n\n message.style.left = 'calc(50% - 90px)';\n message.style.width = '180px';\n message.style.textDecoration = 'none';\n\n stylizeElement( message );\n\n return message;\n\n }\n\n }\n\n}\n\nconst RenderMode = {\n Always: 0,\n OnChange: 1,\n Never: 2\n};\n\nconst THREE_CAMERA_FOV = 50;\nconst MINIMUM_DISTANCE_TO_NEW_FOCAL_POINT = .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 * 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 */\nclass Viewer {\n\n constructor(options = {}) {\n\n // The natural 'up' vector for viewing the scene (only has an effect when used with orbit controls and\n // when the viewer uses its own camera).\n if (!options.cameraUp) options.cameraUp = [0, 1, 0];\n this.cameraUp = new THREE.Vector3().fromArray(options.cameraUp);\n\n // The camera's initial position (only used when the viewer uses its own camera).\n if (!options.initialCameraPosition) options.initialCameraPosition = [0, 10, 15];\n this.initialCameraPosition = new THREE.Vector3().fromArray(options.initialCameraPosition);\n\n // The initial focal point of the camera and center of the camera's orbit (only used when the viewer uses its own camera).\n if (!options.initialCameraLookAt) options.initialCameraLookAt = [0, 0, 0];\n this.initialCameraLookAt = new THREE.Vector3().fromArray(options.initialCameraLookAt);\n\n // 'dropInMode' is a flag that is used internally to support the usage of the viewer as a Three.js scene object\n this.dropInMode = options.dropInMode || false;\n\n // If 'selfDrivenMode' is true, the viewer manages its own update/animation loop via requestAnimationFrame()\n if (options.selfDrivenMode === undefined || options.selfDrivenMode === null) options.selfDrivenMode = true;\n this.selfDrivenMode = options.selfDrivenMode && !this.dropInMode;\n this.selfDrivenUpdateFunc = this.selfDrivenUpdate.bind(this);\n\n // If 'useBuiltInControls' is true, the viewer will create its own instance of OrbitControls and attach to the camera\n if (options.useBuiltInControls === undefined) options.useBuiltInControls = true;\n this.useBuiltInControls = options.useBuiltInControls;\n\n // parent element of the Three.js renderer canvas\n this.rootElement = options.rootElement;\n\n // Tells the viewer to pretend the device pixel ratio is 1, which can boost performance on devices where it is larger,\n // at a small cost to visual quality\n this.ignoreDevicePixelRatio = options.ignoreDevicePixelRatio || false;\n this.devicePixelRatio = this.ignoreDevicePixelRatio ? 1 : (window.devicePixelRatio || 1);\n\n // Tells the viewer to use 16-bit floating point values when storing splat covariance data in textures, instead of 32-bit\n this.halfPrecisionCovariancesOnGPU = options.halfPrecisionCovariancesOnGPU || false;\n\n // If 'threeScene' is valid, it will be rendered by the viewer along with the splat mesh\n this.threeScene = options.threeScene;\n // Allows for usage of an external Three.js renderer\n this.renderer = options.renderer;\n // Allows for usage of an external Three.js camera\n this.camera = options.camera;\n\n // If 'gpuAcceleratedSort' is true, a partially GPU-accelerated approach to sorting splats will be used.\n // Currently this means pre-computing splat distances from the camera on the GPU\n this.gpuAcceleratedSort = options.gpuAcceleratedSort || false;\n\n // if 'integerBasedSort' is true, the integer version of splat centers as well as other values used to calculate\n // splat distances are used instead of the float version. This speeds up computation, but introduces the possibility of\n // overflow in larger scenes.\n if (options.integerBasedSort === undefined || options.integerBasedSort === null) {\n options.integerBasedSort = true;\n }\n this.integerBasedSort = options.integerBasedSort;\n\n // If 'sharedMemoryForWorkers' is true, a SharedArrayBuffer will be used to communicate with web workers. This method\n // is faster than copying memory to or from web workers, but comes with security implications as outlined here:\n // https://web.dev/articles/cross-origin-isolation-guide\n // If enabled, it requires specific CORS headers to be present in the response from the server that is sent when\n // loading the application. More information is available in the README.\n if (options.sharedMemoryForWorkers === undefined || options.sharedMemoryForWorkers === null) options.sharedMemoryForWorkers = true;\n this.sharedMemoryForWorkers = options.sharedMemoryForWorkers;\n\n // if 'dynamicScene' is true, it tells the viewer to assume scene elements are not stationary or that the number of splats in the\n // scene may change. This prevents optimizations that depend on a static scene from being made. Additionally, if 'dynamicScene' is\n // true it tells the splat mesh to not apply scene tranforms to splat data that is returned by functions like\n // SplatMesh.getSplatCenter() by default.\n this.dynamicScene = !!options.dynamicScene;\n\n // When true, will perform additional steps during rendering to address artifacts caused by the rendering of gaussians at a\n // substantially different resolution than that at which they were rendered during training. This will only work correctly\n // for models that were trained using a process that utilizes this compensation calculation. For more details:\n // https://github.com/nerfstudio-project/gsplat/pull/117\n // https://github.com/graphdeco-inria/gaussian-splatting/issues/294#issuecomment-1772688093\n this.antialiased = options.antialiased || false;\n\n // This constant is added to the projected 2D screen-space splat scales\n this.kernel2DSize = (options.kernel2DSize === undefined) ? 0.3 : options.kernel2DSize;\n\n this.webXRMode = options.webXRMode || WebXRMode.None;\n if (this.webXRMode !== WebXRMode.None) {\n this.gpuAcceleratedSort = false;\n }\n this.webXRActive = false;\n\n this.webXRSessionInit = options.webXRSessionInit || {};\n\n // if 'renderMode' is RenderMode.Always, then the viewer will rrender the scene on every update. If it is RenderMode.OnChange,\n // it will only render when something in the scene has changed.\n this.renderMode = options.renderMode || RenderMode.Always;\n\n // SceneRevealMode.Default results in a nice, slow fade-in effect for progressively loaded scenes,\n // and a fast fade-in for non progressively loaded scenes.\n // SceneRevealMode.Gradual will force a slow fade-in for all scenes.\n // SceneRevealMode.Instant will force all loaded scene data to be immediately visible.\n this.sceneRevealMode = options.sceneRevealMode || SceneRevealMode.Default;\n\n // Hacky, experimental, non-scientific parameter for tweaking focal length related calculations. For scenes with very\n // small gaussians, small details, and small dimensions -- increasing this value can help improve visual quality.\n this.focalAdjustment = options.focalAdjustment || 1.0;\n\n // Specify the maximum screen-space splat size, can help deal with large splats that get too unwieldy\n this.maxScreenSpaceSplatSize = options.maxScreenSpaceSplatSize || 1024;\n\n // The verbosity of console logging\n this.logLevel = options.logLevel || LogLevel.None;\n\n // Degree of spherical harmonics to utilize in rendering splats (assuming the data is present in the splat scene).\n // Valid values are 0 - 2. Default value is 0.\n this.sphericalHarmonicsDegree = options.sphericalHarmonicsDegree || 0;\n\n // When true, allows for usage of extra properties and attributes during rendering for effects such as opacity adjustment.\n // Default is false for performance reasons. These properties are separate from transform properties (scale, rotation, position)\n // that are enabled by the 'dynamicScene' parameter.\n this.enableOptionalEffects = options.enableOptionalEffects || false;\n\n // Enable the usage of SIMD WebAssembly instructions for the splat sort\n if (options.enableSIMDInSort === undefined || options.enableSIMDInSort === null) options.enableSIMDInSort = true;\n this.enableSIMDInSort = options.enableSIMDInSort;\n\n // Level to compress non KSPLAT files when loading them for direct rendering\n if (options.inMemoryCompressionLevel === undefined || options.inMemoryCompressionLevel === null) {\n options.inMemoryCompressionLevel = 0;\n }\n this.inMemoryCompressionLevel = options.inMemoryCompressionLevel;\n\n // Reorder splat data in memory after loading is complete to optimize cache utilization. Default is true.\n // Does not apply if splat scene is progressively loaded.\n if (options.optimizeSplatData === undefined || options.optimizeSplatData === null) {\n options.optimizeSplatData = true;\n }\n this.optimizeSplatData = options.optimizeSplatData;\n\n // When true, the intermediate splat data that is the result of decompressing splat bufffer(s) and is used to\n // populate the data textures will be freed. This will reduces memory usage, but if that data needs to be modified\n // it will need to be re-populated from the splat buffer(s). Default is false.\n if (options.freeIntermediateSplatData === undefined || options.freeIntermediateSplatData === null) {\n options.freeIntermediateSplatData = false;\n }\n this.freeIntermediateSplatData = options.freeIntermediateSplatData;\n\n // It appears that for certain iOS versions, special actions need to be taken with the\n // usage of SIMD instructions and shared memory\n if (isIOS()) {\n const semver = getIOSSemever();\n if (semver.major < 17) {\n this.enableSIMDInSort = false;\n }\n if (semver.major < 16) {\n this.sharedMemoryForWorkers = false;\n }\n }\n\n // Tell the viewer how to render the splats\n if (options.splatRenderMode === undefined || options.splatRenderMode === null) {\n options.splatRenderMode = SplatRenderMode.ThreeD;\n }\n this.splatRenderMode = options.splatRenderMode;\n\n // Customize the speed at which the scene is revealed\n this.sceneFadeInRateMultiplier = options.sceneFadeInRateMultiplier || 1.0;\n\n // Set the range for the depth map for the counting sort used to sort the splats\n this.splatSortDistanceMapPrecision = options.splatSortDistanceMapPrecision || Constants.DefaultSplatSortDistanceMapPrecision;\n const maxPrecision = this.integerBasedSort ? 20 : 24;\n this.splatSortDistanceMapPrecision = clamp(this.splatSortDistanceMapPrecision, 10, maxPrecision);\n\n this.onSplatMeshChangedCallback = null;\n this.createSplatMesh();\n\n this.controls = null;\n this.perspectiveControls = null;\n this.orthographicControls = null;\n\n this.orthographicCamera = null;\n this.perspectiveCamera = null;\n\n this.showMeshCursor = false;\n this.showControlPlane = false;\n this.showInfo = false;\n\n this.sceneHelper = null;\n\n this.sortWorker = null;\n this.sortRunning = false;\n this.splatRenderCount = 0;\n this.splatSortCount = 0;\n this.lastSplatSortCount = 0;\n this.sortWorkerIndexesToSort = null;\n this.sortWorkerSortedIndexes = null;\n this.sortWorkerPrecomputedDistances = null;\n this.sortWorkerTransforms = null;\n this.preSortMessages = [];\n this.runAfterNextSort = [];\n\n this.selfDrivenModeRunning = false;\n this.splatRenderReady = false;\n\n this.raycaster = new Raycaster();\n\n this.infoPanel = null;\n\n this.startInOrthographicMode = false;\n\n this.currentFPS = 0;\n this.lastSortTime = 0;\n this.consecutiveRenderFrames = 0;\n\n this.previousCameraTarget = new THREE.Vector3();\n this.nextCameraTarget = new THREE.Vector3();\n\n this.mousePosition = new THREE.Vector2();\n this.mouseDownPosition = new THREE.Vector2();\n this.mouseDownTime = null;\n\n this.resizeObserver = null;\n this.mouseMoveListener = null;\n this.mouseDownListener = null;\n this.mouseUpListener = null;\n this.keyDownListener = null;\n\n this.sortPromise = null;\n this.sortPromiseResolver = null;\n this.splatSceneDownloadPromises = {};\n this.splatSceneDownloadAndBuildPromise = null;\n this.splatSceneRemovalPromise = null;\n\n this.loadingSpinner = new LoadingSpinner(null, this.rootElement || document.body);\n this.loadingSpinner.hide();\n this.loadingProgressBar = new LoadingProgressBar(this.rootElement || document.body);\n this.loadingProgressBar.hide();\n this.infoPanel = new InfoPanel(this.rootElement || document.body);\n this.infoPanel.hide();\n\n this.usingExternalCamera = (this.dropInMode || this.camera) ? true : false;\n this.usingExternalRenderer = (this.dropInMode || this.renderer) ? true : false;\n\n this.initialized = false;\n this.disposing = false;\n this.disposed = false;\n this.disposePromise = null;\n if (!this.dropInMode) this.init();\n }\n\n createSplatMesh() {\n this.splatMesh = new SplatMesh(this.splatRenderMode, this.dynamicScene, this.enableOptionalEffects,\n this.halfPrecisionCovariancesOnGPU, this.devicePixelRatio, this.gpuAcceleratedSort,\n this.integerBasedSort, this.antialiased, this.maxScreenSpaceSplatSize, this.logLevel,\n this.sphericalHarmonicsDegree, this.sceneFadeInRateMultiplier, this.kernel2DSize);\n this.splatMesh.frustumCulled = false;\n if (this.onSplatMeshChangedCallback) this.onSplatMeshChangedCallback();\n }\n\n init() {\n\n if (this.initialized) return;\n\n if (!this.rootElement) {\n if (!this.usingExternalRenderer) {\n this.rootElement = document.createElement('div');\n this.rootElement.style.width = '100%';\n this.rootElement.style.height = '100%';\n this.rootElement.style.position = 'absolute';\n document.body.appendChild(this.rootElement);\n } else {\n this.rootElement = this.renderer.domElement || document.body;\n }\n }\n\n this.setupCamera();\n this.setupRenderer();\n this.setupWebXR(this.webXRSessionInit);\n this.setupControls();\n this.setupEventHandlers();\n\n this.threeScene = this.threeScene || new THREE.Scene();\n this.sceneHelper = new SceneHelper(this.threeScene);\n this.sceneHelper.setupMeshCursor();\n this.sceneHelper.setupFocusMarker();\n this.sceneHelper.setupControlPlane();\n\n this.loadingProgressBar.setContainer(this.rootElement);\n this.loadingSpinner.setContainer(this.rootElement);\n this.infoPanel.setContainer(this.rootElement);\n\n this.initialized = true;\n }\n\n setupCamera() {\n if (!this.usingExternalCamera) {\n const renderDimensions = new THREE.Vector2();\n this.getRenderDimensions(renderDimensions);\n\n this.perspectiveCamera = new THREE.PerspectiveCamera(THREE_CAMERA_FOV, renderDimensions.x / renderDimensions.y, 0.1, 1000);\n this.orthographicCamera = new THREE.OrthographicCamera(renderDimensions.x / -2, renderDimensions.x / 2,\n renderDimensions.y / 2, renderDimensions.y / -2, 0.1, 1000 );\n this.camera = this.startInOrthographicMode ? this.orthographicCamera : this.perspectiveCamera;\n this.camera.position.copy(this.initialCameraPosition);\n this.camera.up.copy(this.cameraUp).normalize();\n this.camera.lookAt(this.initialCameraLookAt);\n }\n }\n\n setupRenderer() {\n if (!this.usingExternalRenderer) {\n const renderDimensions = new THREE.Vector2();\n this.getRenderDimensions(renderDimensions);\n\n this.renderer = new THREE.WebGLRenderer({\n antialias: false,\n precision: 'highp'\n });\n this.renderer.setPixelRatio(this.devicePixelRatio);\n this.renderer.autoClear = true;\n this.renderer.setClearColor(new THREE.Color( 0x000000 ), 0.0);\n this.renderer.setSize(renderDimensions.x, renderDimensions.y);\n\n this.resizeObserver = new ResizeObserver(() => {\n this.getRenderDimensions(renderDimensions);\n this.renderer.setSize(renderDimensions.x, renderDimensions.y);\n this.forceRenderNextFrame();\n });\n this.resizeObserver.observe(this.rootElement);\n this.rootElement.appendChild(this.renderer.domElement);\n }\n\n }\n\n setupWebXR(webXRSessionInit) {\n if (this.webXRMode) {\n if (this.webXRMode === WebXRMode.VR) {\n this.rootElement.appendChild(VRButton.createButton(this.renderer, webXRSessionInit));\n } else if (this.webXRMode === WebXRMode.AR) {\n this.rootElement.appendChild(ARButton.createButton(this.renderer, webXRSessionInit));\n }\n this.renderer.xr.addEventListener('sessionstart', (e) => {\n this.webXRActive = true;\n });\n this.renderer.xr.addEventListener('sessionend', (e) => {\n this.webXRActive = false;\n });\n this.renderer.xr.enabled = true;\n this.camera.position.copy(this.initialCameraPosition);\n this.camera.up.copy(this.cameraUp).normalize();\n this.camera.lookAt(this.initialCameraLookAt);\n }\n }\n\n setupControls() {\n if (this.useBuiltInControls && this.webXRMode === WebXRMode.None) {\n if (!this.usingExternalCamera) {\n this.perspectiveControls = new OrbitControls(this.perspectiveCamera, this.renderer.domElement);\n this.orthographicControls = new OrbitControls(this.orthographicCamera, this.renderer.domElement);\n } else {\n if (this.camera.isOrthographicCamera) {\n this.orthographicControls = new OrbitControls(this.camera, this.renderer.domElement);\n } else {\n this.perspectiveControls = new OrbitControls(this.camera, this.renderer.domElement);\n }\n }\n for (let controls of [this.orthographicControls, this.perspectiveControls,]) {\n if (controls) {\n controls.listenToKeyEvents(window);\n controls.rotateSpeed = 0.5;\n controls.maxPolarAngle = Math.PI * .75;\n controls.minPolarAngle = 0.1;\n controls.enableDamping = true;\n controls.dampingFactor = 0.05;\n controls.target.copy(this.initialCameraLookAt);\n controls.update();\n }\n }\n this.controls = this.camera.isOrthographicCamera ? this.orthographicControls : this.perspectiveControls;\n this.controls.update();\n }\n }\n\n setupEventHandlers() {\n if (this.useBuiltInControls && this.webXRMode === WebXRMode.None) {\n this.mouseMoveListener = this.onMouseMove.bind(this);\n this.renderer.domElement.addEventListener('pointermove', this.mouseMoveListener, false);\n this.mouseDownListener = this.onMouseDown.bind(this);\n this.renderer.domElement.addEventListener('pointerdown', this.mouseDownListener, false);\n this.mouseUpListener = this.onMouseUp.bind(this);\n this.renderer.domElement.addEventListener('pointerup', this.mouseUpListener, false);\n this.keyDownListener = this.onKeyDown.bind(this);\n window.addEventListener('keydown', this.keyDownListener, false);\n }\n }\n\n removeEventHandlers() {\n if (this.useBuiltInControls) {\n this.renderer.domElement.removeEventListener('pointermove', this.mouseMoveListener);\n this.mouseMoveListener = null;\n this.renderer.domElement.removeEventListener('pointerdown', this.mouseDownListener);\n this.mouseDownListener = null;\n this.renderer.domElement.removeEventListener('pointerup', this.mouseUpListener);\n this.mouseUpListener = null;\n window.removeEventListener('keydown', this.keyDownListener);\n this.keyDownListener = null;\n }\n }\n\n setRenderMode(renderMode) {\n this.renderMode = renderMode;\n }\n\n setActiveSphericalHarmonicsDegrees(activeSphericalHarmonicsDegrees) {\n this.splatMesh.material.uniforms.sphericalHarmonicsDegree.value = activeSphericalHarmonicsDegrees;\n this.splatMesh.material.uniformsNeedUpdate = true;\n }\n\n onSplatMeshChanged(callback) {\n this.onSplatMeshChangedCallback = callback;\n }\n\n onKeyDown = function() {\n\n const forward = new THREE.Vector3();\n const tempMatrixLeft = new THREE.Matrix4();\n const tempMatrixRight = new THREE.Matrix4();\n\n return function(e) {\n forward.set(0, 0, -1);\n forward.transformDirection(this.camera.matrixWorld);\n tempMatrixLeft.makeRotationAxis(forward, Math.PI / 128);\n tempMatrixRight.makeRotationAxis(forward, -Math.PI / 128);\n switch (e.code) {\n case 'KeyG':\n this.focalAdjustment += 0.02;\n this.forceRenderNextFrame();\n break;\n case 'KeyF':\n this.focalAdjustment -= 0.02;\n this.forceRenderNextFrame();\n break;\n case 'ArrowLeft':\n this.camera.up.transformDirection(tempMatrixLeft);\n break;\n case 'ArrowRight':\n this.camera.up.transformDirection(tempMatrixRight);\n break;\n case 'KeyC':\n this.showMeshCursor = !this.showMeshCursor;\n break;\n case 'KeyU':\n this.showControlPlane = !this.showControlPlane;\n break;\n case 'KeyI':\n this.showInfo = !this.showInfo;\n if (this.showInfo) {\n this.infoPanel.show();\n } else {\n this.infoPanel.hide();\n }\n break;\n case 'KeyO':\n if (!this.usingExternalCamera) {\n this.setOrthographicMode(!this.camera.isOrthographicCamera);\n }\n break;\n case 'KeyP':\n if (!this.usingExternalCamera) {\n this.splatMesh.setPointCloudModeEnabled(!this.splatMesh.getPointCloudModeEnabled());\n }\n break;\n case 'Equal':\n if (!this.usingExternalCamera) {\n this.splatMesh.setSplatScale(this.splatMesh.getSplatScale() + 0.05);\n }\n break;\n case 'Minus':\n if (!this.usingExternalCamera) {\n this.splatMesh.setSplatScale(Math.max(this.splatMesh.getSplatScale() - 0.05, 0.0));\n }\n break;\n }\n };\n\n }();\n\n onMouseMove(mouse) {\n this.mousePosition.set(mouse.offsetX, mouse.offsetY);\n }\n\n onMouseDown() {\n this.mouseDownPosition.copy(this.mousePosition);\n this.mouseDownTime = getCurrentTime();\n }\n\n onMouseUp = function() {\n\n const clickOffset = new THREE.Vector2();\n\n return function(mouse) {\n clickOffset.copy(this.mousePosition).sub(this.mouseDownPosition);\n const mouseUpTime = getCurrentTime();\n const wasClick = mouseUpTime - this.mouseDownTime < 0.5 && clickOffset.length() < 2;\n if (wasClick) {\n this.onMouseClick(mouse);\n }\n };\n\n }();\n\n onMouseClick(mouse) {\n this.mousePosition.set(mouse.offsetX, mouse.offsetY);\n this.checkForFocalPointChange();\n }\n\n checkForFocalPointChange = function() {\n\n const renderDimensions = new THREE.Vector2();\n const toNewFocalPoint = new THREE.Vector3();\n const outHits = [];\n\n return function() {\n if (!this.transitioningCameraTarget) {\n this.getRenderDimensions(renderDimensions);\n outHits.length = 0;\n this.raycaster.setFromCameraAndScreenPosition(this.camera, this.mousePosition, renderDimensions);\n this.raycaster.intersectSplatMesh(this.splatMesh, outHits);\n if (outHits.length > 0) {\n const hit = outHits[0];\n const intersectionPoint = hit.origin;\n toNewFocalPoint.copy(intersectionPoint).sub(this.camera.position);\n if (toNewFocalPoint.length() > MINIMUM_DISTANCE_TO_NEW_FOCAL_POINT) {\n this.previousCameraTarget.copy(this.controls.target);\n this.nextCameraTarget.copy(intersectionPoint);\n this.transitioningCameraTarget = true;\n this.transitioningCameraTargetStartTime = getCurrentTime();\n }\n }\n }\n };\n\n }();\n\n getRenderDimensions(outDimensions) {\n if (this.rootElement) {\n outDimensions.x = this.rootElement.offsetWidth;\n outDimensions.y = this.rootElement.offsetHeight;\n } else {\n this.renderer.getSize(outDimensions);\n }\n }\n\n setOrthographicMode(orthographicMode) {\n if (orthographicMode === this.camera.isOrthographicCamera) return;\n const fromCamera = this.camera;\n const toCamera = orthographicMode ? this.orthographicCamera : this.perspectiveCamera;\n toCamera.position.copy(fromCamera.position);\n toCamera.up.copy(fromCamera.up);\n toCamera.rotation.copy(fromCamera.rotation);\n toCamera.quaternion.copy(fromCamera.quaternion);\n toCamera.matrix.copy(fromCamera.matrix);\n this.camera = toCamera;\n\n if (this.controls) {\n\n const resetControls = (controls) => {\n controls.saveState();\n controls.reset();\n };\n\n const fromControls = this.controls;\n const toControls = orthographicMode ? this.orthographicControls : this.perspectiveControls;\n\n resetControls(toControls);\n resetControls(fromControls);\n\n toControls.target.copy(fromControls.target);\n if (orthographicMode) {\n Viewer.setCameraZoomFromPosition(toCamera, fromCamera, fromControls);\n } else {\n Viewer.setCameraPositionFromZoom(toCamera, fromCamera, toControls);\n }\n this.controls = toControls;\n this.camera.lookAt(this.controls.target);\n }\n }\n\n static setCameraPositionFromZoom = function() {\n\n const tempVector = new THREE.Vector3();\n\n return function(positionCamera, zoomedCamera, controls) {\n const toLookAtDistance = 1 / (zoomedCamera.zoom * 0.001);\n tempVector.copy(controls.target).sub(positionCamera.position).normalize().multiplyScalar(toLookAtDistance).negate();\n positionCamera.position.copy(controls.target).add(tempVector);\n };\n\n }();\n\n\n static setCameraZoomFromPosition = function() {\n\n const tempVector = new THREE.Vector3();\n\n return function(zoomCamera, positionZamera, controls) {\n const toLookAtDistance = tempVector.copy(controls.target).sub(positionZamera.position).length();\n zoomCamera.zoom = 1 / (toLookAtDistance * .001);\n };\n\n }();\n\n updateSplatMesh = function() {\n\n const renderDimensions = new THREE.Vector2();\n\n return function() {\n if (!this.splatMesh) return;\n const splatCount = this.splatMesh.getSplatCount();\n if (splatCount > 0) {\n this.splatMesh.updateVisibleRegionFadeDistance(this.sceneRevealMode);\n this.splatMesh.updateTransforms();\n this.getRenderDimensions(renderDimensions);\n const focalLengthX = this.camera.projectionMatrix.elements[0] * 0.5 *\n this.devicePixelRatio * renderDimensions.x;\n const focalLengthY = this.camera.projectionMatrix.elements[5] * 0.5 *\n this.devicePixelRatio * renderDimensions.y;\n\n const focalMultiplier = this.camera.isOrthographicCamera ? (1.0 / this.devicePixelRatio) : 1.0;\n const focalAdjustment = this.focalAdjustment * focalMultiplier;\n const inverseFocalAdjustment = 1.0 / focalAdjustment;\n\n this.adjustForWebXRStereo(renderDimensions);\n this.splatMesh.updateUniforms(renderDimensions, focalLengthX * focalAdjustment, focalLengthY * focalAdjustment,\n this.camera.isOrthographicCamera, this.camera.zoom || 1.0, inverseFocalAdjustment);\n }\n };\n\n }();\n\n adjustForWebXRStereo(renderDimensions) {\n // TODO: Figure out a less hacky way to determine if stereo rendering is active\n if (this.camera && this.webXRActive) {\n const xrCamera = this.renderer.xr.getCamera();\n const xrCameraProj00 = xrCamera.projectionMatrix.elements[0];\n const cameraProj00 = this.camera.projectionMatrix.elements[0];\n renderDimensions.x *= (cameraProj00 / xrCameraProj00);\n }\n }\n\n isLoadingOrUnloading() {\n return Object.keys(this.splatSceneDownloadPromises).length > 0 || this.splatSceneDownloadAndBuildPromise !== null ||\n this.splatSceneRemovalPromise !== null;\n }\n\n isDisposingOrDisposed() {\n return this.disposing || this.disposed;\n }\n\n addSplatSceneDownloadPromise(promise) {\n this.splatSceneDownloadPromises[promise.id] = promise;\n }\n\n removeSplatSceneDownloadPromise(promise) {\n delete this.splatSceneDownloadPromises[promise.id];\n }\n\n setSplatSceneDownloadAndBuildPromise(promise) {\n this.splatSceneDownloadAndBuildPromise = promise;\n }\n\n clearSplatSceneDownloadAndBuildPromise() {\n this.splatSceneDownloadAndBuildPromise = null;\n }\n\n /**\n * Add a splat scene to the viewer and display any loading UI if appropriate.\n * @param {string} path Path to splat scene to be loaded\n * @param {object} options {\n *\n * splatAlphaRemovalThreshold: Ignore any splats with an alpha less than the specified\n * value (valid range: 0 - 255), defaults to 1\n *\n * showLoadingUI: Display a loading spinner while the scene is loading, defaults to true\n *\n * position (Array<number>): Position of the scene, acts as an offset from its default position, defaults to [0, 0, 0]\n *\n * rotation (Array<number>): Rotation of the scene represented as a quaternion, defaults to [0, 0, 0, 1]\n *\n * scale (Array<number>): Scene's scale, defaults to [1, 1, 1]\n *\n * onProgress: Function to be called as file data are received, or other processing occurs\n *\n * headers: Optional HTTP headers to be sent along with splat requests\n * }\n * @return {AbortablePromise}\n */\n addSplatScene(path, options = {}) {\n\n if (this.isLoadingOrUnloading()) {\n throw new Error('Cannot add splat scene while another load or unload is already in progress.');\n }\n\n if (this.isDisposingOrDisposed()) {\n throw new Error('Cannot add splat scene after dispose() is called.');\n }\n\n if (options.progressiveLoad && this.splatMesh.scenes && this.splatMesh.scenes.length > 0) {\n console.log('addSplatScene(): \"progressiveLoad\" option ignore because there are multiple splat scenes');\n options.progressiveLoad = false;\n }\n\n const format = (options.format !== undefined && options.format !== null) ? options.format : sceneFormatFromPath(path);\n const progressiveLoad = Viewer.isProgressivelyLoadable(format) && options.progressiveLoad;\n const showLoadingUI = (options.showLoadingUI !== undefined && options.showLoadingUI !== null) ? options.showLoadingUI : true;\n\n let loadingUITaskId = null;\n if (showLoadingUI) {\n this.loadingSpinner.removeAllTasks();\n loadingUITaskId = this.loadingSpinner.addTask('Downloading...');\n }\n const hideLoadingUI = () => {\n this.loadingProgressBar.hide();\n this.loadingSpinner.removeAllTasks();\n };\n\n const onProgressUIUpdate = (percentComplete, percentCompleteLabel, loaderStatus) => {\n if (showLoadingUI) {\n if (loaderStatus === LoaderStatus.Downloading) {\n if (percentComplete == 100) {\n this.loadingSpinner.setMessageForTask(loadingUITaskId, 'Download complete!');\n } else {\n if (progressiveLoad) {\n this.loadingSpinner.setMessageForTask(loadingUITaskId, 'Downloading splats...');\n } else {\n const suffix = percentCompleteLabel ? `: ${percentCompleteLabel}` : `...`;\n this.loadingSpinner.setMessageForTask(loadingUITaskId, `Downloading${suffix}`);\n }\n }\n } else if (loaderStatus === LoaderStatus.Processing) {\n this.loadingSpinner.setMessageForTask(loadingUITaskId, 'Processing splats...');\n }\n }\n };\n\n let downloadDone = false;\n let downloadedPercentage = 0;\n const splatBuffersAddedUIUpdate = (firstBuild, finalBuild) => {\n if (showLoadingUI) {\n if (firstBuild && progressiveLoad || finalBuild && !progressiveLoad) {\n this.loadingSpinner.removeTask(loadingUITaskId);\n if (!finalBuild && !downloadDone) this.loadingProgressBar.show();\n }\n if (progressiveLoad) {\n if (finalBuild) {\n downloadDone = true;\n this.loadingProgressBar.hide();\n } else {\n this.loadingProgressBar.setProgress(downloadedPercentage);\n }\n }\n }\n };\n\n const onProgress = (percentComplete, percentCompleteLabel, loaderStatus) => {\n downloadedPercentage = percentComplete;\n onProgressUIUpdate(percentComplete, percentCompleteLabel, loaderStatus);\n if (options.onProgress) options.onProgress(percentComplete, percentCompleteLabel, loaderStatus);\n };\n\n const buildSection = (splatBuffer, firstBuild, finalBuild) => {\n if (!progressiveLoad && options.onProgress) options.onProgress(0, '0%', LoaderStatus.Processing);\n const addSplatBufferOptions = {\n 'rotation': options.rotation || options.orientation,\n 'position': options.position,\n 'scale': options.scale,\n 'splatAlphaRemovalThreshold': options.splatAlphaRemovalThreshold,\n };\n return this.addSplatBuffers([splatBuffer], [addSplatBufferOptions],\n finalBuild, firstBuild && showLoadingUI, showLoadingUI,\n progressiveLoad, progressiveLoad).then(() => {\n if (!progressiveLoad && options.onProgress) options.onProgress(100, '100%', LoaderStatus.Processing);\n splatBuffersAddedUIUpdate(firstBuild, finalBuild);\n });\n };\n\n const loadFunc = progressiveLoad ? this.downloadAndBuildSingleSplatSceneProgressiveLoad.bind(this) :\n this.downloadAndBuildSingleSplatSceneStandardLoad.bind(this);\n return loadFunc(path, format, options.splatAlphaRemovalThreshold, buildSection.bind(this),\n onProgress, hideLoadingUI.bind(this), options.headers);\n }\n\n /**\n * Download a single splat scene, convert to splat buffer and then rebuild the viewer's splat mesh\n * by calling 'buildFunc' -- all before displaying the scene. Also sets/clears relevant instance synchronization objects,\n * and calls appropriate functions on success or failure.\n * @param {string} path Path to splat scene to be loaded\n * @param {SceneFormat} format Format of the splat scene file\n * @param {number} splatAlphaRemovalThreshold Ignore any splats with an alpha less than the specified value (valid range: 0 - 255)\n * @param {function} buildFunc Function to build the viewer's splat mesh with the downloaded splat buffer\n * @param {function} onProgress Function to be called as file data are received, or other processing occurs\n * @param {function} onException Function to be called when exception occurs\n * @param {object} headers Optional HTTP headers to pass to use for downloading splat scene\n * @return {AbortablePromise}\n */\n downloadAndBuildSingleSplatSceneStandardLoad(path, format, splatAlphaRemovalThreshold, buildFunc, onProgress, onException, headers) {\n\n const downloadPromise = this.downloadSplatSceneToSplatBuffer(path, splatAlphaRemovalThreshold, onProgress, false,\n undefined, format, headers);\n const downloadAndBuildPromise = abortablePromiseWithExtractedComponents(downloadPromise.abortHandler);\n\n downloadPromise.then((splatBuffer) => {\n this.removeSplatSceneDownloadPromise(downloadPromise);\n return buildFunc(splatBuffer, true, true).then(() => {\n downloadAndBuildPromise.resolve();\n this.clearSplatSceneDownloadAndBuildPromise();\n });\n })\n .catch((e) => {\n if (onException) onException();\n this.clearSplatSceneDownloadAndBuildPromise();\n this.removeSplatSceneDownloadPromise(downloadPromise);\n downloadAndBuildPromise.reject(this.updateError(e, `Viewer::addSplatScene -> Could not load file ${path}`));\n });\n\n this.addSplatSceneDownloadPromise(downloadPromise);\n this.setSplatSceneDownloadAndBuildPromise(downloadAndBuildPromise.promise);\n\n return downloadAndBuildPromise.promise;\n }\n\n /**\n * Download a single splat scene and convert to splat buffer in a progressive manner, allowing rendering as the file downloads.\n * As each section is downloaded, the viewer's splat mesh is rebuilt by calling 'buildFunc'\n * Also sets/clears relevant instance synchronization objects, and calls appropriate functions on success or failure.\n * @param {string} path Path to splat scene to be loaded\n * @param {SceneFormat} format Format of the splat scene file\n * @param {number} splatAlphaRemovalThreshold Ignore any splats with an alpha less than the specified value (valid range: 0 - 255)\n * @param {function} buildFunc Function to rebuild the viewer's splat mesh after a new splat buffer section is downloaded\n * @param {function} onDownloadProgress Function to be called as file data are received\n * @param {function} onDownloadException Function to be called when exception occurs at any point during the full download\n * @param {object} headers Optional HTTP headers to pass to use for downloading splat scene\n * @return {AbortablePromise}\n */\n downloadAndBuildSingleSplatSceneProgressiveLoad(path, format, splatAlphaRemovalThreshold, buildFunc,\n onDownloadProgress, onDownloadException, headers) {\n let progressiveLoadedSectionBuildCount = 0;\n let progressiveLoadedSectionBuilding = false;\n const queuedProgressiveLoadSectionBuilds = [];\n\n const checkAndBuildProgressiveLoadSections = () => {\n if (queuedProgressiveLoadSectionBuilds.length > 0 &&\n !progressiveLoadedSectionBuilding &&\n !this.isDisposingOrDisposed()) {\n progressiveLoadedSectionBuilding = true;\n const queuedBuild = queuedProgressiveLoadSectionBuilds.shift();\n buildFunc(queuedBuild.splatBuffer, queuedBuild.firstBuild, queuedBuild.finalBuild)\n .then(() => {\n progressiveLoadedSectionBuilding = false;\n if (queuedBuild.firstBuild) {\n progressiveLoadFirstSectionBuildPromise.resolve();\n } else if (queuedBuild.finalBuild) {\n splatSceneDownloadAndBuildPromise.resolve();\n this.clearSplatSceneDownloadAndBuildPromise();\n }\n if (queuedProgressiveLoadSectionBuilds.length > 0) {\n delayedExecute(() => checkAndBuildProgressiveLoadSections());\n }\n });\n }\n };\n\n const onProgressiveLoadSectionProgress = (splatBuffer, finalBuild) => {\n if (!this.isDisposingOrDisposed()) {\n if (finalBuild || queuedProgressiveLoadSectionBuilds.length === 0 ||\n splatBuffer.getSplatCount() > queuedProgressiveLoadSectionBuilds[0].splatBuffer.getSplatCount()) {\n queuedProgressiveLoadSectionBuilds.push({\n splatBuffer,\n firstBuild: progressiveLoadedSectionBuildCount === 0,\n finalBuild\n });\n progressiveLoadedSectionBuildCount++;\n checkAndBuildProgressiveLoadSections();\n }\n }\n };\n\n const splatSceneDownloadPromise = this.downloadSplatSceneToSplatBuffer(path, splatAlphaRemovalThreshold, onDownloadProgress, true,\n onProgressiveLoadSectionProgress, format, headers);\n\n const progressiveLoadFirstSectionBuildPromise = abortablePromiseWithExtractedComponents(splatSceneDownloadPromise.abortHandler);\n const splatSceneDownloadAndBuildPromise = abortablePromiseWithExtractedComponents();\n\n this.addSplatSceneDownloadPromise(splatSceneDownloadPromise);\n this.setSplatSceneDownloadAndBuildPromise(splatSceneDownloadAndBuildPromise.promise);\n\n splatSceneDownloadPromise.then(() => {\n this.removeSplatSceneDownloadPromise(splatSceneDownloadPromise);\n })\n .catch((e) => {\n this.clearSplatSceneDownloadAndBuildPromise();\n this.removeSplatSceneDownloadPromise(splatSceneDownloadPromise);\n const error = this.updateError(e, `Viewer::addSplatScene -> Could not load one or more scenes`);\n progressiveLoadFirstSectionBuildPromise.reject(error);\n if (onDownloadException) onDownloadException(error);\n });\n\n return progressiveLoadFirstSectionBuildPromise.promise;\n }\n\n /**\n * Add multiple splat scenes to the viewer and display any loading UI if appropriate.\n * @param {Array<object>} sceneOptions Array of per-scene options: {\n *\n * path: Path to splat scene to be loaded\n *\n * splatAlphaRemovalThreshold: Ignore any splats with an alpha less than the specified\n * value (valid range: 0 - 255), defaults to 1\n *\n * position (Array<number>): Position of the scene, acts as an offset from its default position, defaults to [0, 0, 0]\n *\n * rotation (Array<number>): Rotation of the scene represented as a quaternion, defaults to [0, 0, 0, 1]\n *\n * scale (Array<number>): Scene's scale, defaults to [1, 1, 1]\n *\n * headers: Optional HTTP headers to be sent along with splat requests\n *\n * format (SceneFormat) Optional, the format of the scene data (.ply, .ksplat, .splat). If not present, the\n * file extension in 'path' will be used to determine the format (if it is present)\n * }\n * @param {boolean} showLoadingUI Display a loading spinner while the scene is loading, defaults to true\n * @param {function} onProgress Function to be called as file data are received\n * @return {AbortablePromise}\n */\n addSplatScenes(sceneOptions, showLoadingUI = true, onProgress = undefined) {\n\n if (this.isLoadingOrUnloading()) {\n throw new Error('Cannot add splat scene while another load or unload is already in progress.');\n }\n\n if (this.isDisposingOrDisposed()) {\n throw new Error('Cannot add splat scene after dispose() is called.');\n }\n\n const fileCount = sceneOptions.length;\n const percentComplete = [];\n\n let loadingUITaskId;\n if (showLoadingUI) {\n this.loadingSpinner.removeAllTasks();\n loadingUITaskId = this.loadingSpinner.addTask('Downloading...');\n }\n\n const onLoadProgress = (fileIndex, percent, percentLabel, loaderStatus) => {\n percentComplete[fileIndex] = percent;\n let totalPercent = 0;\n for (let i = 0; i < fileCount; i++) totalPercent += percentComplete[i] || 0;\n totalPercent = totalPercent / fileCount;\n percentLabel = `${totalPercent.toFixed(2)}%`;\n if (showLoadingUI) {\n if (loaderStatus === LoaderStatus.Downloading) {\n this.loadingSpinner.setMessageForTask(loadingUITaskId, totalPercent == 100 ?\n `Download complete!` : `Downloading: ${percentLabel}`);\n }\n }\n if (onProgress) onProgress(totalPercent, percentLabel, loaderStatus);\n };\n\n const baseDownloadPromises = [];\n const nativeDownloadPromises = [];\n for (let i = 0; i < sceneOptions.length; i++) {\n const options = sceneOptions[i];\n const format = (options.format !== undefined && options.format !== null) ? options.format : sceneFormatFromPath(options.path);\n const baseDownloadPromise = this.downloadSplatSceneToSplatBuffer(options.path, options.splatAlphaRemovalThreshold,\n onLoadProgress.bind(this, i), false, undefined,\n format, options.headers);\n baseDownloadPromises.push(baseDownloadPromise);\n nativeDownloadPromises.push(baseDownloadPromise.promise);\n }\n\n const downloadAndBuildPromise = new AbortablePromise((resolve, reject) => {\n Promise.all(nativeDownloadPromises)\n .then((splatBuffers) => {\n if (showLoadingUI) this.loadingSpinner.removeTask(loadingUITaskId);\n if (onProgress) onProgress(0, '0%', LoaderStatus.Processing);\n this.addSplatBuffers(splatBuffers, sceneOptions, true, showLoadingUI, showLoadingUI, false, false).then(() => {\n if (onProgress) onProgress(100, '100%', LoaderStatus.Processing);\n this.clearSplatSceneDownloadAndBuildPromise();\n resolve();\n });\n })\n .catch((e) => {\n if (showLoadingUI) this.loadingSpinner.removeTask(loadingUITaskId);\n this.clearSplatSceneDownloadAndBuildPromise();\n reject(this.updateError(e, `Viewer::addSplatScenes -> Could not load one or more splat scenes.`));\n })\n .finally(() => {\n this.removeSplatSceneDownloadPromise(downloadAndBuildPromise);\n });\n }, (reason) => {\n for (let baseDownloadPromise of baseDownloadPromises) {\n baseDownloadPromise.abort(reason);\n }\n });\n this.addSplatSceneDownloadPromise(downloadAndBuildPromise);\n this.setSplatSceneDownloadAndBuildPromise(downloadAndBuildPromise);\n return downloadAndBuildPromise;\n }\n\n /**\n * Download a splat scene and convert to SplatBuffer instance.\n * @param {string} path Path to splat scene to be loaded\n * @param {number} splatAlphaRemovalThreshold Ignore any splats with an alpha less than the specified\n * value (valid range: 0 - 255), defaults to 1\n *\n * @param {function} onProgress Function to be called as file data are received\n * @param {boolean} progressiveBuild Construct file sections into splat buffers as they are downloaded\n * @param {function} onSectionBuilt Function to be called when new section is added to the file\n * @param {string} format File format of the scene\n * @param {object} headers Optional HTTP headers to pass to use for downloading splat scene\n * @return {AbortablePromise}\n */\n downloadSplatSceneToSplatBuffer(path, splatAlphaRemovalThreshold = 1, onProgress = undefined,\n progressiveBuild = false, onSectionBuilt = undefined, format, headers) {\n try {\n if (format === SceneFormat.Splat || format === SceneFormat.KSplat || format === SceneFormat.Ply) {\n const optimizeSplatData = progressiveBuild ? false : this.optimizeSplatData;\n if (format === SceneFormat.Splat) {\n return SplatLoader.loadFromURL(path, onProgress, progressiveBuild, onSectionBuilt, splatAlphaRemovalThreshold,\n this.inMemoryCompressionLevel, optimizeSplatData, headers);\n } else if (format === SceneFormat.KSplat) {\n return KSplatLoader.loadFromURL(path, onProgress, progressiveBuild, onSectionBuilt, headers);\n } else if (format === SceneFormat.Ply) {\n return PlyLoader.loadFromURL(path, onProgress, progressiveBuild, onSectionBuilt, splatAlphaRemovalThreshold,\n this.inMemoryCompressionLevel, optimizeSplatData, this.sphericalHarmonicsDegree, headers);\n }\n } else if (format === SceneFormat.Spz) {\n return SpzLoader.loadFromURL(path, onProgress, splatAlphaRemovalThreshold, this.inMemoryCompressionLevel,\n this.optimizeSplatData, this.sphericalHarmonicsDegree, headers);\n }\n } catch (e) {\n throw this.updateError(e, null);\n }\n\n throw new Error(`Viewer::downloadSplatSceneToSplatBuffer -> File format not supported: ${path}`);\n }\n\n static isProgressivelyLoadable(format) {\n return format === SceneFormat.Splat || format === SceneFormat.KSplat || format === SceneFormat.Ply;\n }\n\n /**\n * Add one or more instances of SplatBuffer to the SplatMesh instance managed by the viewer and set up the sorting web worker.\n * This function will terminate the existing sort worker (if there is one).\n */\n addSplatBuffers = function() {\n\n return function(splatBuffers, splatBufferOptions = [], finalBuild = true, showLoadingUI = true,\n showLoadingUIForSplatTreeBuild = true, replaceExisting = false,\n enableRenderBeforeFirstSort = false, preserveVisibleRegion = true) {\n\n if (this.isDisposingOrDisposed()) return Promise.resolve();\n\n let splatProcessingTaskId = null;\n const removeSplatProcessingTask = () => {\n if (splatProcessingTaskId !== null) {\n this.loadingSpinner.removeTask(splatProcessingTaskId);\n splatProcessingTaskId = null;\n }\n };\n\n this.splatRenderReady = false;\n return new Promise((resolve) => {\n if (showLoadingUI) {\n splatProcessingTaskId = this.loadingSpinner.addTask('Processing splats...');\n }\n delayedExecute(() => {\n if (this.isDisposingOrDisposed()) {\n resolve();\n } else {\n const buildResults = this.addSplatBuffersToMesh(splatBuffers, splatBufferOptions, finalBuild,\n showLoadingUIForSplatTreeBuild, replaceExisting,\n preserveVisibleRegion);\n\n const maxSplatCount = this.splatMesh.getMaxSplatCount();\n if (this.sortWorker && this.sortWorker.maxSplatCount !== maxSplatCount) this.disposeSortWorker();\n // If we aren't calculating the splat distances from the center on the GPU, the sorting worker needs\n // splat centers and transform indexes so that it can calculate those distance values.\n if (!this.gpuAcceleratedSort) {\n this.preSortMessages.push({\n 'centers': buildResults.centers.buffer,\n 'sceneIndexes': buildResults.sceneIndexes.buffer,\n 'range': {\n 'from': buildResults.from,\n 'to': buildResults.to,\n 'count': buildResults.count\n }\n });\n }\n const sortWorkerSetupPromise = (!this.sortWorker && maxSplatCount > 0) ?\n this.setupSortWorker(this.splatMesh) : Promise.resolve();\n sortWorkerSetupPromise.then(() => {\n if (this.isDisposingOrDisposed()) return;\n this.runSplatSort(true, true).then((sortRunning) => {\n if (!this.sortWorker || !sortRunning) {\n this.splatRenderReady = true;\n removeSplatProcessingTask();\n resolve();\n } else {\n if (enableRenderBeforeFirstSort) {\n this.splatRenderReady = true;\n } else {\n this.runAfterNextSort.push(() => {\n this.splatRenderReady = true;\n });\n }\n this.runAfterNextSort.push(() => {\n removeSplatProcessingTask();\n resolve();\n });\n }\n });\n });\n }\n }, true);\n });\n };\n\n }();\n\n /**\n * Add one or more instances of SplatBuffer to the SplatMesh instance managed by the viewer. By default, this function is additive;\n * all splat buffers contained by the viewer's splat mesh before calling this function will be preserved. This behavior can be\n * changed by passing 'true' for 'replaceExisting'.\n * @param {Array<SplatBuffer>} splatBuffers SplatBuffer instances\n * @param {Array<object>} splatBufferOptions Array of options objects: {\n *\n * splatAlphaRemovalThreshold: Ignore any splats with an alpha less than the specified\n * value (valid range: 0 - 255), defaults to 1\n *\n * position (Array<number>): Position of the scene, acts as an offset from its default position, defaults to [0, 0, 0]\n *\n * rotation (Array<number>): Rotation of the scene represented as a quaternion, defaults to [0, 0, 0, 1]\n *\n * scale (Array<number>): Scene's scale, defaults to [1, 1, 1]\n * }\n * @param {boolean} finalBuild Will the splat mesh be in its final state after this build?\n * @param {boolean} showLoadingUIForSplatTreeBuild Whether or not to show the loading spinner during construction of the splat tree.\n * @return {object} Object containing info about the splats that are updated\n */\n addSplatBuffersToMesh = function() {\n\n let splatOptimizingTaskId;\n\n return function(splatBuffers, splatBufferOptions, finalBuild = true, showLoadingUIForSplatTreeBuild = false,\n replaceExisting = false, preserveVisibleRegion = true) {\n if (this.isDisposingOrDisposed()) return;\n let allSplatBuffers = [];\n let allSplatBufferOptions = [];\n if (!replaceExisting) {\n allSplatBuffers = this.splatMesh.scenes.map((scene) => scene.splatBuffer) || [];\n allSplatBufferOptions = this.splatMesh.sceneOptions ? this.splatMesh.sceneOptions.map((sceneOptions) => sceneOptions) : [];\n }\n allSplatBuffers.push(...splatBuffers);\n allSplatBufferOptions.push(...splatBufferOptions);\n if (this.renderer) this.splatMesh.setRenderer(this.renderer);\n const onSplatTreeIndexesUpload = (finished) => {\n if (this.isDisposingOrDisposed()) return;\n const splatCount = this.splatMesh.getSplatCount();\n if (showLoadingUIForSplatTreeBuild && splatCount >= MIN_SPLAT_COUNT_TO_SHOW_SPLAT_TREE_LOADING_SPINNER) {\n if (!finished && !splatOptimizingTaskId) {\n this.loadingSpinner.setMinimized(true, true);\n splatOptimizingTaskId = this.loadingSpinner.addTask('Optimizing data structures...');\n }\n }\n };\n const onSplatTreeReady = (finished) => {\n if (this.isDisposingOrDisposed()) return;\n if (finished && splatOptimizingTaskId) {\n this.loadingSpinner.removeTask(splatOptimizingTaskId);\n splatOptimizingTaskId = null;\n }\n };\n const buildResults = this.splatMesh.build(allSplatBuffers, allSplatBufferOptions, true, finalBuild, onSplatTreeIndexesUpload,\n onSplatTreeReady, preserveVisibleRegion);\n if (finalBuild && this.freeIntermediateSplatData) this.splatMesh.freeIntermediateSplatData();\n return buildResults;\n };\n\n }();\n\n /**\n * Set up the splat sorting web worker.\n * @param {SplatMesh} splatMesh SplatMesh instance that contains the splats to be sorted\n * @return {Promise}\n */\n setupSortWorker(splatMesh) {\n if (this.isDisposingOrDisposed()) return;\n return new Promise((resolve) => {\n const DistancesArrayType = this.integerBasedSort ? Int32Array : Float32Array;\n const splatCount = splatMesh.getSplatCount();\n const maxSplatCount = splatMesh.getMaxSplatCount();\n this.sortWorker = createSortWorker(maxSplatCount, this.sharedMemoryForWorkers, this.enableSIMDInSort,\n this.integerBasedSort, this.splatMesh.dynamicMode, this.splatSortDistanceMapPrecision);\n this.sortWorker.onmessage = (e) => {\n if (e.data.sortDone) {\n this.sortRunning = false;\n if (this.sharedMemoryForWorkers) {\n this.splatMesh.updateRenderIndexes(this.sortWorkerSortedIndexes, e.data.splatRenderCount);\n } else {\n const sortedIndexes = new Uint32Array(e.data.sortedIndexes.buffer, 0, e.data.splatRenderCount);\n this.splatMesh.updateRenderIndexes(sortedIndexes, e.data.splatRenderCount);\n }\n\n this.lastSplatSortCount = this.splatSortCount;\n\n this.lastSortTime = e.data.sortTime;\n this.sortPromiseResolver();\n this.sortPromiseResolver = null;\n this.forceRenderNextFrame();\n if (this.runAfterNextSort.length > 0) {\n this.runAfterNextSort.forEach((func) => {\n func();\n });\n this.runAfterNextSort.length = 0;\n }\n } else if (e.data.sortCanceled) {\n this.sortRunning = false;\n } else if (e.data.sortSetupPhase1Complete) {\n if (this.logLevel >= LogLevel.Info) console.log('Sorting web worker WASM setup complete.');\n if (this.sharedMemoryForWorkers) {\n this.sortWorkerSortedIndexes = new Uint32Array(e.data.sortedIndexesBuffer,\n e.data.sortedIndexesOffset, maxSplatCount);\n this.sortWorkerIndexesToSort = new Uint32Array(e.data.indexesToSortBuffer,\n e.data.indexesToSortOffset, maxSplatCount);\n this.sortWorkerPrecomputedDistances = new DistancesArrayType(e.data.precomputedDistancesBuffer,\n e.data.precomputedDistancesOffset,\n maxSplatCount);\n this.sortWorkerTransforms = new Float32Array(e.data.transformsBuffer,\n e.data.transformsOffset, Constants.MaxScenes * 16);\n } else {\n this.sortWorkerIndexesToSort = new Uint32Array(maxSplatCount);\n this.sortWorkerPrecomputedDistances = new DistancesArrayType(maxSplatCount);\n this.sortWorkerTransforms = new Float32Array(Constants.MaxScenes * 16);\n }\n for (let i = 0; i < splatCount; i++) this.sortWorkerIndexesToSort[i] = i;\n this.sortWorker.maxSplatCount = maxSplatCount;\n\n if (this.logLevel >= LogLevel.Info) {\n console.log('Sorting web worker ready.');\n const splatDataTextures = this.splatMesh.getSplatDataTextures();\n const covariancesTextureSize = splatDataTextures.covariances.size;\n const centersColorsTextureSize = splatDataTextures.centerColors.size;\n console.log('Covariances texture size: ' + covariancesTextureSize.x + ' x ' + covariancesTextureSize.y);\n console.log('Centers/colors texture size: ' + centersColorsTextureSize.x + ' x ' + centersColorsTextureSize.y);\n }\n\n resolve();\n }\n };\n });\n }\n\n updateError(error, defaultMessage) {\n if (error instanceof AbortedPromiseError) return error;\n if (error instanceof DirectLoadError) {\n return new Error('File type or server does not support progressive loading.');\n }\n return defaultMessage ? new Error(defaultMessage) : error;\n }\n\n disposeSortWorker() {\n if (this.sortWorker) this.sortWorker.terminate();\n this.sortWorker = null;\n this.sortPromise = null;\n if (this.sortPromiseResolver) {\n this.sortPromiseResolver();\n this.sortPromiseResolver = null;\n }\n this.preSortMessages = [];\n this.sortRunning = false;\n }\n\n removeSplatScene(indexToRemove, showLoadingUI = true) {\n return this.removeSplatScenes([indexToRemove], showLoadingUI);\n }\n\n removeSplatScenes(indexesToRemove, showLoadingUI = true) {\n if (this.isLoadingOrUnloading()) {\n throw new Error('Cannot remove splat scene while another load or unload is already in progress.');\n }\n\n if (this.isDisposingOrDisposed()) {\n throw new Error('Cannot remove splat scene after dispose() is called.');\n }\n\n let sortPromise;\n\n this.splatSceneRemovalPromise = new Promise((resolve, reject) => {\n let revmovalTaskId;\n\n if (showLoadingUI) {\n this.loadingSpinner.removeAllTasks();\n this.loadingSpinner.show();\n revmovalTaskId = this.loadingSpinner.addTask('Removing splat scene...');\n }\n\n const checkAndHideLoadingUI = () => {\n if (showLoadingUI) {\n this.loadingSpinner.hide();\n this.loadingSpinner.removeTask(revmovalTaskId);\n }\n };\n\n const onDone = (error) => {\n checkAndHideLoadingUI();\n this.splatSceneRemovalPromise = null;\n if (!error) resolve();\n else reject(error);\n };\n\n const checkForEarlyExit = () => {\n if (this.isDisposingOrDisposed()) {\n onDone();\n return true;\n }\n return false;\n };\n\n sortPromise = this.sortPromise || Promise.resolve();\n sortPromise.then(() => {\n if (checkForEarlyExit()) return;\n const savedSplatBuffers = [];\n const savedSceneOptions = [];\n const savedSceneTransformComponents = [];\n for (let i = 0; i < this.splatMesh.scenes.length; i++) {\n let shouldRemove = false;\n for (let indexToRemove of indexesToRemove) {\n if (indexToRemove === i) {\n shouldRemove = true;\n break;\n }\n }\n if (!shouldRemove) {\n const scene = this.splatMesh.scenes[i];\n savedSplatBuffers.push(scene.splatBuffer);\n savedSceneOptions.push(this.splatMesh.sceneOptions[i]);\n savedSceneTransformComponents.push({\n 'position': scene.position.clone(),\n 'quaternion': scene.quaternion.clone(),\n 'scale': scene.scale.clone()\n });\n }\n }\n this.disposeSortWorker();\n this.splatMesh.dispose();\n this.sceneRevealMode = SceneRevealMode.Instant;\n this.createSplatMesh();\n this.addSplatBuffers(savedSplatBuffers, savedSceneOptions, true, false, true)\n .then(() => {\n if (checkForEarlyExit()) return;\n checkAndHideLoadingUI();\n this.splatMesh.scenes.forEach((scene, index) => {\n scene.position.copy(savedSceneTransformComponents[index].position);\n scene.quaternion.copy(savedSceneTransformComponents[index].quaternion);\n scene.scale.copy(savedSceneTransformComponents[index].scale);\n });\n this.splatMesh.updateTransforms();\n this.splatRenderReady = false;\n\n this.runSplatSort(true)\n .then(() => {\n if (checkForEarlyExit()) {\n this.splatRenderReady = true;\n return;\n }\n sortPromise = this.sortPromise || Promise.resolve();\n sortPromise.then(() => {\n this.splatRenderReady = true;\n onDone();\n });\n });\n })\n .catch((e) => {\n onDone(e);\n });\n });\n });\n\n return this.splatSceneRemovalPromise;\n }\n\n /**\n * Start self-driven mode\n */\n start() {\n if (this.selfDrivenMode) {\n if (this.webXRMode) {\n this.renderer.setAnimationLoop(this.selfDrivenUpdateFunc);\n } else {\n this.requestFrameId = requestAnimationFrame(this.selfDrivenUpdateFunc);\n }\n this.selfDrivenModeRunning = true;\n } else {\n throw new Error('Cannot start viewer unless it is in self driven mode.');\n }\n }\n\n /**\n * Stop self-driven mode\n */\n stop() {\n if (this.selfDrivenMode && this.selfDrivenModeRunning) {\n if (this.webXRMode) {\n this.renderer.setAnimationLoop(null);\n } else {\n cancelAnimationFrame(this.requestFrameId);\n }\n this.selfDrivenModeRunning = false;\n }\n }\n\n /**\n * Dispose of all resources held directly and indirectly by this viewer.\n */\n async dispose() {\n if (this.isDisposingOrDisposed()) return this.disposePromise;\n\n let waitPromises = [];\n let promisesToAbort = [];\n for (let promiseKey in this.splatSceneDownloadPromises) {\n if (this.splatSceneDownloadPromises.hasOwnProperty(promiseKey)) {\n const downloadPromiseToAbort = this.splatSceneDownloadPromises[promiseKey];\n promisesToAbort.push(downloadPromiseToAbort);\n waitPromises.push(downloadPromiseToAbort.promise);\n }\n }\n if (this.sortPromise) {\n waitPromises.push(this.sortPromise);\n }\n\n this.disposing = true;\n this.disposePromise = Promise.all(waitPromises).finally(() => {\n this.stop();\n if (this.orthographicControls) {\n this.orthographicControls.dispose();\n this.orthographicControls = null;\n }\n if (this.perspectiveControls) {\n this.perspectiveControls.dispose();\n this.perspectiveControls = null;\n }\n this.controls = null;\n if (this.splatMesh) {\n this.splatMesh.dispose();\n this.splatMesh = null;\n }\n if (this.sceneHelper) {\n this.sceneHelper.dispose();\n this.sceneHelper = null;\n }\n if (this.resizeObserver) {\n this.resizeObserver.unobserve(this.rootElement);\n this.resizeObserver = null;\n }\n this.disposeSortWorker();\n this.removeEventHandlers();\n\n this.loadingSpinner.removeAllTasks();\n this.loadingSpinner.setContainer(null);\n this.loadingProgressBar.hide();\n this.loadingProgressBar.setContainer(null);\n this.infoPanel.setContainer(null);\n\n this.camera = null;\n this.threeScene = null;\n this.splatRenderReady = false;\n this.initialized = false;\n if (this.renderer) {\n if (!this.usingExternalRenderer) {\n this.rootElement.removeChild(this.renderer.domElement);\n this.renderer.dispose();\n }\n this.renderer = null;\n }\n\n if (!this.usingExternalRenderer) {\n document.body.removeChild(this.rootElement);\n }\n\n this.sortWorkerSortedIndexes = null;\n this.sortWorkerIndexesToSort = null;\n this.sortWorkerPrecomputedDistances = null;\n this.sortWorkerTransforms = null;\n this.disposed = true;\n this.disposing = false;\n this.disposePromise = null;\n });\n promisesToAbort.forEach((toAbort) => {\n toAbort.abort('Scene disposed');\n });\n return this.disposePromise;\n }\n\n selfDrivenUpdate() {\n if (this.selfDrivenMode && !this.webXRMode) {\n this.requestFrameId = requestAnimationFrame(this.selfDrivenUpdateFunc);\n }\n this.update();\n if (this.shouldRender()) {\n this.render();\n this.consecutiveRenderFrames++;\n } else {\n this.consecutiveRenderFrames = 0;\n }\n this.renderNextFrame = false;\n }\n\n forceRenderNextFrame() {\n this.renderNextFrame = true;\n }\n\n shouldRender = function() {\n\n let renderCount = 0;\n const lastCameraPosition = new THREE.Vector3();\n const lastCameraOrientation = new THREE.Quaternion();\n const changeEpsilon = 0.0001;\n\n return function() {\n if (!this.initialized || !this.splatRenderReady || this.isDisposingOrDisposed()) return false;\n\n let shouldRender = false;\n let cameraChanged = false;\n if (this.camera) {\n const cp = this.camera.position;\n const co = this.camera.quaternion;\n cameraChanged = Math.abs(cp.x - lastCameraPosition.x) > changeEpsilon ||\n Math.abs(cp.y - lastCameraPosition.y) > changeEpsilon ||\n Math.abs(cp.z - lastCameraPosition.z) > changeEpsilon ||\n Math.abs(co.x - lastCameraOrientation.x) > changeEpsilon ||\n Math.abs(co.y - lastCameraOrientation.y) > changeEpsilon ||\n Math.abs(co.z - lastCameraOrientation.z) > changeEpsilon ||\n Math.abs(co.w - lastCameraOrientation.w) > changeEpsilon;\n }\n\n shouldRender = this.renderMode !== RenderMode.Never && (renderCount === 0 || this.splatMesh.visibleRegionChanging ||\n cameraChanged || this.renderMode === RenderMode.Always || this.dynamicMode === true || this.renderNextFrame);\n\n if (this.camera) {\n lastCameraPosition.copy(this.camera.position);\n lastCameraOrientation.copy(this.camera.quaternion);\n }\n\n renderCount++;\n return shouldRender;\n };\n\n }();\n\n render = function() {\n\n return function() {\n if (!this.initialized || !this.splatRenderReady || this.isDisposingOrDisposed()) return;\n\n const hasRenderables = (threeScene) => {\n for (let child of threeScene.children) {\n if (child.visible) return true;\n }\n return false;\n };\n\n const savedAuoClear = this.renderer.autoClear;\n if (hasRenderables(this.threeScene)) {\n this.renderer.render(this.threeScene, this.camera);\n this.renderer.autoClear = false;\n }\n this.renderer.render(this.splatMesh, this.camera);\n this.renderer.autoClear = false;\n if (this.sceneHelper.getFocusMarkerOpacity() > 0.0) this.renderer.render(this.sceneHelper.focusMarker, this.camera);\n if (this.showControlPlane) this.renderer.render(this.sceneHelper.controlPlane, this.camera);\n this.renderer.autoClear = savedAuoClear;\n };\n\n }();\n\n update(renderer, camera) {\n if (this.dropInMode) this.updateForDropInMode(renderer, camera);\n\n if (!this.initialized || !this.splatRenderReady || this.isDisposingOrDisposed()) return;\n\n if (this.controls) {\n this.controls.update();\n if (this.camera.isOrthographicCamera && !this.usingExternalCamera) {\n Viewer.setCameraPositionFromZoom(this.camera, this.camera, this.controls);\n }\n }\n this.runSplatSort();\n this.updateForRendererSizeChanges();\n this.updateSplatMesh();\n this.updateMeshCursor();\n this.updateFPS();\n this.timingSensitiveUpdates();\n this.updateInfoPanel();\n this.updateControlPlane();\n }\n\n updateForDropInMode(renderer, camera) {\n this.renderer = renderer;\n if (this.splatMesh) this.splatMesh.setRenderer(this.renderer);\n this.camera = camera;\n if (this.controls) this.controls.object = camera;\n this.init();\n }\n\n updateFPS = function() {\n\n let lastCalcTime = getCurrentTime();\n let frameCount = 0;\n\n return function() {\n if (this.consecutiveRenderFrames > CONSECUTIVE_RENDERED_FRAMES_FOR_FPS_CALCULATION) {\n const currentTime = getCurrentTime();\n const calcDelta = currentTime - lastCalcTime;\n if (calcDelta >= 1.0) {\n this.currentFPS = frameCount;\n frameCount = 0;\n lastCalcTime = currentTime;\n } else {\n frameCount++;\n }\n } else {\n this.currentFPS = null;\n }\n };\n\n }();\n\n updateForRendererSizeChanges = function() {\n\n const lastRendererSize = new THREE.Vector2();\n const currentRendererSize = new THREE.Vector2();\n let lastCameraOrthographic;\n\n return function() {\n if (!this.usingExternalCamera) {\n this.renderer.getSize(currentRendererSize);\n if (lastCameraOrthographic === undefined || lastCameraOrthographic !== this.camera.isOrthographicCamera ||\n currentRendererSize.x !== lastRendererSize.x || currentRendererSize.y !== lastRendererSize.y) {\n if (this.camera.isOrthographicCamera) {\n this.camera.left = -currentRendererSize.x / 2.0;\n this.camera.right = currentRendererSize.x / 2.0;\n this.camera.top = currentRendererSize.y / 2.0;\n this.camera.bottom = -currentRendererSize.y / 2.0;\n } else {\n this.camera.aspect = currentRendererSize.x / currentRendererSize.y;\n }\n this.camera.updateProjectionMatrix();\n lastRendererSize.copy(currentRendererSize);\n lastCameraOrthographic = this.camera.isOrthographicCamera;\n }\n }\n };\n\n }();\n\n timingSensitiveUpdates = function() {\n\n let lastUpdateTime;\n\n return function() {\n const currentTime = getCurrentTime();\n if (!lastUpdateTime) lastUpdateTime = currentTime;\n const timeDelta = currentTime - lastUpdateTime;\n\n this.updateCameraTransition(currentTime);\n this.updateFocusMarker(timeDelta);\n\n lastUpdateTime = currentTime;\n };\n\n }();\n\n updateCameraTransition = function() {\n\n let tempCameraTarget = new THREE.Vector3();\n let toPreviousTarget = new THREE.Vector3();\n let toNextTarget = new THREE.Vector3();\n\n return function(currentTime) {\n if (this.transitioningCameraTarget) {\n toPreviousTarget.copy(this.previousCameraTarget).sub(this.camera.position).normalize();\n toNextTarget.copy(this.nextCameraTarget).sub(this.camera.position).normalize();\n const rotationAngle = Math.acos(toPreviousTarget.dot(toNextTarget));\n const rotationSpeed = rotationAngle / (Math.PI / 3) * .65 + .3;\n const t = (rotationSpeed / rotationAngle * (currentTime - this.transitioningCameraTargetStartTime));\n tempCameraTarget.copy(this.previousCameraTarget).lerp(this.nextCameraTarget, t);\n this.camera.lookAt(tempCameraTarget);\n this.controls.target.copy(tempCameraTarget);\n if (t >= 1.0) {\n this.transitioningCameraTarget = false;\n }\n }\n };\n\n }();\n\n updateFocusMarker = function() {\n\n const renderDimensions = new THREE.Vector2();\n let wasTransitioning = false;\n\n return function(timeDelta) {\n this.getRenderDimensions(renderDimensions);\n if (this.transitioningCameraTarget) {\n this.sceneHelper.setFocusMarkerVisibility(true);\n const currentFocusMarkerOpacity = Math.max(this.sceneHelper.getFocusMarkerOpacity(), 0.0);\n let newFocusMarkerOpacity = Math.min(currentFocusMarkerOpacity + FOCUS_MARKER_FADE_IN_SPEED * timeDelta, 1.0);\n this.sceneHelper.setFocusMarkerOpacity(newFocusMarkerOpacity);\n this.sceneHelper.updateFocusMarker(this.nextCameraTarget, this.camera, renderDimensions);\n wasTransitioning = true;\n this.forceRenderNextFrame();\n } else {\n let currentFocusMarkerOpacity;\n if (wasTransitioning) currentFocusMarkerOpacity = 1.0;\n else currentFocusMarkerOpacity = Math.min(this.sceneHelper.getFocusMarkerOpacity(), 1.0);\n if (currentFocusMarkerOpacity > 0) {\n this.sceneHelper.updateFocusMarker(this.nextCameraTarget, this.camera, renderDimensions);\n let newFocusMarkerOpacity = Math.max(currentFocusMarkerOpacity - FOCUS_MARKER_FADE_OUT_SPEED * timeDelta, 0.0);\n this.sceneHelper.setFocusMarkerOpacity(newFocusMarkerOpacity);\n if (newFocusMarkerOpacity === 0.0) this.sceneHelper.setFocusMarkerVisibility(false);\n }\n if (currentFocusMarkerOpacity > 0.0) this.forceRenderNextFrame();\n wasTransitioning = false;\n }\n };\n\n }();\n\n updateMeshCursor = function() {\n\n const outHits = [];\n const renderDimensions = new THREE.Vector2();\n\n return function() {\n if (this.showMeshCursor) {\n this.forceRenderNextFrame();\n this.getRenderDimensions(renderDimensions);\n outHits.length = 0;\n this.raycaster.setFromCameraAndScreenPosition(this.camera, this.mousePosition, renderDimensions);\n this.raycaster.intersectSplatMesh(this.splatMesh, outHits);\n if (outHits.length > 0) {\n this.sceneHelper.setMeshCursorVisibility(true);\n this.sceneHelper.positionAndOrientMeshCursor(outHits[0].origin, this.camera);\n } else {\n this.sceneHelper.setMeshCursorVisibility(false);\n }\n } else {\n if (this.sceneHelper.getMeschCursorVisibility()) this.forceRenderNextFrame();\n this.sceneHelper.setMeshCursorVisibility(false);\n }\n };\n\n }();\n\n updateInfoPanel = function() {\n\n const renderDimensions = new THREE.Vector2();\n\n return function() {\n if (!this.showInfo) return;\n const splatCount = this.splatMesh.getSplatCount();\n this.getRenderDimensions(renderDimensions);\n const cameraLookAtPosition = this.controls ? this.controls.target : null;\n const meshCursorPosition = this.showMeshCursor ? this.sceneHelper.meshCursor.position : null;\n const splatRenderCountPct = splatCount > 0 ? this.splatRenderCount / splatCount * 100 : 0;\n this.infoPanel.update(renderDimensions, this.camera.position, cameraLookAtPosition,\n this.camera.up, this.camera.isOrthographicCamera, meshCursorPosition,\n this.currentFPS || 'N/A', splatCount, this.splatRenderCount, splatRenderCountPct,\n this.lastSortTime, this.focalAdjustment, this.splatMesh.getSplatScale(),\n this.splatMesh.getPointCloudModeEnabled());\n };\n\n }();\n\n updateControlPlane() {\n if (this.showControlPlane) {\n this.sceneHelper.setControlPlaneVisibility(true);\n this.sceneHelper.positionAndOrientControlPlane(this.controls.target, this.camera.up);\n } else {\n this.sceneHelper.setControlPlaneVisibility(false);\n }\n }\n\n runSplatSort = function() {\n\n const mvpMatrix = new THREE.Matrix4();\n const cameraPositionArray = [];\n const lastSortViewDir = new THREE.Vector3(0, 0, -1);\n const sortViewDir = new THREE.Vector3(0, 0, -1);\n const lastSortViewPos = new THREE.Vector3();\n const sortViewOffset = new THREE.Vector3();\n const queuedSorts = [];\n\n const partialSorts = [\n {\n 'angleThreshold': 0.55,\n 'sortFractions': [0.125, 0.33333, 0.75]\n },\n {\n 'angleThreshold': 0.65,\n 'sortFractions': [0.33333, 0.66667]\n },\n {\n 'angleThreshold': 0.8,\n 'sortFractions': [0.5]\n }\n ];\n\n return function(force = false, forceSortAll = false) {\n if (!this.initialized) return Promise.resolve(false);\n if (this.sortRunning) return Promise.resolve(true);\n if (this.splatMesh.getSplatCount() <= 0) {\n this.splatRenderCount = 0;\n return Promise.resolve(false);\n }\n\n let angleDiff = 0;\n let positionDiff = 0;\n let needsRefreshForRotation = false;\n let needsRefreshForPosition = false;\n\n sortViewDir.set(0, 0, -1).applyQuaternion(this.camera.quaternion);\n angleDiff = sortViewDir.dot(lastSortViewDir);\n positionDiff = sortViewOffset.copy(this.camera.position).sub(lastSortViewPos).length();\n\n if (!force) {\n if (!this.splatMesh.dynamicMode && queuedSorts.length === 0) {\n if (angleDiff <= 0.99) needsRefreshForRotation = true;\n if (positionDiff >= 1.0) needsRefreshForPosition = true;\n if (!needsRefreshForRotation && !needsRefreshForPosition) return Promise.resolve(false);\n }\n }\n\n this.sortRunning = true;\n let { splatRenderCount, shouldSortAll } = this.gatherSceneNodesForSort();\n shouldSortAll = shouldSortAll || forceSortAll;\n this.splatRenderCount = splatRenderCount;\n\n mvpMatrix.copy(this.camera.matrixWorld).invert();\n const mvpCamera = this.perspectiveCamera || this.camera;\n mvpMatrix.premultiply(mvpCamera.projectionMatrix);\n if (!this.splatMesh.dynamicMode) mvpMatrix.multiply(this.splatMesh.matrixWorld);\n\n let gpuAcceleratedSortPromise = Promise.resolve(true);\n if (this.gpuAcceleratedSort && (queuedSorts.length <= 1 || queuedSorts.length % 2 === 0)) {\n gpuAcceleratedSortPromise = this.splatMesh.computeDistancesOnGPU(mvpMatrix, this.sortWorkerPrecomputedDistances);\n }\n\n gpuAcceleratedSortPromise.then(() => {\n if (queuedSorts.length === 0) {\n if (this.splatMesh.dynamicMode || shouldSortAll) {\n queuedSorts.push(this.splatRenderCount);\n } else {\n for (let partialSort of partialSorts) {\n if (angleDiff < partialSort.angleThreshold) {\n for (let sortFraction of partialSort.sortFractions) {\n queuedSorts.push(Math.floor(this.splatRenderCount * sortFraction));\n }\n break;\n }\n }\n queuedSorts.push(this.splatRenderCount);\n }\n }\n let sortCount = Math.min(queuedSorts.shift(), this.splatRenderCount);\n this.splatSortCount = sortCount;\n\n cameraPositionArray[0] = this.camera.position.x;\n cameraPositionArray[1] = this.camera.position.y;\n cameraPositionArray[2] = this.camera.position.z;\n\n const sortMessage = {\n 'modelViewProj': mvpMatrix.elements,\n 'cameraPosition': cameraPositionArray,\n 'splatRenderCount': this.splatRenderCount,\n 'splatSortCount': sortCount,\n 'usePrecomputedDistances': this.gpuAcceleratedSort\n };\n if (this.splatMesh.dynamicMode) {\n this.splatMesh.fillTransformsArray(this.sortWorkerTransforms);\n }\n if (!this.sharedMemoryForWorkers) {\n sortMessage.indexesToSort = this.sortWorkerIndexesToSort;\n sortMessage.transforms = this.sortWorkerTransforms;\n if (this.gpuAcceleratedSort) {\n sortMessage.precomputedDistances = this.sortWorkerPrecomputedDistances;\n }\n }\n\n this.sortPromise = new Promise((resolve) => {\n this.sortPromiseResolver = resolve;\n });\n\n if (this.preSortMessages.length > 0) {\n this.preSortMessages.forEach((message) => {\n this.sortWorker.postMessage(message);\n });\n this.preSortMessages = [];\n }\n this.sortWorker.postMessage({\n 'sort': sortMessage\n });\n\n if (queuedSorts.length === 0) {\n lastSortViewPos.copy(this.camera.position);\n lastSortViewDir.copy(sortViewDir);\n }\n\n return true;\n });\n\n return gpuAcceleratedSortPromise;\n };\n\n }();\n\n /**\n * Determine which splats to render by checking which are inside or close to the view frustum\n */\n gatherSceneNodesForSort = function() {\n\n const nodeRenderList = [];\n let allSplatsSortBuffer = null;\n const tempVectorYZ = new THREE.Vector3();\n const tempVectorXZ = new THREE.Vector3();\n const tempVector = new THREE.Vector3();\n const modelView = new THREE.Matrix4();\n const baseModelView = new THREE.Matrix4();\n const sceneTransform = new THREE.Matrix4();\n const renderDimensions = new THREE.Vector3();\n const forward = new THREE.Vector3(0, 0, -1);\n\n const tempMax = new THREE.Vector3();\n const nodeSize = (node) => {\n return tempMax.copy(node.max).sub(node.min).length();\n };\n\n return function(gatherAllNodes = false) {\n\n this.getRenderDimensions(renderDimensions);\n const cameraFocalLength = (renderDimensions.y / 2.0) / Math.tan(this.camera.fov / 2.0 * THREE.MathUtils.DEG2RAD);\n const fovXOver2 = Math.atan(renderDimensions.x / 2.0 / cameraFocalLength);\n const fovYOver2 = Math.atan(renderDimensions.y / 2.0 / cameraFocalLength);\n const cosFovXOver2 = Math.cos(fovXOver2);\n const cosFovYOver2 = Math.cos(fovYOver2);\n\n const splatTree = this.splatMesh.getSplatTree();\n\n if (splatTree) {\n baseModelView.copy(this.camera.matrixWorld).invert();\n if (!this.splatMesh.dynamicMode) baseModelView.multiply(this.splatMesh.matrixWorld);\n\n let nodeRenderCount = 0;\n let splatRenderCount = 0;\n\n for (let s = 0; s < splatTree.subTrees.length; s++) {\n const subTree = splatTree.subTrees[s];\n modelView.copy(baseModelView);\n if (this.splatMesh.dynamicMode) {\n this.splatMesh.getSceneTransform(s, sceneTransform);\n modelView.multiply(sceneTransform);\n }\n const nodeCount = subTree.nodesWithIndexes.length;\n for (let i = 0; i < nodeCount; i++) {\n const node = subTree.nodesWithIndexes[i];\n if (!node.data || !node.data.indexes || node.data.indexes.length === 0) continue;\n tempVector.copy(node.center).applyMatrix4(modelView);\n\n const distanceToNode = tempVector.length();\n tempVector.normalize();\n\n tempVectorYZ.copy(tempVector).setX(0).normalize();\n tempVectorXZ.copy(tempVector).setY(0).normalize();\n\n const cameraAngleXZDot = forward.dot(tempVectorXZ);\n const cameraAngleYZDot = forward.dot(tempVectorYZ);\n\n const ns = nodeSize(node);\n const outOfFovY = cameraAngleYZDot < (cosFovYOver2 - .6);\n const outOfFovX = cameraAngleXZDot < (cosFovXOver2 - .6);\n if (!gatherAllNodes && ((outOfFovX || outOfFovY) && distanceToNode > ns)) {\n continue;\n }\n splatRenderCount += node.data.indexes.length;\n nodeRenderList[nodeRenderCount] = node;\n node.data.distanceToNode = distanceToNode;\n nodeRenderCount++;\n }\n }\n\n nodeRenderList.length = nodeRenderCount;\n nodeRenderList.sort((a, b) => {\n if (a.data.distanceToNode < b.data.distanceToNode) return -1;\n else return 1;\n });\n\n let currentByteOffset = splatRenderCount * Constants.BytesPerInt;\n for (let i = 0; i < nodeRenderCount; i++) {\n const node = nodeRenderList[i];\n const windowSizeInts = node.data.indexes.length;\n const windowSizeBytes = windowSizeInts * Constants.BytesPerInt;\n let destView = new Uint32Array(this.sortWorkerIndexesToSort.buffer,\n currentByteOffset - windowSizeBytes, windowSizeInts);\n destView.set(node.data.indexes);\n currentByteOffset -= windowSizeBytes;\n }\n\n return {\n 'splatRenderCount': splatRenderCount,\n 'shouldSortAll': false\n };\n } else {\n const totalSplatCount = this.splatMesh.getSplatCount();\n if (!allSplatsSortBuffer || allSplatsSortBuffer.length !== totalSplatCount) {\n allSplatsSortBuffer = new Uint32Array(totalSplatCount);\n for (let i = 0; i < totalSplatCount; i++) {\n allSplatsSortBuffer[i] = i;\n }\n }\n this.sortWorkerIndexesToSort.set(allSplatsSortBuffer);\n return {\n 'splatRenderCount': totalSplatCount,\n 'shouldSortAll': true\n };\n }\n };\n\n }();\n\n getSplatMesh() {\n return this.splatMesh;\n }\n\n /**\n * Get a reference to a splat scene.\n * @param {number} sceneIndex The index of the scene to which the reference will be returned\n * @return {SplatScene}\n */\n getSplatScene(sceneIndex) {\n return this.splatMesh.getScene(sceneIndex);\n }\n\n getSceneCount() {\n return this.splatMesh.getSceneCount();\n }\n\n isMobile() {\n return navigator.userAgent.includes('Mobi');\n }\n}\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 */\nclass DropInViewer extends THREE.Group {\n\n constructor(options = {}) {\n super();\n\n options.selfDrivenMode = false;\n options.useBuiltInControls = false;\n options.rootElement = null;\n options.dropInMode = true;\n options.camera = undefined;\n options.renderer = undefined;\n\n this.viewer = new Viewer(options);\n this.splatMesh = null;\n this.updateSplatMesh();\n\n this.callbackMesh = DropInViewer.createCallbackMesh();\n this.add(this.callbackMesh);\n this.callbackMesh.onBeforeRender = DropInViewer.onBeforeRender.bind(this, this.viewer);\n\n this.viewer.onSplatMeshChanged(() => {\n this.updateSplatMesh();\n });\n\n }\n\n updateSplatMesh() {\n if (this.splatMesh !== this.viewer.splatMesh) {\n if (this.splatMesh) {\n this.remove(this.splatMesh);\n }\n this.splatMesh = this.viewer.splatMesh;\n this.add(this.viewer.splatMesh);\n }\n }\n\n /**\n * Add a single splat scene to the viewer.\n * @param {string} path Path to splat scene to be loaded\n * @param {object} options {\n *\n * splatAlphaRemovalThreshold: Ignore any splats with an alpha less than the specified\n * value (valid range: 0 - 255), defaults to 1\n *\n * showLoadingUI: Display a loading spinner while the scene is loading, defaults to true\n *\n * position (Array<number>): Position of the scene, acts as an offset from its default position, defaults to [0, 0, 0]\n *\n * rotation (Array<number>): Rotation of the scene represented as a quaternion, defaults to [0, 0, 0, 1]\n *\n * scale (Array<number>): Scene's scale, defaults to [1, 1, 1]\n *\n * onProgress: Function to be called as file data are received\n *\n * }\n * @return {AbortablePromise}\n */\n addSplatScene(path, options = {}) {\n if (options.showLoadingUI !== false) options.showLoadingUI = true;\n return this.viewer.addSplatScene(path, options);\n }\n\n /**\n * Add multiple splat scenes to the viewer.\n * @param {Array<object>} sceneOptions Array of per-scene options: {\n *\n * path: Path to splat scene to be loaded\n *\n * splatAlphaRemovalThreshold: Ignore any splats with an alpha less than the specified\n * value (valid range: 0 - 255), defaults to 1\n *\n * position (Array<number>): Position of the scene, acts as an offset from its default position, defaults to [0, 0, 0]\n *\n * rotation (Array<number>): Rotation of the scene represented as a quaternion, defaults to [0, 0, 0, 1]\n *\n * scale (Array<number>): Scene's scale, defaults to [1, 1, 1]\n * }\n * @param {boolean} showLoadingUI Display a loading spinner while the scene is loading, defaults to true\n * @return {AbortablePromise}\n */\n addSplatScenes(sceneOptions, showLoadingUI) {\n if (showLoadingUI !== false) showLoadingUI = true;\n return this.viewer.addSplatScenes(sceneOptions, showLoadingUI);\n }\n\n /**\n * Get a reference to a splat scene.\n * @param {number} sceneIndex The index of the scene to which the reference will be returned\n * @return {SplatScene}\n */\n getSplatScene(sceneIndex) {\n return this.viewer.getSplatScene(sceneIndex);\n }\n\n removeSplatScene(index, showLoadingUI = true) {\n return this.viewer.removeSplatScene(index, showLoadingUI);\n }\n\n removeSplatScenes(indexes, showLoadingUI = true) {\n return this.viewer.removeSplatScenes(indexes, showLoadingUI);\n }\n\n getSceneCount() {\n return this.viewer.getSceneCount();\n }\n\n setActiveSphericalHarmonicsDegrees(activeSphericalHarmonicsDegrees) {\n this.viewer.setActiveSphericalHarmonicsDegrees(activeSphericalHarmonicsDegrees);\n }\n\n async dispose() {\n return await this.viewer.dispose();\n }\n\n static onBeforeRender(viewer, renderer, threeScene, camera) {\n viewer.update(renderer, camera);\n }\n\n static createCallbackMesh() {\n const geometry = new THREE.SphereGeometry(1, 8, 8);\n const material = new THREE.MeshBasicMaterial();\n material.colorWrite = false;\n material.depthWrite = false;\n const mesh = new THREE.Mesh(geometry, material);\n mesh.frustumCulled = false;\n return mesh;\n }\n\n}\n\nexport { AbortablePromise, DropInViewer, KSplatLoader, Utils as LoaderUtils, LogLevel, OrbitControls, PlayCanvasCompressedPlyParser, PlyLoader, PlyParser, RenderMode, SceneFormat, SceneRevealMode, SplatBuffer, SplatBufferGenerator, SplatLoader, SplatParser, SplatPartitioner, SplatRenderMode, SpzLoader, Viewer, WebXRMode };\n//# sourceMappingURL=gaussian-splats-3d.module.js.map\n","import * as GaussianSplats3D from '@mkkellogg/gaussian-splats-3d'\r\n// import SoonSpace from 'soonspacejs'\r\nimport { sceneOption, DropInViewer, SplatScene, } from './types'\r\n\r\nlet index = 0\r\n\r\nconst loadingPromiseList: Promise<void>[] = []\r\n\r\nclass GS3DLoaderPlugin {\r\n\r\n dropInViewer: DropInViewer\r\n\r\n constructor () {\r\n\r\n this.dropInViewer = this.createViewer()\r\n\r\n }\r\n\r\n async load ( path: string ) {\r\n \r\n const indexes = await this.loads( [ { path, } ] )\r\n\r\n return indexes[ 0 ]\r\n\r\n }\r\n\r\n async loads ( \r\n options: sceneOption[],\r\n showLoadingUI?: boolean\r\n // onProgress?: ( totalPercent: number, percentLabel: string, loaderStatus: LoaderStatus ) => void \r\n ) {\r\n\r\n if ( loadingPromiseList.length ) {\r\n\r\n await Promise.allSettled( loadingPromiseList )\r\n\r\n } \r\n\r\n const loadingPromise = this.dropInViewer.addSplatScenes( options, showLoadingUI ?? false )\r\n\r\n loadingPromiseList.push( loadingPromise )\r\n \r\n await Promise.allSettled( loadingPromiseList )\r\n\r\n const indexes: number[] = []\r\n\r\n options.forEach( () => indexes.push( index++ ) )\r\n \r\n return indexes\r\n\r\n }\r\n\r\n createViewer ( option?: Record<string, any> ) {\r\n\r\n const dropInViewer = new GaussianSplats3D.DropInViewer(\r\n {\r\n // ignoreDevicePixelRatio: false,\r\n sharedMemoryForWorkers: false,\r\n gpuAcceleratedSort: false,\r\n halfPrecisionCovariancesOnGPU: true,\r\n // integerBasedSort: true,\r\n dynamicScene: true,\r\n ...option,\r\n\r\n }\r\n ) as DropInViewer\r\n\r\n return dropInViewer\r\n\r\n }\r\n\r\n getSplatScene ( sceneIndex: number ) {\r\n\r\n return this.dropInViewer.getSplatScene( sceneIndex )\r\n\r\n }\r\n\r\n getSceneCount () {\r\n\r\n return this.dropInViewer.getSceneCount()\r\n\r\n }\r\n\r\n async dispose () {\r\n\r\n if ( this.dropInViewer ) {\r\n\r\n await this.dropInViewer.dispose()\r\n\r\n }\r\n\r\n }\r\n\r\n}\r\n\r\nexport default GS3DLoaderPlugin"],"names":["GaussianSplats3D.DropInViewer"],"mappings":"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AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA,QAAQ,IAAI,qBAAqB,EAAE;AACnC,YAAY,kBAAkB,IAAI,CAAC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,CAAC,CAAC;AACd,SAAS;AACT;AACA,QAAQ,IAAI,WAAW,EAAE;AACzB,YAAY,kBAAkB,IAAI,CAAC;AACnC;AACA;AACA,YAAY,CAAC,CAAC;AACd,SAAS,MAAM;AACf,YAAY,kBAAkB,IAAI,CAAC,gDAAgD,CAAC,CAAC;AACrF,SAAS;AACT;AACA,QAAQ,kBAAkB,IAAI,CAAC;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,CAAC,CAAC;AACV;AACA;AACA,QAAQ,IAAI,2BAA2B,IAAI,CAAC,EAAE;AAC9C;AACA,YAAY,kBAAkB,IAAI,CAAC;AACnC;AACA,YAAY,CAAC,CAAC;AACd;AACA,YAAY,IAAI,WAAW,EAAE;AAC7B,gBAAgB,kBAAkB,IAAI,CAAC;AACvC;AACA,gBAAgB,CAAC,CAAC;AAClB,aAAa,MAAM;AACnB,gBAAgB,kBAAkB,IAAI,CAAC;AACvC;AACA,gBAAgB,CAAC,CAAC;AAClB,aAAa;AACb;AACA,YAAY,kBAAkB,IAAI,CAAC;AACnC;AACA;AACA;AACA,YAAY,CAAC,CAAC;AACd;AACA,YAAY,IAAI,2BAA2B,IAAI,CAAC,EAAE;AAClD,gBAAgB,kBAAkB,IAAI,CAAC;AACvC;AACA;AACA;AACA;AACA;AACA,gBAAgB,CAAC,CAAC;AAClB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,IAAI,2BAA2B,KAAK,CAAC,EAAE;AACnD,gBAAgB,kBAAkB,IAAI,CAAC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,CAAC,CAAC;AAClB;AACA,aAAa,MAAM,IAAI,2BAA2B,KAAK,CAAC,EAAE;AAC1D,gBAAgB,kBAAkB,IAAI,CAAC;AACvC;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;AAClB,aAAa;AACb;AACA;AACA,YAAY,kBAAkB,IAAI,CAAC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,CAAC,CAAC;AACd;AACA;AACA,YAAY,IAAI,2BAA2B,IAAI,CAAC,EAAE;AAClD;AACA,gBAAgB,kBAAkB,IAAI,CAAC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,CAAC,CAAC;AAClB;AACA;AACA;AACA,gBAAgB,IAAI,2BAA2B,KAAK,CAAC,EAAE;AACvD,oBAAoB,kBAAkB,IAAI,CAAC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,CAAC,CAAC;AACtB,iBAAiB;AACjB;AACA;AACA,gBAAgB,kBAAkB,IAAI,CAAC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,CAAC,CAAC;AAClB,aAAa;AACb;AACA,YAAY,kBAAkB,IAAI,CAAC;AACnC;AACA;AACA;AACA;AACA;AACA,YAAY,CAAC,CAAC;AACd,SAAS;AACT;AACA,QAAQ,OAAO,kBAAkB,CAAC;AAClC,KAAK;AACL;AACA,IAAI,OAAO,qBAAqB,GAAG;AACnC,QAAQ,OAAO,CAAC;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,CAAC,CAAC;AACV,KAAK;AACL;AACA,IAAI,OAAO,WAAW,CAAC,WAAW,GAAG,KAAK,EAAE,qBAAqB,GAAG,KAAK,EAAE,2BAA2B,GAAG,CAAC;AAC1G,uBAAuB,UAAU,GAAG,GAAG,EAAE,qBAAqB,GAAG,KAAK,EAAE;AACxE;AACA,QAAQ,MAAM,QAAQ,GAAG;AACzB,YAAY,aAAa,EAAE;AAC3B,gBAAgB,MAAM,EAAE,IAAI;AAC5B,gBAAgB,OAAO,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE;AAC5C,aAAa;AACb,YAAY,gBAAgB,EAAE;AAC9B,gBAAgB,MAAM,EAAE,GAAG;AAC3B,gBAAgB,OAAO,EAAE,CAAC;AAC1B,aAAa;AACb,YAAY,kBAAkB,EAAE;AAChC,gBAAgB,MAAM,EAAE,GAAG;AAC3B,gBAAgB,OAAO,EAAE,CAAC;AAC1B,aAAa;AACb,YAAY,8BAA8B,EAAE;AAC5C,gBAAgB,MAAM,EAAE,GAAG;AAC3B,gBAAgB,OAAO,EAAE,GAAG;AAC5B,aAAa;AACb,YAAY,qBAAqB,EAAE;AACnC,gBAAgB,MAAM,EAAE,GAAG;AAC3B,gBAAgB,OAAO,EAAE,GAAG;AAC5B,aAAa;AACb,YAAY,aAAa,EAAE;AAC3B,gBAAgB,MAAM,EAAE,GAAG;AAC3B,gBAAgB,OAAO,EAAE,GAAG;AAC5B,aAAa;AACb,YAAY,iBAAiB,EAAE;AAC/B,gBAAgB,MAAM,EAAE,GAAG;AAC3B,gBAAgB,OAAO,EAAE,GAAG;AAC5B,aAAa;AACb,YAAY,sBAAsB,EAAE;AACpC,gBAAgB,MAAM,EAAE,GAAG;AAC3B,gBAAgB,OAAO,EAAE,IAAI;AAC7B,aAAa;AACb,YAAY,2BAA2B,EAAE;AACzC,gBAAgB,MAAM,EAAE,GAAG;AAC3B,gBAAgB,OAAO,EAAE,IAAI;AAC7B,aAAa;AACb,YAAY,4BAA4B,EAAE;AAC1C,gBAAgB,MAAM,EAAE,GAAG;AAC3B,gBAAgB,OAAO,EAAE,IAAI;AAC7B,aAAa;AACb,YAAY,4BAA4B,EAAE;AAC1C,gBAAgB,MAAM,EAAE,GAAG;AAC3B,gBAAgB,OAAO,EAAE,IAAI;AAC7B,aAAa;AACb,YAAY,4BAA4B,EAAE;AAC1C,gBAAgB,MAAM,EAAE,GAAG;AAC3B,gBAAgB,OAAO,EAAE,IAAI;AAC7B,aAAa;AACb,YAAY,2CAA2C,EAAE;AACzD,gBAAgB,MAAM,EAAE,GAAG;AAC3B,gBAAgB,OAAO,EAAE,EAAE;AAC3B,aAAa;AACb,YAAY,2CAA2C,EAAE;AACzD,gBAAgB,MAAM,EAAE,GAAG;AAC3B,gBAAgB,OAAO,EAAE,EAAE;AAC3B,aAAa;AACb,YAAY,OAAO,EAAE;AACrB,gBAAgB,MAAM,EAAE,IAAI;AAC5B,gBAAgB,OAAO,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE;AAC5C,aAAa;AACb,YAAY,WAAW,EAAE;AACzB,gBAAgB,MAAM,EAAE,GAAG;AAC3B,gBAAgB,OAAO,EAAE,GAAG;AAC5B,aAAa;AACb,YAAY,wBAAwB,EAAE;AACtC,gBAAgB,MAAM,EAAE,GAAG;AAC3B,gBAAgB,OAAO,EAAE,GAAG;AAC5B,aAAa;AACb,YAAY,UAAU,EAAE;AACxB,gBAAgB,MAAM,EAAE,IAAI;AAC5B,gBAAgB,OAAO,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE;AAC5C,aAAa;AACb,YAAY,eAAe,EAAE;AAC7B,gBAAgB,MAAM,EAAE,IAAI;AAC5B,gBAAgB,OAAO,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE;AAC5C,aAAa;AACb,YAAY,YAAY,EAAE;AAC1B,gBAAgB,MAAM,EAAE,IAAI;AAC5B,gBAAgB,OAAO,EAAE,IAAI,KAAK,CAAC,KAAK,EAAE;AAC1C,aAAa;AACb,YAAY,0BAA0B,EAAE;AACxC,gBAAgB,MAAM,EAAE,IAAI;AAC5B,gBAAgB,OAAO,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;AACtD,aAAa;AACb,YAAY,0BAA0B,EAAE;AACxC,gBAAgB,MAAM,EAAE,GAAG;AAC3B,gBAAgB,OAAO,EAAE,2BAA2B;AACpD,aAAa;AACb,YAAY,+BAA+B,EAAE;AAC7C,gBAAgB,MAAM,EAAE,IAAI;AAC5B,gBAAgB,OAAO,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;AACtD,aAAa;AACb,YAAY,4BAA4B,EAAE;AAC1C,gBAAgB,MAAM,EAAE,GAAG;AAC3B,gBAAgB,OAAO,EAAE,CAAC;AAC1B,aAAa;AACb,YAAY,oCAAoC,EAAE;AAClD,gBAAgB,MAAM,EAAE,GAAG;AAC3B,gBAAgB,OAAO,EAAE,CAAC;AAC1B,aAAa;AACb,YAAY,YAAY,EAAE;AAC1B,gBAAgB,MAAM,EAAE,GAAG;AAC3B,gBAAgB,OAAO,EAAE,UAAU;AACnC,aAAa;AACb,YAAY,uBAAuB,EAAE;AACrC,gBAAgB,MAAM,EAAE,GAAG;AAC3B,gBAAgB,OAAO,EAAE,qBAAqB,GAAG,CAAC,GAAG,CAAC;AACtD,aAAa;AACb,YAAY,qBAAqB,EAAE;AACnC,gBAAgB,MAAM,EAAE,GAAG;AAC3B,gBAAgB,OAAO,EAAE,IAAI;AAC7B,aAAa;AACb,YAAY,yBAAyB,EAAE;AACvC,gBAAgB,MAAM,EAAE,IAAI;AAC5B,gBAAgB,OAAO,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;AACtD,aAAa;AACb,YAAY,YAAY,EAAE;AAC1B,gBAAgB,MAAM,EAAE,GAAG;AAC3B,gBAAgB,OAAO,EAAE,CAAC;AAC1B,aAAa;AACb,SAAS,CAAC;AACV,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE;AACtD,YAAY,QAAQ,CAAC,yCAAyC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,sCAAsC,GAAG,GAAG,CAAC,CAAC;AACnI,YAAY,QAAQ,CAAC,yCAAyC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,sCAAsC,GAAG,GAAG,CAAC,CAAC;AAClI,SAAS;AACT;AACA,QAAQ,IAAI,qBAAqB,EAAE;AACnC,YAAY,MAAM,YAAY,GAAG,EAAE,CAAC;AACpC,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE;AAC1D,gBAAgB,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvC,aAAa;AACb,YAAY,QAAQ,CAAC,cAAc,CAAC,EAAE;AACtC,gBAAgB,MAAM,EAAE,GAAG;AAC3B,gBAAgB,OAAO,EAAE,YAAY;AACrC,aAAa,CAAC;AACd;AACA,YAAY,MAAM,eAAe,GAAG,EAAE,CAAC;AACvC,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE;AAC1D,gBAAgB,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACxC,aAAa;AACb,YAAY,QAAQ,CAAC,iBAAiB,CAAC,EAAE;AACzC,gBAAgB,MAAM,EAAE,GAAG;AAC3B,gBAAgB,OAAO,EAAE,eAAe;AACxC,aAAa,CAAC;AACd,SAAS;AACT;AACA,QAAQ,IAAI,WAAW,EAAE;AACzB,YAAY,MAAM,iBAAiB,GAAG,EAAE,CAAC;AACzC,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE;AAC1D,gBAAgB,iBAAiB,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;AAC5D,aAAa;AACb,YAAY,QAAQ,CAAC,YAAY,CAAC,GAAG;AACrC,gBAAgB,MAAM,EAAE,MAAM;AAC9B,gBAAgB,OAAO,EAAE,iBAAiB;AAC1C,aAAa,CAAC;AACd,SAAS;AACT;AACA,QAAQ,OAAO,QAAQ,CAAC;AACxB,KAAK;AACL;AACA,CAAC;AACD;AACA,MAAM,eAAe,CAAC;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,OAAO,KAAK,CAAC,WAAW,GAAG,KAAK,EAAE,qBAAqB,GAAG,KAAK,EAAE,WAAW,GAAG,KAAK,EAAE,uBAAuB,GAAG,IAAI;AACxH,iBAAiB,UAAU,GAAG,GAAG,EAAE,qBAAqB,GAAG,KAAK,EAAE,2BAA2B,GAAG,CAAC,EAAE,YAAY,GAAG,GAAG,EAAE;AACvH;AACA,QAAQ,MAAM,gBAAgB,GAAG,CAAC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,CAAC,CAAC;AACV;AACA,QAAQ,IAAI,kBAAkB,GAAG,aAAa,CAAC,qBAAqB,CAAC,WAAW,EAAE,qBAAqB;AACvG,qEAAqE,2BAA2B,EAAE,gBAAgB,CAAC,CAAC;AACpH,QAAQ,kBAAkB,IAAI,eAAe,CAAC,2BAA2B,CAAC,WAAW,EAAE,qBAAqB;AAC5G,0EAA0E,uBAAuB,EAAE,YAAY,CAAC,CAAC;AACjH,QAAQ,MAAM,oBAAoB,GAAG,eAAe,CAAC,mBAAmB,EAAE,CAAC;AAC3E;AACA,QAAQ,MAAM,QAAQ,GAAG,aAAa,CAAC,WAAW,CAAC,WAAW,EAAE,qBAAqB;AACrF,mDAAmD,2BAA2B,EAAE,UAAU,EAAE,qBAAqB,CAAC,CAAC;AACnH;AACA,QAAQ,QAAQ,CAAC,wBAAwB,CAAC,GAAG;AAC7C,YAAY,MAAM,EAAE,IAAI;AACxB,YAAY,OAAO,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;AAClD,SAAS,CAAC;AACV,QAAQ,QAAQ,CAAC,oBAAoB,CAAC,GAAG;AACzC,YAAY,MAAM,EAAE,GAAG;AACvB,YAAY,OAAO,EAAE,IAAI;AACzB,SAAS,CAAC;AACV,QAAQ,QAAQ,CAAC,6BAA6B,CAAC,GAAG;AAClD,YAAY,MAAM,EAAE,GAAG;AACvB,YAAY,OAAO,EAAE,IAAI;AACzB,SAAS,CAAC;AACV,QAAQ,QAAQ,CAAC,yBAAyB,CAAC,GAAG;AAC9C,YAAY,MAAM,EAAE,GAAG;AACvB,YAAY,OAAO,EAAE,CAAC;AACtB,SAAS,CAAC;AACV;AACA,QAAQ,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,cAAc,CAAC;AAClD,YAAY,QAAQ,EAAE,QAAQ;AAC9B,YAAY,YAAY,EAAE,kBAAkB;AAC5C,YAAY,cAAc,EAAE,oBAAoB;AAChD,YAAY,WAAW,EAAE,IAAI;AAC7B,YAAY,SAAS,EAAE,GAAG;AAC1B,YAAY,QAAQ,EAAE,KAAK,CAAC,cAAc;AAC1C,YAAY,SAAS,EAAE,IAAI;AAC3B,YAAY,UAAU,EAAE,KAAK;AAC7B,YAAY,IAAI,EAAE,KAAK,CAAC,UAAU;AAClC,SAAS,CAAC,CAAC;AACX;AACA,QAAQ,OAAO,QAAQ,CAAC;AACxB,KAAK;AACL;AACA,IAAI,OAAO,2BAA2B,CAAC,WAAW,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,YAAY,EAAE;AAClH,QAAQ,IAAI,kBAAkB,GAAG,CAAC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA,QAAQ,IAAI,WAAW,EAAE;AACzB,YAAY,kBAAkB,IAAI,CAAC;AACnC;AACA,gCAAgC,EAAE,YAAY,CAAC;AAC/C,gCAAgC,EAAE,YAAY,CAAC;AAC/C;AACA;AACA;AACA,YAAY,CAAC,CAAC;AACd,SAAS,MAAM;AACf,YAAY,kBAAkB,IAAI,CAAC;AACnC,gCAAgC,EAAE,YAAY,CAAC;AAC/C,gCAAgC,EAAE,YAAY,CAAC;AAC/C,YAAY,CAAC,CAAC;AACd,SAAS;AACT;AACA,QAAQ,kBAAkB,IAAI,CAAC;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,CAAC,uBAAuB,CAAC,CAAC;AAC/H,2FAA2F,EAAE,QAAQ,CAAC,uBAAuB,CAAC,CAAC;AAC/H,YAAY,CAAC,CAAC;AACd;AACA,QAAQ,IAAI,qBAAqB,EAAE;AACnC,YAAY,kBAAkB,IAAI,CAAC;AACnC;AACA,YAAY,CAAC,CAAC;AACd,SAAS;AACT;AACA,QAAQ,kBAAkB,IAAI,CAAC;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,CAAC,CAAC;AACV;AACA,QAAQ,kBAAkB,IAAI,aAAa,CAAC,qBAAqB,EAAE,CAAC;AACpE,QAAQ,kBAAkB,IAAI,CAAC,CAAC,CAAC,CAAC;AAClC;AACA,QAAQ,OAAO,kBAAkB,CAAC;AAClC,KAAK;AACL;AACA,IAAI,OAAO,mBAAmB,GAAG;AACjC,QAAQ,IAAI,oBAAoB,GAAG,CAAC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,CAAC,CAAC;AACV;AACA,QAAQ,oBAAoB,IAAI,CAAC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,CAAC,CAAC;AACV;AACA,QAAQ,OAAO,oBAAoB,CAAC;AACpC,KAAK;AACL;AACA,CAAC;AACD;AACA,MAAM,eAAe,CAAC;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,OAAO,KAAK,CAAC,WAAW,GAAG,KAAK,EAAE,qBAAqB,GAAG,KAAK,EAAE,UAAU,GAAG,GAAG;AACrF,iBAAiB,qBAAqB,GAAG,KAAK,EAAE,2BAA2B,GAAG,CAAC,EAAE;AACjF;AACA,QAAQ,MAAM,gBAAgB,GAAG,CAAC;AAClC;AACA;AACA;AACA;AACA;AACA,QAAQ,CAAC,CAAC;AACV;AACA,QAAQ,IAAI,kBAAkB,GAAG,aAAa,CAAC,qBAAqB,CAAC,WAAW,EAAE,qBAAqB;AACvG,qEAAqE,2BAA2B,EAAE,gBAAgB,CAAC,CAAC;AACpH,QAAQ,kBAAkB,IAAI,eAAe,CAAC,2BAA2B,EAAE,CAAC;AAC5E,QAAQ,MAAM,oBAAoB,GAAG,eAAe,CAAC,mBAAmB,EAAE,CAAC;AAC3E;AACA,QAAQ,MAAM,QAAQ,GAAG,aAAa,CAAC,WAAW,CAAC,WAAW,EAAE,qBAAqB;AACrF,mDAAmD,2BAA2B,EAAE,UAAU,EAAE,qBAAqB,CAAC,CAAC;AACnH;AACA,QAAQ,QAAQ,CAAC,uBAAuB,CAAC,GAAG;AAC5C,YAAY,MAAM,EAAE,GAAG;AACvB,YAAY,OAAO,EAAE,IAAI;AACzB,SAAS,CAAC;AACV,QAAQ,QAAQ,CAAC,2BAA2B,CAAC,GAAG;AAChD,YAAY,MAAM,EAAE,IAAI;AACxB,YAAY,OAAO,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;AAClD,SAAS,CAAC;AACV;AACA,QAAQ,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,cAAc,CAAC;AAClD,YAAY,QAAQ,EAAE,QAAQ;AAC9B,YAAY,YAAY,EAAE,kBAAkB;AAC5C,YAAY,cAAc,EAAE,oBAAoB;AAChD,YAAY,WAAW,EAAE,IAAI;AAC7B,YAAY,SAAS,EAAE,GAAG;AAC1B,YAAY,QAAQ,EAAE,KAAK,CAAC,cAAc;AAC1C,YAAY,SAAS,EAAE,IAAI;AAC3B,YAAY,UAAU,EAAE,KAAK;AAC7B,YAAY,IAAI,EAAE,KAAK,CAAC,UAAU;AAClC,SAAS,CAAC,CAAC;AACX;AACA,QAAQ,OAAO,QAAQ,CAAC;AACxB,KAAK;AACL;AACA,IAAI,OAAO,2BAA2B,GAAG;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,IAAI,kBAAkB,GAAG,CAAC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,MAAM,uBAAuB,GAAG,CAAC;AACzC;AACA;AACA;AACA;AACA;AACA;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;AAGV,QAEe;AACf;AACA;AACA;AACA;AACA,YAAY,kBAAkB,IAAI,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,oBAAoB,EAAE,uBAAuB,CAAC;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,CAAC,CAAC;AACd,SAAS;AACT;AACA,QAAQ,kBAAkB,IAAI,aAAa,CAAC,qBAAqB,EAAE,CAAC;AACpE,QAAQ,kBAAkB,IAAI,CAAC,CAAC,CAAC,CAAC;AAClC;AACA,QAAQ,OAAO,kBAAkB,CAAC;AAClC,KAAK;AACL;AACA,IAAI,OAAO,mBAAmB,GAAG;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,IAAI,oBAAoB,GAAG,CAAC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA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","x_google_ignoreList":[0]}