# 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.

Source: https://freestlviewer.com/blog/stl-vs-obj-vs-ply-vs-gltf-vs-3mf/  
Published: August 5, 2026 · Updated: August 5, 2026

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](https://freestlviewer.com/blog/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](https://freestlviewer.com/blog/stl-units-mm-vs-inches/) 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](https://freestlviewer.com/blog/watertight-and-manifold-stl-files/), and
[how much material](https://freestlviewer.com/blog/stl-volume-and-print-weight/) will it take.
[Mes3D](https://freestlviewer.com/) 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.
