three.js Ships Its Native Gaussian Splat Renderer and Splat Raycasting in r186

Michael Rubloff

three.js has released r186, the first numbered release of the library to carry a native gaussian splat renderer. The renderer, contributed by Ben Houston, merged in August, and it has been extended steadily since, so r186 carries the base implementation along with more than a dozen follow on changes to it.
The shipping class is GaussianSplat, in examples/jsm/objects. GaussianSplatMesh was renamed to GaussianSplat, and the dedicated PLY loader originally added as PLYGaussianSplatLoader was renamed to GaussianSplatPLYLoader.
Raycasting was also added to the release, contributed by Garrett Johnson and Ben Houston. GaussianSplat tests a ray against the mesh bounding sphere before touching any individual splat, then treats each surviving splat as the ellipsoid implied by its covariance matrix and solves the intersection from a matrix inverse and determinant on that covariance.
Other capabilities include per mesh bounding boxes and frustum culling, inline splat data reads to speed bounding box generation, sort invalidation for transforms, and packed RGBA8 colors in storage buffers. GaussianSplatUtils was simplified onto three.js math classes.
The glTF extension gained view dependent color through spherical harmonics. r186 evaluates the harmonic contribution once per splat in a compute pre pass and writes one vec4, 16 bytes per splat, into a storage buffer, so all four vertices of a splat quad read the same result. SPZLoader picked up SPZ version 4 and loader coverage at r186 runs to ply, spz, splat, ksplat, and the glTF KHR_gaussian_splatting extension.
Object3D itself changed in r186, gaining dispose() and intersectsFrustum(), which reaches every library that subclasses it. Spark, World Labs' MIT licensed splat renderer for three.js, merged a change calling super.dispose() in its Object3D subclasses roughly two and a half hours before r186 shipped. That change sits on main, and Spark's newest tag remains v2.1.0.
Considering SuperSplat 3.0 just released yesterday, Spark.js has seen elevated PRs, and now this, it seems like it's going to be a busy week for gaussian splatting on the web. three.js r186 is available now.
New to Gaussian Splatting? Start here




