Specification
The renderer implements a documented static glTF 2.0 GLB subset. This section brings supported features, known limits and verification evidence together. It is not a claim of complete glTF conformance or Khronos certification.
Supported features and limits
Resource loading is self-contained: one GLB binary buffer, embedded PNG/JPEG images or image data URIs, with no network fetching.
| Feature | Status |
|---|---|
| GLB 2.0 container, indexed and non-indexed triangles, strips and fans | Supported |
| Node hierarchy, matrix/TRS transforms, negative scale | Supported for static geometry |
| Sparse and strided vector/index accessors, normalized integer attributes | Supported for consumed mesh attributes |
| Missing normals | Flat per-face normals; provided tangents ignored |
| Metallic-roughness material, normal/AO/emissive maps, vertex colour | Supported; classic and studio lighting are approximations |
| Colour conventions | Linear material/vertex factors, sRGB colour textures, linear lighting and alpha; explicit legacy base-factor option |
| Alpha modes | Opaque, mask and depth-ordered blend; finite transparent-layer budget |
| Samplers | Wrapping, nearest/bilinear and all glTF mip filter combinations |
| Texture coordinates | UV0 and UV1; higher referenced sets fail |
KHR_texture_transform, KHR_materials_unlit, KHR_materials_emissive_strength | Supported |
KHR_lights_punctual | Directional, point and spot; inverse-square/range/cone attenuation |
| Authored cameras and scene selection | Supported; camera instances selected by node index |
| Animation, skins, morph targets | Not rendered; structured diagnostics, or errors in strict mode |
| Points and lines | Skipped with diagnostics, or errors in strict mode |
| External resources, additional buffers, compressed geometry/textures | Unsupported; required extensions fail |
| Transmission, volume, clearcoat and other material extensions | Unsupported; optional extensions use core fallback with diagnostics |
| Shadows | First directional light only; opaque/masked casters; no point/spot or transparent-caster shadows |
| HDR environment maps, anisotropic filtering, bloom | Unsupported |
Diagnostics include a stable code, JSON-pointer-style path, and human-readable message. Diagnostics cover the entire asset, including unused scenes. Strict mode rejects any reported unsupported feature. The loader validates consumed data and important structural constraints, but is not a replacement for a full asset validator.
Coverage and verification
The detailed checklist is generated from the inventory checked by CI.
What the counts mean
- Implemented + tested: implementation and a named regression test for the scoped behavior.
- Partial support: implementation exists, with a documented limit such as UV0/UV1 only or a finite transparent-layer budget.
- Unsupported: the rendering feature is absent. Testing its warning or strict-mode error does not count as rendering support.
- Needs targeted tests: implementation exists, but a dedicated correctness assertion is missing.
The detailed checklist links every entry to the relevant specification, implementation, targeted tests and reference assets. Entries differ in scope, so their counts are not a conformance percentage or code-coverage measurement.
Three kinds of evidence
Targeted regression tests check specific results: colour-channel arithmetic, camera clipping, transformed normals, alpha compositing, accessor bounds and other individual behaviors. Native Rust tests and Node tests against the built WebAssembly package cover different parts of the implementation.
Khronos reference assets exercise real asset layouts offline. The suite validates each fixture before and after repacking it into GLB, then checks visible output, repeatable rendering and expected diagnostics from two views. These smoke tests do not compare pixels with an independent reference renderer. Embedded fixture resources are repacked for the test; they do not imply runtime support for external resources.
Inventory checks verify fixture hashes, named test declarations, implementation paths and generated documentation. CI runs these after the executable tests. An inventory check alone does not establish that the tests passed.
Run the checks
npm run build
npm test
cargo test
npm run spec:checkAfter updating test/spec-coverage.json, run npm run spec:report to regenerate the detailed checklist and machine-readable inventory. Reference asset hashes and source provenance live in test/reference-assets.json.
Detailed checklist
Tracked glTF static rendering behaviors, not an exhaustive normative-clause inventory or certification.
This checklist tracks 41 behaviors: 31 implemented, 5 partial, 5 unsupported, 0 unverified. These counts are not a percentage of the glTF specification, code coverage, or Khronos certification. Rows vary in scope and are not weighted.
Implemented means the named behavior has implementation and targeted regression evidence. Partial means known limits remain. Unsupported means rendering is absent, even when its diagnostic is tested. Unverified means code exists but targeted correctness evidence is missing. None implies exhaustive testing of every valid input.
The offline reference suite contains 16 assets, pinned to Khronos glTF Sample Assets revision 8f492390ddc7. Source and vendored hashes are recorded in test/reference-assets.json; attribution is in test/fixtures/NOTICE.md. External resources are embedded in text fixtures, then buffers are repacked into one GLB for tests. This does not exercise external resource loading.
Every reference is validated before and after repacking with glTF Validator, then rendered from two views with nonempty-output, deterministic-output and expected-diagnostic assertions. These are smoke tests, not reference-image comparisons. Validator results concern asset validity, not renderer conformance.
Run npm run build, npm test, and cargo test for executable evidence. Run npm run spec:check to verify checklist references, pinned fixture hashes and generated documentation; it does not execute the tests. CI runs all four. npm run spec:report updates this page and writes build/spec-coverage.json, which records inventory counts without claiming a test run passed.
GLB-01
Chunk framing, ordering and unknown trailing chunks: implemented. Specification.
Implementation: src/core/gltf/mod.rs.
Targeted regression evidence:
ASSET-01
Major/minor version and minimum version negotiation: implemented. Specification.
Implementation: src/core/gltf/mod.rs.
Targeted regression evidence:
RESOURCE-01
Buffer resource loading: partial. Specification.
Implementation: src/core/gltf/mod.rs.
Reference smoke tests: BoxInterleaved.
Limitations: One embedded GLB buffer only. External and data URI buffers and multiple buffers are unsupported; reference tests repack buffers before loading.
SCENE-01
Scene selection, hierarchy and application extras: implemented. Specification.
Implementation: src/core/gltf/mod.rs, src/core/gltf/scene.rs.
Targeted regression evidence:
TRANSFORM-01
Right-handed rotation: implemented. Specification.
Implementation: src/core/math.rs.
Targeted regression evidence:
TRANSFORM-02
Inverse-transpose normal transforms: implemented. Specification.
Implementation: src/core/math.rs.
Targeted regression evidence:
Reference smoke tests: NegativeScaleTest.
TRANSFORM-03
Mirrored transforms with tangent handedness: implemented. Specification.
Implementation: src/core/gltf/mod.rs, src/core/material.rs.
Targeted regression evidence:
Reference smoke tests: NegativeScaleTest.
ACCESSOR-01
Strided normalized mesh attributes: implemented. Specification.
Implementation: src/core/gltf/accessor.rs.
Targeted regression evidence:
Reference smoke tests: BoxInterleaved, BoxVertexColors.
ACCESSOR-02
Sparse accessors and zero-initialized bases: implemented. Specification.
Implementation: src/core/gltf/accessor.rs.
Targeted regression evidence:
Reference smoke tests: SimpleSparseAccessor.
ACCESSOR-03
Sparse index precision, ordering and bounds: implemented. Specification.
Implementation: src/core/gltf/accessor.rs.
Targeted regression evidence:
ACCESSOR-04
General accessor shapes and consumers: partial. Specification.
Implementation: src/core/gltf/accessor.rs.
Limitations: Coverage focuses on consumed mesh vectors and indices; padded MAT2/MAT3 and animation/skin consumers are not implemented.
GEOMETRY-01
Triangle strip and fan winding, degenerates: implemented. Specification.
Implementation: src/core/gltf/mod.rs.
Targeted regression evidence:
Reference smoke tests: MeshPrimitiveModes.
GEOMETRY-02
Non-indexed triangles: implemented. Specification.
Implementation: src/core/gltf/mod.rs.
Targeted regression evidence:
Reference smoke tests: TriangleWithoutIndices.
GEOMETRY-03
Flat normals when normals are absent: implemented. Specification.
Implementation: src/core/gltf/mod.rs.
Targeted regression evidence:
GEOMETRY-04
MikkTSpace tangent generation and UV selection: implemented. Specification.
Implementation: src/core/gltf/tangents.rs.
Targeted regression evidence:
GEOMETRY-05
Points and lines: unsupported. Specification.
Implementation: src/core/gltf/scene.rs.
Targeted regression evidence:
Reference smoke tests: MeshPrimitiveModes.
Limitations: Skipped with diagnostics; strict loading rejects them.
MATERIAL-01
Linear factors and sRGB base colour textures: implemented. Specification.
Implementation: src/core/gltf/mod.rs, src/core/material.rs.
Targeted regression evidence:
Reference smoke tests: BoxTextured.
MATERIAL-02
Metallic B and roughness G channels multiply factors: implemented. Specification.
Implementation: src/core/material.rs.
Targeted regression evidence:
MATERIAL-03
PBR appearance and energy response: partial. Specification.
Implementation: src/core/lighting.rs.
Targeted regression evidence:
Limitations: Classic and studio are approximate lighting models; no calibrated Khronos Sample Viewer image comparisons or complete energy-conservation audit.
MATERIAL-04
Occlusion affects indirect light only: implemented. Specification.
Implementation: src/core/material.rs.
Targeted regression evidence:
MATERIAL-05
Emissive factor and sRGB texture: implemented. Specification.
Implementation: src/core/material.rs.
Targeted regression evidence:
MATERIAL-06
Back-face culling and double-sided visibility: implemented. Specification.
Implementation: src/core/geometry.rs.
Targeted regression evidence:
ALPHA-01
Factor, vertex and texture alpha for OPAQUE/MASK/BLEND: implemented. Specification.
Implementation: src/core/material.rs.
Targeted regression evidence:
ALPHA-02
Linear depth-ordered blending: partial. Specification.
Implementation: src/core/transparency.rs, src/core/framebuffer.rs.
Targeted regression evidence:
Limitations: Bounded depth peeling limits overlapping transparent layers; transparent materials receive but do not cast shadows.
TEXTURE-01
PNG embedded and data URI image loading: implemented. Specification.
Implementation: src/core/gltf/images.rs.
Targeted regression evidence:
Reference smoke tests: BoxTextured.
TEXTURE-02
JPEG image decoding: implemented. Specification.
Implementation: src/core/gltf/images.rs.
Targeted regression evidence:
TEXTURE-03
Texture coordinate sets: partial. Specification.
Implementation: src/core/gltf/mod.rs, src/core/texture.rs.
Targeted regression evidence:
Reference smoke tests: MultiUVTest.
Limitations: UV0 and UV1 only; higher referenced sets are rejected.
TEXTURE-04
Nearest, linear and mip filter combinations: implemented. Specification.
Implementation: src/core/texture.rs.
Targeted regression evidence:
TEXTURE-05
Wrapping at positive and negative UV boundaries: implemented. Specification.
Implementation: src/core/texture.rs.
Targeted regression evidence:
TEXTURE-06
Linear-light mip generation and non-power-of-two sizes: implemented. Specification.
Implementation: src/core/texture.rs.
Targeted regression evidence:
CAMERA-01
Perspective and orthographic node cameras, aspect and clipping: implemented. Specification.
Implementation: src/core/gltf/scene.rs, src/core/camera.rs.
Targeted regression evidence:
Reference smoke tests: Cameras.
DEFORM-01
Animation evaluation: unsupported. Specification.
Implementation: src/core/gltf/scene.rs.
Targeted regression evidence:
Reference smoke tests: AnimatedTriangle.
Limitations: Static node state only; animation is diagnosed, or rejected in strict mode.
DEFORM-02
Skin deformation: unsupported. Specification.
Implementation: src/core/gltf/scene.rs.
Targeted regression evidence:
Reference smoke tests: SimpleSkin.
Limitations: Skinning is not evaluated; rest geometry is rendered with a diagnostic, or rejected in strict mode.
DEFORM-03
Morph target evaluation: unsupported. Specification.
Implementation: src/core/gltf/scene.rs.
Targeted regression evidence:
Reference smoke tests: AnimatedMorphCube.
Limitations: Morph targets and weights are not applied; diagnosed, or rejected in strict mode.
EXTENSION-01
Required extension rejection and optional extension diagnostics: implemented. Specification.
Implementation: src/core/gltf/mod.rs, src/core/gltf/scene.rs.
Targeted regression evidence:
EXTENSION-02
KHR_texture_transform: implemented. Specification.
Implementation: src/core/gltf/mod.rs, src/core/gltf/scene.rs, src/core/material.rs.
Targeted regression evidence:
Reference smoke tests: TextureTransformTest.
EXTENSION-03
KHR_materials_unlit: implemented. Specification.
Implementation: src/core/gltf/mod.rs, src/core/gltf/scene.rs, src/core/material.rs.
Targeted regression evidence:
Reference smoke tests: UnlitTest.
EXTENSION-04
KHR_materials_emissive_strength: implemented. Specification.
Implementation: src/core/gltf/mod.rs, src/core/gltf/scene.rs, src/core/material.rs.
Targeted regression evidence:
Reference smoke tests: EmissiveStrengthTest.
EXTENSION-05
KHR_lights_punctual: implemented. Specification.
Implementation: src/core/gltf/mod.rs, src/core/gltf/scene.rs, src/core/material.rs.
Targeted regression evidence:
Reference smoke tests: PointLightIntensityTest.
EXTENSION-06
Spot cone attenuation and light addition: implemented. Specification.
Implementation: src/core/punctual.rs.
Targeted regression evidence:
EXTENSION-07
Other extensions, including compressed geometry and advanced materials: unsupported. Specification.
Implementation: src/core/gltf/scene.rs.
Targeted regression evidence:
Limitations: Only the four named extensions above are supported. Required unknown extensions fail; optional ones use available core fallback with diagnostics.