OBJ — Signpost authored in Metres
The same signpost as OBJ with coordinates in metres. OBJ has no unit record of any kind, so the two OBJ files in this group are byte-different and semantically identical — the ambiguity that every OBJ import dialog's scale box exists to resolve.
Interactive preview rendered from the equivalent glTF (signpost-metre.glb); drag to orbit. Download the file above for the OBJ original.
Specifications
- Format
- Wavefront OBJ
- Authored Unit
- metres
- Model Height
- 1.12
- Unit Declaration
- none (comment only)
- Vertices
- 144
- Triangles
- 48
Testing contract
Expected to recover- Scenario
- Import both OBJ files in this group with the same import scale and compare their bounding boxes.
- Expected result
- One is 1000x the other, and nothing in either file says which is correct — the importer must be told.
What is a .obj file?
OBJ (Wavefront OBJ) is a text-based 3D geometry format defining vertices, texture coordinates, normals, and faces, and referencing materials through a companion MTL file. It is simple, widely supported, and can represent polygonal meshes with UV mapping. It is a common interchange format across 3D tools.
How to use this file
Use an example OBJ to test mesh and UV parsing, MTL material resolution, and importers in 3D engines, renderers, and modeling applications.
How to use this file for testing
“OBJ — Signpost authored in Metres” is a deterministic Novus Examples fixture for Conversion testing, Metadata 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: Wavefront OBJ. 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("signpost-metre.obj")
print(mesh.bounds, mesh.faces.shape)Related files
- daeDAE — Signpost, Y_UP declaredThe 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.

- daeDAE — Signpost, Z_UP declaredThe 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.

- glbGLB — Signpost, Y-upThe signpost authored +Y up, which is what the glTF specification mandates and what every conformant viewer assumes. The conformant half of the axis pair: load it, confirm the post stands, and you have calibrated your viewer before testing the Z-up twin.

- glbGLB — Signpost, Z-upThe same signpost authored +Z up — what a Blender or 3ds Max glTF export produces when the axis conversion is skipped. glTF has no field in which to declare this, so the file is indistinguishable from a model that genuinely lies on its back, and every conformant viewer will show it that way.

- plyPLY — Signpost, +Y up (comment only)The signpost as ASCII PLY with +Y up. PLY has no axis or unit element, so the convention survives only as a header comment that no parser reads — the reason scan data so often arrives rotated.

- plyPLY — Signpost, +Z up (comment only)The signpost as ASCII PLY with +Z up. PLY has no axis or unit element, so the convention survives only as a header comment that no parser reads — the reason scan data so often arrives rotated.

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