Skip to content
Permalink
main
Switch branches/tags
Go to file
17 contributors

Users who have contributed to this file

@pjcozzi @emackey @lexaknyazev @mlimper @ggetz @donmccurdy @sbtron @kring @oddhack @fanzhanggoogle @vallentin @OmarShehata

glTF Extension Registry

Extensions for glTF 2.0

Ratified Khronos Extensions for glTF 2.0

Khronos extensions use the reserved KHR prefix. Once ratified by the Khronos Group, they are covered by the Khronos IP framework. Extensions that are intended to be ratified can also use the KHR prefix to avoid name/code/version thrashing. Khronos members can submit an extension for ratification, which is then voted on by the Khronos Board of Promoters.

The following extensions have been ratified by the Khronos Group:

Multi-Vendor Extensions for glTF 2.0

When an extension is implemented by more than one vendor, its name can use the reserved EXT prefix. Multi-vendor extensions are not covered by the Khronos IP framework.

Vendor Extensions for glTF 2.0

The list of vendor prefixes is maintained in Prefixes.md. Any vendor, not just Khronos members, can request an extension prefix by submitting an issue on GitHub requesting one. Requests should include:

  • The name of the prefix.
  • The name of the vendor requesting the prefix.
  • The vendor's URL and/or contact information.

Vendor extensions are not covered by the Khronos IP framework.

Archived Extensions for glTF 2.0

Archived extensions may be useful for reading older glTF files, but they are no longer recommended for creating new files.

In-progress Khronos and multi-vendor extensions for glTF 2.0

Draft Khronos (KHR) extensions are not ratified yet. Multi-vendor (EXT) extensions do not require ratification, but may still change before they are complete.

This section tracks the status of Khronos and multi-vendor extensions that are either already in development, or that we feel show enough consensus to be highly likely for future development. We welcome feedback for these and all other extensions (see GitHub issues). This list is intended to give a general sense of current priorities and direction.

For features that are not listed here but may be important for different uses, we encourage the community to begin with vendor extensions (which do not require review), reach out for feedback and collaborators, and as consensus forms we may consider the best way to bring a vendor extension into the broader ecosystem: via multi-vendor extensions, Khronos extensions, or inclusion in a future version of the glTF specification.

Extension Status
KHR_materials_iridescence Release Candidate.
KHR_animation_pointer Ready for testing.
KHR_audio Ready for testing.
KHR_materials_anisotropy Ready for testing.
KHR_materials_diffuse_transmission Ready for testing.
KHR_materials_sss In development.

Extensions for glTF 1.0

Khronos extensions for glTF 1.0

Vendor extensions for glTF 1.0

About glTF Extensions

glTF extensions extend the base glTF model format. Extensions can introduce new properties (including properties that reference external data, and the extension can define the format of those data), new parameter semantics, reserved IDs, and new container formats. Extensions are written against a specific version of glTF and may be promoted to core glTF in a later glTF version.

Extension Mechanics

All glTF object properties (see glTFProperty.schema.json) have an optional extensions object property that can contain new extension-specific properties. This allows extensions to extend any part of glTF, including geometry, materials, animations, etc. Extensions can also introduce new parameter semantics, reserved IDs, and new formats containing glTF.

Extensions can't remove existing glTF properties or redefine existing glTF properties to mean something else.

Examples include:

  • New properties: KHR_texture_transform introduces a set of texture transformation properties, e.g.,
{
  "materials": [{
    "emissiveTexture": {
      "index": 0,
      "extensions": {
        "KHR_texture_transform": {
          "offset": [0, 1],
          "rotation": 1.57079632679,
          "scale": [0.5, 0.5]
        }
      }
    }
  }]
}

Extensions may add new properties and values, such as attribute semantics or texture mime types. In all Khronos (KHR) extensions, and as best practice for vendor extensions, these feature additions are designed to allow safe fallback consumption in tools that do not recognize an extension in the extensionsUsed array.

All extensions used in a model are listed as strings in the top-level extensionsUsed array; all required extensions are listed as strings in the top-level extensionsRequired array, e.g.,

{
  "extensionsUsed": [
    "KHR_materials_pbrSpecularGlossiness", "VENDOR_physics"
  ],
  "extensionsRequired": [
    "KHR_materials_pbrSpecularGlossiness"
  ]
}

This allows an engine to quickly determine if it supports the extensions needed to render the model without inspecting the extensions property of all objects.

Creating Extensions

To create a new extension, use the extension template and open a pull request into this repo. Make sure to add the extension to the glTF Extension Registry (top of this file).

If the extension adds a new top-level array (by extending the root glTF object), its elements should inherit all properties of glTFChildOfRootProperty.schema.json. Other objects introduced by the extension should inherit all properties of glTFProperty.schema.json. By glTF 2.0 conventions, schemas should allow additional properties. See KHR_lights_punctual as an example.

If lack of extension support prevents proper geometry loading, extension specification must state that (and such extension must be mentioned in extensionsRequired top-level glTF property).

Naming

NOTE: For historical reasons, older extensions may not follow these guidelines. Future extensions should do so.

  1. Names MUST begin with an UPPERCASE prefix, followed by an underscore. Prefixes are KHR for Khronos extensions, EXT for Multi-vendor extensions, and others may be reserved for Vendor extensions.
  2. Names MUST use lowercase snake-case following the prefix, e.g. KHR_materials_unlit.
  3. Names SHOULD be structured as <PREFIX>_<scope>_<feature>, where scope is an existing glTF concept (e.g. mesh, texture, image) and feature describes the functionality being added within that scope. This structure is recommended, but not required.
  4. Scope SHOULD be singular (e.g. mesh, texture), except where this would be inconsistent with an existing Khronos extension (e.g. materials, lights).

Extensions vs. Extras

In addition to extensions, the extras object can also be used to extend glTF. This is completely separate from extensions.

All glTF object properties allow adding new properties to an extras object sub-property, e.g.,

{
  "asset": {
    "version": 2.0,
    "extras": {
      "guid": "9abb92a3-39cf-4986-a758-c43d4bb4ab58",
    }
  }
}

This enables glTF models to contain application-specific properties without creating a full glTF extension. This may be preferred for niche use cases where an extension would not be widely adopted.