@threepipe/plugin-gaussian-splatting 0.1.0
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.
- package/dist/assets/worker-dK7pvmNj.js +1569 -0
- package/dist/assets/worker-dK7pvmNj.js.map +1 -0
- package/dist/dependencies.txt +212 -0
- package/dist/gaussian-splats-3d/GaussianSplatsPlugin.d.ts +1 -0
- package/dist/gaussian-splats-3d/GaussianSplatsPlugin.d.ts.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +879 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +876 -0
- package/dist/index.mjs.map +1 -0
- package/dist/three-gaussian-splat/ThreeGaussianSplatPlugin.d.ts +45 -0
- package/dist/three-gaussian-splat/ThreeGaussianSplatPlugin.d.ts.map +1 -0
- package/dist/three-gaussian-splat/cpp-sorter/BufferPool.d.ts +9 -0
- package/dist/three-gaussian-splat/cpp-sorter/BufferPool.d.ts.map +1 -0
- package/dist/three-gaussian-splat/cpp-sorter/SortWorkerManager.d.ts +13 -0
- package/dist/three-gaussian-splat/cpp-sorter/SortWorkerManager.d.ts.map +1 -0
- package/dist/three-gaussian-splat/cpp-sorter/worker.d.ts +18 -0
- package/dist/three-gaussian-splat/cpp-sorter/worker.d.ts.map +1 -0
- package/dist/three-gaussian-splat/geometry/GaussianSplatGeometry.d.ts +25 -0
- package/dist/three-gaussian-splat/geometry/GaussianSplatGeometry.d.ts.map +1 -0
- package/dist/three-gaussian-splat/index.d.ts +22 -0
- package/dist/three-gaussian-splat/index.d.ts.map +1 -0
- package/dist/three-gaussian-splat/loaders/SplatLoader.d.ts +13 -0
- package/dist/three-gaussian-splat/loaders/SplatLoader.d.ts.map +1 -0
- package/dist/three-gaussian-splat/materials/GaussianSplatMaterialExtension.d.ts +28 -0
- package/dist/three-gaussian-splat/materials/GaussianSplatMaterialExtension.d.ts.map +1 -0
- package/dist/three-gaussian-splat/materials/GaussianSplatMaterialPhysical.d.ts +9 -0
- package/dist/three-gaussian-splat/materials/GaussianSplatMaterialPhysical.d.ts.map +1 -0
- package/dist/three-gaussian-splat/materials/GaussianSplatMaterialRaw.d.ts +12 -0
- package/dist/three-gaussian-splat/materials/GaussianSplatMaterialRaw.d.ts.map +1 -0
- package/dist/three-gaussian-splat/materials/GaussianSplatMaterialUnlit.d.ts +9 -0
- package/dist/three-gaussian-splat/materials/GaussianSplatMaterialUnlit.d.ts.map +1 -0
- package/dist/three-gaussian-splat/materials/util.d.ts +3 -0
- package/dist/three-gaussian-splat/materials/util.d.ts.map +1 -0
- package/dist/three-gaussian-splat/mesh/GaussianSplatMesh.d.ts +10 -0
- package/dist/three-gaussian-splat/mesh/GaussianSplatMesh.d.ts.map +1 -0
- package/dist/three-gaussian-splat/shaders/index.d.ts +7 -0
- package/dist/three-gaussian-splat/shaders/index.d.ts.map +1 -0
- package/package.json +34 -0
- package/src/gaussian-splats-3d/GaussianSplatsPlugin.ts +50 -0
- package/src/global.d.ts +40 -0
- package/src/index.ts +5 -0
- package/src/three-gaussian-splat/ThreeGaussianSplatPlugin.css +3 -0
- package/src/three-gaussian-splat/ThreeGaussianSplatPlugin.ts +74 -0
- package/src/three-gaussian-splat/cpp-sorter/BufferPool.ts +30 -0
- package/src/three-gaussian-splat/cpp-sorter/ISort.d.ts +3 -0
- package/src/three-gaussian-splat/cpp-sorter/SortWorkerManager.ts +53 -0
- package/src/three-gaussian-splat/cpp-sorter/build-in-docker.sh +4 -0
- package/src/three-gaussian-splat/cpp-sorter/build.sh +7 -0
- package/src/three-gaussian-splat/cpp-sorter/sort.cpp +107 -0
- package/src/three-gaussian-splat/cpp-sorter/sort.js +16 -0
- package/src/three-gaussian-splat/cpp-sorter/sort.wasm +0 -0
- package/src/three-gaussian-splat/cpp-sorter/watch.sh +9 -0
- package/src/three-gaussian-splat/cpp-sorter/worker.ts +59 -0
- package/src/three-gaussian-splat/geometry/GaussianSplatGeometry.ts +182 -0
- package/src/three-gaussian-splat/index.ts +22 -0
- package/src/three-gaussian-splat/loaders/SplatLoader.ts +51 -0
- package/src/three-gaussian-splat/materials/GaussianSplatMaterialExtension.ts +105 -0
- package/src/three-gaussian-splat/materials/GaussianSplatMaterialPhysical.ts +25 -0
- package/src/three-gaussian-splat/materials/GaussianSplatMaterialRaw.ts +73 -0
- package/src/three-gaussian-splat/materials/GaussianSplatMaterialUnlit.ts +26 -0
- package/src/three-gaussian-splat/materials/util.ts +9 -0
- package/src/three-gaussian-splat/mesh/GaussianSplatMesh.ts +96 -0
- package/src/three-gaussian-splat/shaders/gsplat.main.frag.glsl +18 -0
- package/src/three-gaussian-splat/shaders/gsplat.main.vert.glsl +15 -0
- package/src/three-gaussian-splat/shaders/gsplat.pars.frag.glsl +10 -0
- package/src/three-gaussian-splat/shaders/gsplat.pars.vert.glsl +58 -0
- package/src/three-gaussian-splat/shaders/index.ts +11 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/three-gaussian-splat/materials/util.ts","../src/three-gaussian-splat/shaders/gsplat.pars.frag.glsl","../src/three-gaussian-splat/shaders/gsplat.pars.vert.glsl","../src/three-gaussian-splat/shaders/gsplat.main.vert.glsl","../src/three-gaussian-splat/shaders/gsplat.main.frag.glsl","../src/three-gaussian-splat/shaders/index.ts","../src/three-gaussian-splat/materials/GaussianSplatMaterialExtension.ts","../src/three-gaussian-splat/materials/GaussianSplatMaterialPhysical.ts","../src/three-gaussian-splat/materials/GaussianSplatMaterialRaw.ts","../src/three-gaussian-splat/materials/GaussianSplatMaterialUnlit.ts","../node_modules/comlink/dist/esm/comlink.mjs","../src/three-gaussian-splat/geometry/GaussianSplatGeometry.ts","../src/three-gaussian-splat/mesh/GaussianSplatMesh.ts","../src/three-gaussian-splat/cpp-sorter/SortWorkerManager.ts","../src/three-gaussian-splat/loaders/SplatLoader.ts","../src/three-gaussian-splat/ThreeGaussianSplatPlugin.ts","../src/three-gaussian-splat/index.ts","../src/index.ts"],"sourcesContent":["import {MathUtils, Vector2} from 'threepipe'\n\nexport const computeFocalLengths = (width: number, height: number, fov: number, aspect: number, dpr: number) => {\n const fovRad = MathUtils.degToRad(fov)\n const fovXRad = 2 * Math.atan(Math.tan(fovRad / 2) * aspect)\n const fy = dpr * height / (2 * Math.tan(fovRad / 2))\n const fx = dpr * width / (2 * Math.tan(fovXRad / 2))\n return new Vector2(fx, fy)\n}\n","// https://github.com/vincent-lecrubier-skydio/react-three-fiber-gaussian-splat\nprecision mediump float;\n\nvarying vec4 vColor;\nvarying vec3 vConic;\nvarying vec2 vCenter;\n\nuniform vec2 viewport;\nuniform vec2 focal;\nuniform float minAlpha;\n","// https://github.com/vincent-lecrubier-skydio/react-three-fiber-gaussian-splat\nprecision mediump float;\n\n#ifndef SHADER_NAME // isRawShaderMaterial\nattribute vec3 position;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nmat3 transpose(mat3 m) { return mat3(m[0][0], m[1][0], m[2][0], m[0][1], m[1][1], m[2][1], m[0][2], m[1][2], m[2][2]); }\n#endif\n\nattribute vec4 color;\nattribute vec4 quat;\nattribute vec3 scale;\nattribute vec3 center;\n\nuniform vec2 focal;\nuniform vec2 viewport;\n//uniform vec3 sphereCenter;\n//uniform vec3 planeNormal;\n//uniform float planeDistance;\n\nvarying vec4 vColor;\nvarying vec3 vConic;\nvarying vec2 vCenter;\nvarying vec2 vPosition;\n//varying float vDistance;\n//varying float vPlaneSide;\n\nmat3 compute_cov3d(vec3 scale, vec4 rot) {\n mat3 S = mat3(\n scale.x, 0.0, 0.0,\n 0.0, scale.y, 0.0,\n 0.0, 0.0, scale.z\n );\n mat3 R = mat3(\n 1.0 - 2.0 * (rot.z * rot.z + rot.w * rot.w), 2.0 * (rot.y * rot.z - rot.x * rot.w), 2.0 * (rot.y * rot.w + rot.x * rot.z),\n 2.0 * (rot.y * rot.z + rot.x * rot.w), 1.0 - 2.0 * (rot.y * rot.y + rot.w * rot.w), 2.0 * (rot.z * rot.w - rot.x * rot.y),\n 2.0 * (rot.y * rot.w - rot.x * rot.z), 2.0 * (rot.z * rot.w + rot.x * rot.y), 1.0 - 2.0 * (rot.y * rot.y + rot.z * rot.z)\n );\n mat3 M = S * R;\n return transpose(M) * M;\n}\n\nvec3 compute_cov2d(vec3 center, vec3 scale, vec4 rot){\n mat3 Vrk = compute_cov3d(scale, rot);\n vec4 t = modelViewMatrix * vec4(center, 1.0);\n vec2 lims = 1.3 * 0.5 * viewport / focal;\n t.xy = min(lims, max(-lims, t.xy / t.z)) * t.z;\n mat3 J = mat3(\n focal.x / t.z, 0., -(focal.x * t.x) / (t.z * t.z),\n 0., focal.y / t.z, -(focal.y * t.y) / (t.z * t.z),\n 0., 0., 0.\n );\n mat3 W = transpose(mat3(modelViewMatrix));\n mat3 T = W * J;\n mat3 cov = transpose(T) * transpose(Vrk) * T;\n return vec3(cov[0][0] + 0.3, cov[0][1], cov[1][1] + 0.3);\n}\n","vec3 cov2d = compute_cov2d(center, scale, quat);\nfloat det = cov2d.x * cov2d.z - cov2d.y * cov2d.y;\nvec3 conic = vec3(cov2d.z, cov2d.y, cov2d.x) / det;\nfloat mid = 0.5 * (cov2d.x + cov2d.z);\nfloat lambda1 = mid + sqrt(max(0.1, mid * mid - det));\nfloat lambda2 = mid - sqrt(max(0.1, mid * mid - det));\nvec2 v1 = 7.0 * sqrt(lambda1) * normalize(vec2(cov2d.y, lambda1 - cov2d.x));\nvec2 v2 = 7.0 * sqrt(lambda2) * normalize(vec2(-(lambda1 - cov2d.x),cov2d.y));\n\nvColor = color;\nvConic = conic;\nvCenter = vec2(gl_Position) / gl_Position.w;\n\nvPosition = vec2(vCenter + position.x * (position.y < 0.0 ? v1 : v2) / viewport);\ngl_Position = vec4(vPosition, gl_Position.z / gl_Position.w, 1);\n","vec2 d = (vCenter - 2.0 * (gl_FragCoord.xy/viewport - vec2(0.5, 0.5))) * viewport * 0.5;\n\nfloat power = -0.5 * (vConic.x * d.x * d.x + vConic.z * d.y * d.y) + vConic.y * d.x * d.y;\n\nif (power > 0.0) discard;\nfloat alpha = min(0.99, vColor.a * exp(power));\nif(alpha < minAlpha) discard;\n\ngl_FragColor = vec4(vColor.rgb, alpha);\n//vec2 d = (vCenter - 2.0 * (gl_FragCoord.xy/viewport - vec2(0.5, 0.5))) * viewport * 0.5;\n//\n//float power = -0.5 * (vConic.x * d.x * d.x + vConic.z * d.y * d.y) + vConic.y * d.x * d.y;\n//\n//if (power > 0.0) discard;\n//float alpha = min(0.99, vColor.a * exp(power));\n//if(alpha < minAlpha) discard;\n//\n//diffuseColor *= vec4(vColor.rgb, alpha);\n","import fragmentParsShaderSource from '../shaders/gsplat.pars.frag.glsl'\nimport vertexParsShaderSource from '../shaders/gsplat.pars.vert.glsl'\nimport vertexShaderSource from '../shaders/gsplat.main.vert.glsl'\nimport fragmentShaderSource from '../shaders/gsplat.main.frag.glsl'\n\nexport const gaussianSplatShaders = {\n main_frag: '\\n' + fragmentShaderSource + '\\n',\n main_vert: '\\n' + vertexShaderSource + '\\n',\n pars_frag: fragmentParsShaderSource,\n pars_vert: vertexParsShaderSource,\n}\n","import {\n Camera,\n IMaterial,\n MaterialExtension,\n PerspectiveCamera,\n Shader,\n shaderReplaceString,\n Vector2,\n WebGLRenderer,\n} from 'threepipe'\nimport {computeFocalLengths} from './util'\nimport {gaussianSplatShaders} from '../shaders'\n\nexport class GaussianSplatMaterialExtension implements MaterialExtension {\n readonly isGaussianSplatMaterialExtension = true\n extraUniforms = {\n viewport: {value: new Vector2()},\n focal: {value: new Vector2()},\n minAlpha: {value: 0.02},\n }\n parsFragmentSnippet = gaussianSplatShaders.pars_frag\n parsVertexSnippet = gaussianSplatShaders.pars_vert\n shaderExtender = (shader: Shader, material: IMaterial) => {\n shader.vertexShader = shaderReplaceString(shader.vertexShader,\n '#include <begin_vertex>',\n 'vec3 transformed = vec3( center );')\n if (shader.vertexShader.includes('#include <beginnormal_vertex>')) {\n // todo: get correct normal by rendering to depth and then sampling the normal\n shader.vertexShader = shaderReplaceString(shader.vertexShader,\n '#include <beginnormal_vertex>',\n '\\nobjectNormal = vec3(1,0,0);\\n', {append: true})\n }\n shader.vertexShader = shaderReplaceString(shader.vertexShader,\n '#include <project_vertex>',\n gaussianSplatShaders.main_vert, {append: true})\n\n if (!material.isGBufferMaterial && !material.userData.isGBufferMaterial) {\n shader.fragmentShader = shaderReplaceString(shader.fragmentShader,\n '#include <map_fragment>',\n shaderReplaceString(\n gaussianSplatShaders.main_frag,\n /gl_FragColor\\s*=/, // because of minification\n 'diffuseColor*='\n ), {prepend: true})\n }\n // eslint-disable-next-line no-constant-condition\n if (0)\n shader.fragmentShader = shaderReplaceString(shader.fragmentShader,\n '#include <output_fragment>',\n '\\ngl_FragColor=diffuseColor;',\n // '\\ngl_FragColor=vec4(reflectedLight.directDiffuse, 1.);',\n // '\\ngl_FragColor=vec4(geometryNormal, 1.);',\n {append: true})\n return shader\n }\n isCompatible = (material: IMaterial) =>\n !!material.isPhysicalMaterial ||\n !!material.isUnlitMaterial ||\n !!material.isGBufferMaterial ||\n !!material.userData.isGBufferMaterial\n\n setDirty?: () => void\n\n private _currentCamera?: PerspectiveCamera | Camera\n private _renderer?: WebGLRenderer\n\n public set minAlpha(value: number) {\n this.extraUniforms.minAlpha.value = value\n this.setDirty && this.setDirty()\n }\n\n\n constructor() {\n window.addEventListener('resize', this._refresh)\n }\n\n dispose() {\n // todo: add again on added to mesh?\n window.removeEventListener('resize', this._refresh)\n }\n\n update(camera: PerspectiveCamera | Camera, renderer: WebGLRenderer): void {\n if (this._currentCamera === camera && this._renderer === renderer) return\n this._renderer = renderer\n this._currentCamera = camera\n this._refresh()\n }\n\n private _refresh = (): void => {\n if (!this._currentCamera) return\n const size = new Vector2()\n this._renderer?.getSize(size)\n const dpr = this._renderer?.getPixelRatio() || 1\n let fov = 75\n let aspect = size.x / size.y\n\n if (this._currentCamera instanceof PerspectiveCamera) {\n fov = this._currentCamera.fov\n aspect = this._currentCamera.aspect\n }\n\n this.extraUniforms.focal.value = computeFocalLengths(size.x, size.y, fov, aspect, dpr)\n this.extraUniforms.viewport.value = new Vector2(size.x * dpr, size.y * dpr)\n }\n}\n","import {PhysicalMaterial} from 'threepipe'\nimport {GaussianSplatMaterialExtension} from './GaussianSplatMaterialExtension'\n\nexport class GaussianSplatMaterialPhysical extends PhysicalMaterial {\n readonly isGaussianSplatMaterialPhysical = true\n\n gsplatExtension = new GaussianSplatMaterialExtension()\n\n constructor() {\n super({\n depthTest: true,\n depthWrite: false,\n transparent: true,\n vertexColors: false,\n })\n // this.userData.renderToGBuffer = true\n // this.userData.renderToDepth = true\n this.registerMaterialExtensions([this.gsplatExtension])\n }\n\n dispose() {\n this.gsplatExtension.dispose()\n return super.dispose()\n }\n}\n","import {Camera, PerspectiveCamera, ShaderMaterial2, Vector2, WebGLRenderer} from 'threepipe'\nimport {computeFocalLengths} from './util'\nimport {gaussianSplatShaders} from '../shaders'\n\nexport class GaussianSplatMaterialRaw extends ShaderMaterial2 {\n private _currentCamera?: PerspectiveCamera | Camera\n private _renderer?: WebGLRenderer\n\n readonly isGaussianSplatMaterialRaw = true\n\n public set minAlpha(value: number) {\n this.uniforms.minAlpha.value = value\n this.needsUpdate = true\n }\n\n constructor() {\n super({\n uniforms: {\n viewport: {value: new Vector2()},\n focal: {value: new Vector2()},\n minAlpha: {value: 0.02},\n },\n fragmentShader: `${gaussianSplatShaders.pars_frag}\nvoid main () {\n${gaussianSplatShaders.main_frag}\n}`,\n vertexShader: `${gaussianSplatShaders.pars_vert}\nvoid main () {\n gl_Position = projectionMatrix * modelViewMatrix * vec4(center, 1);\n ${gaussianSplatShaders.main_vert}\n}`,\n depthTest: true,\n depthWrite: false,\n transparent: true,\n }, true)\n\n window.addEventListener('resize', this._refresh)\n }\n\n private _refresh = (): void => {\n if (!this._currentCamera) return\n\n const size = new Vector2()\n this._renderer?.getSize(size)\n const width = size.x\n const height = size.y\n\n const dpr = this._renderer?.getPixelRatio() || 1\n\n let fov = 75\n let aspect = width / height\n\n if (this._currentCamera instanceof PerspectiveCamera) {\n fov = this._currentCamera.fov\n aspect = this._currentCamera.aspect\n }\n\n this.uniforms.focal.value = computeFocalLengths(width, height, fov, aspect, dpr)\n this.uniforms.viewport.value = new Vector2(width * dpr, height * dpr)\n }\n\n dispose() {\n // todo: add again on added to mesh?\n window.removeEventListener('resize', this._refresh)\n return super.dispose()\n }\n\n update(camera: PerspectiveCamera | Camera, renderer: WebGLRenderer): void {\n this._renderer = renderer\n this._currentCamera = camera\n this._refresh()\n }\n}\n","import {UnlitMaterial} from 'threepipe'\n\nimport {GaussianSplatMaterialExtension} from './GaussianSplatMaterialExtension'\n\nexport class GaussianSplatMaterialUnlit extends UnlitMaterial {\n readonly isGaussianSplatMaterialUnlit = true\n gsplatExtension = new GaussianSplatMaterialExtension()\n\n constructor() {\n super({\n depthTest: true,\n depthWrite: false,\n transparent: true,\n vertexColors: false,\n })\n // this.userData.renderToGBuffer = true\n // this.userData.renderToDepth = true\n this.registerMaterialExtensions([this.gsplatExtension])\n }\n\n dispose() {\n this.gsplatExtension.dispose()\n return super.dispose()\n }\n}\n\n","/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\nconst proxyMarker = Symbol(\"Comlink.proxy\");\nconst createEndpoint = Symbol(\"Comlink.endpoint\");\nconst releaseProxy = Symbol(\"Comlink.releaseProxy\");\nconst finalizer = Symbol(\"Comlink.finalizer\");\nconst throwMarker = Symbol(\"Comlink.thrown\");\nconst isObject = (val) => (typeof val === \"object\" && val !== null) || typeof val === \"function\";\n/**\n * Internal transfer handle to handle objects marked to proxy.\n */\nconst proxyTransferHandler = {\n canHandle: (val) => isObject(val) && val[proxyMarker],\n serialize(obj) {\n const { port1, port2 } = new MessageChannel();\n expose(obj, port1);\n return [port2, [port2]];\n },\n deserialize(port) {\n port.start();\n return wrap(port);\n },\n};\n/**\n * Internal transfer handler to handle thrown exceptions.\n */\nconst throwTransferHandler = {\n canHandle: (value) => isObject(value) && throwMarker in value,\n serialize({ value }) {\n let serialized;\n if (value instanceof Error) {\n serialized = {\n isError: true,\n value: {\n message: value.message,\n name: value.name,\n stack: value.stack,\n },\n };\n }\n else {\n serialized = { isError: false, value };\n }\n return [serialized, []];\n },\n deserialize(serialized) {\n if (serialized.isError) {\n throw Object.assign(new Error(serialized.value.message), serialized.value);\n }\n throw serialized.value;\n },\n};\n/**\n * Allows customizing the serialization of certain values.\n */\nconst transferHandlers = new Map([\n [\"proxy\", proxyTransferHandler],\n [\"throw\", throwTransferHandler],\n]);\nfunction isAllowedOrigin(allowedOrigins, origin) {\n for (const allowedOrigin of allowedOrigins) {\n if (origin === allowedOrigin || allowedOrigin === \"*\") {\n return true;\n }\n if (allowedOrigin instanceof RegExp && allowedOrigin.test(origin)) {\n return true;\n }\n }\n return false;\n}\nfunction expose(obj, ep = globalThis, allowedOrigins = [\"*\"]) {\n ep.addEventListener(\"message\", function callback(ev) {\n if (!ev || !ev.data) {\n return;\n }\n if (!isAllowedOrigin(allowedOrigins, ev.origin)) {\n console.warn(`Invalid origin '${ev.origin}' for comlink proxy`);\n return;\n }\n const { id, type, path } = Object.assign({ path: [] }, ev.data);\n const argumentList = (ev.data.argumentList || []).map(fromWireValue);\n let returnValue;\n try {\n const parent = path.slice(0, -1).reduce((obj, prop) => obj[prop], obj);\n const rawValue = path.reduce((obj, prop) => obj[prop], obj);\n switch (type) {\n case \"GET\" /* MessageType.GET */:\n {\n returnValue = rawValue;\n }\n break;\n case \"SET\" /* MessageType.SET */:\n {\n parent[path.slice(-1)[0]] = fromWireValue(ev.data.value);\n returnValue = true;\n }\n break;\n case \"APPLY\" /* MessageType.APPLY */:\n {\n returnValue = rawValue.apply(parent, argumentList);\n }\n break;\n case \"CONSTRUCT\" /* MessageType.CONSTRUCT */:\n {\n const value = new rawValue(...argumentList);\n returnValue = proxy(value);\n }\n break;\n case \"ENDPOINT\" /* MessageType.ENDPOINT */:\n {\n const { port1, port2 } = new MessageChannel();\n expose(obj, port2);\n returnValue = transfer(port1, [port1]);\n }\n break;\n case \"RELEASE\" /* MessageType.RELEASE */:\n {\n returnValue = undefined;\n }\n break;\n default:\n return;\n }\n }\n catch (value) {\n returnValue = { value, [throwMarker]: 0 };\n }\n Promise.resolve(returnValue)\n .catch((value) => {\n return { value, [throwMarker]: 0 };\n })\n .then((returnValue) => {\n const [wireValue, transferables] = toWireValue(returnValue);\n ep.postMessage(Object.assign(Object.assign({}, wireValue), { id }), transferables);\n if (type === \"RELEASE\" /* MessageType.RELEASE */) {\n // detach and deactive after sending release response above.\n ep.removeEventListener(\"message\", callback);\n closeEndPoint(ep);\n if (finalizer in obj && typeof obj[finalizer] === \"function\") {\n obj[finalizer]();\n }\n }\n })\n .catch((error) => {\n // Send Serialization Error To Caller\n const [wireValue, transferables] = toWireValue({\n value: new TypeError(\"Unserializable return value\"),\n [throwMarker]: 0,\n });\n ep.postMessage(Object.assign(Object.assign({}, wireValue), { id }), transferables);\n });\n });\n if (ep.start) {\n ep.start();\n }\n}\nfunction isMessagePort(endpoint) {\n return endpoint.constructor.name === \"MessagePort\";\n}\nfunction closeEndPoint(endpoint) {\n if (isMessagePort(endpoint))\n endpoint.close();\n}\nfunction wrap(ep, target) {\n return createProxy(ep, [], target);\n}\nfunction throwIfProxyReleased(isReleased) {\n if (isReleased) {\n throw new Error(\"Proxy has been released and is not useable\");\n }\n}\nfunction releaseEndpoint(ep) {\n return requestResponseMessage(ep, {\n type: \"RELEASE\" /* MessageType.RELEASE */,\n }).then(() => {\n closeEndPoint(ep);\n });\n}\nconst proxyCounter = new WeakMap();\nconst proxyFinalizers = \"FinalizationRegistry\" in globalThis &&\n new FinalizationRegistry((ep) => {\n const newCount = (proxyCounter.get(ep) || 0) - 1;\n proxyCounter.set(ep, newCount);\n if (newCount === 0) {\n releaseEndpoint(ep);\n }\n });\nfunction registerProxy(proxy, ep) {\n const newCount = (proxyCounter.get(ep) || 0) + 1;\n proxyCounter.set(ep, newCount);\n if (proxyFinalizers) {\n proxyFinalizers.register(proxy, ep, proxy);\n }\n}\nfunction unregisterProxy(proxy) {\n if (proxyFinalizers) {\n proxyFinalizers.unregister(proxy);\n }\n}\nfunction createProxy(ep, path = [], target = function () { }) {\n let isProxyReleased = false;\n const proxy = new Proxy(target, {\n get(_target, prop) {\n throwIfProxyReleased(isProxyReleased);\n if (prop === releaseProxy) {\n return () => {\n unregisterProxy(proxy);\n releaseEndpoint(ep);\n isProxyReleased = true;\n };\n }\n if (prop === \"then\") {\n if (path.length === 0) {\n return { then: () => proxy };\n }\n const r = requestResponseMessage(ep, {\n type: \"GET\" /* MessageType.GET */,\n path: path.map((p) => p.toString()),\n }).then(fromWireValue);\n return r.then.bind(r);\n }\n return createProxy(ep, [...path, prop]);\n },\n set(_target, prop, rawValue) {\n throwIfProxyReleased(isProxyReleased);\n // FIXME: ES6 Proxy Handler `set` methods are supposed to return a\n // boolean. To show good will, we return true asynchronously ¯\\_(ツ)_/¯\n const [value, transferables] = toWireValue(rawValue);\n return requestResponseMessage(ep, {\n type: \"SET\" /* MessageType.SET */,\n path: [...path, prop].map((p) => p.toString()),\n value,\n }, transferables).then(fromWireValue);\n },\n apply(_target, _thisArg, rawArgumentList) {\n throwIfProxyReleased(isProxyReleased);\n const last = path[path.length - 1];\n if (last === createEndpoint) {\n return requestResponseMessage(ep, {\n type: \"ENDPOINT\" /* MessageType.ENDPOINT */,\n }).then(fromWireValue);\n }\n // We just pretend that `bind()` didn’t happen.\n if (last === \"bind\") {\n return createProxy(ep, path.slice(0, -1));\n }\n const [argumentList, transferables] = processArguments(rawArgumentList);\n return requestResponseMessage(ep, {\n type: \"APPLY\" /* MessageType.APPLY */,\n path: path.map((p) => p.toString()),\n argumentList,\n }, transferables).then(fromWireValue);\n },\n construct(_target, rawArgumentList) {\n throwIfProxyReleased(isProxyReleased);\n const [argumentList, transferables] = processArguments(rawArgumentList);\n return requestResponseMessage(ep, {\n type: \"CONSTRUCT\" /* MessageType.CONSTRUCT */,\n path: path.map((p) => p.toString()),\n argumentList,\n }, transferables).then(fromWireValue);\n },\n });\n registerProxy(proxy, ep);\n return proxy;\n}\nfunction myFlat(arr) {\n return Array.prototype.concat.apply([], arr);\n}\nfunction processArguments(argumentList) {\n const processed = argumentList.map(toWireValue);\n return [processed.map((v) => v[0]), myFlat(processed.map((v) => v[1]))];\n}\nconst transferCache = new WeakMap();\nfunction transfer(obj, transfers) {\n transferCache.set(obj, transfers);\n return obj;\n}\nfunction proxy(obj) {\n return Object.assign(obj, { [proxyMarker]: true });\n}\nfunction windowEndpoint(w, context = globalThis, targetOrigin = \"*\") {\n return {\n postMessage: (msg, transferables) => w.postMessage(msg, targetOrigin, transferables),\n addEventListener: context.addEventListener.bind(context),\n removeEventListener: context.removeEventListener.bind(context),\n };\n}\nfunction toWireValue(value) {\n for (const [name, handler] of transferHandlers) {\n if (handler.canHandle(value)) {\n const [serializedValue, transferables] = handler.serialize(value);\n return [\n {\n type: \"HANDLER\" /* WireValueType.HANDLER */,\n name,\n value: serializedValue,\n },\n transferables,\n ];\n }\n }\n return [\n {\n type: \"RAW\" /* WireValueType.RAW */,\n value,\n },\n transferCache.get(value) || [],\n ];\n}\nfunction fromWireValue(value) {\n switch (value.type) {\n case \"HANDLER\" /* WireValueType.HANDLER */:\n return transferHandlers.get(value.name).deserialize(value.value);\n case \"RAW\" /* WireValueType.RAW */:\n return value.value;\n }\n}\nfunction requestResponseMessage(ep, msg, transfers) {\n return new Promise((resolve) => {\n const id = generateUUID();\n ep.addEventListener(\"message\", function l(ev) {\n if (!ev.data || !ev.data.id || ev.data.id !== id) {\n return;\n }\n ep.removeEventListener(\"message\", l);\n resolve(ev.data);\n });\n if (ep.start) {\n ep.start();\n }\n ep.postMessage(Object.assign({ id }, msg), transfers);\n });\n}\nfunction generateUUID() {\n return new Array(4)\n .fill(0)\n .map(() => Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(16))\n .join(\"-\");\n}\n\nexport { createEndpoint, expose, finalizer, proxy, proxyMarker, releaseProxy, transfer, transferHandlers, windowEndpoint, wrap };\n//# sourceMappingURL=comlink.mjs.map\n","import type {WasmSorter} from '../cpp-sorter/worker'\nimport {Remote, transfer} from 'comlink'\nimport {\n Box3,\n BufferAttribute,\n Camera,\n IGeometry,\n iGeometryCommons,\n InstancedBufferAttribute,\n InstancedBufferGeometry,\n type IObject3D,\n Matrix4,\n PerspectiveCamera,\n Sphere,\n Vector3,\n} from 'threepipe'\n\nexport class GaussianSplatGeometry extends InstancedBufferGeometry implements IGeometry {\n constructor(\n private _worker: Remote<WasmSorter>,\n private _vertexCount: number,\n private _maxSplats: number,\n private _onLoad?: (geometry: GaussianSplatGeometry) => void,\n ) {\n super()\n iGeometryCommons.upgradeGeometry.call(this)\n this.initAttributes()\n }\n\n readonly isGaussianSplatGeometry = true\n\n assetType: 'geometry' // dont set the value here since its checked in upgradeGeometry\n setDirty = iGeometryCommons.setDirty\n refreshUi = iGeometryCommons.refreshUi\n appliedMeshes = new Set<IObject3D>()\n\n private _viewProj: number[] = []\n private _sortRunning = false\n\n private _initialized = false\n\n private _centersBuffer: Float32Array = new Float32Array(0)\n\n public async update(camera: PerspectiveCamera | Camera, meshMatrixWorld: Matrix4) {\n if (this._sortRunning || !this._initialized || !this._worker) {\n return\n }\n\n camera.updateMatrixWorld(true)\n\n this._viewProj = new Matrix4().multiply(camera.projectionMatrix).multiply(camera.matrixWorldInverse).multiply(meshMatrixWorld).elements\n\n this._sortRunning = true\n const viewProj = new Float32Array(this._viewProj)\n const result = await this._worker.runSort(viewProj)\n\n const {quat, scale, center, color} = this._extractViews(result)\n\n if (this._centersBuffer.length !== center.length) this._centersBuffer = new Float32Array(center)\n else this._centersBuffer.set(center)\n\n ;(this.attributes.color as InstancedBufferAttribute).array = color;\n (this.attributes.quat as InstancedBufferAttribute).array = quat;\n (this.attributes.scale as InstancedBufferAttribute).array = scale;\n (this.attributes.center as InstancedBufferAttribute).array = this._centersBuffer\n // (this.attributes.center as InstancedBufferAttribute).array = center\n\n const pms = Promise.all([\n new Promise<void>(resolve => (this.attributes.color as InstancedBufferAttribute).onUpload(resolve)),\n new Promise<void>(resolve => (this.attributes.quat as InstancedBufferAttribute).onUpload(resolve)),\n new Promise<void>(resolve => (this.attributes.scale as InstancedBufferAttribute).onUpload(resolve)),\n // new Promise<void>(resolve => (this.attributes.center as InstancedBufferAttribute).onUpload(resolve)),\n ])\n\n this.attributes.color.needsUpdate = true\n this.attributes.quat.needsUpdate = true\n this.attributes.scale.needsUpdate = true\n this.attributes.center.needsUpdate = true\n\n this.setDirty()\n\n await pms\n\n await this._worker.returnBuffer(transfer(result, [result]))\n\n this._sortRunning = false\n }\n\n async initAttributes() {\n const viewProj = new Float32Array(this._viewProj)\n const result = await this._worker.runSort(viewProj)\n const {quat, scale, center, color} = this._extractViews(result)\n\n this.setAttribute('color', new InstancedBufferAttribute(color, 4, true))\n this.setAttribute('quat', new InstancedBufferAttribute(quat, 4, true))\n this.setAttribute('scale', new InstancedBufferAttribute(scale, 3, true))\n this.setAttribute('center', new InstancedBufferAttribute(center, 3, true))\n this.setAttribute('position', new BufferAttribute(new Float32Array([1, -1, 0, 1, 1, 0, -1, -1, 0, -1, 1, 0]), 3, true))\n\n this.attributes.position.needsUpdate = true\n this.setIndex(new BufferAttribute(new Uint16Array([0, 1, 2, 2, 3, 0]), 1, true))\n this.instanceCount = Math.min(quat.length / 4, this._maxSplats)\n this.computeBoundingBox()\n this.computeBoundingSphere()\n\n this._initialized = true\n this.setDirty()\n this._onLoad && this._onLoad(this)\n }\n\n private _extractViews(receivedBuffer: ArrayBuffer): {quat: Float32Array; scale: Float32Array; center: Float32Array; color: Float32Array} {\n const combined = new Float32Array(receivedBuffer)\n\n const quatLength = 4 * this._vertexCount\n const scaleLength = 3 * this._vertexCount\n const centerLength = 3 * this._vertexCount\n const colorLength = 4 * this._vertexCount\n\n const quatOffset = 0\n const scaleOffset = quatOffset + quatLength\n const centerOffset = scaleOffset + scaleLength\n const colorOffset = centerOffset + centerLength\n\n const quat = combined.subarray(quatOffset, quatOffset + quatLength)\n const scale = combined.subarray(scaleOffset, scaleOffset + scaleLength)\n const center = combined.subarray(centerOffset, centerOffset + centerLength)\n const color = combined.subarray(colorOffset, colorOffset + colorLength)\n\n return {quat, scale, center, color}\n }\n\n computeBoundingBox() {\n if (!this.getAttribute('center')) return super.computeBoundingBox()\n\n const box = this.boundingBox ?? (this.boundingBox = new Box3())\n box.setFromBufferAttribute(this.getAttribute('center') as InstancedBufferAttribute)\n\n if (isNaN(this.boundingBox!.min.x) || isNaN(this.boundingBox!.min.y) || isNaN(this.boundingBox!.min.z)) {\n console.error('GaussianSplatGeometry.computeBoundingBox(): Computed min/max have NaN values. The \"position\" attribute is likely to have NaN values.', this)\n }\n }\n\n computeBoundingSphere() {\n\n if (this.boundingSphere === null) this.boundingSphere = new Sphere()\n\n const position = this.attributes.center\n\n if (position && (position as any).isGLBufferAttribute) {\n console.error('THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set \"mesh.frustumCulled\" to \"false\".', this)\n this.boundingSphere.set(new Vector3(), Infinity)\n return\n }\n\n if (position) {\n // first, find the center of the bounding sphere\n const center = this.boundingSphere.center\n if (!this.boundingBox) this.computeBoundingBox()\n this.boundingBox!.getCenter(center)\n\n // second, try to find a boundingSphere with a radius smaller than the\n // boundingSphere of the boundingBox: sqrt(3) smaller in the best case\n\n let maxRadiusSq = 0\n const vector = new Vector3()\n\n for (let i = 0, il = position.count; i < il; i++) {\n vector.fromBufferAttribute(position, i)\n maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(vector))\n }\n\n this.boundingSphere.radius = Math.sqrt(maxRadiusSq)\n\n if (isNaN(this.boundingSphere.radius)) {\n console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \"position\" attribute is likely to have NaN values.', this)\n }\n\n }\n\n }\n\n}\n","import {GaussianSplatGeometry} from '../geometry/GaussianSplatGeometry'\nimport {Camera, IMaterial, Mesh2, PerspectiveCamera, WebGLRenderer} from 'threepipe'\nimport type {GaussianSplatMaterialRaw} from '../materials/GaussianSplatMaterialRaw'\nimport {GaussianSplatMaterialUnlit} from '../materials/GaussianSplatMaterialUnlit'\nimport {Matrix4, Ray, Raycaster, Sphere, Vector3} from 'three'\nimport {GaussianSplatMaterialExtension} from '../materials/GaussianSplatMaterialExtension'\n\nexport class GaussianSplatMesh extends Mesh2<GaussianSplatGeometry, IMaterial> {\n readonly isGaussianSplatMesh = true\n\n constructor(geometry: GaussianSplatGeometry, material: IMaterial) {\n super(geometry, material)\n this.frustumCulled = false\n }\n\n public async update(camera: PerspectiveCamera | Camera, renderer: WebGLRenderer) {\n if ((this.material as any as GaussianSplatMaterialRaw)?.isGaussianSplatMaterialRaw) {\n (this.material as any as GaussianSplatMaterialRaw).update(camera, renderer)\n } else if (this.material) {\n const ext =\n (this.material as GaussianSplatMaterialUnlit).gsplatExtension ??\n this.material.materialExtensions.find(e=>\n (e as GaussianSplatMaterialExtension).isGaussianSplatMaterialExtension) as GaussianSplatMaterialExtension\n ext && ext.update(camera, renderer)\n }\n this.updateMatrixWorld(true)\n return this.geometry.update(camera, this.matrixWorld)\n }\n\n raycast(raycaster: Raycaster, intersects: any[]) {\n\n const geometry = this.geometry\n const matrixWorld = this.matrixWorld\n // const threshold = raycaster.params.Points?.threshold ?? .01\n const threshold = .02\n\n // Checking boundingSphere distance to ray\n\n if (geometry.boundingSphere === null) geometry.computeBoundingSphere()\n\n const sphere = new Sphere()\n sphere.copy(geometry.boundingSphere!)\n sphere.applyMatrix4(matrixWorld)\n sphere.radius += threshold\n\n if (!raycaster.ray.intersectsSphere(sphere)) return\n\n //\n\n const inverseMatrix = new Matrix4()\n const ray = new Ray()\n\n inverseMatrix.copy(matrixWorld).invert()\n ray.copy(raycaster.ray).applyMatrix4(inverseMatrix)\n\n const localThreshold = threshold / ((this.scale.x + this.scale.y + this.scale.z) / 3)\n const localThresholdSq = localThreshold * localThreshold\n\n const attributes = geometry.attributes\n const positionAttribute = attributes.center\n\n const position = new Vector3()\n for (let i = 0, l = positionAttribute.count; i < l; i++) {\n\n position.fromBufferAttribute(positionAttribute, i)\n\n const rayPointDistanceSq = ray.distanceSqToPoint(position)\n\n if (rayPointDistanceSq < localThresholdSq) {\n\n const intersectPoint = new Vector3()\n\n ray.closestPointToPoint(position, intersectPoint)\n intersectPoint.applyMatrix4(matrixWorld)\n\n const distance = raycaster.ray.origin.distanceTo(intersectPoint)\n\n if (distance < raycaster.near || distance > raycaster.far) return\n\n intersects.push({\n\n distance: distance,\n distanceToRay: Math.sqrt(rayPointDistanceSq),\n point: intersectPoint,\n face: null,\n object: this,\n\n })\n\n\n }\n }\n\n }\n\n}\n","import {Remote, transfer, wrap} from 'comlink'\nimport type {WasmSorter} from './worker'\n\nexport const SPLAT_ROW_LENGTH = 3 * 4 + 3 * 4 + 4 + 4\n\nfunction trimBuffer(_buffer: Uint8Array, _maxSplats: number, _vertexCount: number): {buffer: Uint8Array; vertexCount: number} {\n const actualVertexCount = Math.min(_vertexCount, _maxSplats)\n const actualBufferSize = SPLAT_ROW_LENGTH * actualVertexCount\n const buffer = _buffer.slice(0, actualBufferSize)\n return {buffer, vertexCount: actualVertexCount}\n}\n\nexport class SortWorkerManager {\n private _workers: Remote<WasmSorter>[] = []\n private _maxWorkers = 8\n\n private _workerCtor: new (vertexCount: number, globalBuffer: Uint8Array) => Remote<WasmSorter>\n\n onError = (e: any) => {\n console.error(e)\n console.error(\n 'ERROR: Line ', e.lineno, ' in ', e.filename, ': ', e.message\n )\n }\n\n constructor() {\n const worker = new Worker(new URL('../cpp-sorter/worker', import.meta.url), {type: 'module'})\n worker.addEventListener('error', this.onError, false)\n this._workerCtor = wrap(worker) as any\n }\n\n async createWorker(data: Uint8Array, maxSplats = 1000000) {\n if (this._workers.length < this._maxWorkers) {\n const vertexCount = Math.floor(data.length / SPLAT_ROW_LENGTH)\n const bufferInfo = trimBuffer(data, maxSplats, vertexCount)\n const globalBuffer = transfer(bufferInfo.buffer, [bufferInfo.buffer.buffer])\n const worker = await new this._workerCtor(vertexCount, globalBuffer)\n await worker.load()\n this._workers.push(worker)\n return worker\n }\n console.error('Max workers reached')\n throw new Error('Max workers reached')\n }\n\n async disposeWorker(worker: Remote<WasmSorter>) {\n const index = this._workers.indexOf(worker)\n if (index !== -1) {\n this._workers.splice(index, 1)\n await worker.dispose()\n }\n }\n}\n","import {FileLoader, ILoader, IMaterial, Loader, LoadingManager} from 'threepipe'\nimport {SortWorkerManager, SPLAT_ROW_LENGTH} from '../cpp-sorter/SortWorkerManager'\nimport {GaussianSplatGeometry} from '../geometry/GaussianSplatGeometry'\nimport {GaussianSplatMesh} from '../mesh/GaussianSplatMesh'\nimport {GaussianSplatMaterialUnlit} from '../materials/GaussianSplatMaterialUnlit'\n\nexport class SplatLoader extends Loader implements ILoader {\n sortWorkerManager: SortWorkerManager\n\n materialConstructor = (_: GaussianSplatGeometry): IMaterial|undefined => new GaussianSplatMaterialUnlit()\n\n constructor(manager?: LoadingManager) {\n super(manager)\n }\n\n onGeometryLoad = (_: GaussianSplatGeometry)=>{\n return\n }\n\n public load(url: string, onLoad?: (data: GaussianSplatMesh) => void, onProgress?: (event: ProgressEvent) => void, onError?: (event: ErrorEvent) => void): void {\n // const path = ( scope.path === '' ) ? LoaderUtils.extractUrlBase( url ) : scope.path;\n const loader = new FileLoader(this.manager)\n loader.setPath(this.path)\n loader.setResponseType('arraybuffer')\n loader.setRequestHeader(this.requestHeader)\n loader.setWithCredentials(this.withCredentials)\n loader.load(url, async(buffer) => {\n try {\n const data = new Uint8Array(buffer as ArrayBuffer)\n const maxSplats = 1000000\n const vertexCount = Math.floor(data.length / SPLAT_ROW_LENGTH)\n const worker = await this.sortWorkerManager.createWorker(data, maxSplats)\n const geometry = new GaussianSplatGeometry(worker, vertexCount, maxSplats, this.onGeometryLoad)\n const mesh = new GaussianSplatMesh(geometry, this.materialConstructor(geometry) as any)\n // const mesh = new GaussianSplatMesh(geometry, new UnlitMaterial() as any)\n mesh.rotation.x = Math.PI\n if (!url.startsWith('blob:') && !url.startsWith('data:'))\n mesh.name = url.split('/').pop()!.split('?')[0]\n onLoad && onLoad(mesh)\n } catch (e) {\n if (onError) onError(e)\n else console.error(e)\n this.manager.itemError(url)\n }\n }, onProgress, onError)\n }\n\n public async loadAsync(url: string, onProgress?: (event: ProgressEvent) => void): Promise<GaussianSplatMesh> {\n return new Promise((resolve, reject) => this.load(url, resolve, onProgress, reject))\n }\n}\n","import {AViewerPluginSync, createStyles, IGeometryEvent, ILoader, Importer, ThreeViewer} from 'threepipe'\nimport styles from './ThreeGaussianSplatPlugin.css?inline'\nimport {GaussianSplatMesh} from './index'\nimport {AnyOptions} from 'ts-browser-helpers'\nimport {SplatLoader} from './loaders/SplatLoader'\nimport {SortWorkerManager} from './cpp-sorter/SortWorkerManager'\nimport {GaussianSplatGeometry} from './geometry/GaussianSplatGeometry'\n\nexport class ThreeGaussianSplatPlugin extends AViewerPluginSync<string> {\n public static readonly PluginType: string = 'ThreeGaussianSplatPlugin'\n enabled = true\n dependencies = []\n toJSON: any = null\n\n constructor() {\n super()\n }\n\n splats: GaussianSplatMesh[] = []\n private _ready = false\n onAdded(viewer: ThreeViewer) {\n super.onAdded(viewer)\n createStyles(styles)\n viewer.assetManager.importer.addImporter(this._importer)\n viewer.scene.addEventListener('mainCameraUpdate', this._activeCameraUpdate)\n viewer.scene.addEventListener('geometryUpdate', this._geometryUpdate)\n this._ready = true\n }\n\n onRemove(viewer: ThreeViewer) {\n viewer.assetManager.importer.removeImporter(this._importer)\n }\n\n private _activeCameraUpdate = () => {\n if (!this._ready || this.isDisabled()) return\n this.splats.forEach(async splat=>splat.update(this._viewer!.scene.mainCamera, this._viewer!.renderManager.webglRenderer))\n }\n\n private _geometryUpdate = (event: IGeometryEvent) => {\n if (!this._ready || this.isDisabled() || !(event.geometry as GaussianSplatGeometry)?.isGaussianSplatGeometry) return\n event.geometry!.appliedMeshes.forEach(async(splat: GaussianSplatMesh)=>splat.update ? splat.update(this._viewer!.scene.mainCamera, this._viewer!.renderManager.webglRenderer) : undefined)\n }\n\n private _sortWorkerManager = new SortWorkerManager() // todo: dispose?\n protected _importer = new Importer(class extends SplatLoader implements ILoader {\n onDispose: (mesh: GaussianSplatMesh)=>void = ()=>{return}\n onCreate: (mesh: GaussianSplatMesh)=>void = ()=>{return}\n transform(res: GaussianSplatMesh, _: AnyOptions): any {\n res.addEventListener('dispose', ()=>this.onDispose(res))\n this.onCreate(res)\n return res\n }\n }, ['splat'], [], true, (l)=>{\n if (!l) return l\n l.sortWorkerManager = this._sortWorkerManager\n l.onDispose = (mesh: GaussianSplatMesh)=>{ // todo: dispose should only remove from GPU?\n this.splats = this.splats.filter(splat=>splat !== mesh)\n }\n l.onCreate = (mesh: GaussianSplatMesh)=>{\n this.splats.push(mesh)\n }\n l.onGeometryLoad = (_)=>{\n // console.log('geometry loaded')\n // console.log(geometry.boundingBox)\n this._viewer?.setDirty()\n }\n return l\n })\n\n // protected _viewerListeners = {\n // preRender: (_: IViewerEvent) => {\n // },\n // }\n}\n","/**\n * ThreeGaussianSplatPlugin: Threejs utilities and threepipe plugin and material extension for Gaussian Splatting\n *\n * @license\n * A port of -\n * https://github.com/zappar-xr/three-gaussian-splat\n * MIT License (c) 2023 Zappar Limited\n * Which is based on -\n * gsplat.js, MIT License (c) 2023 Dylan Ebert\n * antimatter15/splat, MIT License (c) 2023 Kevin Kwok\n */\n\nexport {GaussianSplatMaterialExtension} from './materials/GaussianSplatMaterialExtension'\nexport {GaussianSplatMaterialPhysical} from './materials/GaussianSplatMaterialPhysical'\nexport {GaussianSplatMaterialRaw} from './materials/GaussianSplatMaterialRaw'\nexport {GaussianSplatMaterialUnlit} from './materials/GaussianSplatMaterialUnlit'\nexport {computeFocalLengths} from './materials/util'\nexport {GaussianSplatGeometry} from './geometry/GaussianSplatGeometry'\nexport {GaussianSplatMesh} from './mesh/GaussianSplatMesh'\nexport {ThreeGaussianSplatPlugin} from './ThreeGaussianSplatPlugin'\nexport {SplatLoader} from './loaders/SplatLoader'\nexport {gaussianSplatShaders} from './shaders'\n","import {ThreeGaussianSplatPlugin} from './three-gaussian-splat'\n\nexport class GaussianSplattingPlugin extends ThreeGaussianSplatPlugin {}\n\nexport * as threeGaussianSplat from './three-gaussian-splat'\n"],"names":["obj","returnValue","proxy","Sphere","Matrix4","Vector3","index"],"mappings":"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","x_google_ignoreList":[10]}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { AViewerPluginSync, Importer, ThreeViewer } from 'threepipe';
|
|
2
|
+
import { GaussianSplatMesh } from './index';
|
|
3
|
+
import { AnyOptions } from 'ts-browser-helpers';
|
|
4
|
+
import { SortWorkerManager } from './cpp-sorter/SortWorkerManager';
|
|
5
|
+
import { GaussianSplatGeometry } from './geometry/GaussianSplatGeometry';
|
|
6
|
+
export declare class ThreeGaussianSplatPlugin extends AViewerPluginSync<string> {
|
|
7
|
+
static readonly PluginType: string;
|
|
8
|
+
enabled: boolean;
|
|
9
|
+
dependencies: never[];
|
|
10
|
+
toJSON: any;
|
|
11
|
+
constructor();
|
|
12
|
+
splats: GaussianSplatMesh[];
|
|
13
|
+
private _ready;
|
|
14
|
+
onAdded(viewer: ThreeViewer): void;
|
|
15
|
+
onRemove(viewer: ThreeViewer): void;
|
|
16
|
+
private _activeCameraUpdate;
|
|
17
|
+
private _geometryUpdate;
|
|
18
|
+
private _sortWorkerManager;
|
|
19
|
+
protected _importer: Importer<{
|
|
20
|
+
onDispose: (mesh: GaussianSplatMesh) => void;
|
|
21
|
+
onCreate: (mesh: GaussianSplatMesh) => void;
|
|
22
|
+
transform(res: GaussianSplatMesh, _: AnyOptions): any;
|
|
23
|
+
sortWorkerManager: SortWorkerManager;
|
|
24
|
+
materialConstructor: (_: GaussianSplatGeometry) => import("threepipe").IMaterial<import("threepipe").IMaterialEvent<import("threepipe").IMaterialEventTypes>, import("threepipe").IMaterialEventTypes> | undefined;
|
|
25
|
+
onGeometryLoad: (_: GaussianSplatGeometry) => void;
|
|
26
|
+
load(url: string, onLoad?: ((data: GaussianSplatMesh) => void) | undefined, onProgress?: ((event: ProgressEvent<EventTarget>) => void) | undefined, onError?: ((event: ErrorEvent) => void) | undefined): void;
|
|
27
|
+
loadAsync(url: string, onProgress?: ((event: ProgressEvent<EventTarget>) => void) | undefined): Promise<GaussianSplatMesh>;
|
|
28
|
+
crossOrigin: string;
|
|
29
|
+
withCredentials: boolean;
|
|
30
|
+
path: string;
|
|
31
|
+
resourcePath: string;
|
|
32
|
+
manager: import("threepipe").LoadingManager;
|
|
33
|
+
requestHeader: {
|
|
34
|
+
[header: string]: string;
|
|
35
|
+
};
|
|
36
|
+
setCrossOrigin(crossOrigin: string): any;
|
|
37
|
+
setWithCredentials(value: boolean): any;
|
|
38
|
+
setPath(path: string): any;
|
|
39
|
+
setResourcePath(resourcePath: string): any;
|
|
40
|
+
setRequestHeader(requestHeader: {
|
|
41
|
+
[header: string]: string;
|
|
42
|
+
}): any;
|
|
43
|
+
}>;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=ThreeGaussianSplatPlugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThreeGaussianSplatPlugin.d.ts","sourceRoot":"","sources":["../../src/three-gaussian-splat/ThreeGaussianSplatPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,iBAAiB,EAAyC,QAAQ,EAAE,WAAW,EAAC,MAAM,WAAW,CAAA;AAEzG,OAAO,EAAC,iBAAiB,EAAC,MAAM,SAAS,CAAA;AACzC,OAAO,EAAC,UAAU,EAAC,MAAM,oBAAoB,CAAA;AAE7C,OAAO,EAAC,iBAAiB,EAAC,MAAM,gCAAgC,CAAA;AAChE,OAAO,EAAC,qBAAqB,EAAC,MAAM,kCAAkC,CAAA;AAEtE,qBAAa,wBAAyB,SAAQ,iBAAiB,CAAC,MAAM,CAAC;IACnE,gBAAuB,UAAU,EAAE,MAAM,CAA6B;IACtE,OAAO,UAAO;IACd,YAAY,UAAK;IACjB,MAAM,EAAE,GAAG,CAAO;;IAMlB,MAAM,EAAE,iBAAiB,EAAE,CAAK;IAChC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,MAAM,EAAE,WAAW;IAS3B,QAAQ,CAAC,MAAM,EAAE,WAAW;IAI5B,OAAO,CAAC,mBAAmB,CAG1B;IAED,OAAO,CAAC,eAAe,CAGtB;IAED,OAAO,CAAC,kBAAkB,CAA0B;IACpD,SAAS,CAAC,SAAS;0BACG,iBAAiB,KAAG,IAAI;yBACzB,iBAAiB,KAAG,IAAI;uBAC1B,iBAAiB,KAAK,UAAU,GAAG,GAAG;;;;;;;;;;;;;;;;;;;;;OAoBvD;CAML"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare class BufferPool {
|
|
2
|
+
private pool;
|
|
3
|
+
private bufferSize;
|
|
4
|
+
constructor(bufferSize: number, initialPoolSize?: number);
|
|
5
|
+
private initPool;
|
|
6
|
+
getBuffer(): ArrayBuffer;
|
|
7
|
+
returnBuffer(buffer: ArrayBuffer): void;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=BufferPool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BufferPool.d.ts","sourceRoot":"","sources":["../../../src/three-gaussian-splat/cpp-sorter/BufferPool.ts"],"names":[],"mappings":"AAAA,qBAAa,UAAU;IACrB,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,UAAU,CAAS;gBAEf,UAAU,EAAE,MAAM,EAAE,eAAe,GAAE,MAAU;IAM3D,OAAO,CAAC,QAAQ;IAMT,SAAS,IAAI,WAAW;IAQxB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;CAK/C"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Remote } from 'comlink';
|
|
2
|
+
import type { WasmSorter } from './worker';
|
|
3
|
+
export declare const SPLAT_ROW_LENGTH: number;
|
|
4
|
+
export declare class SortWorkerManager {
|
|
5
|
+
private _workers;
|
|
6
|
+
private _maxWorkers;
|
|
7
|
+
private _workerCtor;
|
|
8
|
+
onError: (e: any) => void;
|
|
9
|
+
constructor();
|
|
10
|
+
createWorker(data: Uint8Array, maxSplats?: number): Promise<Remote<WasmSorter>>;
|
|
11
|
+
disposeWorker(worker: Remote<WasmSorter>): Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=SortWorkerManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SortWorkerManager.d.ts","sourceRoot":"","sources":["../../../src/three-gaussian-splat/cpp-sorter/SortWorkerManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAiB,MAAM,SAAS,CAAA;AAC9C,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,UAAU,CAAA;AAExC,eAAO,MAAM,gBAAgB,QAAwB,CAAA;AASrD,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,QAAQ,CAA2B;IAC3C,OAAO,CAAC,WAAW,CAAI;IAEvB,OAAO,CAAC,WAAW,CAA2E;IAE9F,OAAO,MAAO,GAAG,UAKhB;;IAQK,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,SAAU;IAclD,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC;CAOjD"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/// <reference types="emscripten" />
|
|
2
|
+
import type { MainModule } from './ISort';
|
|
3
|
+
export declare class WasmSorter {
|
|
4
|
+
private _vertexCount;
|
|
5
|
+
private _globalBuffer;
|
|
6
|
+
module: EmscriptenModule & MainModule;
|
|
7
|
+
private _viewProjPtr;
|
|
8
|
+
private _globalBufferPtr;
|
|
9
|
+
private _combinedPtr;
|
|
10
|
+
private _bufferPool;
|
|
11
|
+
constructor(_vertexCount: number, _globalBuffer: Uint8Array);
|
|
12
|
+
load(): Promise<void>;
|
|
13
|
+
runSort(viewProj: Float32Array): ArrayBuffer;
|
|
14
|
+
returnBuffer(buffer: ArrayBuffer): void;
|
|
15
|
+
private _calculateCombinedLength;
|
|
16
|
+
dispose(): void;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=worker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../../src/three-gaussian-splat/cpp-sorter/worker.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,SAAS,CAAA;AAMvC,qBAAa,UAAU;IAOP,OAAO,CAAC,YAAY;IAAU,OAAO,CAAC,aAAa;IANxD,MAAM,EAAE,gBAAgB,GAAG,UAAU,CAAA;IAC5C,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,gBAAgB,CAAQ;IAChC,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,WAAW,CAAY;gBAEX,YAAY,EAAE,MAAM,EAAU,aAAa,EAAE,UAAU;IAM9D,IAAI;IAUV,OAAO,CAAC,QAAQ,EAAE,YAAY,GAAG,WAAW;IAW5C,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAI9C,OAAO,CAAC,wBAAwB;IAIzB,OAAO,IAAI,IAAI;CAOzB"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { WasmSorter } from '../cpp-sorter/worker';
|
|
2
|
+
import { Remote } from 'comlink';
|
|
3
|
+
import { Camera, IGeometry, InstancedBufferGeometry, type IObject3D, Matrix4, PerspectiveCamera } from 'threepipe';
|
|
4
|
+
export declare class GaussianSplatGeometry extends InstancedBufferGeometry implements IGeometry {
|
|
5
|
+
private _worker;
|
|
6
|
+
private _vertexCount;
|
|
7
|
+
private _maxSplats;
|
|
8
|
+
private _onLoad?;
|
|
9
|
+
constructor(_worker: Remote<WasmSorter>, _vertexCount: number, _maxSplats: number, _onLoad?: ((geometry: GaussianSplatGeometry) => void) | undefined);
|
|
10
|
+
readonly isGaussianSplatGeometry = true;
|
|
11
|
+
assetType: 'geometry';
|
|
12
|
+
setDirty: (this: IGeometry<import("three").NormalBufferAttributes>, options?: import("threepipe").IGeometrySetDirtyOptions | undefined) => void;
|
|
13
|
+
refreshUi: (this: IGeometry<import("three").NormalBufferAttributes>) => void;
|
|
14
|
+
appliedMeshes: Set<IObject3D<import("threepipe").IObject3DEvent<import("threepipe").IObject3DEventTypes>, import("threepipe").IObject3DEventTypes>>;
|
|
15
|
+
private _viewProj;
|
|
16
|
+
private _sortRunning;
|
|
17
|
+
private _initialized;
|
|
18
|
+
private _centersBuffer;
|
|
19
|
+
update(camera: PerspectiveCamera | Camera, meshMatrixWorld: Matrix4): Promise<void>;
|
|
20
|
+
initAttributes(): Promise<void>;
|
|
21
|
+
private _extractViews;
|
|
22
|
+
computeBoundingBox(): void;
|
|
23
|
+
computeBoundingSphere(): void;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=GaussianSplatGeometry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GaussianSplatGeometry.d.ts","sourceRoot":"","sources":["../../../src/three-gaussian-splat/geometry/GaussianSplatGeometry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAC,MAAM,EAAW,MAAM,SAAS,CAAA;AACxC,OAAO,EAGH,MAAM,EACN,SAAS,EAGT,uBAAuB,EACvB,KAAK,SAAS,EACd,OAAO,EACP,iBAAiB,EAGpB,MAAM,WAAW,CAAA;AAElB,qBAAa,qBAAsB,SAAQ,uBAAwB,YAAW,SAAS;IAE/E,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,OAAO,CAAC;gBAHR,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,EAC3B,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,cAAa,qBAAqB,KAAK,IAAI,aAAA;IAO/D,QAAQ,CAAC,uBAAuB,QAAO;IAEvC,SAAS,EAAE,UAAU,CAAA;IACrB,QAAQ,wIAA4B;IACpC,SAAS,oEAA6B;IACtC,aAAa,uIAAuB;IAEpC,OAAO,CAAC,SAAS,CAAe;IAChC,OAAO,CAAC,YAAY,CAAQ;IAE5B,OAAO,CAAC,YAAY,CAAQ;IAE5B,OAAO,CAAC,cAAc,CAAoC;IAE7C,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,EAAE,eAAe,EAAE,OAAO;IA6C1E,cAAc;IAsBpB,OAAO,CAAC,aAAa;IAqBrB,kBAAkB;IAWlB,qBAAqB;CAuCxB"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ThreeGaussianSplatPlugin: Threejs utilities and threepipe plugin and material extension for Gaussian Splatting
|
|
3
|
+
*
|
|
4
|
+
* @license
|
|
5
|
+
* A port of -
|
|
6
|
+
* https://github.com/zappar-xr/three-gaussian-splat
|
|
7
|
+
* MIT License (c) 2023 Zappar Limited
|
|
8
|
+
* Which is based on -
|
|
9
|
+
* gsplat.js, MIT License (c) 2023 Dylan Ebert
|
|
10
|
+
* antimatter15/splat, MIT License (c) 2023 Kevin Kwok
|
|
11
|
+
*/
|
|
12
|
+
export { GaussianSplatMaterialExtension } from './materials/GaussianSplatMaterialExtension';
|
|
13
|
+
export { GaussianSplatMaterialPhysical } from './materials/GaussianSplatMaterialPhysical';
|
|
14
|
+
export { GaussianSplatMaterialRaw } from './materials/GaussianSplatMaterialRaw';
|
|
15
|
+
export { GaussianSplatMaterialUnlit } from './materials/GaussianSplatMaterialUnlit';
|
|
16
|
+
export { computeFocalLengths } from './materials/util';
|
|
17
|
+
export { GaussianSplatGeometry } from './geometry/GaussianSplatGeometry';
|
|
18
|
+
export { GaussianSplatMesh } from './mesh/GaussianSplatMesh';
|
|
19
|
+
export { ThreeGaussianSplatPlugin } from './ThreeGaussianSplatPlugin';
|
|
20
|
+
export { SplatLoader } from './loaders/SplatLoader';
|
|
21
|
+
export { gaussianSplatShaders } from './shaders';
|
|
22
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/three-gaussian-splat/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAC,8BAA8B,EAAC,MAAM,4CAA4C,CAAA;AACzF,OAAO,EAAC,6BAA6B,EAAC,MAAM,2CAA2C,CAAA;AACvF,OAAO,EAAC,wBAAwB,EAAC,MAAM,sCAAsC,CAAA;AAC7E,OAAO,EAAC,0BAA0B,EAAC,MAAM,wCAAwC,CAAA;AACjF,OAAO,EAAC,mBAAmB,EAAC,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAC,qBAAqB,EAAC,MAAM,kCAAkC,CAAA;AACtE,OAAO,EAAC,iBAAiB,EAAC,MAAM,0BAA0B,CAAA;AAC1D,OAAO,EAAC,wBAAwB,EAAC,MAAM,4BAA4B,CAAA;AACnE,OAAO,EAAC,WAAW,EAAC,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAC,oBAAoB,EAAC,MAAM,WAAW,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ILoader, IMaterial, Loader, LoadingManager } from 'threepipe';
|
|
2
|
+
import { SortWorkerManager } from '../cpp-sorter/SortWorkerManager';
|
|
3
|
+
import { GaussianSplatGeometry } from '../geometry/GaussianSplatGeometry';
|
|
4
|
+
import { GaussianSplatMesh } from '../mesh/GaussianSplatMesh';
|
|
5
|
+
export declare class SplatLoader extends Loader implements ILoader {
|
|
6
|
+
sortWorkerManager: SortWorkerManager;
|
|
7
|
+
materialConstructor: (_: GaussianSplatGeometry) => IMaterial | undefined;
|
|
8
|
+
constructor(manager?: LoadingManager);
|
|
9
|
+
onGeometryLoad: (_: GaussianSplatGeometry) => void;
|
|
10
|
+
load(url: string, onLoad?: (data: GaussianSplatMesh) => void, onProgress?: (event: ProgressEvent) => void, onError?: (event: ErrorEvent) => void): void;
|
|
11
|
+
loadAsync(url: string, onProgress?: (event: ProgressEvent) => void): Promise<GaussianSplatMesh>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=SplatLoader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SplatLoader.d.ts","sourceRoot":"","sources":["../../../src/three-gaussian-splat/loaders/SplatLoader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAC,MAAM,WAAW,CAAA;AAChF,OAAO,EAAC,iBAAiB,EAAmB,MAAM,iCAAiC,CAAA;AACnF,OAAO,EAAC,qBAAqB,EAAC,MAAM,mCAAmC,CAAA;AACvE,OAAO,EAAC,iBAAiB,EAAC,MAAM,2BAA2B,CAAA;AAG3D,qBAAa,WAAY,SAAQ,MAAO,YAAW,OAAO;IACtD,iBAAiB,EAAE,iBAAiB,CAAA;IAEpC,mBAAmB,MAAO,qBAAqB,KAAG,SAAS,GAAC,SAAS,CAAoC;gBAE7F,OAAO,CAAC,EAAE,cAAc;IAIpC,cAAc,MAAO,qBAAqB,UAEzC;IAEM,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI;IA4BjJ,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAG/G"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Camera, IMaterial, MaterialExtension, PerspectiveCamera, Shader, Vector2, WebGLRenderer } from 'threepipe';
|
|
2
|
+
export declare class GaussianSplatMaterialExtension implements MaterialExtension {
|
|
3
|
+
readonly isGaussianSplatMaterialExtension = true;
|
|
4
|
+
extraUniforms: {
|
|
5
|
+
viewport: {
|
|
6
|
+
value: Vector2;
|
|
7
|
+
};
|
|
8
|
+
focal: {
|
|
9
|
+
value: Vector2;
|
|
10
|
+
};
|
|
11
|
+
minAlpha: {
|
|
12
|
+
value: number;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
parsFragmentSnippet: string;
|
|
16
|
+
parsVertexSnippet: string;
|
|
17
|
+
shaderExtender: (shader: Shader, material: IMaterial) => Shader;
|
|
18
|
+
isCompatible: (material: IMaterial) => boolean;
|
|
19
|
+
setDirty?: () => void;
|
|
20
|
+
private _currentCamera?;
|
|
21
|
+
private _renderer?;
|
|
22
|
+
set minAlpha(value: number);
|
|
23
|
+
constructor();
|
|
24
|
+
dispose(): void;
|
|
25
|
+
update(camera: PerspectiveCamera | Camera, renderer: WebGLRenderer): void;
|
|
26
|
+
private _refresh;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=GaussianSplatMaterialExtension.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GaussianSplatMaterialExtension.d.ts","sourceRoot":"","sources":["../../../src/three-gaussian-splat/materials/GaussianSplatMaterialExtension.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,MAAM,EACN,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,MAAM,EAEN,OAAO,EACP,aAAa,EAChB,MAAM,WAAW,CAAA;AAIlB,qBAAa,8BAA+B,YAAW,iBAAiB;IACpE,QAAQ,CAAC,gCAAgC,QAAO;IAChD,aAAa;;;;;;;;;;MAIZ;IACD,mBAAmB,SAAiC;IACpD,iBAAiB,SAAiC;IAClD,cAAc,WAAY,MAAM,YAAY,SAAS,YAgCpD;IACD,YAAY,aAAc,SAAS,aAIM;IAEzC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IAErB,OAAO,CAAC,cAAc,CAAC,CAA4B;IACnD,OAAO,CAAC,SAAS,CAAC,CAAe;IAEjC,IAAW,QAAQ,CAAC,KAAK,EAAE,MAAM,EAGhC;;IAOD,OAAO;IAKP,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAOzE,OAAO,CAAC,QAAQ,CAef;CACJ"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { PhysicalMaterial } from 'threepipe';
|
|
2
|
+
import { GaussianSplatMaterialExtension } from './GaussianSplatMaterialExtension';
|
|
3
|
+
export declare class GaussianSplatMaterialPhysical extends PhysicalMaterial {
|
|
4
|
+
readonly isGaussianSplatMaterialPhysical = true;
|
|
5
|
+
gsplatExtension: GaussianSplatMaterialExtension;
|
|
6
|
+
constructor();
|
|
7
|
+
dispose(): this;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=GaussianSplatMaterialPhysical.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GaussianSplatMaterialPhysical.d.ts","sourceRoot":"","sources":["../../../src/three-gaussian-splat/materials/GaussianSplatMaterialPhysical.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAC,MAAM,WAAW,CAAA;AAC1C,OAAO,EAAC,8BAA8B,EAAC,MAAM,kCAAkC,CAAA;AAE/E,qBAAa,6BAA8B,SAAQ,gBAAgB;IAC/D,QAAQ,CAAC,+BAA+B,QAAO;IAE/C,eAAe,iCAAuC;;IActD,OAAO;CAIV"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Camera, PerspectiveCamera, ShaderMaterial2, WebGLRenderer } from 'threepipe';
|
|
2
|
+
export declare class GaussianSplatMaterialRaw extends ShaderMaterial2 {
|
|
3
|
+
private _currentCamera?;
|
|
4
|
+
private _renderer?;
|
|
5
|
+
readonly isGaussianSplatMaterialRaw = true;
|
|
6
|
+
set minAlpha(value: number);
|
|
7
|
+
constructor();
|
|
8
|
+
private _refresh;
|
|
9
|
+
dispose(): this;
|
|
10
|
+
update(camera: PerspectiveCamera | Camera, renderer: WebGLRenderer): void;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=GaussianSplatMaterialRaw.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GaussianSplatMaterialRaw.d.ts","sourceRoot":"","sources":["../../../src/three-gaussian-splat/materials/GaussianSplatMaterialRaw.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAE,iBAAiB,EAAE,eAAe,EAAW,aAAa,EAAC,MAAM,WAAW,CAAA;AAI5F,qBAAa,wBAAyB,SAAQ,eAAe;IACzD,OAAO,CAAC,cAAc,CAAC,CAA4B;IACnD,OAAO,CAAC,SAAS,CAAC,CAAe;IAEjC,QAAQ,CAAC,0BAA0B,QAAO;IAE1C,IAAW,QAAQ,CAAC,KAAK,EAAE,MAAM,EAGhC;;IA0BD,OAAO,CAAC,QAAQ,CAoBf;IAED,OAAO;IAMP,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;CAK5E"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { UnlitMaterial } from 'threepipe';
|
|
2
|
+
import { GaussianSplatMaterialExtension } from './GaussianSplatMaterialExtension';
|
|
3
|
+
export declare class GaussianSplatMaterialUnlit extends UnlitMaterial {
|
|
4
|
+
readonly isGaussianSplatMaterialUnlit = true;
|
|
5
|
+
gsplatExtension: GaussianSplatMaterialExtension;
|
|
6
|
+
constructor();
|
|
7
|
+
dispose(): this;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=GaussianSplatMaterialUnlit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GaussianSplatMaterialUnlit.d.ts","sourceRoot":"","sources":["../../../src/three-gaussian-splat/materials/GaussianSplatMaterialUnlit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,WAAW,CAAA;AAEvC,OAAO,EAAC,8BAA8B,EAAC,MAAM,kCAAkC,CAAA;AAE/E,qBAAa,0BAA2B,SAAQ,aAAa;IACzD,QAAQ,CAAC,4BAA4B,QAAO;IAC5C,eAAe,iCAAuC;;IActD,OAAO;CAIV"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../src/three-gaussian-splat/materials/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,OAAO,EAAC,MAAM,WAAW,CAAA;AAE5C,eAAO,MAAM,mBAAmB,UAAW,MAAM,UAAU,MAAM,OAAO,MAAM,UAAU,MAAM,OAAO,MAAM,YAM1G,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { GaussianSplatGeometry } from '../geometry/GaussianSplatGeometry';
|
|
2
|
+
import { Camera, IMaterial, Mesh2, PerspectiveCamera, WebGLRenderer } from 'threepipe';
|
|
3
|
+
import { Raycaster } from 'three';
|
|
4
|
+
export declare class GaussianSplatMesh extends Mesh2<GaussianSplatGeometry, IMaterial> {
|
|
5
|
+
readonly isGaussianSplatMesh = true;
|
|
6
|
+
constructor(geometry: GaussianSplatGeometry, material: IMaterial);
|
|
7
|
+
update(camera: PerspectiveCamera | Camera, renderer: WebGLRenderer): Promise<void>;
|
|
8
|
+
raycast(raycaster: Raycaster, intersects: any[]): void;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=GaussianSplatMesh.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GaussianSplatMesh.d.ts","sourceRoot":"","sources":["../../../src/three-gaussian-splat/mesh/GaussianSplatMesh.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,qBAAqB,EAAC,MAAM,mCAAmC,CAAA;AACvE,OAAO,EAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAC,MAAM,WAAW,CAAA;AAGpF,OAAO,EAAe,SAAS,EAAkB,MAAM,OAAO,CAAA;AAG9D,qBAAa,iBAAkB,SAAQ,KAAK,CAAC,qBAAqB,EAAE,SAAS,CAAC;IAC1E,QAAQ,CAAC,mBAAmB,QAAO;gBAEvB,QAAQ,EAAE,qBAAqB,EAAE,QAAQ,EAAE,SAAS;IAKnD,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,EAAE,QAAQ,EAAE,aAAa;IAc/E,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE;CAkElD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/three-gaussian-splat/shaders/index.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,oBAAoB;;;;;CAKhC,CAAA"}
|
package/package.json
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@threepipe/plugin-gaussian-splatting",
|
|
3
|
+
"description": "Gaussian Splatting for Threepipe",
|
|
4
|
+
"version": "0.1.0",
|
|
5
|
+
"dependencies": {
|
|
6
|
+
"threepipe": "^0.0.23"
|
|
7
|
+
},
|
|
8
|
+
"type": "module",
|
|
9
|
+
"main": "dist/index.js",
|
|
10
|
+
"module": "dist/index.mjs",
|
|
11
|
+
"types": "dist/index.d.ts",
|
|
12
|
+
"files": [
|
|
13
|
+
"dist",
|
|
14
|
+
"src"
|
|
15
|
+
],
|
|
16
|
+
"author": "repalash <palash@shaders.app>",
|
|
17
|
+
"license": "Apache-2.0",
|
|
18
|
+
"keywords": [
|
|
19
|
+
"three",
|
|
20
|
+
"three.js",
|
|
21
|
+
"threepipe",
|
|
22
|
+
"gaussian-splatting",
|
|
23
|
+
"ml",
|
|
24
|
+
"ai"
|
|
25
|
+
],
|
|
26
|
+
"bugs": {
|
|
27
|
+
"url": "https://github.com/repalash/threepipe/issues"
|
|
28
|
+
},
|
|
29
|
+
"homepage": "https://github.com/repalash/threepipe#readme",
|
|
30
|
+
"repository": {
|
|
31
|
+
"type": "git",
|
|
32
|
+
"url": "git://github.com/repalash/threepipe.git"
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// import {AViewerPluginSync, createStyles, IViewerEvent, ThreeViewer} from 'threepipe'
|
|
2
|
+
// import styles from './SamplePlugin.css'
|
|
3
|
+
// import * as GaussianSplats3D from '@mkkellogg/gaussian-splats-3d'
|
|
4
|
+
//
|
|
5
|
+
// // import * as GaussianSplats3D from 'gle-gs3d'
|
|
6
|
+
//
|
|
7
|
+
// export class GaussianSplatsPlugin extends AViewerPluginSync<string> {
|
|
8
|
+
// public static readonly PluginType: string = 'GaussianSplatsPlugin'
|
|
9
|
+
// enabled = true
|
|
10
|
+
// dependencies = []
|
|
11
|
+
// toJSON: any = null
|
|
12
|
+
//
|
|
13
|
+
// constructor() {
|
|
14
|
+
// super()
|
|
15
|
+
// }
|
|
16
|
+
//
|
|
17
|
+
// splats: any
|
|
18
|
+
// private _ready = false
|
|
19
|
+
// onAdded(viewer: ThreeViewer) {
|
|
20
|
+
// super.onAdded(viewer)
|
|
21
|
+
// createStyles(styles)
|
|
22
|
+
// this.splats = new GaussianSplats3D.Viewer({
|
|
23
|
+
// 'selfDrivenMode': false,
|
|
24
|
+
// 'renderer': viewer.renderManager.webglRenderer,
|
|
25
|
+
// 'camera': viewer.scene.mainCamera,
|
|
26
|
+
// 'useBuiltInControls': false,
|
|
27
|
+
// // 'ignoreDevicePixelRatio': false,
|
|
28
|
+
// // 'gpuAcceleratedSort': true,
|
|
29
|
+
// // 'halfPrecisionCovariancesOnGPU': true,
|
|
30
|
+
// 'sharedMemoryForWorkers': false,
|
|
31
|
+
// // 'integerBasedSort': false,
|
|
32
|
+
// // 'dynamicScene': false,
|
|
33
|
+
// // 'webXRMode': GaussianSplats3D.WebXRMode.None,
|
|
34
|
+
// })
|
|
35
|
+
// this.splats.init()
|
|
36
|
+
// // this.splats.loadFile('https://generic-cors-proxy.repalash.workers.dev/https://zappar-xr.github.io/three-gaussian-splat-example/bonsai.5148b146.splat').then(()=>{
|
|
37
|
+
// this.splats.addSplatScene('https://generic-cors-proxy.repalash.workers.dev/https://projects.markkellogg.org/threejs/assets/data/garden/garden_high.ksplat').then(()=>{
|
|
38
|
+
// this._ready = true
|
|
39
|
+
// })
|
|
40
|
+
// }
|
|
41
|
+
//
|
|
42
|
+
// protected _viewerListeners = {
|
|
43
|
+
// postFrame: (_: IViewerEvent) => {
|
|
44
|
+
// if (!this._ready) return
|
|
45
|
+
// console.log('postframe')
|
|
46
|
+
// this.splats.update()
|
|
47
|
+
// this.splats.render()
|
|
48
|
+
// },
|
|
49
|
+
// }
|
|
50
|
+
// }
|
package/src/global.d.ts
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
declare module '*.txt' {
|
|
2
|
+
const content: string
|
|
3
|
+
export default content
|
|
4
|
+
}
|
|
5
|
+
declare module '*.glsl' {
|
|
6
|
+
const content: string
|
|
7
|
+
export default content
|
|
8
|
+
}
|
|
9
|
+
declare module '*.vert' {
|
|
10
|
+
const content: string
|
|
11
|
+
export default content
|
|
12
|
+
}
|
|
13
|
+
declare module '*.frag' {
|
|
14
|
+
const content: string
|
|
15
|
+
export default content
|
|
16
|
+
}
|
|
17
|
+
declare module '*.module.scss' {
|
|
18
|
+
const content: any
|
|
19
|
+
export default content
|
|
20
|
+
export const stylesheet: string
|
|
21
|
+
}
|
|
22
|
+
declare module '*.module.css' {
|
|
23
|
+
const content: any
|
|
24
|
+
export default content
|
|
25
|
+
export const stylesheet: string
|
|
26
|
+
}
|
|
27
|
+
declare module '*.css' {
|
|
28
|
+
const content: string
|
|
29
|
+
export default content
|
|
30
|
+
}
|
|
31
|
+
declare module '*.css?inline' { // for vite
|
|
32
|
+
const content: string
|
|
33
|
+
export default content
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// export {}
|
|
37
|
+
|
|
38
|
+
// hack for typedoc
|
|
39
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
40
|
+
// declare type OffscreenCanvas = HTMLCanvasElement
|
package/src/index.ts
ADDED