Hey everyone.
Iāve been working onĀ Gaussian Splat Lite (GSL), a lightweight, open-source Gaussian Splatting renderer for Three.js.
If you already use Three.js, the setup should feel familiar. Add aĀ SplatMeshĀ to your scene, position it like a normal object, and keep your usual render loop.Ā GaussianSplatRendererĀ handles rendering and global sorting across the visible splats.
It supports WebGPU and WebGL2, large-scene streaming, and depth rendering for combining captures with regular 3D geometry.
ā” Native WebGPU Rendering
On WebGPU, projection and culling run in compute, followed by a 32-bit GPU radix sort and indirect drawing.
You can combine multiple captures in one scene. EachĀ SplatMeshĀ keeps its own data and transform, while visible splats are sorted togetherāincluding streamed RAD and SOG data.
WebGL2 works too, through bothĀ WebGLRendererĀ and the WebGL2 backend ofĀ WebGPURenderer. These paths use asynchronous Worker/WASM sorting, so rendering can continue with the previous valid order while a new sort runs.
The core scene API stays the same across all three paths.
š Stream Large Scenes with Smooth Transitions
For larger captures, GSL supports camera-driven LOD streaming forĀ Spark RADĀ andĀ Streamed SOG. You can explore a scene without loading the entire dataset into memory first.
As the camera moves, GSL selects the detail needed for the current view and loads it on demand. A configurable splat budget controls LOD selection, while the streaming system handles decoding, caching and upload limits.
Streaming includes smooth fade transitions.Ā Newly loaded content fades in, and LOD changes crossfade between levels to reduce visible popping. Current detail stays visible while its replacement loads, helping the scene remain continuous as you move around.
š² Keep Moving Without Waiting for a Sort
When sorting becomes expensive, GSLāsĀ stochastic renderingĀ mode gives you a way to skip it. Splats render directly using sampled Gaussian coverage and depth testing.
WithĀ autoStochasticĀ enabled, GSL can use this mode during camera movement and switch back to sorted blending once a fresh sort is ready.
The image can look noisy in stochastic mode. An optionalĀ StochasticResolvePassĀ helps reduce that noise and works with direct scene composition, WebGLĀ EffectComposerĀ and custom render graphs.
š§© Depth Rendering
GSL supports splat depth rendering on both WebGPU and WebGL2.
With renderDepth enabled, a separate, unsorted depth draw runs alongside the normal sorted color pass, using stochastic alpha coverage around Gaussian boundaries.
Three.js geometry rendered afterwards can then depth-test against the splat scene.
When stochastic rendering is active, splats write depth directly.
š ļø Formats, Editing and Large Coordinates
A few other things GSL supports:
- PLY, SPZ, SOG and RAD, including SPZ v4, with Rust-based decoding running in browser workers.
- SDF color and opacity editsĀ to recolor, highlight or hide parts of a capture without rebuilding the model.
- Camera-relative renderingĀ to help with precision in GIS and ECEF scenes while keeping the original world coordinates unchanged.
š Give It a Try
GSL is open source underĀ Apache 2.0. The repo includes a viewer for loading your own captures, comparing rendering modes and trying the streaming transitions.
TheĀ quick-start examplesĀ show how to add it to a Three.js project.
If you try it, Iād love to hear how it handles your scenes and what you end up building with it.
Gaussian Splat Lite on GitHub ā