GLB to OBJ,
textures intact

GLB is the modern web container - binary, packed, PBR-native. OBJ is the format your grandfather's pipeline still reads: plain text, universally understood, and blind to half of what GLB carries. The conversion is five minutes in Blender; the craft is knowing which half gets left behind before the client notices.

A stylised treasure chest in the Blender viewport, half shaded and half wireframe, with a cube badge curving toward it

Two formats from different eras doing the same job differently: GLB is a binary container built for the web - compact, packed, ready for PBR - while OBJ is plain text that every application from ZBrush to an ageing CNC suite can open without being asked twice. Moving between them takes one export dialog. The two files disagree about what a model even is, and that disagreement is the whole job.

What each format carries

LayerGLBOBJ
GeometryYes, as one bundleYes, as one or many files
UVsYesYes
TexturesEmbedded in the binaryExternal files beside the model
MaterialsPBR: base colour, metallic, roughnessMTL: diffuse colour, bump slot, no PBR
Animation and rigsYesNo
Node hierarchyFull scene graphFlat groups

The conversion, step by step

01 - Import and inspect. File, Import, glTF 2.0. Before touching anything, read three things in the sidebar: dimensions (metres is the convention), the material panel (is a base-colour image attached?), and the outliner, where nested empties from the glTF node tree are normal - select the mesh, not the wrapper.

02 - Get the textures onto disk. GLB keeps its images inside the binary; Blender reads them from memory, but OBJ cannot reference what is not a file. Use File, External Data, Unpack Resources so every image lands in a textures folder next to the model.

03 - Read the materials before they change. Open each material and note what the exporter will and will not find: base colour and a normal map survive the trip; metallic and roughness sliders do not. Knowing which materials lean on them tells you whether a bake is worth the time.

04 - Export with intent. File, Export, Wavefront OBJ: include materials so the MTL is written, set path mode to Copy so the exporter duplicates the textures next to the file, keep scale at 1.0 when the scene is already honest, and leave triangulation off unless the receiving application is fussy. OBJ keeps quads; most consumer apps do not care.

05 - Deliver three things, together. The OBJ is geometry, the MTL is the material map, the texture folder is the paint. Ship them zipped with the relative paths intact; separate them and the receiver gets grey.

The three traps

The PBR downgrade. OBJ materials predate physically based rendering. A brushed-metal panel that reads beautifully in GLB arrives as flat grey with a bump map. If the OBJ is for previewing or printing, shrug and move on; if it is heading into a renderer, bake the base colour with lighting and AO into the texture and carry what OBJ can actually hold.

Texture paths. The MTL stores relative paths to the images. Rename the folder or move one file and every material breaks silently. The Copy path mode is the fix: it re-writes the images beside the export and re-points the MTL at them.

The silent flattening. Animation, armatures and the node hierarchy do not just get skipped - they disappear without complaint. If the GLB came from a store page promising a rigged character, converting it to OBJ throws the rig away. Export FBX or glTF instead; save OBJ for static geometry.

When OBJ is still the right answer

Sculpting tools, CNC and CAD pipelines, modding communities and print preparation all still expect OBJ, and its plain-text nature means it opens in more places than anything else on disk. When the receiving application wants OBJ, converting in Blender - where you can see the scale, the materials and the mesh - beats every online converter that asks you to upload a client's asset to a stranger server.

One habit worth keeping: when the GLB arrived from an AI generator, run the health pass before exporting. Check scale, check that the material actually has an image, and decimate the mesh if it is leaving for a game engine. The conversion is never the hard part - the assumptions are.

Keep going

The pages that answer the next question.

Frequently asked questions

Short answers to what people ask before they commit.

Does GLB to OBJ keep textures?⌄

Yes, with one caveat: OBJ does not store images, so the textures travel beside it as loose files and the MTL file says where they live. Export with the path mode set to Copy, keep the OBJ, MTL and texture folder together, and the swap is clean. Export carelessly and you get a grey model and a support ticket.

What is the MTL file that appears next to my OBJ?⌄

The material library: a small text file that lists each material and points at the texture images the OBJ references. An OBJ without its MTL imports as untextured geometry. Zip the pair together whenever the model leaves your machine.

Why is my converted model the wrong size?⌄

Neither format carries real units - both run on convention, and the conventions disagree. Blender imports GLB at metre scale; an app expecting centimetres receives it a hundred times too small. Check the dimensions in the sidebar before export and fix scale in Blender, where the error is visible.

Can OBJ keep animations or rigs?⌄

No. OBJ stores static geometry, UVs and materials - nothing about motion or skeletons. If the GLB has clips that matter, export FBX or glTF instead; both carry rigs and animation. Converting an animated asset to OBJ is a deliberate flattening, not a surprise to find later.

Why do metallic and roughness look wrong after conversion?⌄

OBJ material format predates PBR: it understands diffuse colour and a bump slot, not metallic and roughness maps. Shiny metal in GLB arrives as flat colour unless you bake the PBR look into textures the MTL can carry. Fine for preview swaps; bake first for hero renders.

Put the workflow to work.

Sign in with Google, pick a plan, and generate your first asset.

Compare plans
GLB to OBJ in Blender: Textures, MTL and a Clean Swap