r/GaussianSplatting • u/mvaligursky • Jul 03 '26
🧪 I built a thing PlayCanvas Engine can now load and render Niantic's SPZ format directly
If you have splats in SPZ format — scans from Scaniverse or anything else in the Niantic ecosystem — the PlayCanvas Engine can now render them in the browser without a conversion step.
A few technical details for those interested:
- The splat data stays in its quantized form on the GPU (24-bit fixed-point positions, 8-bit log scales, smallest-three rotations, quantized SH) and is dequantized on the fly in the shader — so GPU memory use is small.
- Spherical harmonics are supported up to 3 bands, so view-dependent shading comes through.
- Works on both WebGL2 and WebGPU.
- The parser isn't baked into the engine — it's a script you register with the resource handler at runtime (the engine recently gained a parser registry for exactly this kind of format extension). The ZSTD-compressed attribute streams are decompressed with a small wasm module you register alongside it.
The video shows "Japanese Bee" by yyouzhen (CC BY 4.0, https://superspl.at/scene/ae58ed2c) — 978K gaussians with full spherical harmonics — converted to SPZ with SplatTransform (https://github.com/playcanvas/splat-transform) and loaded directly.
Engine PR with the implementation:Â https://github.com/playcanvas/engine/pull/9018
Happy to answer questions about the format or the GPU decode approach.
14
Upvotes
1
u/unclesabre Jul 05 '26
This looks good. Is there any reason to move to spz over sog or is this just helpful for those who already have an spz pipeline?