3ds Max Articles

The following are 3ds Max tutorials and topics I produced for Augiworld Magazine:

Customize 3ds Max – Working with color schemes, expanding rollouts, and customizing quad menus.

custom

Expanding on Details – Demonstrate using work paths, subdiv, and displace modifier to add details to scenes.

details

Tools for Collaboration – Using non-destructive options with xrefs, File Link Manager for Revit connections and the design workspace.

collaboration

Covering Details – Demonstrating how details can add character to scenes.

hair and fur.jpg

Implementation of Arion Renderer – Discussing Arion Renderer and basic implementation.

Arion

3ds Max 2018 Highlights – Introducing updates with 3ds Max 2018. pic

Manage Still Image Post-Production Elements – Using render elements and PSD Manager with Photoshop for post-production work. bildings

Introduction to MassFX – Working with MassFX to add interest to a scene. lollipops

Advanced Lighting: Light Balance with 3ds Max – Applying light balance to scenes in 3ds Max.  lightbalance

Reflections on Lighting – Introductory to lighting setup and analysis.  image1

Reach Out with 3ds Max – Focused on encouraging the use of art and 3ds Max to communicate, teach, and understand one another. egypt

Max Creation Graphs – Using and creating Max Creation Graphs (MCGs) for 3ds Max

mcg

Max Efficiency – Article discussing how to manage 3ds Max data effectively

cat

Collaboration with 3ds Max and Stingray Article introducing Stingray as a realtime solution for visualization purposes. stingray

Future of Visualization Article discussing how the visualization industry is impacted by today’s technology.live

Third-Party Options Helpful, affordable plugins for 3ds Max.Brian_Chapman-AW-0616-03_452_229

New Release, Packed with Improvements teapot

Material Management Proper use of materials in 3ds Max Brian_Chapman-AW-0416-01

Tricks with Scripts (Time-saving tricks using the MAXScript language in 3ds Max)1

Retopologizing a Mesh in 3ds Max (Digital sculpting with 3ds Max and other software)2

Constructing an Interior Scene in 3ds Max (Creating an interior scene using 3ds Max, VRay, and Photoshop)Main

Keeping it Civil in 3ds Max (Using 3ds Max with Civil View and Civil 3d)Figure 1

The Digital Artist (Design Fundamentals)Figure 3 - Shapes in Complex Parts.png

Creating Custom Textures with the Viewport Canvas (Working with textures, color and contrast)Figure 11 - Brush Images

Bringing Characters to Life (Manual character construction)
Figure 1 - Bot Needs Karate Lessons.png

Creating Visual Effects with Atmospheric Apparatus and Rayfire (Working with 3ds Max effect tools) Figure 1

Manage Large Scenes in 3ds Max (Tools that help manage large, detailed scenes) Fig 1 - Housing Development in 3ds Max

50 Fast Tips & Tricks for 3ds Max (Quick timesavers for 3ds Max users) Figure2

Intro to 3ds Max (Getting started) FIGURE1

3ds Max Versatility (Explores how to use 3ds Max in unconventional ways) Brian_Chapman-AW-1214-01.jpg_452_369

Make Game Development Child’s Play (Demonstrating game development with 3ds Max and the CryENGINE 3)  FinalFigure

Max Management Tips (Variety of usage tips for 3ds Max 2015) Brian_Chapman-AW-0714-01

Powerful Para 3d (A plug-in for controlling arrays in 3ds Max) Brian_Chapman-AW-0614-02.jpg

Performance, Productivity Increases (Introducing 2015 features) Brian_Chapman-AW-0414-01

Interview with the Artist (Q & A with Jose Alves da Silva) Figure 1

Quality Content with Max Plug-ins (Introducing Vray, CityTraffic, and Forest Pack Pro) CityTraffic Example

Not Just for Games (Q & A with Seid Tursic and presentation of hair and fur module) Mouse With Fur

Autocad / Civil 3d Tips

The ESRI plugin for Autocad / Civil 3D allows us to connect to Esri maps, services, and more.

esri

civil

1) Combine the transparent command ‘CAL with MME to get a point in the middle two selected locations

mee

2) For 64-bit computers an optimal setting for virtual memory can be 2X your physical memory. If you have 8 GB of ram set your virtual memory to 16 GB

3) Turn off Dynamic Tessellation to help speed up Civil 3D

dyu

4) Values in the toolspace can be copied to the clipboard values

5) Export Civil 3d files to native Autocad formats using “ExportToAutocad” command

6) View corridors can be analyzed using the “Zone of Visual Influence” tool and some creativity

view

7) Assign aliases using the alias editor for AEC commands you use a lot. Assign them to your left hand to be more productive (maintaining one hand on your mouse at all times)

8) Civil 3D can be used for much more than just civil applications,  check out the commands “extrude”, “slice”, and “revolve”extrude

9) Explode parcels to extract the parcel polylines, useful for multiple applications

10) Explore the “mapclean” command, which can be used for a multitude of tasks such as weeding polylines or checking line workmapclean

11) Not only can viewports be split, but they can be joined as well. By splitting and joining viewports, we can configure them in virtually any format we want

12) The modify option to insert PI works with featurelines, polylines, parcels, and more modify.png

13) With “paste special” we can insert lines and text from an excel file

14)  To help clean up a surface’s boundary experiment with the the max triangle length option

maxtriangle.png

15) XML files can be opened with notepad and can contain useful data

16) SYSVDLG command contains short descriptions of all variables in Civil 3d

sys.png

17) To convert a volume surface to a tin surface, simply create an empty tin surface and paste in the volume surface

18) In the xref manager, the name of an xref can be changed. This allows us to xref the same drawing twice, giving us layer control over each xref

19) The daylight from a grading object can be offset to create a 3d polyline

20) Fields can be used to read object data, be formatted to display with various units and precision, and be updated dynamically.

21) Customizing CAD using Autolisp and applicable programming languages can simplify life and streamline workflow. If you have a task you’d like to see automated, feel free to give me a shout, I might be able to help.

example

22) Autolisp is a common language to customize Autodesk drafting and design applications.  Creating one is simple. Here’s an example:

(defun c:anycommandname ()

(setq anyvariablename 1)

(setq anothervariablename 1)

(setq total (+ anyvariablename anothervariablename))

(princ))

That’s it. If this was loaded and we typed “!total” in the command line it would list “2” as the result.

23) Are you aware that for many cases you can modify a surface’s contours by drawing your own then adding it to the definitions? Simply add it as a “user contour” and it will adjust appropriately.

24) Civil 3d has a series of ‘transparent’ commands useful for a multitude of tasks. For example, ‘stae used with polylines or points allows user to locate a position in a profile based on selected locations in plan view.

25) Download this routine to move basic Civil 3D labels as shown in the video located here: https://youtu.be/mU1w4q1LIds

26) Autodesk developed a way to create a pipe catalogue with custom parts for use with Civil 3D using Inventor and Infraworks. It’s cumbersome and inefficient but essentially the steps are: Construct the part in Inventor (or in Autocad then import them into Inventor), assign parametric dimensions.  Use the plugin for Inventor to export for Infraworks (only available when Infraworks is installed).  In Infraworks, export the catalogue to use with Civil 3D.  The workflow is pretty painful and feels clunky (especially since Autocad already has a 3d-capable modeling system) but it’s there.  To go from Inventor to Infraworks watch the video here:  Inventor to Infraworks To go from Infraworks to Civil 3D catalogue a tutorial was provided by Civil 3d Plus that I’ve stored here: Infraworks to Civil 3D

Customization for Autocad, Civil 3D, and 3ds Max

Below are various thoughts / notes concerning customization of software and languages I use on a consistent basis. In most cases this includes Maxscript for 3ds Max and Autolisp / C#.Net for Autocad and Civil 3D.

It’s possible to edit the visibility states of dynamic blocks using c# .net.  For the flip state it was particularly tricky to deal with the short value.  I found by simply converting the object to a string I was able to easily swap between the states I wanted.  The code is below:

    DynamicBlockReferencePropertyCollection pc = br.DynamicBlockReferencePropertyCollection;
                            foreach (DynamicBlockReferenceProperty prop in pc)
                            {
                                if (prop.PropertyName.ToUpper().Contains("FLIP"))
                                {
                                    object[] allowedValues = prop.GetAllowedValues();
                                    if (prop.Value.ToString() == "1")
                                        prop.Value = allowedValues[0];
                                    else
                                        prop.Value = allowedValues[1];
                                }
                            }

1) I created a cheat sheet to help those learning the API for Civil 3D. You’re welcome to download it here:  Pro-Cad Civil 3D 2018 C-Sharp Net Cheat Sheet 

cheatsheet
2) Three reasons to learn to code:

Influence the Future – Imagine yourself born in 1452. Without a formal education you venture out to make a life. Instead, you shape the world. That’s exactly what Leonardo da Vinci did. He became the leader at the forefront of technology, shaping the world that followed. Da Vinci kept a massive journal filled with his ideas and sketches. He didn’t know his work would influence the world for centuries to come. Imagine the internet your journal, you are Da Vinci, and your code could do the same thing. “It had long since come to my attention that people of accomplishment rarely sat back and let things happen to them. They went out and happened to things.” – Leonardo da Vinci

A Challenge Worth Tackling – People refered to Da Vinci as a quiet man of science. Society called him a peaceful man, who did not approve of conflict and war. Yet, he understood the ‘bestialissimapazzia’ (most bestial madness) of war had two sides. The challenge he tackled was to protect his fellow man. He sought to maintain liberty from tyrants who would besiege them and their towns. Driven by a cause, he proceeded to investigate ways to protect them. This led to his studies into machinery and flight centuries ahead of its time. In the coding world there are two sides to the war. One is automation will replace humans and the quality of society will plumit. The opposing view is coding will lead to improvements by allowing people to focus on being more creative and caring. It’s a choice to believe one or the other, and coding isn’t going away. ” Every action needs to be prompted by a motive” – Leonardo da Vinci

Improve Life – Da Vinci noted that simplicity is the ultimate sophistication. He ventured to improve the lives around him while studying and learning what he loved. He found the two functions were the same. In the end, if our efforts help to make one or two lives more easier to manage, it’s an improvement. Chances are, if you are reading this, you have a fetish for Da Vinci or you are interested in coding. I can’t help with the former but the latter is shaping the world as we know it, we just need to get on bored. “A painter was asked why he had made his children so ugly, when his figures which were dead things he had made so beautiful. His reply was that he made his pictures by day and his children at night.” – A Joke by Leonardo da Vinci

The sharp symbol in C# is a reference to the music note, and that it combines four + symbols to create it.

3) General Resources

Coding Haven – http://www.c-sharpcorner.com/technologies/csharp-programming

Civil 3D/Autocad

Development Guide – http://help.autodesk.com/view/CIV3D/2017/ENU/?guid=GUID-275A6271-7758-4C14-9703-989B1B007E3E

3ds Max

CGSchool Maxscript Cheat Sheet – http://www.thecgschool.com/downloads/3DATS_MAXScript_Cheat_Sheet.pdf

4) Using C# .Net with Autocad or Civil 3D it’s easy to dynamically construct a winform and datagridview to display information we might want inside a drawing.  This example demonstrates how to do that by listing the number of objects inside the BlockTableRecord for modelspace.

using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Runtime;
using System.Linq;
using System.Windows.Forms;

namespace Autocad_DataGridView
{
    public class Class1
    {
        [CommandMethod("acadgridview")]
        public void routine()
        {

            Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;

            using (Transaction tr = db.TransactionManager.StartTransaction())
            {
                ObjectId modelSpaceId = SymbolUtilityServices.GetBlockModelSpaceId(db);
                BlockTable bt = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
                BlockTableRecord btr = tr.GetObject(modelSpaceId, OpenMode.ForRead) as BlockTableRecord;

                Form form = new Form();
                form.Width = 300;
                form.Show();

                DataGridView MyDataGridView = new DataGridView();
                MyDataGridView.Anchor = AnchorStyles.Top;
                MyDataGridView.Width = form.Width;
                MyDataGridView.Height = form.Height;
                MyDataGridView.Columns.Add("Column 1", "Objects In Model Space");
                MyDataGridView.Rows.Add(btr.Cast<ObjectId>().Count().ToString());
                MyDataGridView.Columns[0].Width = form.Width;
                form.Controls.Add(MyDataGridView);

            }
        }
    }
}

5) Everything we program in regards to Civil 3D or Autocad requires we collect and work with data. In some cases we wish to produce reports and tables of information. Using C# with the Civil 3D API we can do this on the fly. Below is an example. First I create a form dynamically. Then I collect the layers (SymbolTable) where I add columns for the layer name and the layer color.  Next, I iterate through the layers in the Symbol Table and add them to the DataTable that was created dynamically.  Finally, I create a DataGridView to display the information I stored in the DataTable, since the DataTable can’t be displayed in it’s native format.

using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Runtime;
using System.Windows.Forms;

namespace Autocad_DataTable
{
    public class Class1
    {
        [CommandMethod("acaddatatable")]
        public void routine()
        {

            Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;

            using (Transaction tr = db.TransactionManager.StartTransaction())
            {
                Form form = new Form();
                form.Width = 300;

                SymbolTable symboltable = (SymbolTable)tr.GetObject(db.LayerTableId, OpenMode.ForRead); 

                System.Data.DataTable dt = new System.Data.DataTable();
                dt.Columns.Add("Layer Name");
                dt.Columns.Add("Layer Color");

                foreach (ObjectId id in symboltable)
                {
                    LayerTableRecord symbol = (LayerTableRecord)tr.GetObject(id, OpenMode.ForRead);

                    System.Data.DataRow dr = dt.Rows.Add();
                    dr["Layer Name"] = symbol.Name;
                    dr["Layer Color"] = symbol.Color.ToString();
                }

                DataGridView grid = new DataGridView();
                form.Controls.Add(grid);
                grid.DataSource = dt;
                form.Show();
            }
        }
    }
}

6) One of the most important parts of customization is optimization. For example, if we want to change some featurelines we don’t want to iterate through the drawing’s entire database. Instead, we  filter everything out and start with the featurelines.  Eventually we drill down until we get those we want to modify, but to begin we use selection filters (shown here: Dev Guide Link).  In order to use selection filters we need to know the DXFCode (or DXF Name) of the object we wish to select. One way find this out is to cast the modelspace objects to a list, then print a list of those objects dxf names to the screen using a  DataGridView as shown in the example below.

dxfnames

using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Runtime;
using System.Linq;
using System.Windows.Forms;

namespace Autocad_DataGridView
{
    public class Class1
    {
        [CommandMethod("acaddxftotal")]
        public void routine()
        {

            Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;

            using (Transaction tr = db.TransactionManager.StartTransaction())
            {
                ObjectId modelSpaceId = SymbolUtilityServices.GetBlockModelSpaceId(db);
                BlockTable bt = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
                BlockTableRecord btr = tr.GetObject(modelSpaceId, OpenMode.ForRead) as BlockTableRecord;

                Form form = new Form();
                form.Width = 700;
                form.Show();

                System.Collections.Generic.List<string> dxfnames = new System.Collections.Generic.List<string>();

                DataGridView MyDataGridView = new DataGridView();
                MyDataGridView.Anchor = AnchorStyles.Top;
                MyDataGridView.Width = form.Width;
                MyDataGridView.Height = form.Height;
                MyDataGridView.Columns.Add("Column 1", "DXF Names");
                System.Collections.Generic.List<ObjectId> modelspaceobjects = btr.Cast<ObjectId>().ToList();
                foreach (ObjectId modelobjectid in modelspaceobjects)
                {
                    dxfnames.Add(modelobjectid.ObjectClass.DxfName.ToString());
                }

                System.Collections.Generic.List<string> distinctdxfnames = dxfnames.Distinct().ToList();
                foreach (string dxfname in distinctdxfnames)
                {
                    MyDataGridView.Rows.Add(dxfname);
                }
                MyDataGridView.Columns[0].Width = form.Width;
                form.Controls.Add(MyDataGridView);

            }
        }
    }
}

7) Link to probably the best example of using linq with autocad: Linq and the Autocad Net API

8) Several years ago I decided to abandon the two script / program languages I was using and forced myself to learn a new one (just to see if I could really). That was C# (C-Sharp). This chart shows that it’s top of the line to take of the world. Lotto XD

CcVyDI9UsAA0RQp.jpg large

9) A completely useless app but I had fun developing it. If you want it just message I’ll send it your way.

10) Here’s a cool idea.  With the ability to use animated gifs in picture boxes we can develop training applications in CAD for specific workflows.  Check out an animated interface I created here: https://www.youtube.com/watch?v=y391aP_jCeE&feature=youtu.be&vq=hd720

The Spillway

11-17-17 _ I came across a gentleman named Andrei Dolnikov, the CEO of Binyan Studios at Autodesk University. Over the years I’ve thought about something I heard once a lot: that a persons work tells a story. It never clicked until I heard this man speak about his teams work and the process they use.  It’s easy to see why he is successful. I’m twisting it a bit when I say this as they apply the concept in a form that matches visualization specifically, but in short the part of providing good, clean, accurate data is taken care of. It’s not easy, but easy enough and become easier every day. The key to being the best is being able to provide “that something special” that’s above and beyond, that reaches the client and their customers. Of course entrepeanuers strive for this every day, regardless, its been ticking in my head for years, and for me seemed an easy concept to comprehend, but difficult one to really grasp.  I have no idea why I get it now.

1) Jeff Bartel produced probably my favorite, simple video of how to get data from Civil 3d into Infraworks 3d.  https://www.youtube.com/watch?v=pY2V4xjhNJ4

2) Routine to move labels in Civil 3d https://youtu.be/mU1w4q1LIds

3) Check out Steve Hill’s article about his Pipe Production Tools for Civil 3d: https://issuu.com/augi/docs/aw201606hr

4) Sincpac has some great tools for use with Civil 3D: http://www.quuxsoft.com/

5) Jason Leinberger, one of my favorite coders, presents a useful .net trick: Inheritance with Autodesk API

6) Eric Chappel and George Hatch with Autodesk present Site Capture, Drones to Infraworks 360

7) QGIS is an open source GIS application.  With hundreds of addons, plugins and tools it’s as powerful an application for GIS as anything out there. By installing just a few plugins users can export georeferenced Google Earth or Bing Map images with it’s associated TFW (world file) for import into Autocad Map or Civil 3D.

8) 3d visualization is made easier every day. A primary example is software called Lumion. Lumion basically creates the Sim City for designers, where we can drag and drop high quality vegetation, people, cars, water, landscape materials, street equipment, signs, and hundreds of more objects onto our scene. With a few clicks they are all animated, any time of the day (or night) with wind even factored in. Check out this example here: https://youtu.be/tgcOXoYHcwU

lumion

9) It was a huge pain but I finally found a method of exporting imagery for use with CAD that I can live with. I tried multiple software applications. First ArcMap, then QGis, then Global Mapper, finally back to ArcMap.  I should note that none of the conventional processes made me happy. Every one of them took too long to export.  So here’s what I ended up doing. First, I created a grid in ArcMap using the fishnet tool.  I was able to size them exactly how I wanted. When I created the fishnet, I chose the “create polygon” option over “create polyline”. This allowed me use the “Data Driven Pages” tool to automatically generate pages based on those polygons. Finally, with a relatively simple python script, I was able to efficiently, and very quickly export all the images I needed (497 in a few minutes to be exact). The script is below:


... mxd = arcpy.mapping.MapDocument("CURRENT")
... df = arcpy.mapping.ListDataFrames(mxd)[0]
...
... for pageNum in range(1, mxd.dataDrivenPages.pageCount + 1):
... mxd.dataDrivenPages.currentPageID = pageNum
... arcpy.mapping.ExportToJPEG(mxd, r"E:\Folder\Subfolder\imagename{}.tif".format(pageNum), df, df_export_width=3200, df_export_height=2400, world_file=True)
... del mxd

3ds Max Tips

3ds max

1) A script crashing your session? Increase “heapSize” allocation to give scripts the ability to work with more memory

heap

2) These scripts can help to clean up memory in 3ds Max “gc()”,”freescenebitmaps()”, and “clearUndoBuffer()”

3)  Debris maker by Aaron Dabelow is a quick way to add tons of debris to a scene: Click Here

wall

4) Use the semicolon to repeat the last command

5) Create buttons with scripts to quickly apply modifiers used often

6) The cloth modifier can be used to simulate leaves, paper, and more

7) Objects can simulate animation using Trajectories

traj.png

8) Utilize the display panel to globally control the display of objects and manage a scene more effectively

display

9) The preview for materials can be customized. Double-click the material to open the preview, then right-click over the preview and select options

materials

10) The Track View located under Graph Editors can be an efficient tool for animating objects

11) A good way to work in real world dimensions is to set your grid at even and snap to it

12) Shapemerge can be used to cut shapes out of a mesh whether it’s text, a circle, or random spine

13) Extract edges to create a wireframe by selecting an editable poly and using the “create shape from selection” button in the command panel

extract.png

14) Use statesets to present design iterations. Statesets store light, modifiers, viewport settings and more

15) The transform toolbox has great tools for controlling the pivot, and even a button to quickly reset xform

16) With layered cloth animations (such as coats over clothes, stacked sheets, curtains, etc), line up your quads and maintain a similar density in each mesh to insure better calculations for better animation results

17) It can be obvious to recognize when an image used default 3ds Max camera settings. Adjust them with real lens size and settings to get better results

18) Consider freezing CAD references, but remember to add “snap to frozen objects” in snap settings to take advantage of the file

19) You can establish the angle the sun will rise and set on your projects during summer and winter months using the Sunlight tool. You can use that information to create a north arrow unique to your project and analyze your site in more detail. northarrow

20) If you are producing a 360-degree video where the camera remains at a static position, to get the best results, render out a single image at high resolution and use quality video editing software to stretch out its time.

21) 3ds Max allows us to create custom quad menus. Additionally, while users are used to the typical menu, we can access more with various key combinations.  Hold Control + Alt and click the right mouse button to access render options.

22) An easy way to remove the character’s weapon in 3ds Max Interactive is to simply select it in the Asset browser, open the Unit Editor, and uncheck the “Visible” box.