STL vs OBJ vs PLY vs glTF vs 3MF: Which 3D Format Should You Use?

STL carries geometry only, 3MF adds units and colour for printing, glTF is built for real-time rendering, OBJ for interchange and PLY for scans. A practical comparison with a decision rule for each.

4 min read

The 3D file format you pick decides what survives the round trip. Geometry always makes it. Colour, units, materials and structure usually do not. Here is what each of the common formats actually stores, and when to reach for it.

The comparison at a glance

Format Geometry Colour & materials Units Typical use
STL Triangles only None None Printing exchange, the universal fallback
OBJ Triangles, quads, n-gons Via .mtl sidecar None General interchange between modellers
PLY Triangles, point clouds Per-vertex colour None 3D scanning, photogrammetry, research
glTF / GLB Triangles, scene graph PBR materials, textures, animation Metres Real-time rendering, web, AR, games
3MF Triangles, multiple objects Colour, materials, properties Explicit Modern 3D printing

STL: the lowest common denominator

STL is a flat list of triangles, each with three vertices and a normal vector. There is no colour, no material, no unit, no object hierarchy and no shared vertex table — a corner touched by six triangles is written out six times.

That crudeness is the reason for its survival. Every CAD package, slicer, printer and viewer written in the last thirty years reads STL, and there is nothing in the specification to disagree about. It comes in a compact binary variant and a human-readable ASCII variant that is several times larger; see binary vs ASCII STL for the byte layout and the detection trap that comes with it.

Use it when you need something that will definitely open on the other end.

Avoid it when you care about colour, multiple parts, or file size.

OBJ: text-based interchange

OBJ is a readable text format that supports quads and n-gons instead of triangulating everything, keeps a proper shared vertex list, and stores texture coordinates and normals. Materials live in a companion .mtl file that references image textures — which is the format's main practical weakness, since sending someone an OBJ means sending a folder, not a file.

Use it when moving models between modelling packages and you want to keep UVs and quad topology.

Avoid it when you need one self-contained file, or animation.

PLY: the scanning format

PLY was designed to store arbitrary per-vertex attributes, and the one everyone uses is per-vertex colour. Photogrammetry and structured-light scanners output it because it can carry a coloured point cloud as naturally as a triangle mesh. Both ASCII and binary variants exist.

Use it when working with scan data or vertex-coloured meshes.

Avoid it when the destination is a slicer, which will ignore the colour anyway.

glTF and GLB: built for rendering

glTF is the modern runtime format — a scene graph with nodes and transforms, PBR materials, textures, skinning and animation, designed to be loaded straight into a GPU with minimal parsing. It is JSON plus binary buffers; GLB packs all of it into one binary file, which is what you almost always want to ship.

It is the right format for a web viewer, a game engine, an AR quick look or a product configurator. It is the wrong format for printing: it is a description of how something should look, not a watertight solid.

Use it when the model will be rendered in real time.

Avoid it when the model is going to a printer.

3MF: what STL should have been

3MF is a ZIP archive containing XML. It stores units explicitly, so the scale ambiguity that plagues STL disappears. It supports colour and materials, multiple objects with their positions on the plate, and vendor extensions that carry actual print settings — which is why Bambu Studio, PrusaSlicer and OrcaSlicer use it as their project format. Compression typically makes it a fraction of the size of the equivalent STL.

Use it when both ends of the workflow support it, which today means any current slicer.

Avoid it when you are handing a file to someone whose software you cannot verify.

A short decision rule

  • Sending a part to be printed, recipient unknown → STL
  • Sending a part to be printed, modern slicer on both ends → 3MF
  • Multi-colour or multi-material print → 3MF
  • Model going into a website, game or AR → GLB
  • Model moving between modelling packages with UVs → OBJ
  • Scan or point cloud with colour → PLY

Checking a file before you commit to it

Whatever the format, the questions before printing are the same: are the dimensions right, is the mesh watertight, and how much material will it take. Mes3D opens all the formats above — plus FBX, DAE, 3DS and AMF — directly in the browser and answers those three questions without uploading anything.

Frequently asked questions

What is the difference between STL and OBJ?

STL stores only triangles with no colour, material or units. OBJ is a text format that also supports quads and n-gons, texture coordinates, and materials through a separate .mtl file. Use STL for simple printing exchange and OBJ when appearance data matters.

Is 3MF better than STL for 3D printing?

Technically yes. 3MF records units explicitly, supports colour and materials, holds multiple objects with their placement, and can carry print settings, all in a compressed XML package that is far smaller than an equivalent STL. Its only real disadvantage is that STL is supported everywhere, including very old software.

When should I use glTF or GLB?

For real-time rendering: web viewers, games, AR and product configurators. glTF carries a full scene graph with PBR materials, textures, skinning and animation. GLB is the same data in a single binary file. Neither is intended for 3D printing.

What is the PLY format used for?

3D scanning and research. PLY stores arbitrary per-vertex attributes, most usefully per-vertex colour, and comes in ASCII and binary variants. It is the usual output of photogrammetry and structured-light scanners.

Open the 3D viewer

More guides

All articles