3ds Max: Collaboration & Interoperability
In the spring of 1963, Bob Dylan took the stage at New York City’s Town Hall to recite the poem, “Last Thoughts on Woody Guthrie.” As a preface, Dylan said, “I was asked to write something about Woody, something like, what does Woody Guthrie mean to you in 25 words or less?” Continuing, Dylan joked: “Well, I couldn’t do it. I wrote out five pages.” In a similar respect, I found it difficult to constrain all the topics I wanted to cover concerning collaboration and interoperability with Autodesk® 3ds Max®.
As a senior production artist, I am well versed in dealing with assets from a number of different sources—real estate developers, architects, and artists to name a few. These assets are created in a variety of different programs, by individuals with varying skill sets. Over the years, I have learned how to make something out of anything. I will limit the scope of this article to the integration of 3D model assets from the most common third-party modeling programs, while also looking at plug-ins and scripts that quickly integrate assets into 3ds Max, including those that help in post-production with rendering and compositing.
3ds Max is a successful modeling platform, but when it comes to personal workflow and budget, or perhaps industry, it can have some limitations or too many features. There are a number of modeling applications that fill these gaps and are used across a variety of industries. I’ll give a quick rundown for each program, highlight the strengths and weaknesses for each, and give some suggestions for the best ways I have found to bring these assets into 3ds Max.
SketchUp is a very popular modeling application originally developed by @Last Software and now made by Google. It is well known in the design professions, specifically architecture and planning, but it is not limited to these sectors. Created as “a modeler for everyone,” SketchUp certainly doesn’t disappoint. The program has “Keep it Simple, Stupid” at its core, allowing a user to go from novice to expert in a very short time. It has a clean interface, great tools, and an oracle of online help and tutorials. SketchUp has tight integration with Google Earth, which allows modelers to geo-locate their models and place them into Google Earth’s 3D building layer with a few simple clicks, as well as make the assets available for download on 3D Warehouse, an online repository of SketchUp models. In addition, there is an importer that ships standard with 3ds Max since the 2011 version. The importer is effective; however, not my choice as the most efficient solution. This is a personal workflow issue that we will cover a bit later in the scripts section.
Autodesk® Revit® is Autodesk’s flagship BIM software offering. It allows architects and consultants to build a virtual model of a project, which can then be used to generate all the requisite building drawings, spreadsheets, and even energy analysis. Revit has an AutoCAD® look and feel and has a depth and minutia in the program that is certainly impressive. Exporting models from Revit to 3ds Max is straightforward, with a few main options to consider, such as .fbx and .dwg. Everyone has their favorites; I find that exporting a .dwg as a polymesh combined with the ACAD Legacy .dwg importer in 3ds Max tends to produce the best results.
The strength of Revit certainly comes from what it can produce for designers (construction documents, the plans and sections) from its detailed models, yet this model complexity can become problematic for the novice Revit-to-3ds Max importer. I strongly recommend learning how to filter unimportant information before importing Revit models into 3ds Max. For example, learning to shut off unimportant interior fixtures (toilets, sinks, etc.) can save a huge amount of time if you are exporting a model for an exterior hero shot, not just in export time from Revit, or import time in 3ds Max, but also in file performance in 3ds Max down the road. On that same thread, many native Revit models (furniture, fixtures, etc.) tend to be a bit lacking in surface/polygon detail for polished, high-resolution images, especially interior fixtures. This low detail causes most production artists to remodel the items so that they are workable within a detailed interior scene.
Rhino is a NURBS modeling program, so it is generally found in sectors such as industrial design, but is also utilized by architects and other designers who are looking for a set of tools that allows easier free-form, organic 3D modeling. Rhino has good CAD integration, and seems to work best imported into 3ds Max as a .sat file. Spend a few moments in the support/script section of the website at http://www.rhino3d.com/ and you will find a rhinoscript that will export each layer of a Rhino model to the .sat format and name that file based on the file name and the layer name. These .sat files, once exported, can be imported all at once (look for the “add files” button in the .sat importer dialog) and your 3ds Max Layer Manager will build automatically from the file names. A tip for free: watch how the files import with the name relationship to the 3ds Max Layer Manager; you’ll find that these files can be a very powerful tool for importing and organizing your Max file for a speedy workflow.
“If you do something in 3D Studio more than 17 times, you should script it.” This is the adage of one of Neoscape’s founders, and the thought still rings true today. As 3ds Max’s user base grows, the native tools and interfaces tend to be Jacks of All Trades and Masters of None. Scripting returns control back to users to create efficient custom workflows and tools, but it is not limited to just that. For the most part, if you can dream it, you can script it.
Before we go too far down the rabbit hole, I wanted to point out some good resources for MaxScripting. There are many sources on the Internet—www.scriptspot.com is the one I frequent almost daily. Both cgsociety.org and area.autodesk.com have forums devoted to scripting as well. There are some great tutorial discs online too, and once you get the rhythm of the basic components, it’s pretty easy to pick up the rest, and even to learn from what others scripters have done. Also, it is good to understand that MaxScript generally only exists inside 3ds Max. Unlike other programs, which use more universal languages like Python, MaxScript is completely devoted to just running things inside 3ds Max—so you won’t see it elsewhere, and it can be a bit esoteric in methodologies from time to time.
While scripting allows you to do many things, we will cover the scripts that I think are most useful for integrating model assets, including those that really help get some things done efficiently for post-processing/compositing. Most of the scripts discussed below are free online. The ones that I have personally developed are not available, but with a bit of study and online research, you’ll be able to create or find ones of your own.
SoulburnScripts: Created by Neil Blevins, SoulburnScripts are the granddaddy of all script packages. These are a set of his personal scripts which every 3D Production Artist and 3ds Max Enthusiast should have in their toolbox. Memorize them, use every one at least once, and you will be amazed at what they can do. I use at least one of the SoulburnScripts every day; it is probably more accurate to say every hour. There are tons of useful scripts in this pack, some of which I have highlighted below.
PutPivot: PutPivot will place your pivot point in one of the 27 points, which are determined from the object's bounding box. Center (Middle) Bottom is what I use 90 percent of the time for placing correct pivots on setdressing items such as trees, cars, etc. If the pivot of your object is set correctly, you can use a plug-in such as GLUE or “Object Dropper” from SoulburnScripts to “glue” the model to a surface, rather than using the transform dialog or moving it by hand.
ObjectPainter: This script will allow you to “paint” single or multiple objects to a surface (or to many surfaces). It includes the ability to paint the objects as bounding boxes and to add random transformations while painting. The script has two modes: “Paint,” which works like a paint brush, placing items on intervals while the cursor moves; and “Place,” which places objects per click. This script is great for creating background/context forests, shrub beds, and the like.
ObjectReplacer: ObjectReplacer will replace selected objects (or groups) with other objects. This is great for replacing low polygon assets received in files from clients with high polygon, properly textured assets from your production library.
TransformRandomizer: TransformRandomizer changes the transforms of one or multiple objects through numeric values set in parameters. I use TransformRandomizer daily, especially for adding variety to setdressing such as trees and shrubs. If you have a mass/volume of plants in one area that are all the same model (or proxy), you'll end up with a very consistent-looking render.
Use TransformRandomizer to change the rotation and scale of all the objects independently, which creates massing of items that look like they have tremendous amounts of variety, but are created with one model asset. TranformRandomizer works in conjunction with the object's pivot point, so make sure that is set properly first or you might be surprised with the result! My recommended settings would be: min -45, max 45 for the rotation variation (in the Z), and random scale min 85 max 115 (you can do x, y, z independently with these values or all at once, or some more than others!). The script will execute these parameters every time you click “apply,” and the effect is both random (it will do different settings for each item each time, so it could get smaller once, or larger once, depending on the settings) and cumulative. It is best to do small increments in order to find something satisfactory in just a few clicks.
A few others:
NameManager cleans up names of objects quickly, which is good for 3D party models or model assets from Evermotion or Turbosquid.
ViewportControl is great for getting to those views that aren’t set to hotkeys by default, such as “Right” and “Back.”
ObjectDetacher quickly explodes large meshes into individual objects by elements, which is very handy when trying to glean down geometry, or drill down a curtain wall or some other large geometric object for animation.
For the last part of this article, I wanted to share two of my own scripts: the SketchUp Import Awesomizer (SIA) and GBuffer ID Script. SIA was developed and refined through several months of SketchUp model imports and mimics my personal workflow for importing SketchUp models into 3ds Max. The GBuffer ID script utilizes the GBuffer ID, which is present and editable on every object in 3ds Max. This script streamlines the creation of mattes, which will render and output at the same time as the main image pass, thus saving time and energy since they don't need to be created separately. It also speeds up the transition into post production software such as Adobe After Effects or Adobe PhotoShop.
SketchUp Import Awesomizer: Although 3ds Max supports opening/importing SketchUp files with a native .skp importer, this method has its shortfalls. Since the importer brings in the model with the SketchUp layers, components, object names, and materials, the model can be a bit of a hassle to use in 3ds Max because the programs handle the information differently. In addition, the quality of the SketchUp model, or rather, the quality of the import, depends on the quality of the modeler and their personal workflow and habits. The inconsistency in these variables can be quite inconvenient for using SketchUp information directly in 3ds Max, so for my workflow, this script fills that gap.
My preferred workflow is to export the model out of SketchUp as a .3ds file, by materials. Then, I import the file into 3ds Max and use the “layer by material” portion of the SIA script to organize the model into layers by material (these will build in my Layer Manager as well). Once this is sorted, I can begin to sort geometry into more defined layers by collapsing objects into larger meshes and applying UVs and appropriate modifiers where necessary—like shell for glass. What is gained through this process is that the artist in 3ds Max is not bound by the SketchUp modeler’s components or layers. Instead, the artist can use the base organizational information of the asset, the materials, to drive the process. One caveat: this script/workflow only works if the model received has materials applied!
Figure 1: Screengrab of the SketchUp Import Awesomizer Script
GBuffer ID Script: This script is very similar to EffectChannelSet, a script by Track on ScriptSpot. The script sets the GBuffer ID in an object’s properties to a numerical value, which is then coordinated with a Multimatte Render Element (if using VRay). Please note VRay’s Multimatte Render Element is similar to the Matte Element (if using Default Scanline). When the scene renders, 3ds Max will generate an image file with the GBuffer ID in one of the color channels (R, G, or B) which can then be used in either PhotoShop or After Effects to set mattes. The good thing about this method is that mattes are generated with the main render, and will continue to be updated every time you render (as long as the Render Element is turned on!) Another good thing is that you get three mattes for the price of one luma matte!
Figure 2: Screengrab of GBuffer ID Script interface.
Figure 3: Screengrab of how GBuffer ID works with Adobe PhotoShop.
This article has covered popular third-party modeling programs and described techniques to integrate assets created in these programs into 3ds Max. We have also covered some different scripts and techniques to quickly manage, integrate, and transform model assets. It is my hope that you will be able to take some of these tips and advice and apply them to your work in a way that helps you work more quickly and efficiently in 3ds Max.