3dtiled-to-3dtiles
3DTiles + glTF

KHR gaussian splatting

Khronos glTF extension for storing 3D Gaussian splats as point cloud primitives, plus its SPZ compression child extension.

KHR_gaussian_splatting

Source: https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_gaussian_splatting/README.md Status: Release Candidate (2026)

Overview

Defines basic support for storing 3D Gaussian splats in glTF assets as point cloud primitives.

Splats are defined by: position, rotation, scale, opacity, and spherical harmonics.

Extension Object Properties

PropertyTypeDescriptionRequired
kernelstringGaussian kernel typeYes
colorSpacestringColor space of reconstructed valuesYes
projectionstringProjection methodNo (default: "perspective")
sortingMethodstringSorting method for renderingNo (default: "cameraDistance")

Ellipse Kernel Attributes

Splat DataAttribute SemanticTypeRequired
PositionPOSITIONVEC3 floatYes
RotationKHR_gaussian_splatting:ROTATIONVEC4 float/byte/short normalizedYes
ScaleKHR_gaussian_splatting:SCALEVEC3 float/ubyte/ushortYes
OpacityKHR_gaussian_splatting:OPACITYSCALAR float/ubyte/ushort normalizedYes
SH degree 0KHR_gaussian_splatting:SH_DEGREE_0_COEF_0VEC3 floatYes
SH degree 1KHR_gaussian_splatting:SH_DEGREE_1_COEF_[0-2]VEC3 floatNo
SH degree 2KHR_gaussian_splatting:SH_DEGREE_2_COEF_[0-4]VEC3 floatNo
SH degree 3KHR_gaussian_splatting:SH_DEGREE_3_COEF_[0-6]VEC3 floatNo

Covariance Matrix

Σ = M·C·Cᵀ·Mᵀ

Where M = upper-left 3×3 of node transform, C = scale×rotation matrix.

Spherical Harmonics Color

Color = SH_0,0 × 0.2820947917738781 + 0.5

(plus higher degree terms for view-dependent color)

JSON Example

{
  "meshes": [{ "primitives": [{
    "attributes": {
      "POSITION": 0,
      "KHR_gaussian_splatting:SCALE": 2,
      "KHR_gaussian_splatting:ROTATION": 3,
      "KHR_gaussian_splatting:OPACITY": 4,
      "KHR_gaussian_splatting:SH_DEGREE_0_COEF_0": 5
    },
    "mode": 0,
    "extensions": {
      "KHR_gaussian_splatting": {
        "kernel": "ellipse",
        "colorSpace": "srgb_rec709_display"
      }
    }
  }]}]
}

Full Specification

See full spec at: https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_gaussian_splatting/README.md


Compression extension: KHR_gaussian_splatting_compression_spz_2

Source: https://github.com/KhronosGroup/glTF/pull/2531 Status: Draft (2026)

Extension for compressing 3D Gaussian splats using the SPZ v2 format (Niantic Spatial). Depends on KHR_gaussian_splatting above.

Usage

"extensions": {
  "KHR_gaussian_splatting": {
    "extensions": {
      "KHR_gaussian_splatting_compression_spz_2": {
        "bufferView": 0
      }
    }
  }
}
"extensionsUsed": ["KHR_gaussian_splatting", "KHR_gaussian_splatting_compression_spz_2"]

SPZ → glTF Attribute Mapping

SPZ fieldglTF AttributeConversion
positionsPOSITION
colorsCOLOR_0 RGB0.5 + 0.282095 × x
alphasCOLOR_0 Asigmoid(x) = 1/(1+e^-x)
scalesKHR_gaussian_splatting:SCALEexp(x)
rotationsKHR_gaussian_splatting:ROTATION
sh[0..2]SH_DEGREE_1_COEF_0
sh[3..5]SH_DEGREE_1_COEF_1
sh[6..8]SH_DEGREE_1_COEF_2
sh[9..44]SH_DEGREE_2..3_COEF_*

Coordinate system: Left-Up-Front (LUF) in SPZ PackOptions/UnpackOptions for glTF compatibility.

Resources

On this page