I decided to write a quick primer on 3d printing and how it works for the uninitiated.

What's a 3d printer mechanically?

Most of today's 3d printers take plastic (in the form of a spool of filament), heat it up, and extrude it out a small nozzle.

Blue PLA spool and some liqor
Clogged Extruder - it took some time and understanding for me to start getting consistently good prints 

The extruders sit on a frame that can move along two axis (x and y) over a print bed. Eithe rthe extruders or the print bed, depending on the printer, can also move allong the z axis.

This permits us to move the nozzle around slightly above the top of the print bed to make a plastic shape which we call a layer. Once the layer is done, we inch the nozzle a bit farther from the top of the print bed and repeat the process (usually printing ontop of the plastic we have already laid down. Eventually we end up with a 3d piece of solid plastic.

What software is needed for 3d printing?

Folks have been making computer generated 3d shapes for years to support use cases including engineerign design, 3d animations (movies, video games, etc.), architecture and so forth. There is a plethora of tools that play in this space and they output binary representations of the desired shapes in 3d space. In the 3d printing world, the instructions that drive our extruder and print bed around and control the gear that pushes or retracts the filament are based on a digital representation of each of the layers required to make the 3d shape.

3d printing requires a bit of software, called the slicer, that takes 3d models and converts them into the set of instructions printers need to do their job. The good news is that althogh there are many tools multiple standards for 3d models, there's usually a way to get them converted into something my Slicer software can handle.

TL;DR - if the goal is to generate 3d shapes to print, we can pretty much use any 3d modeling software out there (from AutoCAD to Maya and beyond) and take it's output and pass it to our slicer.

3d modeling software

From what I have seen so far, there are two main classes of software useful for generating 3d models. They are based on whether the desired output is something organic looking or artistic (something you might scuplt with your hands) or something functional and geometic (something you might want to design numerically or even program). I think you need one of each depending on what you're trying to make. The two main software packages I have setlled on (respectrively) are Scupltris and OpenScad.

Sculptris

Scupltris is the free version of zbrush, a really nice 3d environment that reminds me of playing with clay as a kid. You start with a ball of material and the interface allows you to do things like pinch, smooth, draw, etc. all with your mouse. I had played a bit with zbrush many years ago and was happy to find that scupltris is free and pretty full featured (downside– they don't have a linux version).

Here's something I designed with sculptris:

rhino head

I am really happy with Sculptris for artistic / organic modeling. I really enjoy how intuitive their interface is and how quickly you can get obtain decent looking results as a beginner.

I am still considering getting into Blender at some point, perhaps not for 3d printing but VR/AR or animations. Blender is probably the most active open source 3d modeling project out there and arguably the most powerful (including commercial solutions). Some really spectacular art and movies have been built entirely on Blender. What's stopping me? I have tried it a couple of times and found the UI is a bit too complex and the learning curve too steep given my limited time. There is a new version in beta that apparently addresses some of these concerns so perhaps I'll give it another go sometime soon.

OpenScad

OpenScad is a wonderful very simple open source system that allows you to build 3d models programatically. You build your models using a programming language that has primitives for things like `cube` and `cylinder` and functions to manipulate them like `color`, `tansform`, and ` difference`. OpenScad ships with a convenient little development environment that allows you to preview your model as you go and render it when you're done. It also has a headless mode that you can call from the command line which I used heavily for one project so far.

There are plenty of CAD programs that would fall into the functional / geometric category but I really love the extensibility, simplicty, and precision of OpenScad's programmatic take on the problem. I don't see myself trying something else that is more pointy clicky in this category.

3d modeling on mobile

These days you can do some quick and dirty modeling right on your mobile device. I spent some time on the ios and google appstores and my favorite by far is 3DC.io. It's simple, kid friendly, and has a free version that is quite usable.

Here's some stuff I quickly whipped up on 3DC

closet desk pitch video
3d platypus named Pete

A Slicer

Once you have a 3d model, you need to turn in into a set of instructions for your printer to execute in order to make a piece of plastic.

The are a few options for slicing but my favorite is called Slic3r, which is an open source program with a relatively active community. Specifically I have been using the prusa 3d fork which seems to be more actively maintained than the main Slic3r and it has a few nice features including variable layer height (you can set differnet print quality for differnet parts of your model).

Variable layer height

There are a few different instruction formats supported by slicers. My printer the FFCP supports `x3g` which is not natively supported in Slic3r so I also rely on a script to convert the supported `gcode` format into `x3g` format. Specifically for the FFCP I highly recommend Dr. Lex's site especially for more advanced tips.

In the commercial side, I have heard great things about simplify 3d though I have yet to try it myself.

Monitoring and Management

I'm into monitoring systems in general so it didn't take me long to start looking for a way to remote submit and track print jobs. I quickly landed on OctoPrint which is a nice web ui that allows you to kick off jobs (you can integrate it with slic3r directly so you can submit jobs from there). It's pretty full featured including things like a live video feed of your print bed (works with a regular webcam) as you're printing as well as automatically generating nice time lapses for completed prints.

It runs on linux, in docker, and on your raspberry pi. For the latter there's a nice pi image OctoPi that's quite easy to set up and configure.