Runs on your device · Your file never leaves your device.
An OBJ is really a small pile of files — the mesh, an .mtl beside it, and the texture images the .mtl names. A GLB is one file with all of it inside. This does the packing, on your device.
Add the .mtl and the textures along with the .obj and the GLB comes out complete: colours, maps and all, ready to hand to somebody or drop into a web page. Add only the .obj and you get correct geometry with a plain surface — which is sometimes exactly what you want, and is said plainly either way.
The conversion runs on your own machine, which for a 3D file is the whole point: a model is usually a client’s product, a scanned property or something not yet announced. Nothing is sent to a server, so there is nothing to delete afterwards and nothing to take anyone’s word for.
Not for: Adding materials the OBJ never had — if there is no .mtl, there is no colour information to carry.
The .mtl does not have to carry the name written on the OBJ's mtllib line. Any .mtl you add is read, and its materials are matched to the OBJ's parts by their usemtl names. Only one .mtl is used, the first in your list, so if the model's materials are split across two .mtl files, join them into one first.
Texture images are found by their file name, with capital letters ignored, so add the images the .mtl names. An image the .mtl names but you did not add is not looked for anywhere else; that surface comes out without its picture. A zip of the whole folder also works: it is unpacked here (up to 60 files and 400 MB), the largest model inside is used, and the .mtl and images are kept beside it.
An .mtl describes a surface with diffuse, specular and shininess values; GLB describes it as metal and roughness, so some settings translate and some do not. Carried: the diffuse colour (Kd) and its image (map_Kd), transparency (d or Tr), emission (Ke and map_Ke) and the normal map (norm). Not carried: specular colour and shininess (Ks, Ns), the specular image (map_Ks), bump maps, the transparency image (map_d) and displacement (disp). Every surface is written fully rough and non-metallic, so glossy materials look matte until you adjust them where you open the GLB. Colours stored per vertex inside the OBJ, which some scanners write, are kept.
Texture images are stored inside the GLB as PNG. For photographic JPEG textures that usually makes the GLB larger than the files you added.
An OBJ holds bare numbers with no unit, and a GLB reads every number as a metre. So once you add the model, the page measures it and shows its size, with a choice for what one unit in the file means: leave it as it is, a millimetre, a centimetre or an inch. Pick one and the page shows the size the GLB will have before you convert. A chair that measures 45 metres wide was almost certainly saved in centimetres.
When the files together pass about 120 MB, the page warns that the conversion needs plenty of free memory, but still runs it. An OBJ is text, and a browser tab cannot read a text file much over 500 MB in one piece, so a larger OBJ is refused with that reason instead of producing an empty result. Split the model into parts in the program it came from and convert each part here; each part becomes its own complete GLB.
This page in other languages: العربية · Deutsch · Français · Español · Русский · Português · 中文 · हिन्दी · Türkçe · עברית · فارسی · اردو · Bahasa Indonesia · বাংলা