Gaussian splats are highly realistic 3D scans that are quietly transforming industries like architecture, VFX, spatial computing, and game development (and if you don’t know what we’re talking about, read our introduction to splatting). They’re also huge files. Currently, the output of most splats is a PLY file, in which a detailed splat of an outdoor scene might exceed 250 MB. This makes downloading and uploading painfully slow, especially when not connected to Wi-Fi. Enter .SPZ, a new file format created just for splats.
In the same way that JPG makes it easy to store, share, process and use files in just about any program that edits photos, SPZ is intended as a universal format for splats. (Unlike JPG, which offers variable compression, SPZ has a single degree of compression that has been optimized for a filesize/quality tradeoff.)
We developed the format to make it faster to upload and download splats, and also so they'd require less storage and memory on your device. We've been using it within the app since the launch of Gaussian splatting in Scaniverse earlier this year; in August, we enabled SPZ export from Scaniverse and SPZ import to Niantic Studio, our free, web-based 3D and AR content creation tool.
Now, we are open sourcing the SPZ format so developers can see how it works, play with it, and contribute suggestions. The SPlat Zip will be freely available under an MIT license, so you can export SPZ files from Scaniverse on your smartphone and use them in your own app. You can find the source code on GitHub. We welcome community involvement.
A format specifically designed for splats
We believe 3D Gaussian splatting is the future of spatial imaging. Accordingly, splats deserve a dedicated file format that captures information unique to splats and makes them easy to work with. Here’s some technical detail about what we did.
The SPZ format captures information about spherical harmonics and other parts of a splat that don’t exist for a mesh. At the same time, it also uses some innovative techniques like fixed-point quantization and log encoding to compress data without losing image fidelity.
The SPZ format shrinks the file size from a standard PLY file by using more efficient ways to represent the different values that are associated with each Gaussian splat. Each point, known as a Gaussian, contains:
-
3 position values
-
4 rotation values
-
3 color values
-
3 scale values
-
1 transparency value
-
45 spherical harmonics values
In the PLY format, each of these is stored as a 32-bit (4 byte) floating point value, which requires 236 bytes per point. The SPZ file uses a combination of quantization and scaling to store each Gaussian's parameters in 64 bytes per point. The rotation values, for example, are stored as a quaternion, which is four components used to represent orientation in space. In PLY, these four components are stored as 32-bit floating points. With SPZ, they are stored as 3 components compressed as 8-bit signed integers, and the fourth component is calculated from the other three to save space.
The SPZ format also organizes the data in a column-based format, which tends to group similar values together and improves compression. As a final step, the data is compressed with gzip. These techniques together yield a 90% reduction in file size compared to PLY. Here’s a breakdown of the savings by parameter type:
Element | SPZ Format | PLY Format | Size Reduction (%) |
---|---|---|---|
Positions | 24-bit fixed point integer with adjustable fractional bits | 32-bit or 64-bit floating-point | 25%–62.5% |
Rotation | 3 components of a quaternion stored as 8-bit signed integers | 4 components of quaternion as 32-bit floats | 81.25% |
Colors (RGB) | 8-bit unsigned integers per channel | Typically 8-bit or 32-bit floats per channel | 0%–75% |
Scales | 8-bit log-encoded integer | Typically 32-bit or 64-bit floating-point | 75%–87.5% |
Alphas (Transparency) | 8-bit unsigned integer | Typically 32-bit float | 75% |
Spherical Harmonics | 8-bit signed integers for coefficients, with 4-5 bits of precision | Varies, but usually stored with higher precision (e.g., 32-bit floats) | 75%–87.5% |
An SPZ file embedded in an iframe. Drag and zoom!
Polaroid for 3D
Our goal is to make it as easy as possible to get creative with making, sharing and using splats.With the Scaniverse app, you can process a splat right on your phone in about the same time it takes to develop instant film—you can think of it as Polaroid for 3D. From there, you can export an SPZ file for use anywhere else (and while you're in the app, we invite you to upload splats of public places to the global map).
Download and log in to Scaniverse on your phone, then use your Niantic log-in to join us on the Community site, where we've set up a Developer section for you to share what you’ve made, ask questions, or make suggestions.
We can't wait to see what the XR community does with splatting in the months and years to come, and we hope SPZ helps accelerate the technology's development.