Convert GLB to OBJ
GLB is one packed binary file made for the web. OBJ is plain text that every modelling program has read for thirty years. This tool unpacks the first into the second on your own computer.
Drag a 3D file here, or.
This page is set up for GLB files. Other formats we can read work here too.
The file is read on your own computer. It is never uploaded.
Your file is read by your own browser and never sent to a server. There is no upload, no account and no copy of your model anywhere but on your computer.
The scale changes by a thousand
glTF and GLB are defined in metres: one unit is one metre. Most other software treats a unit as a millimetre, and slicers certainly do. A 0.06 unit bracket in a GLB is 60 mm in real life, and if the number goes across untouched the OBJ arrives as a shape six hundredths of a millimetre wide.
So the first unit box starts at metres, which is what the specification says, and the second is yours to set. Millimetres for anything going to a printer. The measurements next to the 3D view show the result before you download.
Colours come out as a material file
A GLB stores a material on each mesh. OBJ stores materials in a separate .mtl file that the .obj refers to by name. Where the GLB has anything to say about a surface, both files are written and you get a .zip holding them, together with any pictures they use.
The base colour and the normal map carry over, because an .mtl has a slot for each. Roughness becomes shininess, which is the same idea measured from the other end and is close rather than exact. Metalness and occlusion have no slot at all and are left out rather than faked.
The pictures come out with it
A GLB usually has its texture images packed inside it, which is the main reason people like the format. Those images are unpacked here, written out as PNG files and named in the .mtl, so the download holds the .obj, the .mtl and one picture for each texture. Put all of it in one folder and open the .obj — every modelling program finds the rest by itself.
The texture coordinates go across in full, seams and all, so the unwrap survives, and the unwrap is the part that took somebody a long afternoon. One thing does change on the way. glTF measures a picture downwards from its top edge and OBJ measures it upwards from the bottom, so every image is turned over as it is written. That is why the texture lands the right way up in Blender instead of mirrored.
One material per mesh, which is not how a GLB always works
An OBJ assigns materials by writing a `usemtl` line and having every face after it use that material. A glTF assigns them per primitive: a single mesh can be split into several primitives, each with its own material, all sharing one vertex buffer.
Those map onto each other cleanly in most files, because most meshes have one material. Where a mesh has several, each primitive becomes its own `usemtl` run in the .obj, which is the correct translation and means the face order in the OBJ may not match the order the GLB stored them in. Nothing is lost; the grouping is simply expressed the way OBJ expresses it.
The material names come from the glTF where it named them. Where it did not — and plenty of exporters leave materials unnamed — they are numbered instead, because an .mtl entry with no name is not a valid .mtl entry.
What survives, and what does not
Kept in the OBJ file
- The exact shape of every mesh, in the place the scene put it
- Object names, written as OBJ groups
- Material base colours, in a companion .mtl file
- The texture images, unpacked as PNG files and named in the .mtl
- Normal maps, in the one slot an .mtl has for them
- The texture coordinates, seams included
- The real size, converted from metres into the unit you choose
Lost on the way
- Metalness and occlusion maps, which an .mtl has nowhere to name
- Roughness as a number — it becomes OBJ’s older idea of shininess, which is close but not the same
- Animation, cameras, lights and anything else that is not a mesh
How to convert GLB to OBJ
Drop the .glb file in
Everything is inside the one file, textures included, so there is nothing else to gather.
Set the output unit
The input is metres, fixed by the glTF specification. Choose millimetres if the model is going to a printer or to CAD, metres if it is going into Blender for rendering.
Set the output up axis if the destination is not Y-up
GLB is Y-up. Blender, Maya and 3ds Max are too, so usually nothing changes here. Set Z for a slicer or a CAD program.
Download the zip
A textured model comes as a zip holding the .obj, the .mtl and a PNG for each image. A model with no surface detail is handed over as a single .obj instead.
Unzip everything into one folder and open the .obj
The .mtl and the pictures are found automatically by name. Separate them into different folders and the model opens grey.
GLB and OBJ compared
| Property | GLB.glb | OBJ.obj |
|---|---|---|
| File contents | One binary file: a small header, the same JSON as glTF, then all the buffers and images. | Plain text, one item per line. Materials live in a separate .mtl file beside it. |
| Geometry | Triangles, with skinning weights and animation channels alongside them. | Triangles and polygons. Also stores free-form curves, which almost nothing writes. |
| Units | Metres, fixed by the specification. | None. Like STL, the numbers are bare, though exporters usually mean metres. |
| Colour and texture | Full physically based materials, with the texture images packed inside the file. | Material names and texture coordinates, with the materials themselves in the .mtl file. |
| Separate objects | A scene graph of named nodes, each with its own position and rotation. | Named objects and groups, each able to carry its own material. |
| Published by | The Khronos Group, 2015, as the single-file packaging of glTF. | Wavefront Technologies, 1980s, for the Advanced Visualizer. |
| Written by | Blender, Sketchfab, Substance Painter, and every tool that ships models to the web. | Blender, Maya, 3ds Max, ZBrush and most modelling programs. |
Questions
- The OBJ is microscopic in Blender. What happened?
- The unit conversion. A GLB is in metres, so a small object is a small number. Set the output unit to millimetres and the OBJ arrives at a size you can actually see and work with.
- Where are my textures?
- In the zip, beside the .obj. Each image inside the GLB is written out as a PNG and named in the .mtl, and the coordinates that place it are in the .obj. Keep the files together in one folder and the texture appears the moment you open the .obj.
- Why is the download a zip?
- Because an OBJ is never one file once it has a surface. Colours live in a .mtl beside it and pictures live in image files beside that. The zip holds the set. A model with no colours and no textures is still handed over as a single .obj.
- Which way up will the model be?
- GLB is Y-up and the OBJ is written the same way unless you change it. If it is going to a slicer or CAD, set the output up axis to Z.
- My texture is upside down in some other program. Why?
- glTF measures a picture down from the top edge and OBJ measures it up from the bottom, so every image is flipped as it is written. That is correct for Blender, Maya and 3ds Max. A program that expects the glTF convention in an OBJ would see it inverted, which is rare.
Where to go next
The other direction
Other things to do with a GLB file
Other ways to get a OBJ file
Related guides and tools
- Repair an STL that will not sliceClose the holes and separate the bad edges so a slicer accepts it
- Reduce the size of an STL fileFewer triangles, the same shape, a much smaller file
- Check whether an STL is ready to printFind out what is wrong with a model before you print it
- Convert BLEND to OBJGuide
- Convert BLEND to GLBGuide
- Convert BLEND to STLGuide