Add noise-based dissolve shader effect for gaussian splats#8890
Merged
Conversation
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds a noise-driven dissolve effect for gaussian splats (inspired by the classic three.js shader dissolve technique), built on the
GsplatShaderEffectframework, where each splat acts as a particle of the dissolve.Changes:
GsplatDissolveShaderEffectscript (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 withdissolve = falseplays the animation in reverse, reassembling the splats.aabbMin/aabbMax) - splats outside are not affected, matching the box effect convention.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:
GsplatDissolveShaderEffectfromplaycanvas/scripts/esm/gsplat/shader-effect-dissolve.mjswith attributes:aabbMin,aabbMax,cropEnabled,cropAabbMin,cropAabbMax,duration,dissolve,noiseFrequency,edgeWidth,edgeColor(HDR),liftDirection,liftDistance,waveAmplitude,waveFrequency.Examples:
gaussian-splatting/shader-dissolveexample: 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.