User Rating 0.0
Total Usage 0 times
Category Utilities
3D Mesh Checker

Drop your .OBJ or .STL file here

or click to browse

Is this tool helpful?

Your feedback helps us improve.

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.

3d model checker mesh analysis non-manifold detection OBJ validator STL checker topology analysis watertight check 3d printing mesh repair

Formulas

The fundamental topological invariant for mesh validation is the Euler-Poincaré formula:

χ = V E + F

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:

A = 12 | (v1 v0) × (v2 v0) |

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

CheckWhat It DetectsImpact If IgnoredStandard / Reference
Non-Manifold EdgesEdges shared by ≠ 2 facesBoolean ops fail, slicer crashesISO 52915, general manifold topology
Non-Manifold VerticesVertices where face fans don't form a diskMesh splitting errors in subdivisionEuler-Poincaré formula
Degenerate FacesTriangles with area < 1e-8NaN normals, rendering artifactsFloating-point geometry best practices
Isolated VerticesVertices referenced by zero facesWasted memory, export bloatOBJ/STL spec compliance
Flipped NormalsInconsistent face winding orderInverted shading, inside-out printsRight-hand rule (CCW winding)
Watertight / ClosedAll edges shared by exactly 2 facesCannot compute volume, print failsISO/ASTM 52915 for AM
Euler Characteristicχ = V E + FGenus > 0 means holes or handlesEuler-Poincaré theorem
Bounding BoxAABB min/max in all 3 axesScale verification for manufacturingCoordinate system validation
Surface AreaSum of all triangle areasMaterial estimation, coating calcCross-product area formula
Duplicate FacesTwo or more faces with identical vertex indicesZ-fighting, doubled thicknessMesh cleanup standard practice
Self-IntersectionTriangles penetrating each other (basic check)Invalid solid, slicer errorsComputational geometry
Edge Count RatioE1.5F for closed triangular meshDeviation indicates mesh issuesCombinatorial topology
Component CountNumber of disconnected mesh islandsUnintended separate shellsGraph connectivity (BFS/DFS)
Vertex ValenceMin/Max/Avg edges per vertexExtreme valence causes shading issuesMesh quality metrics
Aspect RatioWorst triangle aspect ratioPoor FEM results, bad UV mappingMesh quality for simulation

Frequently Asked Questions

A non-manifold edge is shared by more than 2 faces (like a T-junction where 3 surfaces meet at one edge) or by only 1 face (a boundary). Slicer software cannot determine inside vs. outside at these edges, causing layer generation to fail or produce unpredictable infill. Fix by splitting the shared edge into separate edges for each surface pair.
For a closed mesh with no holes, χ = V − E + F should equal 2 (for genus 0, like a sphere). Each topological handle (like a torus hole) subtracts 2, so a torus has χ = 0. If your mesh is supposed to be a simple closed solid but χ ≠ 2, it has topological defects: boundary edges, non-manifold geometry, or unintended handles.
Degenerate triangles produce undefined or NaN surface normals because the cross product of two collinear edge vectors is a zero vector. This cascades into lighting calculations (black spots), physics engines (collision detection returns NaN), and UV mapping (infinite distortion). Most renderers silently skip them, masking the problem until export.
The tool performs a basic self-intersection check using bounding-box overlap tests between face groups. For meshes under 10K faces, it can detect obvious penetrations. Full exact self-intersection testing (Möller - Trumbore on all face pairs) is O(n²) and impractical for large meshes in a browser without spatial indexing. Use dedicated tools like MeshLab for exhaustive self-intersection analysis on complex models.
Watertight means every edge is shared by exactly 2 faces - no boundary edges, no holes. Manifold is stricter: watertight plus no edge shared by more than 2 faces and no vertex where the face fan doesn't form a topological disk. A mesh can be watertight but non-manifold if, for example, two cones share a single vertex (bowtie configuration). Both conditions are required for valid 3D printing.
Quad faces (lines starting with "f" followed by 4 vertex indices) are split into 2 triangles using fan triangulation: vertices (0,1,2) and (0,2,3). This is correct for convex quads but may produce overlapping triangles for concave quads. The checker flags faces with more than 4 vertices and applies the same fan decomposition, noting the count in the report.