An extension adds data to a glTF file without changing the core format. A name has a
vendor prefix: KHR_ for extensions ratified by the Khronos Group,
EXT_ for multi-vendor ones, and a company’s own prefix for the rest. The
registry is kept in the Khronos glTF repository.
Declaring an extension
extensionsUsed– an array of the names of every extension the file uses anywhere.extensionsRequired– the names, among those, without which the file cannot be shown correctly (such as Draco or meshopt compression, orKHR_mesh_quantization). A reader that does not know a required extension must refuse the file.- An
extensionsobject – a map from an extension name to that extension’s data, allowed on the root object and on most objects inside it (nodes, materials, textures, primitives, buffer views, accessors, animation channels…).
{
"extensionsUsed": ["KHR_materials_clearcoat"],
"materials": [{
"pbrMetallicRoughness": { "baseColorFactor": [0.8, 0, 0, 1] },
"extensions": { "KHR_materials_clearcoat": { "clearcoatFactor": 1.0 } }
}]
}
Compression
Both extensions replace the plain accessor data with a compressed stream. A reader has to decode them with the matching decoder; the explorer does not, so it lists the primitives that use them and leaves them out of its pictures.
| Extension | Where | What it holds |
|---|---|---|
KHR_draco_mesh_compression | primitive | bufferView (the compressed Draco stream) and attributes, which maps each semantic (POSITION…) to its attribute number inside the Draco stream. The accessors of the primitive keep their types and counts but have no bufferView. See Draco. |
EXT_meshopt_compression | bufferView | buffer, byteOffset, byteLength (the compressed bytes), byteStride, count, mode (ATTRIBUTES, TRIANGLES or INDICES) and an optional filter (NONE, OCTAHEDRAL, QUATERNION, EXPONENTIAL). The bufferView’s own buffer may be a fallback buffer that has no data, marked EXT_meshopt_compression: { "fallback": true }. |
KHR_mesh_quantization | file | Not compression of a stream: it allows byte and short components, normalised or not, for POSITION, NORMAL, TANGENT and TEXCOORD_n, with the node transform restoring the scale. The explorer draws these as they declare. |
Material extensions
They sit in a material’s extensions and add layers to the
metallic-roughness model. A …Texture property is a texture reference
(index, optional texCoord); the channel it reads is noted.
| Extension | Properties and defaults |
|---|---|
KHR_materials_unlit | none: the base colour is shown without lighting |
KHR_materials_emissive_strength | emissiveStrength 1.0, a multiplier that lets emission exceed 1 |
KHR_materials_ior | ior 1.5, the index of refraction |
KHR_materials_specular | specularFactor 1.0, specularTexture (alpha), specularColorFactor [1, 1, 1], specularColorTexture (RGB) |
KHR_materials_transmission | transmissionFactor 0.0, transmissionTexture (red): light passing through a thin surface |
KHR_materials_volume | thicknessFactor 0.0, thicknessTexture (green), attenuationDistance (infinite by default), attenuationColor [1, 1, 1] |
KHR_materials_clearcoat | clearcoatFactor 0.0, clearcoatTexture (red), clearcoatRoughnessFactor 0.0, clearcoatRoughnessTexture (green), clearcoatNormalTexture |
KHR_materials_sheen | sheenColorFactor [0, 0, 0], sheenColorTexture (RGB), sheenRoughnessFactor 0.0, sheenRoughnessTexture (alpha) |
KHR_materials_iridescence | iridescenceFactor 0.0, iridescenceTexture (red), iridescenceIor 1.3, iridescenceThicknessMinimum 100, iridescenceThicknessMaximum 400 (nanometres), iridescenceThicknessTexture (green) |
KHR_materials_anisotropy | anisotropyStrength 0.0, anisotropyRotation 0.0 (radians), anisotropyTexture (red and green hold a direction, blue the strength) |
KHR_materials_dispersion | dispersion 0.0, the spread of refraction by wavelength |
KHR_materials_diffuse_transmission | diffuseTransmissionFactor 0.0, diffuseTransmissionTexture, diffuseTransmissionColorFactor [1, 1, 1], diffuseTransmissionColorTexture |
KHR_materials_pbrSpecularGlossiness | archived, replaced by KHR_materials_specular with KHR_materials_ior: diffuseFactor [1, 1, 1, 1], diffuseTexture, specularFactor [1, 1, 1], glossinessFactor 1.0, specularGlossinessTexture |
KHR_materials_variants | root: variants, an array of objects with a name. Primitive: mappings, each with a material and the variants it applies to |
Texture, scene and other extensions
| Extension | Where | What it does |
|---|---|---|
KHR_texture_transform | texture reference | offset [0, 0], rotation 0 (radians), scale [1, 1] and an optional texCoord that replaces the reference’s own |
KHR_texture_basisu | texture | source: an image in KTX 2.0 with Basis Universal compression, in place of the PNG or JPEG |
EXT_texture_webp, EXT_texture_avif | texture | source: a WebP or AVIF image; an ordinary source is kept as a fallback unless the extension is required |
KHR_lights_punctual | root, node | Root: lights, each with type (directional, point or spot), color, intensity, range and, for a spot, spot with innerConeAngle and outerConeAngle. Node: light, the index of one. |
EXT_mesh_gpu_instancing | node | attributes maps TRANSLATION, ROTATION and SCALE to accessors with one value for each instance of the node’s mesh. The explorer draws up to 100,000 instances. |
KHR_animation_pointer | animation channel | A channel whose target.path is pointer and whose extension holds a JSON pointer to any property (a material factor, a light, a camera…) |
KHR_node_visibility | node | visible: false hides the node and its children |
KHR_xmp_json_ld | root, objects | XMP metadata packets as JSON-LD, and references to them |
EXT_mesh_features, EXT_structural_metadata | primitive, root | Feature IDs and property tables, used by 3D Tiles |
In the explorer
Dropping a glTF or GLB file on the explorer lists every extension the file declares or uses, where it was found and how the explorer treats it. Textures and extensions that only describe shading are listed and explained in the tree but do not change the pictures; compression is flagged and not decoded.
Not described
What this page and the explorer leave out.
- Reference: only the extensions listed here are described, from memory and without the Khronos registry to check, so property names and defaults are unconfirmed. Newer extensions (such as volume scattering, Gaussian splatting and physics) and vendor extensions are not described.
- Viewer: it lists every extension a file names and says whether it knows it. Only KHR_mesh_quantization, KHR_texture_transform (base colour), KHR_materials_pbrSpecularGlossiness (diffuse colour) and EXT_mesh_gpu_instancing change the pictures; Draco and meshopt are flagged and not decoded; the rest are shown in the tree only.