Three.js Merges a Native Gaussian Splat Renderer for WebGPU in r186

Michael Rubloff

Michael Rubloff

Email
Copy Link
Twitter
Linkedin
Reddit
Whatsapp
Three.js gaussian splatting

three.js has merged its first native gaussian splatting renderer, a WebGPU and TSL implementation landing in r186.

Splat rendering in three.js has historically run on third party code until now, including World Labs' Spark and GaussianSplats3D, which later added spherical harmonics.

Written by Ben Houston of Threekit and Land of Assets, was merged into the dev branch by Mugen87. What's fascinating about the implementation is how compact it is. The total size is 7KB in addition to base ThreeJS for SPZLoader + Renderer. To use it also only requires three lines of code.

const splatData = await new SPZLoader().loadAsync('lion.spz');
const splats = new GaussianSplatMesh(splatData);

scene.add(splats);
const splatData = await new SPZLoader().loadAsync('lion.spz');
const splats = new GaussianSplatMesh(splatData);

scene.add(splats);
const splatData = await new SPZLoader().loadAsync('lion.spz');
const splats = new GaussianSplatMesh(splatData);

scene.add(splats);
const splatData = await new SPZLoader().loadAsync('lion.spz');
const splats = new GaussianSplatMesh(splatData);

scene.add(splats);

The implementation has three layers. A plain BufferGeometry holds position, a six float covariance attribute carrying the upper triangle of a symmetric 3x3 matrix, and an rgba8 color attribute. The loaders all target that same geometry shape. GaussianSplatMesh, a WebGPU and TSL NodeMaterial, renders it, and a scene loads in three statements, an SPZLoader loadAsync call, a GaussianSplatMesh constructor, and scene.add.

Depth ordering lives in a reusable CountingSort class. CountingSort quantizes splat depth into bins, 4096 by default, and dispatches four TSL compute passes from compute(renderer), a reset, a histogram, a prefix sum and a scatter. The histogram and scatter passes use atomicAdd, and the prefix sum is a single invocation Loop. The sort moves an index array only, one uint per splat, and GaussianSplatMesh re-sorts only when the camera has moved past a threshold. A plain JavaScript fallback covers the WebGL backend of WebGPURenderer.


Format coverage runs to ply through the existing PLYLoader and a createGaussianSplatGeometryFromPLYGeometry helper that reads scale*, rot, fdc and opacity, splat through SPLATLoader, spz through SPZLoader, ksplat through KSPLATLoader, and glTF KHR_gaussian_splatting through GLTFGaussianSplatLoaderExtension. The glTF extension is registered by hand through loader.register, which keeps TSL out of GLTFLoader.

Color is SH0 only, one flat color and opacity per splat, with no SH1 through SH3, no level of detail, no streaming, no WASM and no web workers. Spark 2.0 carries LoD splat trees, virtual paging and the .RAD format. glTF export and an editor integration were removed before merge.

r185 is the current three.js release. The code is on the dev branch, but represents an exciting step forward for the proliferation of gaussian splatting on the web. Learn more here.

Featured

Recents

KIRI Engine Adds Real-Time Relighting and Eevee Mesh Shadows in 3DGS Render 5.1.0

3DGS Render 5.1.0 adds real-time relighting and Eevee mesh-shadow support to KIRI Engine's Blender add-on, alongside Blender 5.2 support and a duplication fix.

Michael Rubloff

Aug 28, 2026

KIRI Engine Adds Real-Time Relighting and Eevee Mesh Shadows in 3DGS Render 5.1.0

3DGS Render 5.1.0 adds real-time relighting and Eevee mesh-shadow support to KIRI Engine's Blender add-on, alongside Blender 5.2 support and a duplication fix.

Michael Rubloff

Platforms

MultiSet AI: Gaussian Splats as Native VPS Map Input

GPS fails indoors. Visual Positioning Systems localize from camera images against a prebuilt map — and MultiSet AI takes Gaussian splats as native map input.

Michael Rubloff

Aug 27, 2026

Platforms

MultiSet AI: Gaussian Splats as Native VPS Map Input

GPS fails indoors. Visual Positioning Systems localize from camera images against a prebuilt map — and MultiSet AI takes Gaussian splats as native map input.

Michael Rubloff

Nodeconnector Releases a Free Gaussian Splat Cleanup HDA for Houdini 22

Nodeconnector's Gaussian Splat Cleanup HDA is a free modular Houdini 22 SOP that removes duplicates, floaters, alpha noise and hue outliers, and fills holes.

Michael Rubloff

Aug 26, 2026

Nodeconnector Releases a Free Gaussian Splat Cleanup HDA for Houdini 22

Nodeconnector's Gaussian Splat Cleanup HDA is a free modular Houdini 22 SOP that removes duplicates, floaters, alpha noise and hue outliers, and fills holes.

Michael Rubloff

Splatlight Generates Gaussian Splats From Blender Scenes Without a COLMAP Solve

Splatlight adds a scene generator to its Blender add-on, rendering auto-generated camera rigs and feeding known poses to a splat trainer with no COLMAP solve.

Michael Rubloff

Aug 25, 2026

Splatlight Generates Gaussian Splats From Blender Scenes Without a COLMAP Solve

Splatlight adds a scene generator to its Blender add-on, rendering auto-generated camera rigs and feeding known poses to a splat trainer with no COLMAP solve.

Michael Rubloff

Trending Articles
  1. TRENDING
    Loading...
  2. TRENDING
    Loading...
  3. TRENDING
    Loading...
Michael Rubloff

Written by Michael Rubloff

Michael is the Founder and Managing Editor of Radiancefields.com

Email
Copy Link
Twitter
Linkedin
Reddit
Whatsapp

More from Michael Rubloff

More from Michael Rubloff

KIRI Engine Adds Real-Time Relighting and Eevee Mesh Shadows in 3DGS Render 5.1.0

3DGS Render 5.1.0 adds real-time relighting and Eevee mesh-shadow support to KIRI Engine's Blender add-on, alongside Blender 5.2 support and a duplication fix.

Michael Rubloff

Aug 28, 2026

KIRI Engine Adds Real-Time Relighting and Eevee Mesh Shadows in 3DGS Render 5.1.0

Michael Rubloff

Aug 28, 2026

KIRI Engine Adds Real-Time Relighting and Eevee Mesh Shadows in 3DGS Render 5.1.0

3DGS Render 5.1.0 adds real-time relighting and Eevee mesh-shadow support to KIRI Engine's Blender add-on, alongside Blender 5.2 support and a duplication fix.

Michael Rubloff

Aug 28, 2026

Platforms

MultiSet AI: Gaussian Splats as Native VPS Map Input

GPS fails indoors. Visual Positioning Systems localize from camera images against a prebuilt map — and MultiSet AI takes Gaussian splats as native map input.

Michael Rubloff

Aug 27, 2026

Multiset AI

Platforms

MultiSet AI: Gaussian Splats as Native VPS Map Input

Michael Rubloff

Aug 27, 2026

Multiset AI

Platforms

MultiSet AI: Gaussian Splats as Native VPS Map Input

GPS fails indoors. Visual Positioning Systems localize from camera images against a prebuilt map — and MultiSet AI takes Gaussian splats as native map input.

Michael Rubloff

Aug 27, 2026

Multiset AI

Nodeconnector Releases a Free Gaussian Splat Cleanup HDA for Houdini 22

Nodeconnector's Gaussian Splat Cleanup HDA is a free modular Houdini 22 SOP that removes duplicates, floaters, alpha noise and hue outliers, and fills holes.

Michael Rubloff

Aug 26, 2026

Nodeconnector

Nodeconnector Releases a Free Gaussian Splat Cleanup HDA for Houdini 22

Michael Rubloff

Aug 26, 2026

Nodeconnector

Nodeconnector Releases a Free Gaussian Splat Cleanup HDA for Houdini 22

Nodeconnector's Gaussian Splat Cleanup HDA is a free modular Houdini 22 SOP that removes duplicates, floaters, alpha noise and hue outliers, and fills holes.

Michael Rubloff

Aug 26, 2026

Nodeconnector