Skip to main content

Splat File Formats

PlayCanvas supports five formats for 3D Gaussian Splat data:

PLY Format - Source & Interchange

The industry standard for Gaussian splat data. Uncompressed, full precision, and universally compatible.

  • Use for: Training, editing, archival storage
  • File size: Large (anything up to several GB)
  • Quality: Lossless

SOG Format - Runtime & Delivery

Compressed format optimized for web delivery. 15-20× smaller than PLY with lossy compression.

  • Use for: Web apps, real-time rendering, CDN delivery
  • File size: Small (compressed)
  • Quality: Visually optimized

Streamed SOG Format - Large-Scene Streaming

SOG chunks organized into a spatial tree with multiple levels of detail. Viewers stream in only the chunks and detail levels needed for the current camera.

  • Use for: Very large scenes (tens of millions of Gaussians), progressive loading
  • File size: Small per chunk, loaded on demand
  • Quality: Visually optimized, view-dependent detail

GLB Format - Standards-Based Interchange

Binary glTF with the Khronos KHR_gaussian_splatting extension. Splats travel through standard glTF pipelines and can be combined with regular mesh content.

  • Use for: Interoperability, standard glTF tooling and pipelines
  • File size: Large (uncompressed, similar to PLY)
  • Quality: Lossless

SPZ Format - Compressed Interchange

Niantic's open source compressed splat format, roughly 10× smaller than PLY. Loaded via a parser script that ships with the engine.

  • Use for: Assets from the Niantic/Scaniverse ecosystem
  • File size: Small (compressed)
  • Quality: Visually optimized

Quick Comparison

PLYSOGStreamed SOGGLBSPZ
SizeLargeSmall (15-20× compression)Small (SOG chunks, loaded on demand)LargeSmall (~10× compression)
QualityLosslessLossyLossy, view-dependent detailLosslessLossy
UseSource/editingRuntime/deliveryVery large scenesglTF interchangeNiantic ecosystem
SpeedSlow loadingFast loadingProgressive streamingFast loadingFast loading

Workflow

  1. Train and edit with PLY
  2. Convert to SOG for production using SplatTransform
  3. For very large scenes, convert to Streamed SOG instead
  4. Use GLB when splats need to flow through standard glTF pipelines
  5. Load SPZ directly when assets come from tools like Scaniverse
  6. Deploy for optimal performance