Mirror Machine

Mirror Machine, or my next attempt at doing a converter that eventually works ! Shortly, it converts your .3ds files to a WMO/17 file (working on 3.3.5)

Thanks before everything else : Schlumpf, Relaxok, Tharo, Steff, all the WoW Dev Wiki contributors for the technical stuff, the people who helped by testing with their models, and the Architecture Department.

This page will help you in the process of converting models, but if you still have problems, check out the Modcraft thread, maybe your question is already answered. Do not expect me to answer there though as I'm not maintaining this program (nor Meshugamh).

Download / Git

Repo. Download for Windows 64-bit.

This is free software.



Most of the 3D softwares allow you to split your model in some parts (sometimes called meshes). They will be used as WMO groups

Vertex normals

If your model doesn't have vertex normals, MM will compute some, thanks to this document. Even though it works well in most cases, there is sadly some models that will have weird shadow spots at some points ; I can't do much against that.


The material support needs some testing again and again, but it can be used already. You will have to use one texture file per material as it's the way WMOs work. Supports two-sided materials, ambient color and diffuse color.


You can add collisions through different kind of BSP trees. For small models, the default settings are enough. For bigger models though, try using a bigger max leaf value (around 2000). Also, avoid long, stretched triangles in your models as they will fall between BSP nodes as thus have no collision.

And what else ?

Usage and troubleshooting

I try to handle some converting problems by hand but sometimes it turns to massive useless mess, so try to follow these instructions. If something awful happens, check the log file ! Critical warnings are displayed at its end.

3DS support

The converter was thought to convert from this format only at the beginning. Be aware of the following points. Warning : people seems to have problems with 3ds Max 2013, as the program only write the first letter of each material in the material definition chunk (meaning that instead of "rock", it will be called "r"). A work-around is to use materials with a name of 1 letter only...

Note that textures should be named according to the 8.3 format.

Material info
3DS handles them in a quite dirty way. You can have materials with or without textures. Behave like if you were working on a WMO : always link a texture to your materials. If the exporter of your 3D software forget to link a texture path (which happens often), the material name will be used as a texture path.
Objects that aren't objects
A WMO object is a mesh, textured and neatly modeled. A 3DS object can be this or a camera or other kind of stuff. Don't use them.
External files
Some 3D softwares create external files for material and stuff, as .GSM files. Be sure to not have these files during export because MM only read the .3DS file.
Log warning : an object doesn't have all its mapping coordinates
You didn't textured your model entirely, or your 3DS exporter screwed up the UV coordinates export, using broken specs.
Log warning : you have outranged UV coordinates
This is warning you that you have UV coordinates out of the usual [0, 1] range. It seems to be harmless for the client though, so you may ignore this warning.

If you're using 3ds Max, Steff recommends that you merge all modifiers before export so you have only one editable poly at the end.

OBJ support

The OBJ format is an open 3D format written as text and not as binary, making it readable for humans, so it's easier to handle for devs. The main advantage it has for me on 3DS is that it can store vertex normals, so you'll benefit the algorithms of professional 3D softwares instead of my "less professional" algorithm.

Still, while I was writing the OBJ importer, I stumbled on some OBJ files that weren't as I or MM expected. So yeah, the converter handles OBJ format, but you'll have to respect the following points. I know that Blender allows you to set all of these settings.

Use "o" ident for objects
It's not completely clear when "o" should be used instead of "g". MM will use the "o" identifier to declare a new object. "g" is NOT parsed.
Global structure
The vertex position ("v"), texture map ("vt") and vertex normal ("vn") can be in any order, anywhere in the file. They only need to be declared before a face ("f") uses them.

A new object (that will be used as WMO group) is declared by "o" as said earlier. You have to declare a new object BEFORE the faces ("f") of this group.

For instance, a valid file can be :

mtllib octopus.mtl

o body
v ...
v ...
vn ...
vn ...
vt ...
vt ...
f ...
f ...

o tentacles
v ...
v ...        
vn ...
vn ...
vt ...
vt ...
f ...
f ...
Face format must be : f va/vta/vna vb/vtb/vnb vc/vtc/vnc
And each of these components must exists. If you have only va/vna or even va//vna, it will probably not work. That means generate vertex normals and apply textures on every part of the mesh.
Use -Y forward and Z up
Because you don't want your house upside down.
Additionnal files : .mtl and nothing else
The materials of an OBJ file are declared in an attached .mtl file. MM will seek for this file (when parsing "mtllib" directive) and for nothing else.

Here are the OBJ export settings in Blender that seems to produce good files :


WMO/v14 support

WMO/v14 is the WMO format used during the alpha release of WoW back in 2003. MM can handle their convertion to WMO/v17 (the ones you use) with some tweaks. You can choose in the settings the data you want to import. This is most of the time raw import, implying it can work pretty well or just crash.

Feel free to try some of these settings with various files, and report stuff there. Take the time to read what I and other people wrote.

Have fun exploring these models from the past !

Screenshots !

obj button alpha ironforge morgan freeman pirate tree2 tree1