Cookies for analytics and advertising
We use cookies for analytics and advertising, both sent to Google. Refusing changes nothing you can see.Read the privacy page
GLTF
The 3D format for the web. Geometry, materials and animation as JSON, usually beside a .bin file and its textures.
GLTF
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
| Extension | .gltf |
|---|---|
| Media type | model/gltf+json |
| Published by | Khronos Group |
| First published | 2015 |
| Specification | glTF 2.0 |
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.
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.
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.
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.
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.
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.