On this page
Resolve every buffer source before decoding
Record a neutral asset ID, JSON or GLB form, buffer index, URI kind, resolved resource identity, declared byteLength, observed byte length, and digest. The Khronos Group, (opens in a new tab) specification permits buffer data in external resources or a data URI, while GLB stores binary data in the container. Keep a URI string, resolved path, and loaded bytes as separate evidence.
The Khronos source record carries the glTF 2.0.1 revision date 11 October 2021. The 22 October 2026 checked day is retrieval evidence for documentation without a verified publication date, not a publication claim; the source ledger records both cases.
| Buffer evidence | Record | Stop if |
|---|---|---|
| Asset form | glTF JSON or GLB and version | Parser assumes a container form |
| URI | External, data URI, or absent | Relative resolution is undocumented |
| Byte length | Declared and observed lengths | Observed bytes are shorter |
| Digest | Content digest and scope | Resource changes between reads |
| MIME hint | Declared or inferred type | Type comes only from filename |
| Resource boundary | Allowed base and path | A URI escapes the review root |
Do not expose real asset URLs or embedded payloads in a public worksheet. A synthetic buffer with symbolic byte ranges is enough to exercise boundary checks. If a loader falls back after a missing URI, report the fallback instead of treating the asset as complete.
Check buffer view ranges and data kind
A buffer view is a contiguous segment defined by byteOffset and byteLength. Record buffer index, view offset, view length, target hint, byteStride, and the accessors and images that reference it. The specification says a view used for image data, vertex indices, or vertex attributes must contain only one kind of data. Keep that structural rule separate from what the bytes actually contain.
| View check | Safe observation | Open question |
|---|---|---|
| Buffer index | Existing buffer reference | Does it resolve to the expected resource? |
| View offset | Nonnegative byte offset | Does offset plus length fit the buffer? |
| View length | Declared byte range | Does it include all accessor elements? |
| Target | Index or array buffer hint | Is the hint absent or inconsistent? |
| Byte stride | Stride and component alignment | Is stride allowed for this data kind? |
| Shared view | Referenced accessors and roles | Are indices and attributes mixed? |
Validate accessor shape, count, and alignment
The Khronos Group, (opens in a new tab) specification defines an accessor through componentType, type, count, optional byteOffset, and optional min or max. Compute component byte size, number of components per element, effective stride, and final referenced byte. Check accessor offset alignment and buffer view fit. A plausible count does not prove that the producer wrote the bytes or that min and max match them.
| Accessor field | Record | Stop if |
|---|---|---|
| Component type | Declared enum and byte size | A reader silently changes type |
| Element type | SCALAR, vector, or matrix shape | Component count is guessed |
| Count | Element count and source field | Count is negative or unavailable |
| Byte offset | Offset within the buffer view | Offset is not component aligned |
| Effective stride | Stride or tightly packed size | Stride is too small for one element |
| Final byte | Computed end and view length | Accessor exceeds its view |
| Min and max | Declared arrays and observed check | Metadata is copied without verification |
Synthetic accessor ledger
{"buffer":0,"bufferView":1,"byteOffset":"fixture-offset","componentType":"fixture-type","count":"fixture-count","type":"VEC3","computed":{"component_bytes":"fixture-size","element_bytes":"fixture-size-times-three","stride":"fixture-stride","end":"fixture-end"},"decision":"check-fit"}Keep index, sparse, and rendering roles explicit
Record whether an accessor is used for indices, vertex attributes, animation input, or another role. Index component restrictions, normalized integer interpretation, sparse overlays, and min or max requirements differ by use. A renderer may successfully display an asset while dropping an extension, using an implicit buffer, or ignoring an invalid optional field. Capture the renderer and validation result separately from source structure.
| Role evidence | Record | Open question |
|---|---|---|
| Indices | Accessor reference and component type | Are values within the referenced vertex count? |
| Vertex attribute | Semantic, accessor, and stride | Are all attributes aligned together? |
| Animation input | Accessor and min or max presence | Does interpolation require a range? |
| Normalized value | Flag and integer component type | Did a consumer apply normalization? |
| Sparse data | Count, indices, values, and bases | Does overlay fit and preserve defaults? |
| Extension | Name, version, and fallback | Can a second reader reproduce it? |
Stop before a renderer hides a byte-range defect
Stop conditions
- Stop if a buffer URI, GLB range, declared byte length, or resource digest is unresolved.
- Stop if a buffer view exceeds its buffer or mixes incompatible data roles.
- Stop if accessor offset, stride, component type, count, or final byte cannot be computed.
- Stop if min or max metadata is relied on without a bounded comparison to decoded values.
- Stop if sparse data, extensions, or renderer fallbacks change the effective values without a record.
- Stop before opening real geometry when names, URIs, or embedded images expose private content.
Pair this worksheet with the data provenance log for asset and conversion history and the data card template for collection context. A valid accessor chain does not prove geometry quality, ownership, privacy clearance, or permission.
For a supported non-health collection, after the owner has authority to describe the scope and a controlled metadata packet, the qualified physical-data appraisal request path may be a preparation step. It does not render glTF, certify geometry, assess visual meaning, create a quote, match a buyer, or grant a license.