How much filament will this print use? How much would it weigh cast in brass? Both start from one number: the volume the mesh encloses. This tool computes that exactly for any **watertight** STL using the signed-tetrahedron method (a direct application of the divergence theorem), then turns it into a weight estimate using a material density and an infill percentage. It is exact for closed meshes — not an approximation — and it runs entirely in your browser, so even confidential CAD never leaves your machine. Drop a file above to get your number; everything below documents the maths, the material densities, and the cases where the result needs a caveat. If your mesh isn't watertight, run STL Hole Repair first.
Drop an STL onto the tool. Binary and ASCII STL are both auto-detected (the 80-byte header and the 84 + 50 × triCount size equation disambiguate them).
Every triangle forms a tetrahedron with the origin. We sum the signed volumes of those tetrahedra — the divergence theorem — which gives the exact enclosed volume of any closed (watertight) mesh, regardless of how it sits relative to the origin.
The signed sum's absolute value is the volume in mm³; dividing by 1000 gives cm³. Flipped or inconsistent winding only changes the sign, so abs() keeps the magnitude correct.
Pick a material and (optionally) an infill percentage. Weight = volume_cm³ × density × infill/100, using the density table below. The result downloads as a JSON report with volume, material, density and estimated weight.
Weight = volume in cm³ × density × (infill / 100). These are the exact densities the tool uses; filament vendors vary by a percent or two, so treat the result as a close estimate, not a certified mass.
| Material | Density (g/cm³) | 1 cm³ weighs | Notes |
|---|---|---|---|
| PLA | 1.24 | 1.24 g | The default. Most common FDM filament. |
| ABS | 1.04 | 1.04 g | Lightest common filament. |
| PETG | 1.27 | 1.27 g | Slightly denser than PLA. |
| TPU | 1.21 | 1.21 g | Flexible filament. |
| Nylon | 1.13 | 1.13 g | Engineering filament. |
| Resin | 1.10 | 1.10 g | Typical SLA/DLP photopolymer; varies by brand. |
| Aluminium | 2.70 | 2.70 g | For cast/CNC weight estimates. |
| Steel | 7.85 | 7.85 g | Mild steel. |
| Brass | 8.50 | 8.50 g | |
| Titanium | 4.50 | 4.50 g | |
| Gold | 19.32 | 19.32 g | For jewellery casting estimates. |
| Silver | 10.49 | 10.49 g |
The mesh volume is fixed by geometry. A 3D print is mostly air inside, so its weight scales with infill. The volume column is the same 40 cm³ part throughout; only the weight changes.
| Infill | Solid volume | PLA weight | Typical use |
|---|---|---|---|
| 100% | 40 cm³ | 49.6 g | Functional / load-bearing parts |
| 50% | 40 cm³ | 24.8 g | Sturdy display pieces |
| 20% | 40 cm³ | 9.9 g | The common default for most prints |
| 10% | 40 cm³ | 5.0 g | Lightweight, non-structural |
| 0% (shell only) | 40 cm³ | ≈ walls + top/bottom only | Vases, with the slicer's vase mode |
Worked examples — the arithmetic is simple enough to check by hand, which is the point: you can trust the number.
20 × 20 × 20 mm = 8000 mm³ = 8 cm³. At 100% infill in PLA: 8 × 1.24 = 9.92 g.
volume_cm3: 8 material: PLA (1.24 g/cm³) infill_percent: 100 estimated_weight_grams: 9.92
Volume is unchanged; weight scales with infill: 8 × 1.24 × 0.20 = 1.98 g.
volume_cm3: 8 infill_percent: 20 estimated_weight_grams: 1.98
Casting is solid, so use 100% and swap the material. 8 cm³ × 8.50 = 68 g of brass.
volume_cm3: 8 material: Brass (8.50 g/cm³) infill_percent: 100 estimated_weight_grams: 68
The divergence theorem assumes a closed surface. With holes, the signed sum no longer equals the enclosed volume and the number will be wrong — sometimes subtly. Run STL Hole Repair first, then recompute.
Winding only flips the sign of the signed sum, so taking the absolute value keeps the magnitude correct. The volume is still right even if the mesh would look inside-out in a viewer.
Overlapping shells are counted as many times as they overlap, so the volume comes out too high. Boolean-union the geometry in your CAD tool before measuring.
STL is unitless — the tool assumes the coordinates are millimetres (the de-facto 3D-printing convention). If your file is in inches or metres, the cm³ figure is off by the cube of the scale factor (e.g. ×16,387 for inches→mm). Scale the model to mm first.
The infill estimate is a flat fraction of solid volume. A real slicer also adds perimeters (walls), top/bottom layers and support, so actual filament use is a little higher than the infill-only figure — closest at high infill, furthest at near-0%.
The tool measures the geometry you give it. If your model has internal cavities modelled as part of the mesh, they're correctly excluded; if it's a solid block you intend to hollow in the slicer, set a low infill to approximate the result.
0 bytes uploaded. Volume & Material Weight Calculator runs entirely in your browser using three.js and WebGL. Your meshes never leave your device.
Exact — for a watertight (closed) mesh. The signed-tetrahedron method is a direct application of the divergence theorem and returns the true enclosed volume to floating-point precision, not a voxel or bounding-box approximation. The only thing that makes it inaccurate is a non-closed mesh.
Yes. Set an infill percentage and the weight becomes volume × density × infill/100 — so a 20% print reports about a fifth of the solid weight. Leave it at 100% for solid prints, castings, or machined parts. (Note: this is infill-only; a real slicer adds walls and top/bottom layers, so actual filament use is slightly higher.)
Six filament/resin types — PLA, ABS, PETG, TPU, Nylon, Resin — and eight metals: aluminium, steel, brass, titanium, gold and silver. The full density table is above. PLA at 100% infill is the default.
STL — both binary and ASCII, auto-detected. For OBJ or GLB, convert to STL first with the relevant converter; the volume maths is identical once it's a triangle mesh.
It still works. Inconsistent winding only flips the sign of the signed-volume sum, and the tool takes the absolute value, so the magnitude is correct. (For downstream tools that care about winding, repair it — but the volume here is unaffected.)
Almost always one of two things: the mesh isn't watertight (holes break the divergence-theorem assumption — repair it first), or the units aren't millimetres (STL is unitless and the tool assumes mm; an inch-scaled file reads ~16,000× too large). Self-intersecting geometry also overcounts.
The material weight is as accurate as the density figure (vendors vary ±1–2%). The print weight depends on your infill setting and ignores walls/supports, so treat it as a close lower-bound estimate. For a precise figure, slice the model and read the slicer's filament estimate.
No. Parsing and the volume calculation run entirely in your browser via three.js. The mesh never leaves your device — only anonymous usage counts are recorded when you're signed in.
Yes — that's what the metals are for. Set 100% infill and pick the metal: 8 cm³ in brass is 68 g, in titanium 36 g, in gold 155 g. Multiply by your material's price-per-gram for a quick cost estimate.
Compute the exact surface area (mm²) of any STL, OBJ, or GLB mesh. Useful for paint estimates, plating cost, and resin coating calculations.
Open toolCompute the X/Y/Z bounding box of any STL, OBJ, or GLB mesh. Get exact print dimensions in mm — useful for fitting models to your printer bed.
Open toolCompute the centroid (centre of mass) of any STL/OBJ/GLB mesh assuming uniform density. Useful for balance, animation pivots, and engineering analysis.
Open toolFix problem STL meshes: weld duplicate vertices, remove degenerate faces, and detect non-manifold boundaries. Browser-based, zero upload.
Open tool