Many custom WebGL 3D Gaussian shaders and open-source Three.js Gaussian viewers are designed to read the straightforward 32-byte linear .splat structure.
When you capture a scene with Niantic Scaniverse (which outputs .spz), converting it directly to .splat unpacks the compressed streams into standard 32-byte splat blocks ready for direct GPU vertex buffer binding.
Direct GPU Stream Conversion
[Niantic SPZ Archive]
│
├── Inflate Deflate Stream
├── Expand Positions (X, Y, Z Float32)
├── Unpack Scales & Quaternions
└── Interleave into 32-Byte Packed Blocks
│
▼
[.splat Array (Ready for Direct GPU Buffer Upload)]
| Output Channel | Byte Offset | Type | Description |
|---|---|---|---|
| Position | 0..11 | Float32 $\times 3$ | Center coordinate $x, y, z$ |
| Scale | 12..23 | Float32 $\times 3$ | Ellipsoid radii $s_0, s_1, s_2$ |
| Color & Alpha | 24..27 | UInt8 $\times 4$ | RGBA color values |
| Rotation | 28..31 | UInt8 $\times 4$ | Normalized quaternion values |
Conversion Steps
- Drag your
.spzfile into the upload zone. - Select SPLAT target format.
- Click Convert & Download .SPLAT for immediate use in your custom WebGL shaders.