Find files, editable templates and browser test targets by what you need to make or test. The directory below is cut by format; the two collections under it cut the same library by subject and by workflow.
Real deterministic LWO tetrahedron source with four vertices, four triangular faces, and unit bounds for Convert v2 import coverage. Stable P8 artifact p8-convert-model-lwo.
Real deterministic VTK tetrahedron source with four vertices, four triangular faces, and unit bounds for Convert v2 import coverage. Stable P8 artifact p8-convert-model-vtk.
JSON semantic reference for the VOX fixture, publishing occupied coordinates, palette indices, empty face topology, bounds, and the voxel contract. Stable P8 artifact p8-convert-model-vox-reference.
JSON semantic reference for the VTK tetrahedron, publishing vertex order, face indices, bounds, and the closed-mesh contract. Stable P8 artifact p8-convert-model-vtk-reference.
A ground-floor plan for Copper Oven Bakery as DXF R2010, 11.0 by 7.5 metres, 82.5 square metres gross with a 30.0 square metre kitchen. 8 AIA-style layers authored (10 in the file, because a DXF always carries layer 0 and Defpoints), two furniture blocks referenced rather than exploded, closed room boundaries so area is computable, aligned dimensions, a hatched kitchen floor and MTEXT notes. Seating is laid on a grid and stops when the floor runs out, so 18 covers are drawn. $INSUNITS is set to 6 (metres) rather than left at 0, because an unset unit is the single most common cause of a drawing importing at a thousand times its size. Synthetic premises, not a real building.
A 10 mm cube as COLLADA (.dae): the XML digital-asset-exchange format used across 3D tools and game engines. For testing COLLADA parsers and conversion.
The same signpost as COLLADA with `<up_axis>Y_UP</up_axis>` and `<unit meter="1" name="metre"/>` in its asset block. Unlike glTF, OBJ and STL, COLLADA states its convention, so an importer that still gets the orientation wrong has no excuse.
The same signpost as COLLADA with `<up_axis>Z_UP</up_axis>` and `<unit meter="1" name="metre"/>` in its asset block. Unlike glTF, OBJ and STL, COLLADA states its convention, so an importer that still gets the orientation wrong has no excuse.
A ground-floor plan for Ember Lane Pizza as DXF R2010, 13.0 by 8.5 metres, 110.5 square metres gross with a 39.1 square metre kitchen. 8 AIA-style layers authored (10 in the file, because a DXF always carries layer 0 and Defpoints), two furniture blocks referenced rather than exploded, closed room boundaries so area is computable, aligned dimensions, a hatched kitchen floor and MTEXT notes. Seating is laid on a grid and stops when the floor runs out, so 26 covers are drawn. $INSUNITS is set to 6 (metres) rather than left at 0, because an unset unit is the single most common cause of a drawing importing at a thousand times its size. Synthetic premises, not a real building.
An isometric cube as Encapsulated PostScript: a 2D vector illustration with three shaded faces. For testing EPS/PostScript rendering and vector conversion.
A single-image 3D reconstruction of stylised fantasy mage character render, written as binary glTF, geometry addressed through an accessor table. Its twin in this group is the same mesh written as the other format, from ONE reconstruction rather than two runs - so the pair tests whether a reader returns the same geometry from two containers with nothing in common. Both hold 32,788 vertices and 65,592 triangles; those counts were read from the GLB's accessor table and by counting lines in the OBJ, by separate code, and a disagreement would have stopped this shipping. It is closed: every edge belongs to exactly two triangles, so there are no holes and no non-manifold edges. The bounding box measures 0.1575 x 0.9984 x 1.0033 units.
A single-image 3D reconstruction of stylised fantasy mage character render, written as Wavefront text, one `v` line per vertex and one `f` line per face. Its twin in this group is the same mesh written as the other format, from ONE reconstruction rather than two runs - so the pair tests whether a reader returns the same geometry from two containers with nothing in common. Both hold 32,788 vertices and 65,592 triangles; those counts were read from the GLB's accessor table and by counting lines in the OBJ, by separate code, and a disagreement would have stopped this shipping. It is closed: every edge belongs to exactly two triangles, so there are no holes and no non-manifold edges. The bounding box measures 0.1575 x 0.9984 x 1.0033 units.
One box mesh referenced by a 24-deep chain of nodes, each adding a translation, an 11-degree rotation and a 0.94 scale, so the result spirals. Any error in matrix accumulation compounds visibly by the tip instead of hiding in rounding.
An 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.
The clean reference cube as a GLB, so the same baseline is available to glTF tooling and to the site's 3D preview. Identical topology to the OBJ twin in this group.
The duplicated-corner cube as a GLB. Because glTF stores every attribute per vertex, the duplication doubles the position and normal buffers for a shape that needs eight corners: the cheapest optimisation an asset pipeline can make, and the one this fixture measures.
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.
An unquantised sphere: 32-bit floats for both positions and normals, 24 bytes of attribute data per vertex. The uncompressed reference for the quantized and gzip twins in this group.
A 10 mm cube as binary glTF (GLB): the dominant modern format for 3D on the web and in AR, with per-face normals packed into one self-contained file. Powers the interactive 3D preview on this site; for testing glTF loaders and conversion.
Position, normal and UV packed into ONE bufferView with byteStride 32 and three accessors at offsets 0, 12 and 24: the GPU-friendly layout, and the one a naive parser mis-reads because it assumes each accessor owns its view. Twinned here with a tightly-packed version of the same sphere.
The mixed-winding cube as a GLB with a default single-sided material, so the reversed faces are culled and you can see straight through the model. Turning on doubleSided hides the defect without fixing it, which is the trap this fixture is for.
The same sphere with positions as normalised 16-bit and normals as normalised 8-bit integers under KHR_mesh_quantization: 66.6% of the float32 twin's bytes. The extension is in extensionsRequired, so a loader without support must refuse the file rather than render garbage.
Six 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.