Skip to main content

glTF Extensions

Below is a table covering most published glTF 2.0 extensions (both Khronos KHR_ and vendor‐specific EXT_/MSFT_ etc.) and whether luma.gl currently offers “built in” handling for them.

glTF extension support in luma.gl

ExtensionStatusNotes
KHR_draco_mesh_compressionDRACO-compressed meshes are decompressed via loaders.gl before scenegraph creation.
KHR_lights_punctualluma.gl’s ScenegraphNode and material system handle punctual lights if present in the glTF.
KHR_materials_pbrSpecularGlossinessMaterials with the specular-glossiness workflow are parsed by loaders.gl; luma.gl treats them as material parameters on the built scenegraph nodes.
KHR_materials_unlitUnlit materials are supported (rendered without lighting calculations).
KHR_texture_basisuBasisU textures are extracted by loaders.gl and passed as compressed textures to luma.gl where possible.
KHR_texture_transformExtra texture UV transforms (offset, scale, rotation) are respected by luma.gl’s material code.
KHR_materials_clearcoatluma.gl’s material system exposes clearcoat parameters but rendering support depends on the chosen shader model.
KHR_materials_iorValues are loaded but luma.gl shaders generally do not yet implement IOR-based effects.
KHR_materials_specularParameters are parsed but currently ignored by built–in PBR shaders.
KHR_materials_sheenSheen factors currently ignored unless the application provides custom shaders.
KHR_materials_transmissionluma.gl does not implement refraction or transmissive materials at this time.
KHR_materials_volumeVolume/thickness/attenuation features not implemented in the stock shader pipeline.
KHR_materials_iridescenceExperimental. Requires custom material/shader code to render.
KHR_materials_anisotropyExposed on the parsed material but no built-in shading support.
KHR_materials_emissive_strengthOverwrites emissive intensity value if present.
KHR_materials_variantsVariant mapping is parsed. Application must choose the active variant at runtime.
KHR_mesh_quantizationLoaders.gl unpacks quantized attribute data back to floats before handing to luma.gl.
KHR_animation_pointerLoaders.gl can expose the data; luma.gl does not currently map these pointers to runtime animations.
KHR_xmp_json_ldLoader exposes metadata but luma.gl does not interpret it.
KHR_materials_variantsSee above.
KHR_materials_translucencyNot widely used Some engines treat as prototype/experimental: no current luma.gl support.
EXT_meshopt_compressionLoaders.gl decompresses meshopt data; luma.gl then works with the decompressed results.
EXT_mesh_gpu_instancingInstanced mesh attributes produce luma.gl InstancedModel/Instanced geometry.
EXT_texture_webpWebP textures loaded via loaders.gl and passed to luma.gl Texture2D.
EXT_texture_avif(if browser supports AVIF) Dependent on browser support; once decoded the texture works like any other.
EXT_lights_image_basedPartial luma.gl has environment light constructs; ability to build from EXT_lights_image_based data is minimal without custom code.
EXT_primitive_bounding_boxData available Bounding boxes present in the glTF object; can be consumed for culling but no automatic pipeline.
EXT_texture_videoNot supported Video textures are not automatically created; would require application level integration.
MSFT_lod Not supportedluma.gl does not parse/use MSFT_lod extension by default.
MSFT_packing_occlusionNot consumed by default.
KHR_xxxMany experimental proposals exists, they would need custom integrations.

Summary

All the extensions marked as supported are at least parsed out of the loaded glTF data thanks to loaders.gl and mapped to luma.gl scenegraph constructs where possible.

luma.gl at present focuses on common real-time PBR material parameters (KHR_materials_* where noted), Draco & Meshopt mesh compression, and typical texture/UV/misc feature extensions.

Many KHR_materials_* extensions (especially those adding new BRDF properties) are parsed but are effectively ignored in the default luma.gl shader code. Application code could provide custom shaders to interpret them if needed.

Vendor‐specific or rarely seen extensions (for example MSFT_lod, MSFT_packing_occlusion, EXT_texture_video, etc.) generally have no built-in handling in luma.gl out of the box.

If you rely heavily on any of the more recent or experimental extensions, consider using loaders.gl to parse them and then implement the features in custom luma.gl shaders or pipeline stages. The list above should match (and extend) the shorter table normally shown in the loaders.gl documentation.

loaders.gl glTF support

The loaders.gl GLTF loader handles most of the data manipulation (DRACO compression, BasisU textures, extracting textures, etc.) so luma.gl generally relies on the loader results. For some extensions - e.g. advanced material models - luma.gl does not yet provide specific runtime support even if the loader can parse them.

The table below is a superset of that list and collects the other officially registered extensions as well.