Free online OBJ viewer
OBJ viewer that explains why it arrives grey
Open a .obj without an account and without sending it anywhere: every object and group in the file is counted, and its polygons are split into the triangles a graphics card actually draws. An OBJ keeps its colours in a separate .mtl, so drop that alongside it — or the whole folder — and the materials arrive too; drop the .obj on its own and the model is grey, which costs the geometry nothing. Measurements follow below: dimensions, triangle and vertex counts, surface area, and enclosed volume where the shell closes.
- 100% free
- No signup
- Counts objects and groups
- Reads the .mtl too
- Nothing uploaded
Drag a file anywhere on this page to open it. F fits the view, W switches shading, G the grid, R spins it.
How to open an OBJ file
Three steps, and the grey model stops being a mystery.
Drop the .obj
OBJ is plain text, so the file is decoded as UTF-8 and read line by line — v for a vertex, vn for a normal, vt for a texture coordinate, f for a face. Faces with more than three corners are triangulated on the way in, which is why the triangle count reported here can exceed the number of f lines in the file. Expect ASCII to cost several times what the same geometry would in a binary format.
Drop the .mtl with it, or expect grey
An OBJ names its material library on a mtllib line and switches between materials with usemtl, but the definitions themselves live in a .mtl file next to it, and the textures in image files next to that. Select them together, or drag the folder, and the materials arrive with the geometry. Drop the .obj alone and it renders in a neutral default — nothing is missing from the mesh, the appearance was simply never inside that file.
Read the parts count and the measurements
OBJ groups geometry with o and g lines, and when a file holds more than one the panel shows how many separate meshes were found. That is the quickest way to tell a single solid from an assembly that only looks like one. Below it: bounding box, triangle count, welded and stored vertices, surface area, and volume when every edge is used exactly twice.
Technical specifications
| Extension | .obj — Wavefront, plain text |
|---|---|
| Kept | Geometry, normals, UV coordinates, object and group names |
| Sibling files | .mtl and textures, read when you drop them, the folder or a .zip |
| Faces | Polygons of any size, triangulated when loaded |
| Units | None stored; Y-up by convention where printing is Z-up |
| File size | No fixed limit — ASCII, so fewer triangles per megabyte than binary formats |
Frequently asked questions
Why is my OBJ grey instead of textured?
Because the colour is not in the .obj. The format stores geometry and a pointer — mtllib chair.mtl — to a separate material file, which in turn points at texture images. Give this page those files as well and the colour comes back: select the set in the dialog, or drag the whole folder. If you only ever wanted the geometry, grey is not a loss — nothing about the mesh is affected either way.
Can I drop the .mtl and textures too?
Yes — that is the intended way to open one. Put the .obj, the .mtl and the images in the same drop, or just drag the folder. The mtllib line is read, the material file is located among whatever you supplied, and its textures resolve the same way. All of it stays in this tab, which is why this works without the directory upload other converters ask for.
What does the parts count mean?
It is how many separate meshes the loader built from the file, which follows the o (object) and g (group) lines plus any usemtl switches. A model exported as a single solid shows one part; an assembly shows one per component. It is useful before conversion or printing, because a file with twelve parts is twelve shells that each need to be watertight on their own — and the watertight verdict here covers all of them together.
The triangle count is higher than the face count in the file.
OBJ permits faces with any number of corners, and quads are the common case out of a subdivision modeller. Anything with more than three corners is split into triangles when loaded, because that is what a GPU draws — a quad becomes two triangles, a hexagon four. So a clean quad mesh of 5,000 faces reports about 10,000 triangles here. Nothing has been added to the model; the same surface is simply described in the smallest unit.
Does OBJ store units or scale?
No. Like STL and PLY, an OBJ holds bare numbers with no statement of what they mean, so the millimetre labels on this page are an assumption inherited from what slicers expect. The convention that does exist is orientation: OBJ is Y-up, while most printing pipelines are Z-up, which is why a model imported into a slicer often lands on its side. That is a rotation, not a scale error, and no data is lost either way.
Is OBJ still worth using?
For static geometry moving between modelling packages, yes — it is trivially simple, universally supported and readable by a human when something goes wrong, which is more than can be said for FBX. For anything that has to look right at the other end, GLB has replaced it, because a single file that carries its own materials removes the entire class of problem this page keeps explaining. For printing, STL or 3MF, since neither renderer materials nor UVs matter once the part is a solid.
About OBJ, the format that outlived its company
Wavefront Technologies published OBJ in the 1980s for its Advanced Visualizer, and the company has been gone since 1995 while the format is still in every exporter on the market. The reason is its plainness: a text file where each line does one thing, with no versions, no compression and no binary layout to get wrong. You can open an OBJ in a text editor, find the vertex that is in the wrong place, and fix it — a property no other format on this site can claim, and one that matters more often than it should.
The split between geometry and appearance is the design decision everything else follows from. Materials live in a .mtl file, textures in images beside that, and the OBJ merely names them. In 1990, when a model lived in one directory on one workstation, that was sensible modularity. Today it means every model sent anywhere arrives partially dismembered, which is the single most common question this page answers — and the answer is to send the directory rather than the file. The formats that replaced OBJ for delivery — GLB and 3MF — differ from it mainly in refusing to do that.
One characteristic makes OBJ genuinely better than STL for engineering work, and it is worth knowing even if you print rather than render. OBJ shares vertices: a corner used by six triangles is written once and referenced six times, and the file records which triangles belong to which named group. STL does neither, so a converted OBJ loses both the sharing and the names. That is why the vertex counts on this page are reported twice — welded and stored — and why the gap between them is small for OBJ and roughly sixfold for STL.
Where your OBJ is read
Every number on this page is worked out by JavaScript running in the tab you are reading it in. The model you open is read straight off your own disk — it is never uploaded, logged or kept, which is also why these tools carry on working after you disconnect from the network.
One clause specific to this page: the .mtl and texture files an OBJ references are never requested from anywhere. They are read only if you hand them over — as files, a folder or a zip — and then only from this tab's memory. Nothing else in that folder is reachable, and nothing you did hand over leaves the machine.