3D Modeling


Some of my recent work in Autodesk Fusion 360

Early Steps: Quake and Unreal Tournament

As mentioned earlier, my first 3D modeling experience was in Quake and Unreal Tournament. The process of creating levels was initially subtractive — you'd carve a space for the level out of the universe, which was otherwise completely solid and impassable. Then, you'd use both additive and subtractive modeling to add features, cut holes for doorways, etc. Behaviors could be assigned to individual objects, which Quake called "brushes." For example, one could create a platform, and then assign the behavior of an elevator to it: move from here to here at this speed, and make different sounds when starting, running, and stopping. It was much the same in UnrealEd.


Second Life

Rex, an avatar I designed in Second Life

Second Life was my next experience in 3D modeling. Its modeler is completely parametric. You get a few primitive geometric types — cuboids (boxes), spheres, cones, triangles, rings, toruses, etc. These could be resized (up to a maximum of 10 meters in any dimension), modified with parametric operations like cuts (so you could, for example, have a box with a hole in the middle or only half of a torus), given behaviors with LSL scripts, and assigned properties such as buoyancy and generation of light. At first, these primitives were all that was available. You can see an example of an avatar designed with them to the right. Quite a lot is possible, but the limited selection does impose some constraints on what can be done.


Blender

A seaplane, with most geometry created in Blender

After I had been playing Second Life for a few years, the clamor for better modeling tools finally convinced Linden Lab to add support for external modelers to the game. The idea was that you'd create geometry in some other program like Maya or Blender, and then have the program generate a deformation map that would tell Second Life's renderer how to turn a base geometric primitive into the shape produced in the modeler. This would be exported as a 256x256 UV map, with each pixel representing an instruction for how the base primitive should be deformed in a small area. With this technology, it became possible to create much more customized shapes.

I chose to learn how to do this in Blender because it was free. The other options, like Maya, all cost many hundreds (if not thousands) of dollars. Blender can be quirky, and its user interface wasn't the best at the time, but it did work. For the first time, it became possible to produce more or less arbitrary shapes. The seaplane is a good example of this. The wings are elongated, have cutouts for the control surfaces, and each flares up at the end. The tail structure has some complex geometry as well.


SketchUp

Lamp base in CAD, and completed lamp

When I got into 3D printing, I knew I'd want to be able to produce my own designs, and that meant getting a CAD program. SketchUp seemed appealing at the time because its workflow is (initially) very easy: draw a shape, extrude it into a 3D solid, draw another shape, extrude it into a solid, etc. Not too different from Second Life's parametric modeler, and easy to do more things with it. I eventually discovered that SketchUp has internal resolution limits that make it less than ideal for producing small objects, of the sort that you'd fabricate on a 3D printer. It has a tendency to move points and line segments tiny fractions of a millimeter, which you don't notice until you've spent hours creating further geometry which then has to be redone to fix problems that SketchUp has introduced. Additionally, its Boolean operations (cutting one object with another, for example) have a tendency to ruin the involved geometry when used at small scales. Finally, it has no built-in support for the STL file format, which is required by 3D printing software. You have to use a 3rd-party plugin, and the plugin tends to yield buggy STLs.

SketchUp was designed more for architectural purposes, and for that, it really is quite good. However, I can't recommend it for designing objects on the scale of what would be made on a 3D printer. I eventually decided to abandon it in favor of Autodesk Fusion 360. Nevertheless, I did produce a huge amount of working parts, such as the components for this lamp.

I produced a wide variety of 3D printer accessories in SketchUp:


Autodesk Fusion 360

Tannhauser effector in Fusion 360, and in the real world

After deciding that it was time to move on from SketchUp, I surveyed the available offerings. There are many parametric/solid modelers out there — Autodesk Fusion 360, SolidWorks, CATIA, etc. I settled on Fusion 360 for two very important reasons. First, Autodesk has been the industry standard in 3D modeling since the 1980s. Learning the "Autodesk way of doing things" is obviously useful for anyone who works in this industry, as many people and companies prefer it. Second, Fusion 360 is free to use for anyone who isn't making at least $100,000 a year, and they don't cripple users who are below that threshold.

Fusion 360 is, without a doubt, more difficult to use than SketchUp — at first, anyway. It's a much more powerful modeler, and has many, many features that SketchUp lacks. Most importantly to me, it has never chewed up any of my geometry. Unlike SketchUp, it features timeline-based editing, so you can "go back in time" and change geometry that other geometry depends upon, and the modeler will figure out how to propagate those changes forward properly. This can save huge amounts of time. Another useful feature is the ability to define parameters that can be applied to dimensions and angles. If you want to change the size or angle of a feature, and to have everything that depends on that updated, all you have to do is change the parameter's value. I developed a product (under NDA) that has about 30 parameters. If the customer wanted something to be changed, it took moments rather than hours to do so.

The output of Fusion 360's STL exporter is much higher in quality than that of SketchUp's exporter, making it an ideal first step in the 3D printing toolchain. Not having to run the STL through a "fixer" saves a lot of time.

Another benefit: The user community is extremely helpful. I went through some growing pains with this modeler, which is hard to avoid with such a powerful toolset: there are many possible ways to try do something, but only a few of them are sensible or likely to work. Autodesk provides a screen recorder that's designed just for their programs. It records keystrokes, and microphone audio if desired. This is then automatically linked to their support forums, so when you post to ask a question, it's easy to embed your recording right there in the post. Answers usually come very quickly, the same day in fact, and often include screen recordings that other users have made to show you what to do step-by-step. This is an incredible level of support for $0.00. That kind of evangelism is hard to come by, and demonstrates that Autodesk really knows what it's doing on the community side.

Whoops, looks like something went wrong.

(1/1) ErrorException

file_put_contents(): Only 0 of 187 bytes written, possibly out of free disk space

in Filesystem.php (line 122)
at HandleExceptions->handleError(2, 'file_put_contents(): Only 0 of 187 bytes written, possibly out of free disk space', '/home/solidox/solidox.xyz/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php', 122, array('path' => '/home/solidox/solidox.xyz/storage/framework/sessions/HHR78bQ4OnZIFDkedPOM8iubVKNQAIBVaTwU99XY', 'contents' => 'a:3:{s:6:"_token";s:40:"kcXBxjuyFY0pdJmdCvkGNDUCHLmao5OpVsAx6fdN";s:9:"_previous";a:1:{s:3:"url";s:29:"http://solidox.xyz/3DModeling";}s:6:"_flash";a:2:{s:3:"old";a:0:{}s:3:"new";a:0:{}}}', 'lock' => true))
at file_put_contents('/home/solidox/solidox.xyz/storage/framework/sessions/HHR78bQ4OnZIFDkedPOM8iubVKNQAIBVaTwU99XY', 'a:3:{s:6:"_token";s:40:"kcXBxjuyFY0pdJmdCvkGNDUCHLmao5OpVsAx6fdN";s:9:"_previous";a:1:{s:3:"url";s:29:"http://solidox.xyz/3DModeling";}s:6:"_flash";a:2:{s:3:"old";a:0:{}s:3:"new";a:0:{}}}', 2)in Filesystem.php (line 122)
at Filesystem->put('/home/solidox/solidox.xyz/storage/framework/sessions/HHR78bQ4OnZIFDkedPOM8iubVKNQAIBVaTwU99XY', 'a:3:{s:6:"_token";s:40:"kcXBxjuyFY0pdJmdCvkGNDUCHLmao5OpVsAx6fdN";s:9:"_previous";a:1:{s:3:"url";s:29:"http://solidox.xyz/3DModeling";}s:6:"_flash";a:2:{s:3:"old";a:0:{}s:3:"new";a:0:{}}}', true)in FileSessionHandler.php (line 83)
at FileSessionHandler->write('HHR78bQ4OnZIFDkedPOM8iubVKNQAIBVaTwU99XY', 'a:3:{s:6:"_token";s:40:"kcXBxjuyFY0pdJmdCvkGNDUCHLmao5OpVsAx6fdN";s:9:"_previous";a:1:{s:3:"url";s:29:"http://solidox.xyz/3DModeling";}s:6:"_flash";a:2:{s:3:"old";a:0:{}s:3:"new";a:0:{}}}')in Store.php (line 128)
at Store->save()in StartSession.php (line 88)
at StartSession->terminate(object(Request), object(Response))in Kernel.php (line 218)
at Kernel->terminateMiddleware(object(Request), object(Response))in Kernel.php (line 189)
at Kernel->terminate(object(Request), object(Response))in index.php (line 58)