From 0e8307fa451daec436e915d95295d7f456f07839 Mon Sep 17 00:00:00 2001 From: Winnie Lin Date: Tue, 9 Sep 2025 15:51:53 +0000 Subject: [PATCH 1/2] splat painter example --- examples/assets.json | 4 + examples/splat-painter/index.html | 354 ++++++++++++++++++++++++++++++ 2 files changed, 358 insertions(+) create mode 100644 examples/splat-painter/index.html diff --git a/examples/assets.json b/examples/assets.json index b078323..fb513f3 100644 --- a/examples/assets.json +++ b/examples/assets.json @@ -87,6 +87,10 @@ "url": "https://sparkjs.dev/assets/splats/penguin.spz", "directory": "splats" }, + "painted-bedroom.spz": { + "url": "https://storage.googleapis.com/forge-dev-public/painted_bedroom.spz", + "directory": "splats" + }, "primerib-tamos.spz": { "url": "https://sparkjs.dev/assets/splats/food/primerib-tamos.spz", "directory": "splats/food" diff --git a/examples/splat-painter/index.html b/examples/splat-painter/index.html new file mode 100644 index 0000000..189b5d9 --- /dev/null +++ b/examples/splat-painter/index.html @@ -0,0 +1,354 @@ + + + + + + Spark • Splat Painter + + + + +
+ + + + From 9320ccb7ac9d234562279ff5f02ee0b1c0c90fc3 Mon Sep 17 00:00:00 2001 From: Winnie Lin Date: Tue, 9 Sep 2025 20:04:44 +0000 Subject: [PATCH 2/2] avoid additional updategenerator calls --- examples/splat-painter/index.html | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/examples/splat-painter/index.html b/examples/splat-painter/index.html index 189b5d9..33acd4a 100644 --- a/examples/splat-painter/index.html +++ b/examples/splat-painter/index.html @@ -237,16 +237,30 @@ // Apply painting effect while dragging if (isDragging && currentSplatMesh) { - currentSplatMesh.splatRgba = spark.getRgba({ generator: currentSplatMesh }); - currentSplatMesh.updateGenerator(); + const noSplatRgba = !currentSplatMesh.splatRgba; + currentSplatMesh.splatRgba = spark.getRgba( + { generator: currentSplatMesh , rgba: currentSplatMesh.splatRgba} + ); + if (noSplatRgba) { + currentSplatMesh.updateGenerator(); + } else { + currentSplatMesh.updateVersion(); + } } }); renderer.domElement.addEventListener('pointerdown', (event) => { isDragging = true; if (currentSplatMesh) { - currentSplatMesh.splatRgba = spark.getRgba({ generator: currentSplatMesh }); - currentSplatMesh.updateGenerator(); + const noSplatRgba = !currentSplatMesh.splatRgba; + currentSplatMesh.splatRgba = spark.getRgba( + { generator: currentSplatMesh , rgba: currentSplatMesh.splatRgba} + ); + if (noSplatRgba) { + currentSplatMesh.updateGenerator(); + } else { + currentSplatMesh.updateVersion(); + } } });