Introduction
3D Gaussian splatting, introduced by Kerbl, Kopanas, Leimkühler and Drettakis at Inria in 2023, turns photos of a scene into millions of small, semi-transparent 3D Gaussians, or splats, that can be drawn in real time. The training code saves a scene as a PLY file: one vertex a splat, with its position, scale, rotation, opacity and colour as vertex properties. That PLY layout became the common exchange format for splat scenes.
A splat PLY is an ordinary binary PLY file, and any PLY reader can open it. What makes it a splat scene is the set of property names in its header. There are two layouts in wide use.
Variations
| Format | Variation | About | Open |
|---|---|---|---|
.PLY | 3D Gaussian Splatting PLY | The training code’s splat layout: one float vertex a splat, 248 bytes at degree 3. | Open |
.PLY | PlayCanvas compressed PLY | Chunks of 256 splats with ranges, and four packed words a splat. | Open |
3D Gaussian Splatting PLY
The layout of the original training code: one vertex element of
float properties, x y z, nx ny nz,
f_dc_0 to f_dc_2, f_rest_0 to
f_rest_44, opacity, scale_0 to
scale_2 and rot_0 to rot_3, which is 248
bytes a splat. The values are kept as the model trains them: scales as logarithms,
opacity before the sigmoid.
How to tell it apart: the vertex element has f_dc_0,
opacity, scale_0 and rot_0, and there is no
chunk element.
PlayCanvas compressed PLY
A smaller layout from PlayCanvas, written by its SuperSplat editor and its splat-transform tool. Splats are grouped in chunks of 256, each with the ranges of its positions, scales and colours, and each splat is four packed 32-bit words, with the spherical harmonics in bytes. A scene takes about a quarter of the space.
How to tell it apart: a chunk element with min_x to
max_scale_z, and a vertex element of
packed_position, packed_rotation,
packed_scale and packed_color.
Also used for
- Polygon File Format – Stanford’s mesh and point cloud format, with a header that declares every property.
Links
Software
- SuperSplat – PlayCanvas’s free open source splat editor, which reads and writes both layouts (web)
- GaussianSplats3D – three.js viewer that loads splat PLY files (web)
Developers
- gaussian-splatting – Inria’s training and viewing code, which defined the layout (Python, C++, CUDA)
- splat-transform – converts between splat formats and writes compressed PLY (JavaScript)
- plyfile – reads and writes PLY with NumPy; the training code uses it (Python)
Reference
- 3D Gaussian Splatting for Real-Time Radiance Field Rendering – the paper’s page at Inria