@babylonjs/core 9.9.2 → 9.10.1
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/DeviceInput/webDeviceInputSystem.js +7 -1
- package/DeviceInput/webDeviceInputSystem.js.map +1 -1
- package/Engines/abstractEngine.pure.js +2 -2
- package/Engines/abstractEngine.pure.js.map +1 -1
- package/Engines/engine.common.js +61 -1
- package/Engines/engine.common.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure.d.ts +8 -0
- package/Materials/GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure.js +26 -0
- package/Materials/GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingDebugger.pure.d.ts +2 -0
- package/Meshes/GaussianSplatting/gaussianSplattingDebugger.pure.js +17 -0
- package/Meshes/GaussianSplatting/gaussianSplattingDebugger.pure.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js +4 -0
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.d.ts +6 -0
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js +8 -0
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js.map +1 -1
- package/Misc/tools.pure.js +1 -1
- package/Misc/tools.pure.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockFinalLitComponents.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockFinalLitComponents.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockFinalLitComponents.js +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockFinalLitComponents.js.map +1 -1
- package/SmartAssets/index.d.ts +1 -1
- package/SmartAssets/index.js +1 -1
- package/SmartAssets/index.js.map +1 -1
- package/SmartAssets/pure.d.ts +1 -0
- package/SmartAssets/pure.js +1 -0
- package/SmartAssets/pure.js.map +1 -1
- package/SmartAssets/{smartAssetManager.js → smartAssetManager.pure.js} +30 -17
- package/SmartAssets/smartAssetManager.pure.js.map +1 -0
- package/package.json +1 -1
- package/SmartAssets/smartAssetManager.js.map +0 -1
- /package/SmartAssets/{smartAssetManager.d.ts → smartAssetManager.pure.d.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gaussianSplattingDebugger.pure.js","sourceRoot":"","sources":["../../../../../dev/core/src/Meshes/GaussianSplatting/gaussianSplattingDebugger.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\n\nimport { type Nullable } from \"../../types\";\nimport { type Observer } from \"../../Misc/observable\";\nimport { type Node } from \"../../node\";\nimport { type Vector3 } from \"../../Maths/math.vector\";\nimport { GaussianSplattingMaterial } from \"../../Materials/GaussianSplatting/gaussianSplattingMaterial.pure\";\nimport { GaussianSplattingDebugMaterialPlugin, type IGaussianSplattingDebugOptions } from \"../../Materials/GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure\";\nimport { type GaussianSplattingMeshBase } from \"./gaussianSplattingMeshBase.pure\";\n\n/**\n * Manages debug rendering options across a set of Gaussian splat meshes.\n * Create one instance, add meshes via addMesh(), then set options to apply\n * them to every registered mesh simultaneously.\n *\n * All options default to their \"off\" states so there is no rendering cost\n * until a feature is explicitly enabled.\n *\n * @example\n * ```ts\n * // Global options — applied to every registered mesh\n * const gsDebugger = new GaussianSplattingDebugger();\n * gsDebugger.addMesh(mesh1);\n * gsDebugger.addMesh(compoundMesh); // compound mesh with multiple parts\n * gsDebugger.clippingBox = { min: new Vector3(-2, -2, -2), max: new Vector3(2, 2, 2) };\n * gsDebugger.shOrder1 = false;\n *\n * // Per-part override — saturate opacity on part 0 of the compound mesh only,\n * // leaving all other parts (and mesh1) unaffected\n * gsDebugger.setPartOptions(compoundMesh, 0, { opacitySaturate: true });\n * // Later, restore part 0 to the global setting\n * gsDebugger.clearPartOptions(compoundMesh, 0);\n * ```\n */\nexport class GaussianSplattingDebugger {\n private _plugins: GaussianSplattingDebugMaterialPlugin[] = [];\n private _meshes: GaussianSplattingMeshBase[] = [];\n private _disposeObservers: Observer<Node>[] = [];\n\n // Cached option state so newly added meshes inherit current settings\n private _clippingBox: Nullable<{ min: Vector3; max: Vector3 }> = null;\n private _opacityCulling: Nullable<{ min: number; max: number }> = null;\n private _sizeCulling: Nullable<{ min: number; max: number }> = null;\n private _opacityScale: number = 1.0;\n private _opacitySaturate: boolean = false;\n private _shDc: boolean = true;\n private _shOrder1: boolean = true;\n private _shOrder2: boolean = true;\n private _shOrder3: boolean = true;\n private _shOrder4: boolean = true;\n\n /**\n * Adds a mesh to the debugger, attaching a debug plugin to its material.\n * The mesh must already have a GaussianSplattingMaterial assigned (i.e., data\n * must have been loaded at least once). Current option values are applied immediately.\n * The mesh is automatically unregistered if it is disposed.\n * @param mesh The mesh to register.\n */\n public addMesh(mesh: GaussianSplattingMeshBase): void {\n if (this._meshes.indexOf(mesh) !== -1) {\n return;\n }\n const mat = mesh.material;\n if (!(mat instanceof GaussianSplattingMaterial)) {\n throw new Error(\"GaussianSplattingDebugger.addMesh: mesh must have a GaussianSplattingMaterial.\");\n }\n const plugin = new GaussianSplattingDebugMaterialPlugin(mat);\n plugin.partCount = (mesh as unknown as { partCount?: number }).partCount ?? 0;\n this._applyAllTo(plugin);\n this._meshes.push(mesh);\n this._plugins.push(plugin);\n this._disposeObservers.push(mesh.onDisposeObservable.add(() => this.removeMesh(mesh))!);\n }\n\n /**\n * Removes a mesh and disposes its debug plugin.\n * @param mesh The mesh to unregister.\n */\n public removeMesh(mesh: GaussianSplattingMeshBase): void {\n const idx = this._meshes.indexOf(mesh);\n if (idx === -1) {\n return;\n }\n mesh.onDisposeObservable.remove(this._disposeObservers[idx]);\n this._plugins[idx].dispose();\n this._meshes.splice(idx, 1);\n this._plugins.splice(idx, 1);\n this._disposeObservers.splice(idx, 1);\n }\n\n /** Disposes all debug plugins and clears the mesh list. */\n public dispose(): void {\n for (let i = 0; i < this._meshes.length; i++) {\n this._meshes[i].onDisposeObservable.remove(this._disposeObservers[i]);\n this._plugins[i].dispose();\n }\n this._meshes.length = 0;\n this._plugins.length = 0;\n this._disposeObservers.length = 0;\n }\n\n /**\n * Returns the min/max size range of splats in a mesh.\n * Convenience wrapper for GaussianSplattingMeshBase.splatSizeRange.\n * @param mesh The mesh to query.\n * @returns the splat size range, or null if not yet computed.\n */\n public static GetSplatSizeRange(mesh: GaussianSplattingMeshBase): Nullable<{ min: number; max: number }> {\n return mesh.splatSizeRange;\n }\n\n // ----- Option setters (broadcast to all plugins) -----\n\n private _applyAllTo(plugin: GaussianSplattingDebugMaterialPlugin): void {\n plugin.clippingBox = this._clippingBox;\n plugin.opacityCulling = this._opacityCulling;\n plugin.sizeCulling = this._sizeCulling;\n plugin.opacityScale = this._opacityScale;\n plugin.opacitySaturate = this._opacitySaturate;\n plugin.shDc = this._shDc;\n plugin.shOrder1 = this._shOrder1;\n plugin.shOrder2 = this._shOrder2;\n plugin.shOrder3 = this._shOrder3;\n plugin.shOrder4 = this._shOrder4;\n }\n\n /**\n * World-space axis-aligned clipping box. Splats outside are not rendered.\n * Set to null to disable.\n */\n public get clippingBox(): Nullable<{ min: Vector3; max: Vector3 }> {\n return this._clippingBox;\n }\n public set clippingBox(value: Nullable<{ min: Vector3; max: Vector3 }>) {\n this._clippingBox = value;\n for (const p of this._plugins) {\n p.clippingBox = value;\n }\n }\n\n /**\n * Opacity culling range [0..1]. Splats outside this range are not rendered.\n * Set to null to disable.\n */\n public get opacityCulling(): Nullable<{ min: number; max: number }> {\n return this._opacityCulling;\n }\n public set opacityCulling(value: Nullable<{ min: number; max: number }>) {\n this._opacityCulling = value;\n for (const p of this._plugins) {\n p.opacityCulling = value;\n }\n }\n\n /**\n * Size culling range. Size is pow(|det(Σ)|, 1/6) of the 3D covariance matrix,\n * equal to the geometric mean of the principal radii. Splats outside this range are not rendered.\n * Use GaussianSplattingDebugger.GetSplatSizeRange(mesh) to find an asset's range.\n * Set to null to disable.\n */\n public get sizeCulling(): Nullable<{ min: number; max: number }> {\n return this._sizeCulling;\n }\n public set sizeCulling(value: Nullable<{ min: number; max: number }>) {\n this._sizeCulling = value;\n for (const p of this._plugins) {\n p.sizeCulling = value;\n }\n }\n\n /** Scalar multiplier applied to every splat's opacity. 1.0 = no change. */\n public get opacityScale(): number {\n return this._opacityScale;\n }\n public set opacityScale(value: number) {\n this._opacityScale = value;\n for (const p of this._plugins) {\n p.opacityScale = value;\n }\n }\n\n /**\n * When true, replaces the Gaussian spatial falloff with a flat uniform opacity,\n * showing each splat as a solid disk.\n */\n public get opacitySaturate(): boolean {\n return this._opacitySaturate;\n }\n public set opacitySaturate(value: boolean) {\n this._opacitySaturate = value;\n for (const p of this._plugins) {\n p.opacitySaturate = value;\n }\n }\n\n /** Include the DC (base) color from colorsTexture. Default: true. */\n public get shDc(): boolean {\n return this._shDc;\n }\n public set shDc(value: boolean) {\n this._shDc = value;\n for (const p of this._plugins) {\n p.shDc = value;\n }\n }\n\n /** Include SH band 1 contribution. Default: true. */\n public get shOrder1(): boolean {\n return this._shOrder1;\n }\n public set shOrder1(value: boolean) {\n this._shOrder1 = value;\n for (const p of this._plugins) {\n p.shOrder1 = value;\n }\n }\n\n /** Include SH band 2 contribution. Default: true. */\n public get shOrder2(): boolean {\n return this._shOrder2;\n }\n public set shOrder2(value: boolean) {\n this._shOrder2 = value;\n for (const p of this._plugins) {\n p.shOrder2 = value;\n }\n }\n\n /** Include SH band 3 contribution. Default: true. */\n public get shOrder3(): boolean {\n return this._shOrder3;\n }\n public set shOrder3(value: boolean) {\n this._shOrder3 = value;\n for (const p of this._plugins) {\n p.shOrder3 = value;\n }\n }\n\n /** Include SH band 4 contribution. Default: true. */\n public get shOrder4(): boolean {\n return this._shOrder4;\n }\n public set shOrder4(value: boolean) {\n this._shOrder4 = value;\n for (const p of this._plugins) {\n p.shOrder4 = value;\n }\n }\n\n // ----- Per-part API (compound meshes only) -----\n\n /**\n * Sets per-part debug overrides for a specific part of a compound mesh.\n * The mesh must already be registered via addMesh(). Logs an error if the mesh\n * is not compound (partCount is 0).\n * @param mesh The compound mesh.\n * @param partIndex The zero-based part index.\n * @param options Partial set of debug options to override for this part.\n */\n public setPartOptions(mesh: GaussianSplattingMeshBase, partIndex: number, options: Partial<IGaussianSplattingDebugOptions>): void {\n const idx = this._meshes.indexOf(mesh);\n if (idx < 0) {\n return;\n }\n this._plugins[idx].setPartOptions(partIndex, options);\n }\n\n /**\n * Clears all per-part debug overrides for a specific part, falling back to global settings.\n * @param mesh The compound mesh.\n * @param partIndex The zero-based part index.\n */\n public clearPartOptions(mesh: GaussianSplattingMeshBase, partIndex: number): void {\n const idx = this._meshes.indexOf(mesh);\n if (idx < 0) {\n return;\n }\n this._plugins[idx].clearPartOptions(partIndex);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"gaussianSplattingDebugger.pure.js","sourceRoot":"","sources":["../../../../../dev/core/src/Meshes/GaussianSplatting/gaussianSplattingDebugger.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\n\nimport { type Nullable } from \"../../types\";\nimport { type Observer } from \"../../Misc/observable\";\nimport { type Node } from \"../../node\";\nimport { type Vector3 } from \"../../Maths/math.vector\";\nimport { GaussianSplattingMaterial } from \"../../Materials/GaussianSplatting/gaussianSplattingMaterial.pure\";\nimport { GaussianSplattingDebugMaterialPlugin, type IGaussianSplattingDebugOptions } from \"../../Materials/GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure\";\nimport { type GaussianSplattingMeshBase } from \"./gaussianSplattingMeshBase.pure\";\n\n/**\n * Manages debug rendering options across a set of Gaussian splat meshes.\n * Create one instance, add meshes via addMesh(), then set options to apply\n * them to every registered mesh simultaneously.\n *\n * All options default to their \"off\" states so there is no rendering cost\n * until a feature is explicitly enabled.\n *\n * @example\n * ```ts\n * // Global options — applied to every registered mesh\n * const gsDebugger = new GaussianSplattingDebugger();\n * gsDebugger.addMesh(mesh1);\n * gsDebugger.addMesh(compoundMesh); // compound mesh with multiple parts\n * gsDebugger.clippingBox = { min: new Vector3(-2, -2, -2), max: new Vector3(2, 2, 2) };\n * gsDebugger.shOrder1 = false;\n *\n * // Per-part override — saturate opacity on part 0 of the compound mesh only,\n * // leaving all other parts (and mesh1) unaffected\n * gsDebugger.setPartOptions(compoundMesh, 0, { opacitySaturate: true });\n * // Later, restore part 0 to the global setting\n * gsDebugger.clearPartOptions(compoundMesh, 0);\n * ```\n */\nexport class GaussianSplattingDebugger {\n private _plugins: GaussianSplattingDebugMaterialPlugin[] = [];\n private _meshes: GaussianSplattingMeshBase[] = [];\n private _disposeObservers: Observer<Node>[] = [];\n // observable.add() returns Nullable<Observer<T>>; Observable.remove() accepts null safely.\n private _partCountObservers: Nullable<Observer<number>>[] = [];\n private _partRemovedObservers: Nullable<Observer<number>>[] = [];\n\n // Cached option state so newly added meshes inherit current settings\n private _clippingBox: Nullable<{ min: Vector3; max: Vector3 }> = null;\n private _opacityCulling: Nullable<{ min: number; max: number }> = null;\n private _sizeCulling: Nullable<{ min: number; max: number }> = null;\n private _opacityScale: number = 1.0;\n private _opacitySaturate: boolean = false;\n private _shDc: boolean = true;\n private _shOrder1: boolean = true;\n private _shOrder2: boolean = true;\n private _shOrder3: boolean = true;\n private _shOrder4: boolean = true;\n\n /**\n * Adds a mesh to the debugger, attaching a debug plugin to its material.\n * The mesh must already have a GaussianSplattingMaterial assigned (i.e., data\n * must have been loaded at least once). Current option values are applied immediately.\n * The mesh is automatically unregistered if it is disposed.\n * @param mesh The mesh to register.\n */\n public addMesh(mesh: GaussianSplattingMeshBase): void {\n if (this._meshes.indexOf(mesh) !== -1) {\n return;\n }\n const mat = mesh.material;\n if (!(mat instanceof GaussianSplattingMaterial)) {\n throw new Error(\"GaussianSplattingDebugger.addMesh: mesh must have a GaussianSplattingMaterial.\");\n }\n const plugin = new GaussianSplattingDebugMaterialPlugin(mat);\n plugin.partCount = (mesh as unknown as { partCount?: number }).partCount ?? 0;\n this._applyAllTo(plugin);\n this._meshes.push(mesh);\n this._plugins.push(plugin);\n this._disposeObservers.push(mesh.onDisposeObservable.add(() => this.removeMesh(mesh))!);\n this._partCountObservers.push(\n mesh.onPartCountChangedObservable.add((count) => {\n plugin.partCount = count;\n })\n );\n this._partRemovedObservers.push(\n mesh.onPartRemovedObservable.add((removedIndex) => {\n plugin.shiftPartOptions(removedIndex);\n })\n );\n }\n\n /**\n * Removes a mesh and disposes its debug plugin.\n * @param mesh The mesh to unregister.\n */\n public removeMesh(mesh: GaussianSplattingMeshBase): void {\n const idx = this._meshes.indexOf(mesh);\n if (idx === -1) {\n return;\n }\n mesh.onDisposeObservable.remove(this._disposeObservers[idx]);\n mesh.onPartCountChangedObservable.remove(this._partCountObservers[idx]);\n mesh.onPartRemovedObservable.remove(this._partRemovedObservers[idx]);\n this._plugins[idx].dispose();\n this._meshes.splice(idx, 1);\n this._plugins.splice(idx, 1);\n this._disposeObservers.splice(idx, 1);\n this._partCountObservers.splice(idx, 1);\n this._partRemovedObservers.splice(idx, 1);\n }\n\n /** Disposes all debug plugins and clears the mesh list. */\n public dispose(): void {\n for (let i = 0; i < this._meshes.length; i++) {\n this._meshes[i].onDisposeObservable.remove(this._disposeObservers[i]);\n this._meshes[i].onPartCountChangedObservable.remove(this._partCountObservers[i]);\n this._meshes[i].onPartRemovedObservable.remove(this._partRemovedObservers[i]);\n this._plugins[i].dispose();\n }\n this._meshes.length = 0;\n this._plugins.length = 0;\n this._disposeObservers.length = 0;\n this._partCountObservers.length = 0;\n this._partRemovedObservers.length = 0;\n }\n\n /**\n * Returns the min/max size range of splats in a mesh.\n * Convenience wrapper for GaussianSplattingMeshBase.splatSizeRange.\n * @param mesh The mesh to query.\n * @returns the splat size range, or null if not yet computed.\n */\n public static GetSplatSizeRange(mesh: GaussianSplattingMeshBase): Nullable<{ min: number; max: number }> {\n return mesh.splatSizeRange;\n }\n\n // ----- Option setters (broadcast to all plugins) -----\n\n private _applyAllTo(plugin: GaussianSplattingDebugMaterialPlugin): void {\n plugin.clippingBox = this._clippingBox;\n plugin.opacityCulling = this._opacityCulling;\n plugin.sizeCulling = this._sizeCulling;\n plugin.opacityScale = this._opacityScale;\n plugin.opacitySaturate = this._opacitySaturate;\n plugin.shDc = this._shDc;\n plugin.shOrder1 = this._shOrder1;\n plugin.shOrder2 = this._shOrder2;\n plugin.shOrder3 = this._shOrder3;\n plugin.shOrder4 = this._shOrder4;\n }\n\n /**\n * World-space axis-aligned clipping box. Splats outside are not rendered.\n * Set to null to disable.\n */\n public get clippingBox(): Nullable<{ min: Vector3; max: Vector3 }> {\n return this._clippingBox;\n }\n public set clippingBox(value: Nullable<{ min: Vector3; max: Vector3 }>) {\n this._clippingBox = value;\n for (const p of this._plugins) {\n p.clippingBox = value;\n }\n }\n\n /**\n * Opacity culling range [0..1]. Splats outside this range are not rendered.\n * Set to null to disable.\n */\n public get opacityCulling(): Nullable<{ min: number; max: number }> {\n return this._opacityCulling;\n }\n public set opacityCulling(value: Nullable<{ min: number; max: number }>) {\n this._opacityCulling = value;\n for (const p of this._plugins) {\n p.opacityCulling = value;\n }\n }\n\n /**\n * Size culling range. Size is pow(|det(Σ)|, 1/6) of the 3D covariance matrix,\n * equal to the geometric mean of the principal radii. Splats outside this range are not rendered.\n * Use GaussianSplattingDebugger.GetSplatSizeRange(mesh) to find an asset's range.\n * Set to null to disable.\n */\n public get sizeCulling(): Nullable<{ min: number; max: number }> {\n return this._sizeCulling;\n }\n public set sizeCulling(value: Nullable<{ min: number; max: number }>) {\n this._sizeCulling = value;\n for (const p of this._plugins) {\n p.sizeCulling = value;\n }\n }\n\n /** Scalar multiplier applied to every splat's opacity. 1.0 = no change. */\n public get opacityScale(): number {\n return this._opacityScale;\n }\n public set opacityScale(value: number) {\n this._opacityScale = value;\n for (const p of this._plugins) {\n p.opacityScale = value;\n }\n }\n\n /**\n * When true, replaces the Gaussian spatial falloff with a flat uniform opacity,\n * showing each splat as a solid disk.\n */\n public get opacitySaturate(): boolean {\n return this._opacitySaturate;\n }\n public set opacitySaturate(value: boolean) {\n this._opacitySaturate = value;\n for (const p of this._plugins) {\n p.opacitySaturate = value;\n }\n }\n\n /** Include the DC (base) color from colorsTexture. Default: true. */\n public get shDc(): boolean {\n return this._shDc;\n }\n public set shDc(value: boolean) {\n this._shDc = value;\n for (const p of this._plugins) {\n p.shDc = value;\n }\n }\n\n /** Include SH band 1 contribution. Default: true. */\n public get shOrder1(): boolean {\n return this._shOrder1;\n }\n public set shOrder1(value: boolean) {\n this._shOrder1 = value;\n for (const p of this._plugins) {\n p.shOrder1 = value;\n }\n }\n\n /** Include SH band 2 contribution. Default: true. */\n public get shOrder2(): boolean {\n return this._shOrder2;\n }\n public set shOrder2(value: boolean) {\n this._shOrder2 = value;\n for (const p of this._plugins) {\n p.shOrder2 = value;\n }\n }\n\n /** Include SH band 3 contribution. Default: true. */\n public get shOrder3(): boolean {\n return this._shOrder3;\n }\n public set shOrder3(value: boolean) {\n this._shOrder3 = value;\n for (const p of this._plugins) {\n p.shOrder3 = value;\n }\n }\n\n /** Include SH band 4 contribution. Default: true. */\n public get shOrder4(): boolean {\n return this._shOrder4;\n }\n public set shOrder4(value: boolean) {\n this._shOrder4 = value;\n for (const p of this._plugins) {\n p.shOrder4 = value;\n }\n }\n\n // ----- Per-part API (compound meshes only) -----\n\n /**\n * Sets per-part debug overrides for a specific part of a compound mesh.\n * The mesh must already be registered via addMesh(). Logs an error if the mesh\n * is not compound (partCount is 0).\n * @param mesh The compound mesh.\n * @param partIndex The zero-based part index.\n * @param options Partial set of debug options to override for this part.\n */\n public setPartOptions(mesh: GaussianSplattingMeshBase, partIndex: number, options: Partial<IGaussianSplattingDebugOptions>): void {\n const idx = this._meshes.indexOf(mesh);\n if (idx < 0) {\n return;\n }\n this._plugins[idx].setPartOptions(partIndex, options);\n }\n\n /**\n * Clears all per-part debug overrides for a specific part, falling back to global settings.\n * @param mesh The compound mesh.\n * @param partIndex The zero-based part index.\n */\n public clearPartOptions(mesh: GaussianSplattingMeshBase, partIndex: number): void {\n const idx = this._meshes.indexOf(mesh);\n if (idx < 0) {\n return;\n }\n this._plugins[idx].clearPartOptions(partIndex);\n }\n}\n"]}
|
|
@@ -901,6 +901,7 @@ export class GaussianSplattingMesh extends GaussianSplattingMeshBase {
|
|
|
901
901
|
this._canPostToWorker = true;
|
|
902
902
|
this._postToWorker(true);
|
|
903
903
|
}
|
|
904
|
+
this.onPartCountChangedObservable.notifyObservers(this.partCount);
|
|
904
905
|
return { proxyMeshes, assignedPartIndices };
|
|
905
906
|
}
|
|
906
907
|
catch (e) {
|
|
@@ -962,6 +963,8 @@ export class GaussianSplattingMesh extends GaussianSplattingMeshBase {
|
|
|
962
963
|
throw new Error(`Cannot remove part: the SH data for part "${proxyMesh.name}" is not available.`);
|
|
963
964
|
}
|
|
964
965
|
}
|
|
966
|
+
// Notify listeners before mutation so they can record state keyed on the original index.
|
|
967
|
+
this.onPartRemovedObservable.notifyObservers(index);
|
|
965
968
|
// --- Reset this mesh to an empty state ---
|
|
966
969
|
// Terminate the sort worker before zeroing _vertexCount. The worker's onmessage handler
|
|
967
970
|
// compares depthMix.length against (_vertexCount + 15) & ~0xf; with _vertexCount = 0 that
|
|
@@ -1021,6 +1024,7 @@ export class GaussianSplattingMesh extends GaussianSplattingMeshBase {
|
|
|
1021
1024
|
if (survivors.length === 0) {
|
|
1022
1025
|
// Nothing left — leave the mesh empty.
|
|
1023
1026
|
this.setEnabled(false);
|
|
1027
|
+
this.onPartCountChangedObservable.notifyObservers(0);
|
|
1024
1028
|
return;
|
|
1025
1029
|
}
|
|
1026
1030
|
// Gate the sort worker: suppress any sort request until the full rebuild is committed.
|