3D Model Mesh Checker - Analyze OBJ/STL for Errors & Non-Manifold Geometry
Check 3D meshes for non-manifold edges, degenerate faces, holes, flipped normals, and topology errors. Supports OBJ & STL files.
Drop your .OBJ or .STL file here
or click to browse
Interactive Preview (drag to rotate, scroll to zoom)
About
Submitting a 3D model with non-manifold edges or degenerate faces to a slicer, game engine, or CNC pipeline causes silent failures. Print jobs abort mid-layer. Boolean operations produce garbage geometry. Physics engines crash on zero-area triangles. This tool parses your OBJ or STL file and computes the Euler characteristic χ = V − E + F, identifies every non-manifold edge (shared by ≠ 2 faces), flags degenerate triangles with area below 1×10−8 units², detects isolated vertices, and verifies normal orientation consistency across the entire mesh. All analysis runs locally in your browser. No file is uploaded to any server.
The watertight test confirms whether your mesh forms a closed 2-manifold surface, a prerequisite for 3D printing (per ISO/ASTM 52915) and volumetric calculations. Limitations: this tool processes triangulated meshes. Quad or n-gon faces in OBJ files are automatically triangulated via fan decomposition, which may not match your modeler's triangulation for concave polygons. STL binary format is supported alongside ASCII. Models exceeding 500K faces may take several seconds to analyze.
Formulas
The fundamental topological invariant for mesh validation is the Euler-Poincaré formula:
For a closed, genus-g surface: χ = 2 − 2g. A watertight sphere has χ = 2. A torus has χ = 0. For a valid closed triangular mesh, the edge-face relationship holds: E = 3F2.
Triangle area via cross product:
Where v0, v1, v2 are triangle vertex positions. A face is degenerate when A < ε (typically 1×10−8). An edge is non-manifold when its face-adjacency count n ≠ 2. Boundary edges have n = 1.
Reference Data
| Check | What It Detects | Impact If Ignored | Standard / Reference |
|---|---|---|---|
| Non-Manifold Edges | Edges shared by ≠ 2 faces | Boolean ops fail, slicer crashes | ISO 52915, general manifold topology |
| Non-Manifold Vertices | Vertices where face fans don't form a disk | Mesh splitting errors in subdivision | Euler-Poincaré formula |
| Degenerate Faces | Triangles with area < 1e-8 | NaN normals, rendering artifacts | Floating-point geometry best practices |
| Isolated Vertices | Vertices referenced by zero faces | Wasted memory, export bloat | OBJ/STL spec compliance |
| Flipped Normals | Inconsistent face winding order | Inverted shading, inside-out prints | Right-hand rule (CCW winding) |
| Watertight / Closed | All edges shared by exactly 2 faces | Cannot compute volume, print fails | ISO/ASTM 52915 for AM |
| Euler Characteristic | χ = V − E + F | Genus > 0 means holes or handles | Euler-Poincaré theorem |
| Bounding Box | AABB min/max in all 3 axes | Scale verification for manufacturing | Coordinate system validation |
| Surface Area | Sum of all triangle areas | Material estimation, coating calc | Cross-product area formula |
| Duplicate Faces | Two or more faces with identical vertex indices | Z-fighting, doubled thickness | Mesh cleanup standard practice |
| Self-Intersection | Triangles penetrating each other (basic check) | Invalid solid, slicer errors | Computational geometry |
| Edge Count Ratio | E ≈ 1.5F for closed triangular mesh | Deviation indicates mesh issues | Combinatorial topology |
| Component Count | Number of disconnected mesh islands | Unintended separate shells | Graph connectivity (BFS/DFS) |
| Vertex Valence | Min/Max/Avg edges per vertex | Extreme valence causes shading issues | Mesh quality metrics |
| Aspect Ratio | Worst triangle aspect ratio | Poor FEM results, bad UV mapping | Mesh quality for simulation |