Mesh density is the one STL setting people change without knowing what it controls. The relationship is unusually direct, which makes it easy to reason about once you have seen the arithmetic.
File size is triangle count
A binary STL is exactly:
84 + 50 × N bytes
80 bytes of header, 4 for the triangle count, and 50 per triangle. There is no compression and no shared vertex table, so the relationship is exact rather than approximate. A 50 MB file has about a million triangles; a 5 MB file has about a hundred thousand.
That also means STL is remarkably inefficient. Every vertex is written once per triangle that touches it — typically six times over. Formats with an indexed vertex list, or 3MF with its zip compression, routinely land at a fraction of the size for identical geometry.
What the export tolerance actually controls
CAD models are exact surfaces. Exporting to STL approximates them with flat triangles, and the export dialog's tolerance — variously called chord height, deviation or sag — sets how far a triangle is allowed to stray from the true surface.
For a cylinder of radius R approximated by segments of angle θ, the maximum deviation is:
h = R × (1 − cos(θ / 2))
Turn that around to find the segments needed for a given tolerance. A 10 mm radius hole with a 0.01 mm tolerance needs a segment angle of about 5.1 degrees, so roughly 70 segments around the circle. Loosen the tolerance to 0.05 mm and about 32 segments suffice.
Two consequences follow. Halving the tolerance roughly doubles the triangles on curved surfaces, so the count climbs fast. And flat faces cost nothing: a cube is 12 triangles at any tolerance. A model that explodes in size is a model full of curves.
Where extra triangles stop helping
The print cannot be finer than the printer. On FDM, the nozzle diameter (0.4 mm typically) sets the horizontal resolution and the layer height (0.1–0.3 mm) the vertical. Facets smaller than those dimensions are averaged away by the extrusion itself — the sliced toolpath is literally identical.
Resin printing resolves finer, with pixel sizes in the 20–50 µm range, so it justifies tighter tolerances. Even there, 0.01 mm is generally the point of diminishing returns.
What excess triangles do cost:
- Slicing time, which grows with triangle count and can turn seconds into minutes.
- Memory, in the slicer and especially in browser-based viewers, where a ten-million-triangle scan can exhaust the tab.
- Handling, since a 200 MB file is awkward to send and slow to open.
Where too few triangles show
The failure in the other direction is visible faceting: a cylinder that looks like a polygon, or banding across a gentle curve. Sculpted and organic models are the sensitive case, because the eye is good at spotting flat spots on surfaces it expects to be smooth.
The tell is that facets appear on the printed part, not just on screen. If the model looks faceted in the viewer but the facets are well under 0.1 mm deep, the print will be smooth.
Reducing a mesh you did not make
Re-exporting from CAD with a coarser tolerance is always better, because it regenerates triangles from the true surface. When all you have is the mesh:
- MeshLab, Filters → Remeshing → Quadric Edge Collapse Decimation. Set a target face count and enable the option to preserve boundaries.
- Blender, the Decimate modifier in Collapse mode. Fast, interactive, and easy to compare against the original.
After decimating, re-check the dimensions and the watertightness — aggressive decimation can close small holes, or open new ones.
Reading the count
Mes3D shows the triangle count next to the bounding-box dimensions as soon as a model loads, which is enough to tell whether a file is unnecessarily heavy before you send it or slice it.