STL Mesh

OBJ → GLB · FREE · NO UPLOAD

OBJ to GLB Converter — Mesh Files to Web-Ready 3D

Turn a Wavefront .obj from Blender, a scanner or an archive into a web-ready .glb for viewers, AR and three.js. No upload — your model stays on your device.

What it does: parses a universal OBJ mesh and writes GLB, the web 3D binary (glTF 2.0). Quads and n-gons are triangulated; a default PBR material is applied so the mesh renders in a viewer.

Why you need it: Blender, photogrammetry scanners and model libraries still ship OBJ. A webpage, AR preview or three.js project wants a single GLB — one file, one fetch, no MTL sidecar.

How it works: three.js OBJLoader parses the text in this tab, then GLTFExporter writes a binary glTF container. No server, no upload — disconnect and it still runs.

Demo model — drop a file to replace it
Conversion runs locally in your browser.

Conversion specs

Input formatWavefront OBJ (text-based, quads and n-gons accepted)
Output formatGLB (binary glTF 2.0)
TriangulationQuads → 2 triangles, n-gons split automatically
MTL / texturesNot loaded — UVs kept, default PBR, no texture embedding
File size limitDevice RAM only — no server limit
Unit mappingOBJ has no unit spec; glTF counts numbers as meters
Processing100% client-side via three.js OBJLoader + GLTFExporter
CostFree, unlimited conversions, no account required

From a Blender or scanner OBJ to a webpage

OBJ is the mesh file that has been around since the 1980s: vertices, faces, UVs, an optional MTL. It is what Blender, ZBrush and photogrammetry apps still write when they mean “just the mesh.” A browser does not want that. GLB is the single-file binary glTF that three.js, <model-viewer> and AR viewers load. This page is the hop: drop the OBJ, download a GLB, embed it.

OBJv/f lines, quads,UVs, optional MTLINPUTParse mesh datatriangulate, keep UVs,default PBRIN THIS TABGLBbinary glTF,web & AR readyOUTPUT
The OBJ text is parsed into a mesh, then packed as glTF. MTL maps are not embedded.
  1. Export or download the OBJ from Blender, a scanner, or an archive. You do not need the .mtl or texture folder for this converter — they are not loaded. Drop just the .obj on the zone above.
  2. Wait for the preview and read the stats bar. Triangle count, vertex count and bounding-box size appear there. Scans and sculpts are often millions of triangles; a heavy mesh will convert, but a web viewer may struggle. Decimate in Blender first if the count is in the millions.
  3. Check scale against the bounds. OBJ has no unit field. glTF's spec unit is meters. If a figurine that should be 50 mm tall reads as 0.05, the file was authored in meters. Trust the numbers on this page, then scale in the destination viewer if it assumes a different unit.
  4. Click Download GLBand load it in three.js, <model-viewer>, or an AR pipeline. Assign real materials there. If you actually wanted a printable mesh, pick STL from the same toolbar, or use the OBJ to STL converter.

That is the whole pipeline: export OBJ, convert here, download GLB, embed it. The MTL never comes along — this tool writes a static, web-ready mesh, not a textured scene package.

When you need this conversion

  • Blender to the web — export OBJ (or use GLB from Blender directly); this page is for the OBJ you already have.
  • Scan to a viewer — photogrammetry apps (Polycam, RealityCapture) still hand you OBJ meshes.
  • Archive to AR — decades of model libraries ship OBJ; GLB is what SceneViewer and WebXR load.
  • One file instead of a folder — OBJ + MTL + maps is a bundle; GLB is a single download.

Need a printable mesh instead? Use the OBJ to STL converter. Going the other way from a print file? STL to OBJ. Have a GLB and want to print it? The GLB to STL converter extracts triangles. New to the format? What is an OBJ file covers vertices, faces, UVs and the MTL sidecar.

What survives the conversion

In the OBJIn the exported GLB
Triangle / polygon geometryKept; quads and n-gons triangulated
UV coordinates (vt)Kept on the geometry
Vertex normals (vn)Kept, or recomputed if the source has none
Groups / objectsMerged into a glTF scene
MTL materials and image mapsDropped — default PBR, no texture embedding
Smoothing groupsDropped — glTF uses vertex normals
Units (none in OBJ)Numbers copied as-is; glTF spec unit is meters

FAQ

Is my OBJ file uploaded anywhere?+

No. The OBJ text is parsed in this tab with the three.js OBJ loader and re-encoded as a binary GLB locally. There is no upload endpoint. Load the page, disconnect from the internet, and the conversion still works.

What happens to the .mtl file and textures?+

Drop just the .obj — this converter does not load an MTL sidecar or image maps, so nothing is texture-embedded in the GLB. UV coordinates on the mesh survive. A default PBR material is assigned so the model renders in a viewer. Re-assign maps in Blender, three.js, or your engine after import.

Will the GLB be smaller than the OBJ?+

Usually, yes. Wavefront OBJ is ASCII: every vertex, UV and face is a line of text. GLB stores the same mesh as binary buffers with indexed vertices. A multi-megabyte OBJ often shrinks by half or more. Draco compression is not applied, so any glTF 2.0 viewer can open the result.

My OBJ has quads or n-gons. Does that break the GLB?+

No — faces are triangulated on the way in, which is what glTF viewers expect. A quad becomes two triangles; the shape is unchanged. Smoothing groups from the OBJ are ignored; vertex normals are kept or recomputed.

Why convert OBJ to GLB instead of keeping OBJ?+

OBJ is the interchange format every DCC still opens. It is not the format of the 3D web. three.js, Babylon.js, <model-viewer> and Android SceneViewer load glTF. A product page or AR preview wants one binary file, not a .obj plus a .mtl plus a folder of maps.

The model comes out tiny or huge in the viewer. Why?+

OBJ files carry no unit. Blender exports in meters by default; scanners often write millimeters. glTF's spec unit is the meter. Check the bounds under the preview: if a 50 mm figurine reads as 0.05, the numbers were authored in meters and will look correct in a meter-based viewer — or 1000× too small if the viewer assumes millimeters. Scale on import, not by guessing.

🧊
Written by Casey Marlin · Last updated
This update: conversion covered by scripts/test-stl.mjs