glTF Extension Support
This page summarizes the glTF extensions that @luma.gl/gltf handles in its
default loader-to-scenegraph path.
Each extension name links to its official Khronos-managed specification page in
the glTF extension registry repository.
Status meanings:
✅: works end-to-end in the default luma.gl glTF pipeline.✅ *️⃣: works in the default pipeline, with low-level decoding handled by@loaders.gl/gltfduring load.🚧: work in progress for this release; implemented paths are still under active validation.*️⃣: extension data is preserved or exposed, but applications still need to decide how to use it at runtime.App: applications are responsible for selecting and applying the feature.❌: no built-in handling today.
| Extension | Support | Notes |
|---|---|---|
| ✅ *️⃣ |
| |
| ✅ *️⃣ | Meshopt-compressed primitives are decoded during load and converted to regular glTF meshes. | |
| ✅ *️⃣ | Quantized accessors are unpacked during load before geometry creation. | |
| ❌ | GPU instancing data is not yet converted into luma.gl instanced draw setup. | |
| ✅ | Punctual lights are parsed and exposed as an array of luma.gl | |
| ✅ | Unlit materials bypass the default lighting calculations. | |
| ✅ 🚧 | Emissive strength now multiplies the emissive contribution in the stock PBR shader. | |
| ✅ 🚧 | The stock shader now applies specular intensity and color factors and textures to the dielectric F0 term. | |
| ✅ 🚧 | The stock shader now drives dielectric reflectance from the glTF IOR value. | |
| ✅ 🚧 | The stock shader now applies transmission to the base layer and exposes transparency through alpha, without a scene-color refraction buffer. | |
| ❌ | Diffuse-transmission shading is not implemented in the stock PBR shader. | |
| ✅ 🚧 | Thickness factor plus attenuation color and distance now tint transmitted light in the stock shader. | |
| ❌ | Chromatic dispersion is not implemented in the stock PBR shader. | |
| ❌ | Volume scattering is not implemented in the stock PBR shader. | |
| ✅ 🚧 | The stock shader now adds a secondary clearcoat lobe from the clearcoat and clearcoat-roughness inputs. | |
| ✅ 🚧 | The stock shader now adds a sheen lobe using the sheen color and roughness inputs. | |
| ✅ 🚧 | The stock shader now tints specular response with a view-dependent thin-film iridescence approximation driven by the extension inputs. | |
| ✅ 🚧 | The stock shader now shapes highlights and IBL response with an anisotropy-direction approximation. | |
| *️⃣ | loaders.gl can preserve the extension data, but | |
| App | Variant metadata can be loaded, but applications must choose and apply variants themselves. | |
| ✅ *️⃣ | BasisU / KTX2 textures are passed through as compressed textures when supported by the device. | |
| ✅ *️⃣ |
| |
| ✅ *️⃣ | Same as WebP: the source is resolved during load, with final support depending on decode support. | |
| ✅ | loaders.gl rewrites the core material UV sets during load before luma.gl creates geometry. | |
| ✅ 🚧 | Node TRS pointers, selected material factor pointers, and animated
| |
| ❌ | Node-visibility animations and toggles are not mapped onto runtime scenegraph state. | |
| ❌ | Metadata payloads remain in the loaded glTF, but luma.gl does not interpret them. | |
| ❌ | Metadata is available in the loaded glTF, but luma.gl does not interpret it. | |
| ❌ | Use | |
| ❌ | Video textures are not created automatically by the glTF pipeline. | |
| ❌ | Level-of-detail switching is not implemented in the stock scenegraph loader. |
Notes
- The built-in material extension rows are implemented in the stock
pbrMaterialshader. Some of the more advanced effects, such as transmission, iridescence, and anisotropy, use pragmatic approximations because the default pipeline does not maintain a scene-color refraction buffer or a more specialized anisotropic BRDF. - Some extensions have partial field coverage. For example, luma.gl currently
wires the main textures and factors for several
KHR_materials_*extensions, but does not yet implement every auxiliary texture path in the stock shader. @luma.gl/gltfrelies on@loaders.gl/gltffor low-level extension decoding, decompression, and glTF post-processing.