To put splats on the globe, he replaced the renderer

Image: 3D-Tiles-RendererJS-3DGS-Plugin · Tools

Aug 28, 2026, 3:35 PM ETTools
Two standards have been circling each other for most of a year. Khronos defined how a Gaussian splat lives inside a glTF file; the OGC's 3D Tiles defines how you stream a planet's worth of glTF to a browser. A plugin published this morning puts them together, and the interesting part is what its maintainer had to throw away to do it.
Why it matters: 3D Tiles is how large geospatial scenes actually get delivered — a spatial hierarchy of tiles, fetched on demand, disposed when they leave view. It is the format behind most serious terrain and city streaming on the web, and `3d-tiles-renderer`, maintained under NASA-AMMOS, is its three.js implementation.
Until now splats have mostly arrived as single monolithic files: one capture, one scene, load it all. Making a splat a tile payload means it inherits everything the tiling ecosystem already knows how to do — hierarchical refinement, memory accounting, disposal, fading between levels — and it means a splat capture can sit on a globe next to terrain and photogrammetry rather than in its own viewer.
The plugin reads glTF tiles carrying `KHR_gaussian_splatting` compressed with `KHR_gaussian_splatting_compression_spz_2`. That is Khronos's splat extension and Niantic's SPZ codec, arriving inside an OGC transport, which is about as much standards-stack composition as this field has managed so far.
What changed today: Version 0.2.0 replaced `@sparkjsdev/spark` — World Labs' widely used three.js splat renderer — with `gaussian-splat-lite`, a renderer the same author wrote. The stated reasons are native large-coordinate precision, faster sorting, and faster and more accurate raycasting, at similar CPU and GPU memory cost.
The precision point is the substantive one, and it is a problem geospatial developers will recognise immediately. Earth-centred, Earth-fixed coordinates put every object several million metres from the origin. At that magnitude single-precision floats quantise to something like half a metre, so geometry jitters as the camera moves. The standard fix is to render relative to the camera rather than the origin, and a splat renderer built for object-scale captures has no particular reason to do that. One built for the globe has to.
The rest of 0.2.0 is architectural: applications now own the lifecycle of the scene-level renderer instead of the plugin owning it, and splat tiles construct meshes directly from SPZ bytes. It is a breaking change and ships with a migration guide. A follow-up hours later fixed splat tiles losing sync when an ancestor transform changed.
Yes, but: This is one developer's project. The plugin has 120 stars and 17 forks — real traction for a single-maintainer library, and nothing like an institutional commitment. The renderer it now depends on is days old and effectively unknown, which trades a mature dependency for one with a single set of eyes on it.
The precision rationale is the maintainer's own, stated in a changelog. It is technically coherent and matches a well-documented problem, but nobody has published a comparison showing Spark failing at ECEF scale, and I have not measured one.
The supported surface is also narrow by design. Tiles must be glTF or GLB, must carry `KHR_gaussian_splatting`, and must use SPZ v2 compression — raw Gaussians and other compression schemes are simply not handled. That is a reasonable line for a small project to draw, and it means the plugin only works on content produced by a fairly specific pipeline.
The big picture: The week's pattern is browser stacks discovering that splats need the same infrastructure everything else already has. luma.gl added out-of-core paging with a residency budget; Babylon.js added a render budget and multi-camera LOD; this adds tiling and disposal by inheriting them wholesale from a geospatial standard.
The recurring lesson is that the general-purpose splat renderers are object-scale tools. Every project that tries to put a capture somewhere real — a city, a survey, a globe — ends up either extending one or, as here, writing its own.



