From b203bb23c89776e702faa3fea9e70eba34f2b435 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Thu, 20 Nov 2025 16:47:38 -0500 Subject: [PATCH] threejs upgrade, remove MMD support --- .../Engines/CharacterAnimationEngine.ts | 14 +- .../app/src/pages/PageEnigma/Editor/scene.ts | 45 +- .../pages/PageEnigma/clips/animation_clip.ts | 166 ++--- frontend/apps/editor3d/package.json | 2 +- frontend/package-lock.json | 616 +++++++++++++++++- frontend/package.json | 2 +- frontend/vendor/spark/package.json | 4 +- 7 files changed, 726 insertions(+), 123 deletions(-) diff --git a/frontend/apps/editor3d/app/src/pages/PageEnigma/Editor/Engines/CharacterAnimationEngine.ts b/frontend/apps/editor3d/app/src/pages/PageEnigma/Editor/Engines/CharacterAnimationEngine.ts index 83015964ad..8c40120c03 100644 --- a/frontend/apps/editor3d/app/src/pages/PageEnigma/Editor/Engines/CharacterAnimationEngine.ts +++ b/frontend/apps/editor3d/app/src/pages/PageEnigma/Editor/Engines/CharacterAnimationEngine.ts @@ -3,7 +3,8 @@ import { Retarget } from "../retargeting"; import { FBXLoader } from "three/examples/jsm/loaders/FBXLoader.js"; import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader.js"; import { get_media_url } from "~/Classes/ApiHelpers"; -import { MMDLoader } from "three/examples/jsm/loaders/MMDLoader.js"; +// Three.js dropped support for MMD +//import { MMDLoader } from "three/examples/jsm/loaders/MMDLoader.js"; import { ClipUI } from "../../clips/clip_ui"; import Ijson from "~/interfaces/Ijson"; @@ -243,11 +244,12 @@ export class CharacterAnimationEngine implements Ijson { resolve(animationClip_1); }); } else if (url.includes(".vmd")) { - const mmdLoader = new MMDLoader(); - mmdLoader.loadAnimation(url, character as THREE.SkinnedMesh, (mmd) => { - mmd.name = url; - resolve(mmd as THREE.AnimationClip); - }); + // Three.js dropped support for MMD + //const mmdLoader = new MMDLoader(); + //mmdLoader.loadAnimation(url, character as THREE.SkinnedMesh, (mmd) => { + // mmd.name = url; + // resolve(mmd as THREE.AnimationClip); + //}); } }); } diff --git a/frontend/apps/editor3d/app/src/pages/PageEnigma/Editor/scene.ts b/frontend/apps/editor3d/app/src/pages/PageEnigma/Editor/scene.ts index 4465ae0fab..775e7f9a6d 100644 --- a/frontend/apps/editor3d/app/src/pages/PageEnigma/Editor/scene.ts +++ b/frontend/apps/editor3d/app/src/pages/PageEnigma/Editor/scene.ts @@ -1,11 +1,12 @@ import * as THREE from "three"; import { GLTFLoader, GLTF } from "three/addons/loaders/GLTFLoader.js"; -import { MMDLoader } from "three/addons/loaders/MMDLoader.js"; +//import { MMDLoader } from "three/addons/loaders/MMDLoader.js"; import { Font } from "three/examples/jsm/loaders/FontLoader.js"; import { generateUUID } from "three/src/math/MathUtils.js"; import { LoadingPlaceHolderManager } from "./placeholder_manager"; -import { MMDAnimationHelper, Water } from "three/examples/jsm/Addons.js"; +//import { MMDAnimationHelper, Water } from "three/examples/jsm/Addons.js"; +import { Water } from "three/examples/jsm/Addons.js"; import { MediaFileType } from "../enums"; import { ChromaKeyMaterial } from "./chromakey"; import { TimeLine } from "./timeline"; @@ -44,7 +45,8 @@ class Scene { mediaFilesApi: MediaFilesApi; updateSurfaceIdAttributeToMesh: Function; - helper: MMDAnimationHelper; + //helper: MMDAnimationHelper; + helper: undefined | null; ambientLight: THREE.AmbientLight | undefined; hemisphereLight: THREE.HemisphereLight | undefined; directional_light: THREE.DirectionalLight | undefined; @@ -91,7 +93,8 @@ class Scene { this._create_skybox(); // this._create_camera_obj(); - this.helper = new MMDAnimationHelper({ afterglow: 0.0 }); + this.helper = null; + //this.helper = new MMDAnimationHelper({ afterglow: 0.0 }); this.scene.userData["helper"] = this.helper; // Subscribe to grid visibility changes @@ -861,24 +864,24 @@ class Scene { await this.delay_mmd(500); return new Promise((resolve, reject) => { - const mmdLoader = new MMDLoader(); - mmdLoader.loadWithAnimation( - media_url, - ["/resources/pose/Lumine Idle cycle.vmd"], - (mmd) => { - this.helper.add(mmd.mesh, { - animation: mmd.animation, - physics: false, - }); + //const mmdLoader = new MMDLoader(); + //mmdLoader.loadWithAnimation( + // media_url, + // ["/resources/pose/Lumine Idle cycle.vmd"], + // (mmd) => { + // this.helper.add(mmd.mesh, { + // animation: mmd.animation, + // physics: false, + // }); - mmd.mesh.scale.set(0.1, 0.1, 0.1); - resolve(mmd.mesh); - }, - progress, - (error) => { - reject(error); - }, - ); + // mmd.mesh.scale.set(0.1, 0.1, 0.1); + // resolve(mmd.mesh); + // }, + // progress, + // (error) => { + // reject(error); + // }, + //); }); } diff --git a/frontend/apps/editor3d/app/src/pages/PageEnigma/clips/animation_clip.ts b/frontend/apps/editor3d/app/src/pages/PageEnigma/clips/animation_clip.ts index bc15cdbc92..0ce8cc85c0 100644 --- a/frontend/apps/editor3d/app/src/pages/PageEnigma/clips/animation_clip.ts +++ b/frontend/apps/editor3d/app/src/pages/PageEnigma/clips/animation_clip.ts @@ -2,10 +2,10 @@ import * as THREE from "three"; import { GLTFLoader } from "three/addons/loaders/GLTFLoader.js"; import { FBXLoader, - MMDAnimationHelper, - MMDAnimationHelperMixer, + //MMDAnimationHelper, + //MMDAnimationHelperMixer, } from "three/examples/jsm/Addons.js"; -import { MMDLoader } from "three/addons/loaders/MMDLoader.js"; +//import { MMDLoader } from "three/addons/loaders/MMDLoader.js"; import { MoveAIResult, Retarget } from "../Editor/retargeting"; import IAnimationClip from "./ClipInterfaces/IAnimationClip"; @@ -32,8 +32,10 @@ export class AnimationClip implements IAnimationClip { private isMMD: boolean = false; - private obj: MMDAnimationHelperMixer | undefined; - private helper: MMDAnimationHelper | undefined; + //private obj: MMDAnimationHelperMixer | undefined; + //private helper: MMDAnimationHelper | undefined; + private obj: null | undefined; + private helper: null | undefined; private mmd_anim_clip: THREE.AnimationClip | undefined; private pose: Object | undefined; private processingClip: boolean = false; @@ -119,19 +121,19 @@ export class AnimationClip implements IAnimationClip { resolve(animationClip); }); } else if (url.includes(".vmd")) { - console.log("VMD Loader"); - const root = this.mixer?.getRoot(); - this.isMMD = true; - if (root) { - const mmdLoader = new MMDLoader(); - this.mmd_url = url; - mmdLoader.loadAnimation(url, root as THREE.SkinnedMesh, (mmd) => { - mmd.name = this.mmd_url; - resolve(mmd as THREE.AnimationClip); - }); - console.log("Loaded"); - } - console.log("Dont"); + //console.log("VMD Loader"); + //const root = this.mixer?.getRoot(); + //this.isMMD = true; + //if (root) { + // const mmdLoader = new MMDLoader(); + // this.mmd_url = url; + // mmdLoader.loadAnimation(url, root as THREE.SkinnedMesh, (mmd) => { + // mmd.name = this.mmd_url; + // resolve(mmd as THREE.AnimationClip); + // }); + // console.log("Loaded"); + //} + //console.log("Dont"); } }); }); @@ -231,12 +233,12 @@ export class AnimationClip implements IAnimationClip { } private async load_vpd_wrapped(): Promise { - return new Promise((resolve) => { - const poseLoader = new MMDLoader(); - poseLoader.loadVPD("/resources/pose/7.vpd", false, (vpd) => { - resolve(vpd); - }); // End of loadVPD call - }); // End of new Promise + //return new Promise((resolve) => { + // const poseLoader = new MMDLoader(); + // poseLoader.loadVPD("/resources/pose/7.vpd", false, (vpd) => { + // resolve(vpd); + // }); // End of loadVPD call + //}); // End of new Promise } async animate(deltatime: number) { @@ -246,72 +248,72 @@ export class AnimationClip implements IAnimationClip { this.update_bones(); // Next - if (this.isMMD && this.mixer) { - if (this.obj === undefined) { - // Sets the ik helper and object for IK and animation. - this.helper = (this.mixer.getRoot() as THREE.Object3D).parent?.userData[ - "helper" - ]; - } + //if (this.isMMD && this.mixer) { + // if (this.obj === undefined) { + // // Sets the ik helper and object for IK and animation. + // this.helper = (this.mixer.getRoot() as THREE.Object3D).parent?.userData[ + // "helper" + // ]; + // } - this.obj = this.helper?.objects.get( - this.mixer?.getRoot() as THREE.SkinnedMesh, - ); + // this.obj = this.helper?.objects.get( + // this.mixer?.getRoot() as THREE.SkinnedMesh, + // ); - const mesh = this.mixer?.getRoot() as THREE.SkinnedMesh; + // const mesh = this.mixer?.getRoot() as THREE.SkinnedMesh; - if (this.helper) { - this.helper._restoreBones(mesh); // Privateish js function for resetting bones. - this.obj?.mixer?.setTime(deltatime); // Sets the time. - this.helper._saveBones(mesh); // Saves the bones location for restoration later. + // if (this.helper) { + // this.helper._restoreBones(mesh); // Privateish js function for resetting bones. + // this.obj?.mixer?.setTime(deltatime); // Sets the time. + // this.helper._saveBones(mesh); // Saves the bones location for restoration later. - mesh.updateMatrixWorld(true); // Updates mesh. - this.obj?.ikSolver.update(); // Updates IK Solver. - this.obj?.grantSolver.update(); // Updates Grant which moves the bones. - } + // mesh.updateMatrixWorld(true); // Updates mesh. + // this.obj?.ikSolver.update(); // Updates IK Solver. + // this.obj?.grantSolver.update(); // Updates Grant which moves the bones. + // } - // Changing of animation. - if ( - this.obj && - this.helper && - this.processingClip === false && - this.obj.mixer && - this.mixer._actions[0]._clip.name !== - this.obj.mixer._actions[0]._clip.name && - this.mixer !== undefined - ) { - // On animation change. - this.processingClip = true; + // // Changing of animation. + // if ( + // this.obj && + // this.helper && + // this.processingClip === false && + // this.obj.mixer && + // this.mixer._actions[0]._clip.name !== + // this.obj.mixer._actions[0]._clip.name && + // this.mixer !== undefined + // ) { + // // On animation change. + // this.processingClip = true; - const helper_mmd = this.helper.objects.get(mesh); - if (helper_mmd?.mixer !== undefined) { - const clips = helper_mmd.mixer._actions; - clips.forEach((clip) => { - this.helper?.objects.delete(clip._clip); - }); - } + // const helper_mmd = this.helper.objects.get(mesh); + // if (helper_mmd?.mixer !== undefined) { + // const clips = helper_mmd.mixer._actions; + // clips.forEach((clip) => { + // this.helper?.objects.delete(clip._clip); + // }); + // } - this.helper.remove(mesh); - mesh.pose(); + // this.helper.remove(mesh); + // mesh.pose(); - const loader = new MMDLoader(); - loader.loadAnimation(this.mmd_url, mesh, (mmd) => { - mmd.name = this.mmd_url; - this.helper?.add(mesh, { - animation: mmd, - physics: false, - }); - this.processingClip = false; - if (helper_mmd?.mixer !== undefined) { - const clips = helper_mmd.mixer._actions; - clips.forEach((clip) => { - this.helper?.objects.delete(clip._clip); - }); - } - this.obj.mixer = this.mixer; - }); - } - } + // //const loader = new MMDLoader(); + // //loader.loadAnimation(this.mmd_url, mesh, (mmd) => { + // // mmd.name = this.mmd_url; + // // this.helper?.add(mesh, { + // // animation: mmd, + // // physics: false, + // // }); + // // this.processingClip = false; + // // if (helper_mmd?.mixer !== undefined) { + // // const clips = helper_mmd.mixer._actions; + // // clips.forEach((clip) => { + // // this.helper?.objects.delete(clip._clip); + // // }); + // // } + // // this.obj.mixer = this.mixer; + // //}); + // } + //} } async step(deltatime: number, isPlaying: boolean, frame: number) { diff --git a/frontend/apps/editor3d/package.json b/frontend/apps/editor3d/package.json index 43d8fb17bd..4142cac4ca 100644 --- a/frontend/apps/editor3d/package.json +++ b/frontend/apps/editor3d/package.json @@ -73,7 +73,7 @@ "react-virtualized": "^9.22.6", "tailwind-merge": "^2.2.2", "terser": "^5.30.3", - "three": "^0.162.0", + "three": "^0.178.0", "uuid": "^9.0.1", "wavesurfer.js": "^7.7.11", "webm-writer": "^1.0.0" diff --git a/frontend/package-lock.json b/frontend/package-lock.json index bb4effffbe..79163ca057 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -46,7 +46,7 @@ "react-router-dom": "6.29.0", "react-spring": "^10.0.1", "tailwind-merge": "^2.2.2", - "three": "^0.162.0", + "three": "^0.178.0", "uuid": "^9.0.1", "zustand": "^5.0.5" }, @@ -218,7 +218,7 @@ "react-virtualized": "^9.22.6", "tailwind-merge": "^2.2.2", "terser": "^5.30.3", - "three": "^0.162.0", + "three": "^0.178.0", "uuid": "^9.0.1", "wavesurfer.js": "^7.7.11", "webm-writer": "^1.0.0" @@ -3472,6 +3472,215 @@ "node": ">=6.9.0" } }, + "node_modules/@biomejs/biome": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-1.9.4.tgz", + "integrity": "sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==", + "dev": true, + "hasInstallScript": true, + "license": "MIT OR Apache-2.0", + "bin": { + "biome": "bin/biome" + }, + "engines": { + "node": ">=14.21.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/biome" + }, + "optionalDependencies": { + "@biomejs/cli-darwin-arm64": "1.9.4", + "@biomejs/cli-darwin-x64": "1.9.4", + "@biomejs/cli-linux-arm64": "1.9.4", + "@biomejs/cli-linux-arm64-musl": "1.9.4", + "@biomejs/cli-linux-x64": "1.9.4", + "@biomejs/cli-linux-x64-musl": "1.9.4", + "@biomejs/cli-win32-arm64": "1.9.4", + "@biomejs/cli-win32-x64": "1.9.4" + } + }, + "node_modules/@biomejs/cli-darwin-arm64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-1.9.4.tgz", + "integrity": "sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-darwin-x64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-1.9.4.tgz", + "integrity": "sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-arm64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-1.9.4.tgz", + "integrity": "sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-arm64-musl": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.9.4.tgz", + "integrity": "sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-x64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-1.9.4.tgz", + "integrity": "sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-x64-musl": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-1.9.4.tgz", + "integrity": "sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-win32-arm64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-1.9.4.tgz", + "integrity": "sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-win32-x64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-1.9.4.tgz", + "integrity": "sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@blakeembrey/deque": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@blakeembrey/deque/-/deque-1.0.5.tgz", + "integrity": "sha512-6xnwtvp9DY1EINIKdTfvfeAtCYw4OqBZJhtiqkT3ivjnEfa25VQ3TsKvaFfKm8MyGIEfE95qLe+bNEt3nB0Ylg==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@blakeembrey/template": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@blakeembrey/template/-/template-1.2.0.tgz", + "integrity": "sha512-w/63nURdkRPpg3AXbNr7lPv6HgOuVDyefTumiXsbXxtIwcuk5EXayWR5OpSwDjsQPgaYsfUSedMduaNOjAYY8A==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@dimforge/rapier3d-compat": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@dimforge/rapier3d-compat/-/rapier3d-compat-0.12.0.tgz", + "integrity": "sha512-uekIGetywIgopfD97oDL5PfeezkFpNhwlzlaEYNOA0N6ghdsOvh/HYjSMek5Q2O1PYvRSDFcqFVJl4r4ZBwOow==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/@dnd-kit/accessibility": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@dnd-kit/accessibility/-/accessibility-3.1.1.tgz", @@ -10200,6 +10409,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -10216,6 +10426,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -10232,6 +10443,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -10248,6 +10460,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -10264,6 +10477,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -10280,6 +10494,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -10296,6 +10511,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -10312,6 +10528,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -10328,6 +10545,7 @@ "cpu": [ "ia32" ], + "dev": true, "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -10344,6 +10562,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -10627,6 +10846,34 @@ "node": ">=10.13.0" } }, + "node_modules/@tsconfig/node10": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz", + "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, + "license": "MIT" + }, "node_modules/@tweenjs/tween.js": { "version": "18.6.4", "resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-18.6.4.tgz", @@ -13327,6 +13574,13 @@ "@xtuc/long": "4.2.2" } }, + "node_modules/@webgpu/types": { + "version": "0.1.66", + "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.66.tgz", + "integrity": "sha512-YA2hLrwLpDsRueNDXIMqN9NTzD6bCDkuXbOSe0heS+f8YE8usA6Gbv1prj81pzVHrbaAma7zObnIC+I6/sXJgA==", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -13480,6 +13734,19 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/address": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", @@ -15487,6 +15754,13 @@ } } }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true, + "license": "MIT" + }, "node_modules/cron-parser": { "version": "4.9.0", "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-4.9.0.tgz", @@ -18261,7 +18535,6 @@ "version": "0.8.2", "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", - "dev": true, "license": "MIT" }, "node_modules/figures": { @@ -21127,6 +21400,169 @@ "node": ">=0.10" } }, + "node_modules/lefthook": { + "version": "1.11.12", + "resolved": "https://registry.npmjs.org/lefthook/-/lefthook-1.11.12.tgz", + "integrity": "sha512-refh8mlcNtwJfmHDH+2mN1KTIVjp1EHlrjzOjfH/hJ4vFQByH2+1KfFDlJLX9V16VESwUNyOGkEZ9cJEF6zNgg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "lefthook": "bin/index.js" + }, + "optionalDependencies": { + "lefthook-darwin-arm64": "1.11.12", + "lefthook-darwin-x64": "1.11.12", + "lefthook-freebsd-arm64": "1.11.12", + "lefthook-freebsd-x64": "1.11.12", + "lefthook-linux-arm64": "1.11.12", + "lefthook-linux-x64": "1.11.12", + "lefthook-openbsd-arm64": "1.11.12", + "lefthook-openbsd-x64": "1.11.12", + "lefthook-windows-arm64": "1.11.12", + "lefthook-windows-x64": "1.11.12" + } + }, + "node_modules/lefthook-darwin-arm64": { + "version": "1.11.12", + "resolved": "https://registry.npmjs.org/lefthook-darwin-arm64/-/lefthook-darwin-arm64-1.11.12.tgz", + "integrity": "sha512-nB3rZVGoign6lhlbdfT1/knk4fV4Kx7kgbho8oSFcpw/o2qRQpLqmclCWUTtf+Pyj4vCzE7hiee/m+uQtvu19w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/lefthook-darwin-x64": { + "version": "1.11.12", + "resolved": "https://registry.npmjs.org/lefthook-darwin-x64/-/lefthook-darwin-x64-1.11.12.tgz", + "integrity": "sha512-ExNz8ctFRRaVz2wpvjmOtV4GeZcRdsAZwnZbmvlu1fMcJ6WtjAuR6fB0ybtcsc03/zBNrfShiq+VtZLkGv8Oeg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/lefthook-freebsd-arm64": { + "version": "1.11.12", + "resolved": "https://registry.npmjs.org/lefthook-freebsd-arm64/-/lefthook-freebsd-arm64-1.11.12.tgz", + "integrity": "sha512-3Si6YJ8YLEMJ6TGsaBI2ni64XSrJX69N4gX7OKQp85IXeizPUEy7oorYAJCUaw5nMffRbIkzxNTjaMkcn4iwag==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/lefthook-freebsd-x64": { + "version": "1.11.12", + "resolved": "https://registry.npmjs.org/lefthook-freebsd-x64/-/lefthook-freebsd-x64-1.11.12.tgz", + "integrity": "sha512-J18MNYZKkVdHJ5K54MT8kxJ/W4TBUxD8aCi4e+Oliw8UXAiwaJSTGPkdY5P8aUlVYDknN2w+6I99Dxre6CJRFw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/lefthook-linux-arm64": { + "version": "1.11.12", + "resolved": "https://registry.npmjs.org/lefthook-linux-arm64/-/lefthook-linux-arm64-1.11.12.tgz", + "integrity": "sha512-oIWcj7mcHnFB4tcfz4dsZTnDTXIyF7cjCEqhDQTvqJQLbE1XRfjU0RzQdgSKrzdmXIcUFB+lmcgeRwJnKBEJ8Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/lefthook-linux-x64": { + "version": "1.11.12", + "resolved": "https://registry.npmjs.org/lefthook-linux-x64/-/lefthook-linux-x64-1.11.12.tgz", + "integrity": "sha512-sr9X5dW5dl9Fa3Kdk3x66DPGgCz/rykm+JHIyQGfnuvZnaeqkEaXgNubBaVGBbOimagXgtA5DwXc6D6fzUYALA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/lefthook-openbsd-arm64": { + "version": "1.11.12", + "resolved": "https://registry.npmjs.org/lefthook-openbsd-arm64/-/lefthook-openbsd-arm64-1.11.12.tgz", + "integrity": "sha512-4TuX8c/lwky1DSNIY6knIFlMIHQZrVBxh6O5vSTjOAjKv5YmIkNgeUlwcBD+SMru9tQBj7MvOpJSkVkaLK5hhQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/lefthook-openbsd-x64": { + "version": "1.11.12", + "resolved": "https://registry.npmjs.org/lefthook-openbsd-x64/-/lefthook-openbsd-x64-1.11.12.tgz", + "integrity": "sha512-Y/rPvyXtsIH+pxACfLHwxqc2Ahk+aExj8Izce3zXp75Wki5DH+6TXm5tWj5CgIuefL7CMqNFsOZCjEe1+SyM+w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/lefthook-windows-arm64": { + "version": "1.11.12", + "resolved": "https://registry.npmjs.org/lefthook-windows-arm64/-/lefthook-windows-arm64-1.11.12.tgz", + "integrity": "sha512-OJaElGktzsMrkmIpXBqwlc+eZx5kwxx+tJFByTXiW/rb8ttBwj0ueVyfo3lw/PqqlbMy73qc9Uj3CHYkaKsDKw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/lefthook-windows-x64": { + "version": "1.11.12", + "resolved": "https://registry.npmjs.org/lefthook-windows-x64/-/lefthook-windows-x64-1.11.12.tgz", + "integrity": "sha512-ZhKsisibIcaG+rv9i7UJUgnuejI6mfaS5T3FreqsWt5vAsEIvLLNmZUA15MHPr99n+L4La1YQ2jTqie1kH57dA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -21179,6 +21615,13 @@ "license": "MIT", "peer": true }, + "node_modules/lil-gui": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/lil-gui/-/lil-gui-0.20.0.tgz", + "integrity": "sha512-k7Ipr0ztqslMA2XvM5z5ZaWhxQtnEOwJBfI/hmSuRh6q4iMG9L0boqqrnZSzBR1jzyJ28OMl47l65ILzRe1TdA==", + "dev": true, + "license": "MIT" + }, "node_modules/lilconfig": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", @@ -24375,6 +24818,32 @@ "wrappy": "1" } }, + "node_modules/onchange": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/onchange/-/onchange-7.1.0.tgz", + "integrity": "sha512-ZJcqsPiWUAUpvmnJri5TPBooqJOPmC0ttN65juhN15Q8xA+Nbg3BaxBHXQ45EistKKlKElb0edmbPWnKSBkvMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@blakeembrey/deque": "^1.0.5", + "@blakeembrey/template": "^1.0.0", + "arg": "^4.1.3", + "chokidar": "^3.3.1", + "cross-spawn": "^7.0.1", + "ignore": "^5.1.4", + "tree-kill": "^1.2.2" + }, + "bin": { + "onchange": "dist/bin.js" + } + }, + "node_modules/onchange/node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "license": "MIT" + }, "node_modules/onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", @@ -27677,6 +28146,13 @@ "node": ">=6" } }, + "node_modules/stats.js": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/stats.js/-/stats.js-0.17.0.tgz", + "integrity": "sha512-hNKz8phvYLPEcRkeG1rsGmV5ChMjKDAWU7/OJJdDErPBNChQXxCo3WZurGpnWc6gZhAzEPFad1aVgyOANH1sMw==", + "dev": true, + "license": "MIT" + }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -28622,9 +29098,9 @@ } }, "node_modules/three": { - "version": "0.162.0", - "resolved": "https://registry.npmjs.org/three/-/three-0.162.0.tgz", - "integrity": "sha512-xfCYj4RnlozReCmUd+XQzj6/5OjDNHBy5nT6rVwrOKGENAvpXe2z1jL+DZYaMu4/9pNsjH/4Os/VvS9IrH7IOQ==", + "version": "0.178.0", + "resolved": "https://registry.npmjs.org/three/-/three-0.178.0.tgz", + "integrity": "sha512-ybFIB0+x8mz0wnZgSGy2MO/WCO6xZhQSZnmfytSPyNpM0sBafGRVhdaj+erYh5U+RhQOAg/eXqw5uVDiM2BjhQ==", "license": "MIT" }, "node_modules/throat": { @@ -28946,6 +29422,67 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/tsconfck": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.5.tgz", @@ -29660,6 +30197,13 @@ "node": ">=8" } }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, + "license": "MIT" + }, "node_modules/valibot": { "version": "0.41.0", "resolved": "https://registry.npmjs.org/valibot/-/valibot-0.41.0.tgz", @@ -29840,9 +30384,9 @@ "license": "MIT" }, "node_modules/vite-plugin-dts": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/vite-plugin-dts/-/vite-plugin-dts-4.5.3.tgz", - "integrity": "sha512-P64VnD00dR+e8S26ESoFELqc17+w7pKkwlBpgXteOljFyT0zDwD8hH4zXp49M/kciy//7ZbVXIwQCekBJjfWzA==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/vite-plugin-dts/-/vite-plugin-dts-4.5.4.tgz", + "integrity": "sha512-d4sOM8M/8z7vRXHHq/ebbblfaxENjogAAekcfcDCCwAyvGqnPrc7f4NZbvItS+g4WTgerW0xDwSz5qz11JT3vg==", "dev": true, "license": "MIT", "dependencies": { @@ -31012,6 +31556,16 @@ "node": ">= 4.0.0" } }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -31073,7 +31627,49 @@ }, "vendor/spark": { "name": "@sparkjsdev/spark", - "version": "0.1.10" + "version": "0.1.10", + "license": "MIT", + "dependencies": { + "fflate": "^0.8.2", + "three": "^0.178.0" + }, + "devDependencies": { + "@biomejs/biome": "1.9.4", + "@types/three": "0.178.0", + "lefthook": "1.11.12", + "lil-gui": "^0.20.0", + "onchange": "7.1.0", + "spark-internal-rs": "file:rust/spark-internal-rs/pkg", + "stats.js": "^0.17.0", + "ts-node": "10.9.2", + "typescript": "^5.7.3", + "vite": "^6.0.11", + "vite-plugin-dts": "^4.5.4", + "vite-plugin-glsl": "^1.3.1" + } + }, + "vendor/spark/node_modules/@tweenjs/tween.js": { + "version": "23.1.3", + "resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-23.1.3.tgz", + "integrity": "sha512-vJmvvwFxYuGnF2axRtPYocag6Clbb5YS7kLL+SO/TeVFzHqDIWrNKYtcsPMibjDx9O+bu+psAy9NKfWklassUA==", + "dev": true, + "license": "MIT" + }, + "vendor/spark/node_modules/@types/three": { + "version": "0.178.0", + "resolved": "https://registry.npmjs.org/@types/three/-/three-0.178.0.tgz", + "integrity": "sha512-1IpVbMKbEAAWjyn0VTdVcNvI1h1NlTv3CcnwMr3NNBv/gi3PL0/EsWROnXUEkXBxl94MH5bZvS8h0WnBRmR/pQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@dimforge/rapier3d-compat": "~0.12.0", + "@tweenjs/tween.js": "~23.1.3", + "@types/stats.js": "*", + "@types/webxr": "*", + "@webgpu/types": "*", + "fflate": "~0.8.2", + "meshoptimizer": "~0.18.1" + } }, "vendor/spark/rust/spark-internal-rs/pkg": { "name": "spark-internal-rs", diff --git a/frontend/package.json b/frontend/package.json index b022fe4ada..d72b6fa379 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -37,7 +37,7 @@ "react-router-dom": "6.29.0", "react-spring": "^10.0.1", "tailwind-merge": "^2.2.2", - "three": "^0.162.0", + "three": "^0.178.0", "uuid": "^9.0.1", "zustand": "^5.0.5" }, diff --git a/frontend/vendor/spark/package.json b/frontend/vendor/spark/package.json index 1b8ede4a4d..de05fa65fd 100644 --- a/frontend/vendor/spark/package.json +++ b/frontend/vendor/spark/package.json @@ -52,7 +52,6 @@ "lil-gui": "^0.20.0", "onchange": "7.1.0", "stats.js": "^0.17.0", - "three": "^0.178.0", "ts-node": "10.9.2", "typescript": "^5.7.3", "vite": "^6.0.11", @@ -61,7 +60,8 @@ "spark-internal-rs": "file:rust/spark-internal-rs/pkg" }, "dependencies": { - "fflate": "^0.8.2" + "fflate": "^0.8.2", + "three": "^0.178.0" }, "keywords": ["3d", "three.js", "gsplats", "3dgs", "gaussian", "splats"] }