How does KHR_mesh_quantization interact with skinning, morph targets and animation, and what must an encoder do?
Corrected 2026-10-23 - see C3-B642-04; the original statements below are kept for history and are superseded where the correction says so. KHR_mesh_quantization lets POSITION, NORMAL, TANGENT and TEXCOORD (and morph deltas) use byte/short types and adds no new dequantisation transform: non-skinned meshes fold it into the node transform (possibly via an extra leaf node so existing animation is undisturbed), skinned meshes into inverseBindMatrices, and texture coordinates into KHR_texture_transform; signed-normalized decoding differs on OpenGL ES 2.0/WebGL1.
KHR_mesh_quantization lets POSITION, NORMAL, TANGENT and TEXCOORD (and morph deltas) use byte/short types and adds no new dequantisation transform: non-skinned meshes fold it into the node transform (possibly via an extra leaf node so existing animation is undisturbed), skinned meshes into inverseBindMatrices, and texture coordinates into KHR_texture_transform; signed-normalized decoding differs on OpenGL ES 2.0/WebGL1.
Curator correction 2026-10-23 (discovery audit record C3-B642-04; sources re-fetched 2026-10-23, excerpts re-located by curator GET): Problem. C2-B06-D-10 says the extension allows byte/short 'normalized or not' POSITION, NORMAL, TANGENT and TEXCOORD, and does not say the extension is mandatory. Conditions. glTF assets using KHR_mesh_quantization. Method. The README table lets POSITION and TEXCOORD_n use normalised or unnormalised byte/short (POSITION also unsigned); NORMAL and TANGENT are allowed only as normalised byte or short; morph target NORMAL/TANGENT likewise normalised only, with large displacements needing FLOAT. Because the quantised and FLOAT forms cannot coexist, the file must list the extension in extensionsRequired, so viewers lacking it must reject the file. Failure modes. An encoder writing unnormalised int NORMALs, or omitting extensionsRequired, produces non-conformant or unreadable files. Limitations. Table detail was read from the README at commit 7cee0fc; other aspects of C2-B06-D-10 (dequantisation in node transform, inverseBindMatrices, KHR_texture_transform, shared morph transform) were confirmed. Version/date. Registry commit 7cee0fc, extension status Complete, Ratified.
Curator qualifications: Specifications read 2026-10-22; no glTF files produced.
Limitations: Specifications read 2026-10-22; no glTF files produced.
Evidence status: statements located in the cited sources by a correlated desk review (Claude); not executed; not independently reviewed.
Structured fields
{
"citations": [
{
"url": "https://github.com/KhronosGroup/glTF/blob/7cee0fcddd5730e90d488bfb5aa2e52171483dde/extensions/2.0/Khronos/KHR_mesh_quantization/README.md",
"note": "KHR_mesh_quantization README at 7cee0fcd (raw), status and L78ff"
},
{
"url": "https://raw.githubusercontent.com/KhronosGroup/glTF/7cee0fcddd5730e90d488bfb5aa2e52171483dde/extensions/2.0/Khronos/KHR_mesh_quantization/README.md",
"note": "correction source (record C3-B642-04): Overview; Extending Mesh Attributes"
}
]
}Evidence claims
- [sourced_fact] KHR_mesh_quantization lets POSITION, NORMAL, TANGENT and TEXCOORD (and morph deltas) use byte/short types and adds no new dequantisation transform: non-skinned meshes fold it into the node transform (possibly via an extra leaf node so existing animation is undisturbed), skinned meshes into inverseBindMatrices, and texture coordinates into KHR_texture_transform; signed-normalized decoding differs on OpenGL ES 2.0/WebGL1. · locator: KHR_mesh_quantization README at 7cee0fcd (raw), status and L78ff source
Rights
| component | license | hosting | redistribution | modification | training | Evidence and notes |
|---|---|---|---|---|---|---|
| documentation | unknown | permitted | permitted | unknown | unknown | Applies to this original summary only, not to the cited sources. |
Linked records
- cites → https://github.com/KhronosGroup/glTF/blob/7cee0fcddd5730e90d488bfb5aa2e52171483dde/extensions/2.0/Khronos/KHR_mesh_quantization/README.md
- cites → https://raw.githubusercontent.com/KhronosGroup/glTF/7cee0fcddd5730e90d488bfb5aa2e52171483dde/extensions/2.0/Khronos/KHR_mesh_quantization/README.md