Free 3D viewer & formats

GLB vs glTF vs FBX vs OBJ vs STEP: which 3D format to use

What GLB, glTF, FBX, OBJ, STL and STEP each store, and which to pick for client review, CAD, 3D printing or the web, with what MeshMarkup does with each one.

5 min readUpdated 30 September 2026

For sending a 3D model to a client or putting it on the web, use GLB: one file carries the geometry, materials and textures, in metres, and every modern viewer reads it. Use STEP for engineering and CAD, because it keeps exact surfaces, the assembly and real units. Use STL or 3MF for 3D printing. FBX and OBJ are fine for moving models between 3D apps, but they often leave textures behind as separate files, which is why a model can arrive grey.

What each format stores

GLBglTFFBXOBJSTLSTEP
GeometryTriangle meshTriangle meshMeshMeshTriangles onlyExact CAD surfaces (B-rep)
MaterialsPBR, standardisedPBR, standardisedYes, app-specificBasic, in a separate .mtlNoneColours only
TexturesInside the fileSeparate image files (or embedded)Usually separate files, can be embeddedSeparate image filesNoneNone
UnitsMetres, by definitionMetres, by definitionRecorded in the fileNoneNoneRecorded in the file
Hierarchy and namesYesYesYesFlat object groupsNoFull assembly tree
Files to send1Usually 3 or more1 plus textures2 plus textures11
Made forDelivery, web, ARDelivery, webExchange between DCC appsSimple exchange3D printingEngineering, manufacturing

GLB is the binary form of glTF. They hold the same thing; a GLB packs the JSON, geometry and images into one file, while a .gltf is a JSON file that usually points at a separate .bin (the geometry) and one image per texture. If you only send the .gltf, the other files are missing.

Which one to pick

For client review and the web: GLB

GLB is the format built for delivering finished 3D models. It's a single file, its materials use the same physically based model every real-time viewer uses, and its unit is always metres, so sizes are right on arrival. MeshMarkup stores every model as GLB, so a GLB goes up without any conversion. Draco-compressed GLB files, which are much smaller, open too.

Most 3D apps export it: Blender, 3ds Max, Maya, Cinema 4D, SketchUp, Substance Painter and KeyShot among them. There's a guide for each app under Import from your 3D app, starting with Blender.

For CAD and engineering: STEP

STEP describes the exact mathematical surfaces, not triangles, and keeps the assembly with part names, colours and real units. It's what every CAD program can write and read, from SolidWorks and Fusion to Inventor, CATIA and Onshape. For a review, MeshMarkup turns it into a mesh in your browser. See open a STEP file online. IGES is an older CAD exchange format that works the same way.

For 3D printing: STL or 3MF

STL is the long-standing printing format: triangles and nothing else, with no colour and no unit. 3MF is the modern replacement, with a unit, colours and several parts in one file. Either opens in MeshMarkup. An STL has no materials, so it shows in grey, and no unit, so its measurements may be off; a 3MF is converted to real size from the unit it records. See measure a 3D model.

For moving models between 3D apps: FBX or OBJ

FBX keeps meshes, hierarchy, materials and units, and is the usual route out of 3ds Max, Maya and Cinema 4D. OBJ is simpler and nearly universal, but has no units, a flat structure, and keeps materials in a separate .mtl file with textures alongside. Both are fine for sending to MeshMarkup as long as the textures come too: zip the model with its texture files.

Why zips matter

FBX, OBJ, DAE and multi-file glTF models name their textures instead of containing them. Send the model file on its own and the viewer has no images to load, so it comes in grey or untextured.

The fix is to put the model and its files in one .zip:

  • OBJ: the .obj, its .mtl, and the texture images.
  • glTF: the .gltf, its .bin, and the texture images.
  • FBX or DAE: the model and its texture images.

A zip with several model files of the same kind (an assembly exported part by part, such as body.stl, arm.stl and legs.stl, or several STEP parts) opens as one model, with each part named after its file. Up to 60 parts per zip. If a zip holds a GLB next to its source file, the GLB is used. Plain .zip only; .rar and .7z aren't read. Or skip all of this by exporting a GLB, which carries its textures inside. More in model looks grey.

What MeshMarkup does with each format

Everything is converted to GLB in your browser, before anything is uploaded, so your original file stays on your computer and your client only ever receives the GLB.

You uploadWhat happens
GLBUsed as is
glTFZip it with its .bin and textures; it's packed into a GLB
FBXConverted; the unit in the file is applied, so centimetre files come in at the right size
OBJConverted, with its .mtl and textures if they're in the zip
STL, PLYConverted; shown in neutral grey (PLY vertex colours are kept)
STEP, IGESConverted with OpenCascade, in metres, with part names and colours
3DM (Rhino)Converted with Rhino's own library; the model's units are applied; curves and annotations are dropped
3MF, DAE, 3DSConverted
.blend, .max, .ma, .mb, .c4d, .skp, .sldprt, .sldasm, .ipt, .iam, .f3d, .CATPartNot readable outside their own programs. MeshMarkup tells you which menu exports a format it can open

Models are shown as they are; animations aren't played. The free viewer uses the same conversion, so it's a quick way to check a file before you upload it. See upload 3D models for the upload itself.

Quick answers

  • GLB or glTF? GLB, unless a pipeline specifically wants separate files. One file can't lose its textures on the way.
  • FBX or OBJ? FBX, if your app exports it well: it keeps units and hierarchy. OBJ when nothing else works.
  • STEP or STL for a client? STEP. It keeps colours, part names and true size, and an STL keeps none of them.
  • Can I send a native file? No. Export one of the formats above first. The viewer names the right menu if you try.
GLB vs glTF vs FBX vs OBJ vs STEP: which 3D format to use — MeshMarkup Help