Skip to content

Add noise-based dissolve shader effect for gaussian splats#8890

Merged
mvaligursky merged 7 commits into
mainfrom
mv-gsplat-dissolve
Jun 12, 2026
Merged

Add noise-based dissolve shader effect for gaussian splats#8890
mvaligursky merged 7 commits into
mainfrom
mv-gsplat-dissolve

Conversation

@mvaligursky

Copy link
Copy Markdown
Contributor

Adds a noise-driven dissolve effect for gaussian splats (inspired by the classic three.js shader dissolve technique), built on the GsplatShaderEffect framework, where each splat acts as a particle of the dissolve.

Changes:

  • New GsplatDissolveShaderEffect script (scripts/esm/gsplat/shader-effect-dissolve.mjs, GLSL + WGSL): drives a 3-octave value-noise threshold through the splats - splats below the threshold are hidden, splats in the edge band glow with an HDR edge color and fly off along a lift direction with per-splat sine-wave sway, blending to spherical particle shapes while shrinking and fading out. Running with dissolve = false plays the animation in reverse, reassembling the splats.
  • Effect is constrained to an AABB (aabbMin/aabbMax) - splats outside are not affected, matching the box effect convention.
  • Optional crop AABB (cropEnabled, cropAabbMin/cropAabbMax) permanently hides splats outside it - used to remove the fuzzy skydome shell around a scan so a full dissolve ends on a clear background.

API Changes:

  • New script export GsplatDissolveShaderEffect from playcanvas/scripts/esm/gsplat/shader-effect-dissolve.mjs with attributes: aabbMin, aabbMax, cropEnabled, cropAabbMin, cropAabbMax, duration, dissolve, noiseFrequency, edgeWidth, edgeColor (HDR), liftDirection, liftDistance, waveAmplitude, waveFrequency.

Examples:

  • New gaussian-splatting/shader-dissolve example: style presets (Ember, Plasma, Mist, Smooth), whole-room toggle, auto-looping dissolve/reassemble cycle, and a parameters panel with live-updating sliders and an edge color picker with HDR glow multiplier.

Martin Valigursky added 6 commits June 12, 2026 14:43
Ports the classic noise-threshold dissolve effect to gaussian splats,
built on the GsplatShaderEffect framework. Each splat acts as a particle
of the dissolve: splats below the noise threshold are hidden, while
splats in the edge band glow with an HDR edge color and fly off along a
lift direction with sine-wave sway, shrinking and fading out. Running
the effect in reverse reassembles the splats.

Includes a new shader-dissolve example with ember/plasma/mist style
presets and an auto-looping dissolve/reassemble cycle.
Adds aabbMin/aabbMax attributes to GsplatDissolveShaderEffect, matching
the box effect convention - splats outside the AABB are left untouched.
The example now dissolves only the statue while the room stays intact.
Adds a Parameters panel with live-updating sliders for duration, noise
frequency, edge width, lift distance, wave amplitude/frequency, plus an
edge color picker with a separate HDR glow intensity multiplier. Style
presets populate the panel; slider changes apply to the effect
immediately without a restart.
Burning splats kept their original anisotropic shapes, reading as
elongated streaks. Blend the scale toward a sphere of equivalent RMS
size (using the gsplatGetSizeFromScale helper) early in the burn so
particles look like round embers for most of their flight.
Toggle at the top of the Effect panel swaps the effect AABB between the
statue bounds from the style preset and room-sized bounds, restarting
the effect from a dissolve on change.
Adds a Smooth style preset with very low noise frequency (0.2), which
dissolves the model in a single coherent sweep instead of patchy
islands, with a green glow.

Adds crop support to GsplatDissolveShaderEffect (cropEnabled,
cropAabbMin/Max) - splats outside the crop AABB are always hidden. The
example crops away the fuzzy skydome shell around the scan, so a
whole-room dissolve now ends on a clear black screen instead of
revealing distant blurry splats.
@mvaligursky mvaligursky merged commit 0e2e3f3 into main Jun 12, 2026
9 checks passed
@mvaligursky mvaligursky deleted the mv-gsplat-dissolve branch June 12, 2026 14:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant