Exporting meshes from gmax as OBJ formatted models
Gmax has always been limited in terms where content created with it ends up, after all it's designed purpose was as a freely available 'mod' tool that would allow users the ability to create content for their favourite games, exported out using various "game packs" written specifically for that purpose. What this meant for gmax as a general 3D modeling tool was that content could not normally be exported or saved out of the application without the use of an appropriate gamepack.
However, there are a number of ways this limitation can be worked around without the need to hack or reverse engineer gmax (which you shouldn't be doing anyway *cough*); this tutorial discusses one such process, namely, how to export meshes from gmax as OBJ models (the other is discussed here).
What's needed to export gmax models as OBJ? ^
The only items needed to export models out from gmax as OBJ files are gmax v1.2 and one of the various gmax to OBJ scripts available on the Internet (see resources above), once installed open gmax then work on or load a model (read accompanying instructions on how to install both gmax and the OBJ Max scripts).
Prepping the model in gmax for export ^
Shown below is the model used throughout this tutorial, a simple low resolution model of a W.W.II British Churchill tank, it has two basic materials simply to help distinguish mesh sections but no textures assigned to those materials. Its also not been UVW unwrapped so has no UVW map - the reason for this is because not all the available OBJ exporters export clean UVW maps, material or texture information, so when exporting a mesh that has been properly prepped be aware that only the raw mesh data may be exported.
Make sure also, that all the objects to be exported are "Editable mesh" objects, so "Boolean's", "splines" and other types of object must be converted into a 'mesh' before exporting. You may also need to "collapse the stack" so any modifiers are applied to the mesh and check mesh groups - groups of objects may need to be ungrouped and broken back down to their original state. If these operations are not done the script will likely error out when run.
Model of a W.W.II British Churchill tank modeled and ready to be exported
MAXscript Listener and gmax ^
Much of the work to do with the process of getting meshes out from gmax to the OBJ format goes on within the MAXscript Listener window, this is where all the 3D data from the scene or selected objects is output by the (various) gmax2obj script ready for the next stage.
HOW TO : open the MAXscript Listener
By default when starting gmax the "Create" panel will be active on the right hand side (if using the default interface configuration), showing an icon with an 'pointer' and 'star' - as shown below on the left of the row of icons.
To get to the MAXscript Listener the "Utilities" panel needs to be active. To do this click the "hammer" icon on the right (as shown above), the panel should change. Click the button titled "MAXscript", the listener window will then open.
Note : the listener may open with some text already present, simply select all (Ctrl+A) and delete.
Opening gmax's "MAXscript Listener" window from the "Utilities" panel (the hammer icon) - note the default text that appears as a result of the gmax to obj script loading during start-up
Running Max scripts ^
Before doing this next step in the process, in the 3D view port select the sections of the mesh that need to be exported, else the script may export the entire contents of the scene, even if that's not what's needed. As mentioned above, a script is used to instruct gmax to parse scene data, this automatically runs once the *.ms file is selected and loaded via the MAXscript Listener window, which in this instance outputs text - the amount of text and time it takes to process varies depending on the complexity of the model being exported.
HOW TO : run scripts from the MAXscript Listener
Note : If not already done, at this point it's best to select and delete any text that may have been present when the listener window opened.
In the Listener, go to "File >> Run Script..." and browse to the location where the script was installed (usually ..\gmax\scripts\startup\), select the script and click "Open", the script will load and gmax will automatically parse the scene or selected objects, writing text to the window.
Running a script from the Listener window
Locating the *.ms Maxscript to run
Output after script has run, in this case 'obj' formatted text
The end of output
Selecting and copy, pasting the parsed data ^
Now that there is some content in the Listener, it needs to be copied into a text document. Because output can produce a lot of text it's often best to "cut" rather than "copy" the content; the reason for this is that gmax's Listener window only supports a limited amount of text being grabbed at any one time which often results in having to copy the contents in several parts; longer files increase the chance of your place being lost as content is 'copied', as 'cutting' removes the text it's easier to see exactly what remains and where it starts/ends.
HOW TO : cutting and pasting Listener text
To save confusion start from the top and work down, so scroll up and/or click near the top of the text and "Select All" using Ctrl+A, the cursor will jump to the last segment of text to be selected. 'Cut' the selected text with Ctrl+X, which will remove it from the Listener window to hold it in memory.
Open Notepad or other plain text editor (Crimson Editor etc.) and paste the cut text using Ctrl+V, which will appear in the new document. Repeat until all the text has been cut from the Listener window and pasted into the text document - make sure the cursor is placed at exactly the right place in the new text file to make sure the cut text follows on correctly otherwise the resulting file may be corrupted.
Selecting all of the Listener output
Pasting cut (or copied) Listener text into an open *.tat file
Saving the new document as *.obj to create the OBJ model ^
Once all the text has been pasted into the new text document it's then a simply matter of saving the file with the appropriate file extension; as the OBJ format is text based nothing further or 'special' needs to be done to the file in terms of compiling or processing it other than what is copied from the Listener window.
HOW TO : saving the text document as a file with the *.obj
If this is a new file click "File >> Save" to open the save browser. Browse to where the file needs to be saved then in the "Save as type" field select "All Files (*.*)"; this ensures that Windows doesn't 'force write' *.txt after the file (or whatever the default file extension is for the application being used as a text editor).
Design note : if "Save as type" isn't set to "All Files" Windows will append ".txt" after the file regardless as to what 'custom' extension is written. Additionally, if the file was already created as a *.txt file (it was double clicked to open from Windows Explorer, et-al) use "File >> Save As..." instead of "Save"
Once done type the name of file, then type ".obj" after it; for example, instead of "gmax_export.txt" type, "gmax_export.obj" - this forces the file to be saved as a *.obj file. That's it. On saving this will create a proper OBJ model file from the data cut from the gmax's MAXscript Listener.
Design note : the very top two lines of text from the Listener output should be removed when saving the file to make sure 'bad format' errors don't occur when importing the *.obj file into other 3D applications. In the example below, showing the top section of the copied Listener text, delete from the start, "Copy and paste...", to the very end after "... as a .obj file.".
Copy and paste the following lines into a text editor, and save them as a .obj file.
# Start of obj file
usemtl Mtl #0:Standard
v -8.56909 -0.738508 16.041
v -8.56909 3.90634 16.041
v -8.56909 -0.738508 24.041
v -8.56909 3.90634 24.041
v 8.43091 -0.738508 16.041
v 8.91269 3.90634 16.041
Saving the text file
Renaming by using "Save As..." to save the text file as *.obj instead of *.txt as it was previously
Conclusion: importing resulting OBJ files into other 3D applications ^
In order to get the OBJ file into another 3D application, that program will obviously need to be able to import *.obj formatted data. Failing that, the OBJ will need to be converted to another format that can be imported - if a file converter isn't available Blender 3D can be used to import the OBJ which can then be exported back out to a different format; *.dxf or *.3ds for example.
The gmax exported *.obj file of the Churchill tank model imported into Blender 3D, UVW mapped, materialed and textured
UVW map of the Churchill tank after import and clean-up