Tessellation quality: NativeCAD vs free STEP-to-mesh converters

The same NIST CTC/FTC STEP corpus, tessellated by NativeCAD and by cascadio (a free, OpenCASCADE-backed converter), scored on triangle count, watertightness, volume error against a reference value, chordal deviation from the exact B-rep, and wall-clock time. Mayo/Open CASCADE and Epic's Datasmith Exporter for CAD get a reproducible methodology in §4/§5 and no numbers, because nobody here has run them.

Every number under a "measured here" heading is reproducible. Run node benchmarks/tessellation_quality_bench.js yourself and you get the same benchmarks/out/cadsf-778/report.json this page renders from. tests/test_cadsf-778_tessellation_bench.js keeps the page's embedded copy of that report in sync with the file on disk.
Measured: — Node: — Platform: — Corpus: —

0. What tessellation is, and what these numbers measure

Tessellation turns an exact B-rep solid (faces bounded by trimmed curves and analytic or spline surfaces) into a triangle mesh a GPU, a slicer, or a physics engine can actually consume. Every tessellator makes the same trade: more triangles track the true surface more closely but cost more time and memory, so the numbers below are all versions of "how much of that trade did this run buy." The benchmark bodies are the NIST CTC/FTC STEP corpus (§1/§2's —) plus five closed-form primitives (§2) chosen because their exact volumes are known formulas, not another mesh.

What each metric means

Provenance for every figure on this page: measured — on — / —. The report JSON does not record a commit hash or build id, so this page does not claim one — reproduce with node benchmarks/tessellation_quality_bench.js against the commit you have checked out if you need that link.

1. NativeCAD measured here — real NIST CTC/FTC parts

Per solid: triangle count at the kernel's default (shipped) chord tolerance — which since CADSF-959 is curvature-adaptive on B-spline faces (pass adaptive: false to restore the fixed grid these numbers were first taken on) — watertightness (open / non-manifold / duplicate-directed edges), chordal deviation of the facets from the exact analytic surface behind them, and volume error against an anchor, the same kernel's volume at a forced 0.05mm chord tolerance. These are real STEP parts with no published analytic volume, so the anchor measures how far the shipped default moves from the kernel's own highest-resolution answer; independent ground truth is §2. A solid whose shipped mesh exceeds the harness's triangle or wall-clock budget skips the anchor pass, with the reason in its row and in the report's notes; its triangle count and watertightness are measured regardless.

At a glance — same solids as the table above, so a bar is one row. The first chart is tessellation time vs. body complexity (proxied by triangle count, since that is what the harness actually varies per solid); the second is triangle count at the shipped default vs. the 0.05mm anchor tolerance, for the solids where an anchor pass ran; the third is the watertightness split the summary line above states as a fraction.

2. NativeCAD vs analytic ground truth measured here

Five primitives (box, cylinder, cone, sphere, torus) built directly from ops/primitives.js, each carrying its own closed-form volume formula. This is the one comparison on this page with an independent, non-self-referential ground truth.

3. cascadio measured here, where installed

cascadio (pip install cascadio) wraps OpenCASCADE's own STEP reader and BRepMesh_IncrementalMesh tessellator. It converts a whole STEP document to one GLB per call with no public per-solid API, so these numbers are reported at file granularity; sum NativeCAD's solids per file before comparing with §1. Volumes are in cascadio's own GLB output units: glTF mandates metres, and whether cascadio rescales this corpus's native mm has not been independently verified, so compare volume magnitudes across tools with that in mind. Watertightness is measured after welding exactly-coincident vertex positions, because cascadio, like most CAD-to-glTF exporters, emits one vertex per triangle corner and a census over the raw indices would flag nearly every shared edge as "open" (the report's notes carry the numbers behind this).

4. Mayo / Open CASCADE vendor-doc-derived methodology — not run here

5. Datasmith Exporter for CAD vendor-doc-derived methodology — not run here

6. How to read the tables — scope of each figure

Scope

7. Methodology

cascadio, Mayo, OpenCASCADE (OCCT), Datasmith and Unreal Engine are named to identify the software described or measured; they are their owners' marks and NativeCAD is not affiliated with or endorsed by any of those projects. Site-wide notices: legal notes.

More demos

All demos →

Build your own part with NativeCAD

Free for education and makers with a registered key · $200 per seat per year · Kernel SDK for products.