GLTF

What is a GLTF file?

The 3D format for the web. Geometry, materials and animation as JSON, usually beside a .bin file and its textures.

What GLTF is

GLTF is a plain-text format you can open in any editor. It stores shapes and coordinates rather than pixels, so it stays sharp at any size — a logo scaled to a billboard loses nothing. It is used for the web and handing a finished file over.

The extension is .gltf, and the full name is GL Transmission Format. Both matter less than what the file can hold, which is what the rest of this page is about.

Where GLTF came from

Khronos Group published it in 2015. The specification is glTF 2.0.

Age is worth knowing here for one practical reason: the older a format is, the more programs have had time to learn it.

The specification is public

It is published in full, so anyone can implement it from the document rather than by inspection, which is why it turns up in so many programs and why files written twenty years ago still open. A published specification is not the same thing as a royalty-free one: where a format wraps a codec, the patent licensing is a separate question the standard does not settle.

Nothing is thrown away

GLTF stores its content exactly. Saving it again changes nothing, so it can be opened, edited and re-saved as often as you like without accumulating damage — which is what makes it a working format rather than a delivery one.

It can hold more than one frame

GLTF can store an animation rather than a single still. That is worth knowing before converting one: a target that holds one frame keeps the first and drops the rest, usually without saying so.

What opens GLTF

Blender, three.js and Babylon.js read it, and so do most programs of the same kind.

If a file will not open, the format is rarely the problem — it is more often that the program predates it. Converting to something older is the reliable way past that, and it is what the rest of this site is for.

Opening it in a browser

No browser reads it.

That is the single most common reason to convert it: not that the format is bad, but that the place you want to show the file cannot read it.

It is a working format

GLTF is meant to be opened and changed. Keep the file in this format for as long as the work is going on, and export from it whenever a finished copy is needed.

Built for delivery, not for modelling

Every other 3D format on this site is either an interchange format for modelling programs or a capture format for scanners. glTF is neither: it was designed by the Khronos Group in 2015 as a way to *ship* a finished scene to a renderer, in a shape a graphics card can use almost directly.

That is what its designers meant by calling it the JPEG of 3D. Nobody edits a JPEG in a photo studio; it is what comes out at the end. glTF holds geometry, materials, textures, animations, cameras and lights arranged so that a viewer can load them and draw them with minimal work in between.

JSON at the top, binary underneath

A .gltf file is JSON, and it is readable — open one and you can see the node hierarchy, the material definitions and the animation channels laid out in named fields. That readability is a genuine feature when something looks wrong.

What the JSON does not contain is the bulk. Vertex positions, normals, texture coordinates and animation keyframes live in a separate binary buffer, usually a .bin file beside it, and textures are ordinary PNG or JPEG files referenced by path. A model is therefore a folder rather than a file — which is exactly the problem GLB exists to solve.

Materials are physically based, and that is why it looks right

glTF uses a metallic-roughness material model: each surface declares how metallic it is, how rough, its base colour, and optionally normal, occlusion and emissive maps. Every modern renderer understands that vocabulary, so the same model looks consistent in a browser, a game engine, a phone’s augmented-reality viewer and a product configurator.

This is the sharpest difference from OBJ, whose companion MTL file describes a shading approach from the early 1990s with no place for roughness or metalness. A model exported to OBJ loses its material description in any meaningful sense; exported to glTF it keeps it, which is why the conversion is worth doing whenever a model is going anywhere it will be rendered rather than edited.

Animation and rigging travel with it

glTF carries skeletal animation: a joint hierarchy, skinning weights, and keyframed channels for translation, rotation and scale. It also carries morph targets for facial expressions and shape blending.

Nothing else in common use for the web does. OBJ has no animation at all, STL and PLY have none, and FBX has plenty but is proprietary and undocumented. If a model has to move on a web page, glTF is not one of the options — it is the option.

Where you meet it

Web viewers, first: three.js, Babylon.js and the model-viewer element all take glTF natively, and the great majority of 3D on web pages is a glTF file underneath. Product configurators and e-commerce viewers are the commercial application.

Then augmented reality on Android, which uses glTF directly through Scene Viewer, and asset libraries — Sketchfab, Poly Haven, Khronos’s own sample models — which publish in it because it is the format that works everywhere without conversion. Blender, Unity, Unreal, Godot, Substance and Cinema 4D all import and export it.

Extensions, especially Draco

The specification has a defined extension mechanism, and two matter in practice. Draco compresses the geometry, often to a fifth or a tenth of its size, which for a web page is the difference between an instant load and a visible wait. KTX2 with Basis Universal does the same for textures and additionally lets the graphics card keep them compressed in memory.

The catch is that an extension a viewer does not implement leaves the file unusable there. Draco-compressed glTF fails to open in some older tools, so it is a delivery-time optimisation rather than something to apply to a master. Keep the uncompressed version and compress on the way out.

Converting to and from it

From OBJ, STL or PLY the geometry converts cleanly and the materials mostly do not exist to convert — a bare mesh arrives as a bare mesh with a default grey material, and anything that should look like something needs materials assigned afterwards.

To OBJ or STL, expect loss in proportion to what the glTF was carrying. Animation, rigging, cameras, lights, the scene hierarchy and the physically based materials have no equivalent in either, and STL additionally discards texture coordinates and colour. Convert down only when something specifically requires those formats — a 3D printer for STL, an older modelling tool for OBJ.

The facts, in one place

Identifiers and provenance for the GLTF format.
Extension.gltf
Media typemodel/gltf+json
Published byKhronos Group
First published2015
SpecificationglTF 2.0

glTF files: common questions

How do I open a glTF file?

Blender imports it, as do Unity, Unreal, Godot and most modelling tools. For a quick look, Windows 3D Viewer and any number of web-based viewers open one directly — but remember a .gltf usually needs its .bin and texture files beside it.

What is the difference between glTF and GLB?

The packaging. A .gltf is JSON that references a separate binary buffer and texture files, so a model is a folder. A .glb packs all of it into one binary file. The contents are the same; GLB is what you send.

Why does my glTF model appear untextured?

The textures are separate files referenced by path, and they did not travel with the JSON — the same failure as sending an OBJ without its MTL. Use GLB, which packs everything into one file, or send the whole folder.

What is the difference between glTF and OBJ?

OBJ is an interchange format for modelling programs and its materials describe a shading model from the early 1990s. glTF is a delivery format with physically based materials, animation, rigging and a scene hierarchy, arranged so a renderer can use it almost directly.

Can glTF hold animation?

Yes — skeletal animation with joints and skinning weights, keyframed transforms, and morph targets for facial expressions. Nothing else in common web use carries animation: OBJ, STL and PLY have none at all.

What is Draco compression?

An extension that compresses the geometry, often to a fifth or a tenth of its size, which matters a great deal for web loading. The catch is that viewers which do not implement it cannot open the file, so compress on the way out and keep an uncompressed master.