local engine

OBJ → 3MF

Free OBJ to 3MF Converter

OBJ and 3MF are both open formats with almost nothing in common. OBJ is a plain-text vertex and face list, usually accompanied by a separate material library, and it declares no unit. 3MF is a zipped XML package built for additive manufacturing that declares its unit and can carry colour, materials and multiple objects. This converter writes the geometry half of that promise: a millimetre-declared mesh in a valid package, without the material library.

OBJ → 3MF
workbench
Open the OBJ to 3MF workbench .OBJ · .MTL is not read Convert in browser →
  • Full-size 3D preview before you download
  • 28 input formats and 8 output formats, four detail levels for CAD sources
  • Reads the file in your tab — nothing is uploaded
224conversions here
28mainstream formats
0 Buploaded anywhere

How to convert OBJ to 3MF

  1. Drop the .obj fileThe text is parsed in the tab; vertices, texture coordinates, normals and faces are read, while any referenced .mtl library is ignored because only the selected file exists. Nothing is uploaded.
  2. Set the scale to millimetresOBJ carries no unit and the 3MF will declare millimetres. If the model was authored in another unit, apply the factor here so the declared unit is truthful rather than merely conventional.
  3. Flatten the sceneAll meshes are transformed into world space and collected into one object. Groups and names are dropped, and coincident vertices are merged on a five-decimal key.
  4. Package and downloadThe writer builds the three files a 3MF requires — content types, relationships and the model XML — and zips them into one .3mf. No materials or colours are written.
  5. Open it in the slicerConfirm the size and let the slicer report manifold errors. The declared unit removes the scale ambiguity that a bare STL would leave, but it cannot fix geometry that was open to begin with.

What happens when OBJ becomes 3MF

One is a text list, the other is a package

OBJ dates from the Wavefront era: a line-oriented text file where v lines list positions, vt lines list texture coordinates, vn lines list normals, f lines index them into faces, and mtllib names a separate material file. It has no header, no unit and no scene metadata. 3MF is an OPC package, the same zip-and-XML architecture as modern Office files, whose model part declares units and can reference material and colour resources. Repackaging one as the other is essentially a geometry translation plus a container build.

The material library is not part of the file

An OBJ's appearance lives in a sibling .mtl. Because the browser only receives the dropped file, the library is unavailable even before export. The workspace therefore previews the geometry with a default material, and the 3MF writer has no colour data to write. That is a limitation of the single-file workflow, not of the 3MF format, which can carry materials when a writer supplies them.

Why declaring millimetres matters

STL's central ambiguity is that it declares no unit. 3MF fixes that: the model element carries a unit attribute, and slicers trust it. The exporter writes millimetres, so an OBJ authored in millimetres converts to a file whose declared unit matches its numbers. An OBJ authored in inches or metres needs the scale control applied first, otherwise the declaration is a convention that happens to disagree with the data.

Vertex deduplication without restoring structure

OBJ faces index a shared vertex list; 3MF triangles also index a vertex array. The writer collects triangles in world space and rebuilds an index map keyed on coordinates rounded to five decimals, so seams close and duplicated vertices collapse. It does not preserve OBJ groups, smoothing groups or object names, and it does not weld vertices that differ beyond that tolerance. The result is one clean indexed mesh in one object.

OBJ vs 3MF

OBJ source3MF output
ContainerPlain textZipped OPC package with XML parts
UnitsNoneDeclared; millimetres here
MaterialsSeparate .mtl librarySupported by the format; not written here
StructureGroups, objects, smoothing groupsOne object after this export
GeometryIndexed vertices and facesIndexed vertices and triangles
CompressionNone, text is verboseZip container
PurposeDCC interchangeAdditive manufacturing package

Supported formats

FormatReadWriteNotes
STEP (.step .stp)Yes–ISO 10303 B-rep, AP203 / AP214 / AP242
IGES (.iges .igs)Yes–Entity-based surfaces, up to 5.3
BREP (.brep)Yes–OpenCascade native B-rep
STL (.stl)YesYesBinary and ASCII triangles, no units
OBJ (.obj)YesYesv / vn / f records; .mtl references ignored
PLY (.ply)YesYesBinary position and normal arrays
GLB / glTF (.glb .gltf)YesYesglTF 2.0, binary or JSON with data URI
3MF (.3mf)YesYesOPC/ZIP package, declares millimetres
FBX (.fbx)Yes–Binary and ASCII, static mesh only
DAE (.dae)YesYesCollada scene graph is flattened
3DS (.3ds)Yes–Legacy chunk-based 3D Studio format
AMF (.amf)Yes–XML, ZIP-compressed packages supported
USDZ (.usdz)YesYesZIP containing a USD stage

Known limitations and why a conversion can fail

No materials or colour

The .mtl is never read and the writer emits geometry only. A coloured OBJ converts to an uncoloured 3MF; that is expected, not a corrupted export.

Scale is only declared, never corrected

The package says millimetres because that is the printing convention. Whether that statement is true depends on the source numbers. Scale in the workspace before exporting if the OBJ was authored in another unit.

Geometry is not repaired

Open shells, intersecting parts and flipped normals are carried into the package. A slicer may refuse or repair them. The converter does not union or thicken anything.

One object per package

The writer merges the whole scene into a single 3MF object. Splitting a model across plates or assigning materials per part has to happen in a slicer or a modelling tool after conversion.

Frequently asked questions

Can I convert on this page itself?

No. This page is the reference for the OBJ to 3MF path, and the conversion itself runs in the workspace that the button above opens, with both formats already selected. Your file is read in that browser tab and the download is written locally, so there is no upload stage in either place. Keeping the documentation and the engine on separate addresses lets file support and detail levels change behind one workspace without breaking the page you are reading.

Will my OBJ materials and colours survive?

No. An OBJ references a .mtl library by filename, and this reader loads only the .obj you drop, so the material library is never consulted. Even if colours were read, the 3MF writer here emits geometry only: one object with vertices and triangles, no material resources and no per-triangle colour. The preview shows the default surface, and the downloaded package contains no colour. If appearance matters, keep the OBJ or convert to a format that carries materials.

What unit does the 3MF use?

The exporter declares unit="millimeter", which is the 3MF printing convention, and writes the coordinates exactly as they were read from the OBJ. OBJ has no unit field, so the result is correct when your OBJ was authored in millimetres and wrong by a known factor otherwise. An inch-authored model needs a 25.4 scale, a metre-authored one needs 1000; use the workspace scale control before exporting.

Why is 3MF better than STL for printing?

Because it is a package rather than a bare triangle stream. A 3MF declares its unit, can hold several named objects, supports materials and colour, and is zipped so it is smaller on disk. STL declares nothing, holds one unnamed triangle soup and duplicates every vertex. Both are read by modern slicers, but only 3MF can tell the slicer what scale the numbers are in. This exporter writes a single-object package, so the multi-object advantage only appears if your source is split on the export side.

Are separate OBJ objects kept separate in the 3MF?

No. The writer collects every triangle from every mesh in the scene, bakes world transforms into the coordinates and merges the result into one object. Groups and object names in the OBJ are not reproduced. Vertices that coincide within five decimal places are deduplicated into a shared index, which keeps the package compact but does not restore structure.

Can I open the result in a slicer?

Yes. The output is a standard OPC package with [Content_Types].xml, relationships and 3D/3dmodel.model in the 3MF core namespace. PrusaSlicer, Cura, Bambu Studio and Orca read it. Check the dimensions on import, because the declared millimetres are only meaningful if the OBJ numbers were millimetres.

Does the conversion repair a non-manifold OBJ?

No. OBJ does not require closed solids, and the exporter reproduces whatever triangles it finds. Interpenetrating parts, open boundaries and flipped normals all carry through into the 3MF, where a slicer may refuse to slice or repair silently. Fix the mesh before converting if the result needs to be printable.

References

Related converters

All converters

Last updated: