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

Michael Rubloff

Michael Rubloff

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

Platforms

Babylon.js 9.27.1 Puts Gaussian Splats in Frame Graph

Babylon.js 9.27.1 Puts Gaussian Splats in Frame Graph Intro: Babylon.js 9.27.1 adds Gaussian splats to the frame graph geometry renderer, writing GLSL and WGSL prepass outputs for depth, normal, albedo and velocity.

Michael Rubloff

Sep 19, 2026

Platforms

Babylon.js 9.27.1 Puts Gaussian Splats in Frame Graph

Babylon.js 9.27.1 Puts Gaussian Splats in Frame Graph Intro: Babylon.js 9.27.1 adds Gaussian splats to the frame graph geometry renderer, writing GLSL and WGSL prepass outputs for depth, normal, albedo and velocity.

Michael Rubloff

Platforms

Niantic Spatial Launches Gaussian Splat Relighting

Niantic Spatial opens a design-partner beta for Gaussian splat relighting, using the aligned mesh and precomputed radiance transfer to vary sun, sky and rain.

Michael Rubloff

Sep 19, 2026

Platforms

Niantic Spatial Launches Gaussian Splat Relighting

Niantic Spatial opens a design-partner beta for Gaussian splat relighting, using the aligned mesh and precomputed radiance transfer to vary sun, sky and rain.

Michael Rubloff

CorbeauSplat 2.0.0-beta.4 Fixes Its 4DGS COLMAP Step

CorbeauSplat v2.0.0-beta.4 is a pre-release fixing a 4DGS bug that fed COLMAP every frame of every camera, and tracking renamed splat-transform CLI flags.

Michael Rubloff

Sep 18, 2026

CorbeauSplat 2.0.0-beta.4 Fixes Its 4DGS COLMAP Step

CorbeauSplat v2.0.0-beta.4 is a pre-release fixing a 4DGS bug that fed COLMAP every frame of every camera, and tracking renamed splat-transform CLI flags.

Michael Rubloff

Platforms

fVDB v0.6.0 Moves Gaussian Splatting API to Reality Capture

fVDB v0.6.0 moves the high-level Gaussian splatting API out of fvdb-core to fVDB Reality Capture, keeping the CUDA kernels and adding multi-GPU 3DGUT support.

Michael Rubloff

Sep 18, 2026

Platforms

fVDB v0.6.0 Moves Gaussian Splatting API to Reality Capture

fVDB v0.6.0 moves the high-level Gaussian splatting API out of fvdb-core to fVDB Reality Capture, keeping the CUDA kernels and adding multi-GPU 3DGUT support.

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

More from Michael Rubloff

More from Michael Rubloff

Platforms

Babylon.js 9.27.1 Puts Gaussian Splats in Frame Graph

Babylon.js 9.27.1 Puts Gaussian Splats in Frame Graph Intro: Babylon.js 9.27.1 adds Gaussian splats to the frame graph geometry renderer, writing GLSL and WGSL prepass outputs for depth, normal, albedo and velocity.

Michael Rubloff

Sep 19, 2026

Babylon.js

Platforms

Babylon.js 9.27.1 Puts Gaussian Splats in Frame Graph

Michael Rubloff

Sep 19, 2026

Babylon.js

Platforms

Babylon.js 9.27.1 Puts Gaussian Splats in Frame Graph

Babylon.js 9.27.1 Puts Gaussian Splats in Frame Graph Intro: Babylon.js 9.27.1 adds Gaussian splats to the frame graph geometry renderer, writing GLSL and WGSL prepass outputs for depth, normal, albedo and velocity.

Michael Rubloff

Sep 19, 2026

Babylon.js

Platforms

Niantic Spatial Launches Gaussian Splat Relighting

Niantic Spatial opens a design-partner beta for Gaussian splat relighting, using the aligned mesh and precomputed radiance transfer to vary sun, sky and rain.

Michael Rubloff

Sep 19, 2026

Niantic Spatial

Platforms

Niantic Spatial Launches Gaussian Splat Relighting

Michael Rubloff

Sep 19, 2026

Niantic Spatial

Platforms

Niantic Spatial Launches Gaussian Splat Relighting

Niantic Spatial opens a design-partner beta for Gaussian splat relighting, using the aligned mesh and precomputed radiance transfer to vary sun, sky and rain.

Michael Rubloff

Sep 19, 2026

Niantic Spatial

CorbeauSplat 2.0.0-beta.4 Fixes Its 4DGS COLMAP Step

CorbeauSplat v2.0.0-beta.4 is a pre-release fixing a 4DGS bug that fed COLMAP every frame of every camera, and tracking renamed splat-transform CLI flags.

Michael Rubloff

Sep 18, 2026

Corbeau Splat

CorbeauSplat 2.0.0-beta.4 Fixes Its 4DGS COLMAP Step

Michael Rubloff

Sep 18, 2026

Corbeau Splat

CorbeauSplat 2.0.0-beta.4 Fixes Its 4DGS COLMAP Step

CorbeauSplat v2.0.0-beta.4 is a pre-release fixing a 4DGS bug that fed COLMAP every frame of every camera, and tracking renamed splat-transform CLI flags.

Michael Rubloff

Sep 18, 2026

Corbeau Splat