glTF — 24-level Node Hierarchy (JSON)
The 24-level spiral as readable JSON, so the `children` arrays and per-level TRS can be traced by eye. Useful when a converter flattens or re-parents a hierarchy and you need to see exactly where.
Interactive preview rendered from the equivalent glTF (deep-nesting.glb); drag to orbit. Download the file above for the GLTF original.
Specifications
- Format
- glTF 2.0 (JSON + base64 buffer)
- Depth
- 24
- Nodes
- 24
- Readable
- true
- Note
- same scene as the GLB twin
Testing contract
Reference control- Scenario
- Walk `nodes[].children` from the scene root and record the visit order.
- Expected result
- A single unbranched chain of 24 nodes; every node except the last has exactly one child and no node appears twice.
What is a .gltf file?
glTF (.gltf, GL Transmission Format) is the 'JPEG of 3D' — a JSON scene description referencing geometry, PBR materials, textures, and animation, with binary buffers stored alongside or as a .bin. It is the standard for web and real-time 3D.
How to use this file
Use an example .gltf file to test glTF loaders (three.js, model-viewer), PBR material handling, and glTF-to-GLB packing.
How to use this file for testing
“glTF — 24-level Node Hierarchy (JSON)” is a deterministic Novus Examples fixture for Conversion testing, Mesh processing QA. The same content exported across many formats and linked as a group, so you can convert one and diff against the expected twin.
Documented properties for this file: 24 nodes · glTF 2.0 (JSON + base64 buffer). Compare results against paired or grouped companions on this page when present (clean↔damaged, searchable↔scanned, or format twins) so scores stay reproducible across runs.
Download the file once, keep the path stable in CI or local scripts, and treat the spec table as the contract: dimensions, seeds, field lists, and roles are intentional. Corrupt or invalid samples are labelled as such — expect parsers to fail loudly rather than silently accept them.
3D and CAD fixtures carry one small, documented solid or scene. Convert and inspect against the known geometry, units, and structure; format twins let you diff interchange fidelity, and the 3D viewer previews the actual mesh.
Code examples
import trimesh # pip install trimesh
mesh = trimesh.load("deep-nesting.gltf")
print(mesh.bounds, mesh.faces.shape)Related files
- glbGLB — 64 Nodes Sharing One MeshAn 8x8 field of columns built from a single 12-triangle mesh referenced by 64 nodes with seeded random heights. Core-glTF instancing needs no extension: the file is tiny, and the interesting question is whether your renderer batches the 64 draws or issues them one by one.

- glbGLB — EXT_mesh_gpu_instancing (32 instances)Thirty-two copies of one cube expressed as instance attribute accessors on a single node under EXT_mesh_gpu_instancing — the extension that moves instancing off the scene graph and onto the GPU. A viewer without support shows exactly one cube at the origin, which is the tell.

- glbGLB — Node Transforms as 4x4 MatricesSix cubes in a ring whose nodes carry a column-major 4x4 `matrix` and no translation/rotation/scale keys — the encoding a DCC exporter uses when a transform cannot be decomposed. Paired with a TRS twin of the identical ring.

- glbGLB — One Mesh under Three ParentsTwelve nodes reference one sphere mesh, in three groups whose parents each apply a different rotation and scale. The fixture for importers that copy geometry per node: a correct import keeps one mesh resource with twelve transforms, a naive one produces twelve meshes.

- glbGLB — Three Scenes, Default is Scene 1Three named scenes over three meshes, with the asset's `scene` property pointing at index 1 rather than 0. Loaders that hardcode scene 0 show the wrong content and never report an error — this is the file that catches them.

- gltfglTF — Node Transforms as TRSThe same six-cube ring with translation, quaternion rotation and scale spelled out per node. Read it next to the matrix twin to check a decomposition routine, or to confirm that your quaternion component order really is xyzw.

Generated by generation/models_p7.py. Free for any use, no attribution required — license.