Benchmarks

Measurements we ran ourselves, published as data rather than as opinion. Each page states its result first, then the numbers, then exactly how they were produced and what they do not show.

Every figure on these pages is read straight out of the JSON the measurement script wrote, which is linked for download on each page. Nothing is transcribed by hand, so the table and the file cannot disagree. Where a measurement does not settle a question, the page says so rather than rounding the claim up.

What is wrong with an AI-generated 3D model as downloaded: 16 models, sliced and repaired

What is wrong with an image-to-3D model as downloaded, and does it slice and print without repair?

PrusaSlicer produced G-code for all 16 models, so slicing is no test. Eleven were watertight as downloaded, and being watertight was not the test either. All four TRELLIS.2 models were hollow: two surfaces about 0.16 mm apart at an 80 mm print size, thinner than a nozzle line, filling 1 to 4% of their convex hull. They sliced to 0.5 to 1.3 metres of filament where the other generators' versions of the same object took 5.7 to 23.5. The Windows repair service made all 16 watertight and changed none of that: the repaired skins were still 0.15 to 0.16 mm. Stable Fast 3D's mug was watertight and solid all the way through, its opening sealed. Its mug, charger and pumpkin also came out tilted 18 to 25 degrees, standing on 1 to 15 square millimetres of bed. Hunyuan3D-2.1's STLs kept the GLB's Y-up axes, so all four arrive in a slicer on their side. The measurements that caught these are the ones a watertight check does not make: wall thickness, solid volume, and how the model sits on the bed.

Measured 2026-10-15

What nine 3MF to STL converters keep, drop and add

When a 3MF file is converted to STL, which converters keep its geometry right, and what do they do with units, mirrored parts, other plates, modifiers and negative parts?

On simple files the geometry mostly survives. Rotation, scaling, multiple objects and repeated components came through every converter that kept millimetres. Two things did not: four converters ignored a 3MF declared in inches and wrote a box 25.4 times too small, and five wrote a mirrored part inside out. Blender at its default settings wrote every file 1000 times too small, because it exports metres into a format read as millimetres. Project files are where every converter failed. A project built and saved in Bambu Studio 02.08.02.61, with a modifier and a negative part on plate 1 and a second object on plate 2, was opened by seven of the nine converters and none produced the single correct shell. All seven wrote the plate 2 part into the same STL. Five also wrote the modifier and the negative part as solid blocks. Only Bambu Studio's own interface, when told to run a mesh boolean, and imagetostl.com cut the hole. PrusaSlicer and OrcaSlicer's command line refused the file outright.

Measured 2026-10-09

What happens to a texture when only the model file is sent on

Why does a model lose its texture when someone sends it to me?

Only GLB survives the journey, and the reason is that it is the only one of the five holding the image bytes inside the file. Exporting to OBJ produced three files rather than one: the model at 759 bytes, a material library at 198 bytes, and the texture as a separate 184 byte PNG. Neither of the first two contains a single byte of image data, and the path between them is two hops long, each a bare filename with no directory and no fallback. Copying just the model file to an empty folder, which is what happens when somebody attaches the model to a message, left the geometry intact and the texture gone. The most important column is the last one: not one of the five formats produced a warning, an error or a log entry when the texture failed to arrive. Nothing is malformed at any point, so there is no stage at which a reader could reasonably report a problem, which is why this fault routinely reaches the end of a pipeline before anyone notices.

Measured 2026-09-15

What size an AI-generated 3D model really is, and what three slicers turn it into

What size does an AI-generated 3D model come out at, and what does a slicer do with it?

None of the four generators gives the model a real size. TRELLIS.2 and Stable Fast 3D return it about 1 unit across, Hunyuan3D-2.1 and Neural4D about 2, whatever the object is. As a GLB, whose unit is metres by specification, that reads as a figurine one or two metres tall; the same numbers in an STL read as one or two millimetres. Hunyuan3D-2.1 exports both formats itself, and its two files are 1000 times apart. No slicer multiplies by 1000. PrusaSlicer and Bambu Studio decide the unit from volume, and a figurine of under 1 cubic millimetre falls in their inches band: PrusaSlicer asks and then scales by 25.4, Bambu Studio scales by 25.4 without asking. Cura scales by 100 on a 220 mm bed and not at all on a 180 mm one. Every one of those results looks like a plausible figurine, which is why the error goes unnoticed. Separately, two thirds of Hunyuan3D-2.1's surface was a thin sheet spanning its whole generation volume, so its longest side measured the sheet, not the object.

Measured 2026-09-28

Where a watertight model stops being watertight when it changes format

Why does a watertight model become non-watertight after a format conversion?

The conversion does not break the model. Every format in this test stored exactly the vertices it was handed, and the file that came out contained no less than the file that went in. What differs is what the program reading it is allowed to do. Handed a sphere whose triangles each carry their own corners, at coordinates that are still bit identical where the triangles meet, STL, OBJ, PLY and 3MF all come back as one closed shell of 642 vertices, because their readers rebuild the topology by merging vertices that sit at the same point. GLB comes back as 3840 vertices in 1280 separate shells, not because anything was lost but because glTF forbids that merge: a glTF vertex is a bundle of position, normal and texture coordinate, so two corners at the same point with different UVs are required to be two vertices. The format that throws away the most information gets the mesh back intact, and the format that preserves it exactly hands on the defect.

Measured 2026-09-14

Which repair to run first when a mesh is broken in several ways at once

Which repair should be run first when a mesh has several defects at once?

Order decides the outcome, and most orders are wrong. Four repairs that every tool offers, welding, hole filling, degenerate face removal and decimation, applied to one sphere carrying all four defects at once, close the mesh in 4 of the 24 possible sequences. The other 20 leave it open. Three of the four operations turn out to have exactly one workable order between them, weld then decimate then fill, and the fourth, dropping faces with no area, can go anywhere without changing anything: four valid sequences is precisely the four places the free operation can be inserted. Getting it wrong is not a near miss. Filling before welding creates 720 non-manifold edges that the source mesh did not have, because the unwelded seams read as holes and get stitched over. Decimating first leaves the mesh in 119 pieces and 1.22 per cent off the correct volume, against 0.11 per cent for the orders that work. The same four sequences close the mesh for every damage layout tested, so the order belongs to the operations rather than to the model.

Measured 2026-09-14

Which 3D file formats record which way is up, and which leave it to be guessed

Why does a model arrive rotated, lying on its side, after a format conversion?

None of the five formats writes an up axis into the file. Not one. What decides the answer is the specification, and the two specifications that decide it point in different directions: glTF fixes +Y as up, 3MF puts +Z toward the top of the build platform, and STL, OBJ and PLY say nothing at all. The geometry itself crosses intact every time, so a part authored 30 mm tall arrives with its 30 mm still in the file. It is the reading that differs: a consumer that applies the Y-up convention turns that 30 mm height into 20 mm and lays the part on its side, a 0.67x error with nothing in the bytes to contradict either interpretation.

Measured 2026-09-11

Why a model's scale has to be checked before any repair tolerance is applied

Does checking a model's scale before repairing it actually change the outcome?

The same file, the same 0.1 mm merge tolerance, three different assumed scales. At the true 100 mm the tolerance is 0.1 percent of the model and the mesh comes back correct: 2,562 vertices, 1 shell, watertight, no degenerate faces. Read 1000 times too small at 0.1 mm, that tolerance is 99.9997 percent of the whole model and collapses it to 7 vertices with all 5,120 faces degenerate. Read 1000 times too large at 100 m, the tolerance is a millionth of the model and welds nothing: 14,581 vertices, 5,119 shells, still not watertight. The tolerance never changed. Only the scale did.

Measured 2026-09-09

What a GLB to STL conversion discards, field by field

What is actually lost when a GLB is converted to STL?

A two part scene survives a GLB round trip with nothing changed: 2 named parts, 332 faces, 170 vertices, UV coordinates, 1 texture, 1 material and per-vertex colours all come back. Exporting the same scene to STL returns 1 unnamed part, 996 vertices instead of 170, no UVs, no texture, no material and no vertex colours. Triangles and bounding box are the only properties that cross. The STL is also 16,684 bytes against the GLB's 8,812, so the conversion costs almost twice the file size to carry strictly less information.

Measured 2026-09-09

The merge tolerance that decides whether an STL reads as watertight

Why do two tools disagree about whether the same STL is watertight?

STL stores every triangle as three independent vertices, so a 2,562 vertex icosphere is written out as 15,360 loose vertices forming 5,120 separate shells. Reading it back means guessing which of those coincide. When the coordinates are bit-identical, exact matching recovers all 2,562 and the mesh is watertight. Add vertex noise of 1e-06 mm and exact matching recovers almost nothing: it takes a merge tolerance of 0.1 mm, about 2.9 percent of the 3.459 mm shortest edge, before the mesh closes again. Two tools reporting differently on one file are usually not disagreeing about the file. They are using different tolerances.

Measured 2026-09-08

Which 3D file formats record a unit of length, and which leave it to be guessed

Does a mesh file say what its numbers mean, and what breaks when it does not?

Of five mesh formats written from one 100 mm cube, only 3MF puts a unit in its bytes: the model part opens with unit="millimeter". STL, OBJ, PLY and GLB store a bare number and nothing else. glTF is a special case, because its specification declares the number to mean metres even though no field says so; a cube authored in millimetres therefore arrives 1000 times too large in tooling that follows the spec, and at the right size in a slicer that assumes millimetres. STL, OBJ and PLY have no such rule at all, so the importing program picks one.

Measured 2026-09-07

What actually shrinks an STL file, and what each method costs in accuracy

Which methods reduce the size of an STL file, and how far does each one move the surface?

One change is free: rewriting an ASCII STL as binary takes the same 69,451 triangles from 19,744.8 KB to 3,391.2 KB, a 82.8 percent reduction with byte-identical geometry. Everything else costs accuracy. Decimating to 10 percent of the faces reaches 339.1 KB but moves the surface by a mean of 0.0162 mm. Draco compressed GLB is the smallest result at 46.9 KB while keeping every face, at a mean deviation of 0.0040 mm, but it is not an STL and no slicer will open it.

Measured 2026-08-31