Skip to content

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.

FeatureStatus
GLB 2.0 container, indexed and non-indexed triangles, strips and fansSupported
Node hierarchy, matrix/TRS transforms, negative scaleSupported for static geometry
Sparse and strided vector/index accessors, normalized integer attributesSupported for consumed mesh attributes
Missing normalsFlat per-face normals; provided tangents ignored
Metallic-roughness material, normal/AO/emissive maps, vertex colourSupported; classic and studio lighting are approximations
Colour conventionsLinear material/vertex factors, sRGB colour textures, linear lighting and alpha; explicit legacy base-factor option
Alpha modesOpaque, mask and depth-ordered blend; finite transparent-layer budget
SamplersWrapping, nearest/bilinear and all glTF mip filter combinations
Texture coordinatesUV0 and UV1; higher referenced sets fail
KHR_texture_transform, KHR_materials_unlit, KHR_materials_emissive_strengthSupported
KHR_lights_punctualDirectional, point and spot; inverse-square/range/cone attenuation
Authored cameras and scene selectionSupported; camera instances selected by node index
Animation, skins, morph targetsNot rendered; structured diagnostics, or errors in strict mode
Points and linesSkipped with diagnostics, or errors in strict mode
External resources, additional buffers, compressed geometry/texturesUnsupported; required extensions fail
Transmission, volume, clearcoat and other material extensionsUnsupported; optional extensions use core fallback with diagnostics
ShadowsFirst directional light only; opaque/masked casters; no point/spot or transparent-caster shadows
HDR environment maps, anisotropic filtering, bloomUnsupported

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 ​

sh
npm run build
npm test
cargo test
npm run spec:check

After 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.

IDTracked behavior and specificationStatus
GLB-01Chunk framing, ordering and unknown trailing chunksimplemented
ASSET-01Major/minor version and minimum version negotiationimplemented
RESOURCE-01Buffer resource loadingpartial
SCENE-01Scene selection, hierarchy and application extrasimplemented
TRANSFORM-01Right-handed rotationimplemented
TRANSFORM-02Inverse-transpose normal transformsimplemented
TRANSFORM-03Mirrored transforms with tangent handednessimplemented
ACCESSOR-01Strided normalized mesh attributesimplemented
ACCESSOR-02Sparse accessors and zero-initialized basesimplemented
ACCESSOR-03Sparse index precision, ordering and boundsimplemented
ACCESSOR-04General accessor shapes and consumerspartial
GEOMETRY-01Triangle strip and fan winding, degeneratesimplemented
GEOMETRY-02Non-indexed trianglesimplemented
GEOMETRY-03Flat normals when normals are absentimplemented
GEOMETRY-04MikkTSpace tangent generation and UV selectionimplemented
GEOMETRY-05Points and linesunsupported
MATERIAL-01Linear factors and sRGB base colour texturesimplemented
MATERIAL-02Metallic B and roughness G channels multiply factorsimplemented
MATERIAL-03PBR appearance and energy responsepartial
MATERIAL-04Occlusion affects indirect light onlyimplemented
MATERIAL-05Emissive factor and sRGB textureimplemented
MATERIAL-06Back-face culling and double-sided visibilityimplemented
ALPHA-01Factor, vertex and texture alpha for OPAQUE/MASK/BLENDimplemented
ALPHA-02Linear depth-ordered blendingpartial
TEXTURE-01PNG embedded and data URI image loadingimplemented
TEXTURE-02JPEG image decodingimplemented
TEXTURE-03Texture coordinate setspartial
TEXTURE-04Nearest, linear and mip filter combinationsimplemented
TEXTURE-05Wrapping at positive and negative UV boundariesimplemented
TEXTURE-06Linear-light mip generation and non-power-of-two sizesimplemented
CAMERA-01Perspective and orthographic node cameras, aspect and clippingimplemented
DEFORM-01Animation evaluationunsupported
DEFORM-02Skin deformationunsupported
DEFORM-03Morph target evaluationunsupported
EXTENSION-01Required extension rejection and optional extension diagnosticsimplemented
EXTENSION-02KHR_texture_transformimplemented
EXTENSION-03KHR_materials_unlitimplemented
EXTENSION-04KHR_materials_emissive_strengthimplemented
EXTENSION-05KHR_lights_punctualimplemented
EXTENSION-06Spot cone attenuation and light additionimplemented
EXTENSION-07Other extensions, including compressed geometry and advanced materialsunsupported

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.

MIT licensed.