Skip to content
Novus Examples

Broken meshes with a watertight target

A watertight mesh paired with a deliberately broken twin (holes, missing faces, open ends), the input and intended result for a mesh-repair / hole-filling tool.

20 of 20 files
Preview of OBJ — Clean Reference Cube
obj
1002 B
Actual file preview for OBJ — Clean Reference Cube

OBJ — Clean Reference Cube

A welded, manifold, consistently-wound unit cube: 8 vertices, 12 triangles, 18 edges each shared by exactly two faces, and a signed volume of exactly 1.0. This is the answer key — each defect fixture in the degenerate/ subcategory is this mesh with exactly one thing wrong.

File
OBJ · Degenerate · 12 triangles
Use case
Mesh repair testingMesh processing QA· Conversion set
Preview of GLB — Clean Reference Cube
glb
1008 B
Actual file preview for GLB — Clean Reference Cube

GLB — Clean Reference Cube

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.

File
GLB · Degenerate · 12 triangles
Use case
Mesh repair testingMesh processing QA· Conversion set
Preview of OBJ — Zero-area Triangles
obj
1.5 KB
Actual file preview for OBJ — Zero-area Triangles

OBJ — Zero-area Triangles

The reference cube plus four triangles with no area, one for each way a mesh can have one: three collinear points, two coincident vertices at different indices, a repeated index, and all three indices identical. Their face normals are undefined, which is where downstream tools produce NaN.

File
OBJ · Degenerate · 16 triangles
Use case
Mesh repair testingMesh processing QA· Conversion set
Preview of GLB — Zero-area Triangles
glb
1.2 KB
Actual file preview for GLB — Zero-area Triangles

GLB — Zero-area Triangles

The same four degenerate triangles inside a structurally valid GLB. The file passes every glTF schema check — nothing in the format forbids a zero-area face — so this is the fixture for geometry validation as opposed to document validation.

File
GLB · Degenerate · 16 triangles
Use case
Mesh repair testingMesh processing QA· Conversion set
Preview of STL — Zero-area Facets with Null Normals
stl
3.5 KB
Actual file preview for STL — Zero-area Facets with Null Normals

STL — Zero-area Facets with Null Normals

An ASCII STL of the reference cube with two extra facets that have no area and declare a null (0 0 0) normal — exactly what CAD tessellators emit at a sliver. Slicers either drop them, warn, or divide by zero; this is how you find out which.

File
STL · Degenerate
Use case
Mesh repair testingMesh processing QA· Conversion set
Preview of OBJ — Duplicate Vertices, Split Seam
obj
1.3 KB
Actual file preview for OBJ — Duplicate Vertices, Split Seam

OBJ — Duplicate Vertices, Split Seam

The reference cube with all eight corners stored twice at bit-identical coordinates: the first six triangles use one copy, the last six use the other. It renders as a closed cube but is topologically two disconnected surface patches with a split seam, which is why smoothing, subdivision and boolean operations all misbehave on it.

File
OBJ · Degenerate · 12 triangles
Use case
Mesh repair testingMesh processing QA· Conversion set
Preview of PLY — Duplicate Vertices, Split Seam
ply
799 B
Actual file preview for PLY — Duplicate Vertices, Split Seam

PLY — Duplicate Vertices, Split Seam

The duplicated-corner cube as ASCII PLY — the format scanners and photogrammetry tools emit, and the one where unwelded duplicates are most common because each captured point arrives independently.

File
PLY · Degenerate
Use case
Mesh repair testingMesh processing QA· Conversion set
Preview of GLB — Duplicate Vertices, Split Seam
glb
1.2 KB
Actual file preview for GLB — Duplicate Vertices, Split Seam

GLB — Duplicate Vertices, Split Seam

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.

File
GLB · Degenerate · 12 triangles
Use case
Mesh repair testingMesh processing QA· Conversion set
Preview of OBJ — Non-manifold Edge (three faces on one edge)
obj
1.2 KB
Actual file preview for OBJ — Non-manifold Edge (three faces on one edge)

OBJ — Non-manifold Edge (three faces on one edge)

The reference cube with a two-triangle fin welded along one top edge, so that edge is shared by three faces instead of two. Non-manifold edges have no defined surface orientation, which is why slicers refuse them and why subdivision and offsetting produce garbage.

File
OBJ · Degenerate · 14 triangles
Use case
Mesh repair testingMesh processing QA· Conversion set
Preview of GLB — Non-manifold Edge (three faces on one edge)
glb
1.1 KB
Actual file preview for GLB — Non-manifold Edge (three faces on one edge)

GLB — Non-manifold Edge (three faces on one edge)

The finned cube as a GLB. It renders without complaint in any viewer — rasterisation never asks about adjacency — so this is the fixture that separates tools which actually analyse topology from tools which merely draw triangles.

File
GLB · Degenerate · 14 triangles
Use case
Mesh repair testingMesh processing QA· Conversion set
Preview of OBJ — Inverted Normals / Mixed Winding
obj
1.1 KB
Actual file preview for OBJ — Inverted Normals / Mixed Winding

OBJ — Inverted Normals / Mixed Winding

The reference cube with three of its six cube faces (six of its twelve triangles) wound clockwise instead of counter-clockwise, and `vn` records that follow the reversed winding into the solid. The classic symptom is a model that looks half-invisible with backface culling on and half-black with it off.

File
OBJ · Degenerate · 12 triangles
Use case
Mesh repair testingMesh processing QA· Conversion set
Preview of GLB — Inverted Normals / Mixed Winding
glb
1020 B
Actual file preview for GLB — Inverted Normals / Mixed Winding

GLB — Inverted Normals / Mixed Winding

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.

File
GLB · Degenerate · 12 triangles
Use case
Mesh repair testingMesh processing QA· Conversion set
Preview of PLY — NaN Vertex Coordinates
ply
557 B
Actual file preview for PLY — NaN Vertex Coordinates

PLY — NaN Vertex Coordinates

A structurally perfect ASCII PLY in which one vertex reads `nan nan nan` — the value an exporter writes after dividing by a zero-length vector. The header, counts and face list are all correct, so the file parses; every bounding box, centroid and normal computed from it is then poisoned.

File
PLY · Degenerate
Use case
Mesh repair testingError handling· Conversion set
Preview of OBJ — NaN Vertex Coordinates
obj
443 B
Actual file preview for OBJ — NaN Vertex Coordinates

OBJ — NaN Vertex Coordinates

The same NaN vertex in Wavefront OBJ, where the literal is the bare token `nan`. Normals are deliberately not written, because the three faces touching that vertex have no computable normal — which is exactly the state an importer must handle rather than serialise.

File
OBJ · Degenerate · 12 triangles
Use case
Mesh repair testingError handling· Conversion set