3D printers are an exercise in compromise. Generally, you don’t want a lot of mass on your tool head, as that can lead to ringing and other mechanical artifacts on your print. However, direct drive extruders are better for many filaments, and the decision on what printer to build ultimately comes down to a choice between speed, build area, and the ability to print in exotic filaments.
Even in slicing a 3D model, a 3D printing enthusiast must balance the quality of a print versus how long the print will take to squirt out of a nozzle. Now, just about any printer can produce fantastic models at a very high layer height, but no one wants to wait several days for the print to finish.
This balance between print time and print quality has, for the last few years, been completely ignored. One of the best solutions to this we’ve seen is variable layer height slicing. Basically, if you’re printing something without much detail, you don’t need small layers in your 3D print. Think of it as printing the neck of a bust at 0.3mm layer height, and the face at 0.1mm.
Yes, there were a few papers from a decade ago laying the conceptual foundations of variable layer height slicing. 3D printers weren’t exactly common back then, though. Recently, Autodesk’s Integrated Additive Manufacturing Team released Varislice for automatic generation of variable layer heights on a 3D printed object. So far, though, there’s no automated solution for variable layer height slicing, and the tools for manual configuration of variable layer height slicing are terrible.
For the past few months, Prusa Research has been working on their own edition of Slic3r that includes an easy to use interface for variable layer height slicing. This version of Slic3r was just released, and now it’s time for the hands-on. Does variable layer height slicing work?
To be fair to Slic3r, variable layer slicing has been around for a while. The settings for variable layer height are right there, easily accessible from the plater. It’s not an intuitive interface, though. Setting variable layer heights in the old versions of Slic3r are as simplistic as setting a Z axis offset and the layer height for those layers. The results are the same, but tweaking a model isn’t as easy as the Prusa edition of Slic3r.
For this example, I’m going to use a model of my own design: the ultimate low-polygon Pokemon. This is my response to 2015’s spasm of low-poly Pokemon, and it’s actually made out of computer code. If you want a great example of how to code polyhedrons in OpenSCAD, here you go.
My Porygon model is pretty good, however, the model does have one shortcoming: the top plane of the head is ever so slightly inclined. If that plane were flat relative to the bottom of the model, this wouldn’t be a problem. The slight tilt of the head means there will be obvious visible layer lines right at the most visually appealing part of the model. The solution to this is to either print the model at a very low layer height (which would take a while to print), or to use variable layer height settings on just the top part of Porygon’s head.
Digging Into Slic3r’s Variable Layer Thickness
The UI for the Prusa edition of Slic3r isn’t very different from the standard version. Really, the only change is a ‘Layer Editing’ button at the top of the screen, and a bizarre grayscale layer selection tool on the right hand side of the plater window.
Using the Layer Editing tool, you can easily add detail to portions of a model simply by holding your left mouse button. There’s smoothing, and everything is color coded and easy to visualize. The process is automatic, and Slic3r does all the work for you.
With just a few clicks of the mouse, I’ve corrected the biggest problem with my Porygon model. I now have a very very low layer height where I want it, and I also have a model that will print in hours, not days.
Generating Gcode is one thing, but real results are never displayed on a computer screen. To truly test this out, I need to print these little Porygons out. The results were encouraging:
These Porygon were printed with a layer height that was actually too high (0.35mm on a 0.4mm nozzle), but for an example I think it works. The left Porygon clearly shows a ‘stairstep’ feature on the top of its head. This is just how the model was built – the only way to fix this is by printing this model at a lower layer height.
The right Porygon has no discernible stairstep feature on its head. The top of the variable layer thickness Porygon is completely smooth. I could have tuned the thickness of the top and bottom layers for a better print, but this is a very good example of what variable layer thickness printing gets you.
Here’s where things get interesting. At a layer height of 0.35mm, this model takes just over two hours to print. At a layer height of 0.1mm, this model takes five hours to print. The version of this model sliced with variable layer height took just about two hours and fifteen minutes to print. If I were only concerned about the quality of the top plane of Porygon’s head, I get the print quality of a five-hour print in less than half the time.
The Takeaway of Variable Layer Height Slicing
Earlier examples of variable layer height slicing were automatic, meaning the slicer determines where to put detail. Prusa found that the algorithms that determine where to put detail default to the entire print being high detail, and makes automatic layer height useless.
Back in 2013, the main branch of Slic3r received a pull request for adaptive slicing, but it took an exceptionally long time for this to get rolled into the main branch, and again there’s the problem of automatic smoothing resulting in complete smoothing.
For now, at least, manual layer height adjustment is the best we have, and it works very well. This is one of the more interesting advances in 3D printing software recently, and you should check it out.
Now that we have manual variable layer height adjustments, I should mention that the idea of variable detail adjustments is something that has been considered before. This is like variable layer height adjustment, only with selective detail on the x and y axis. Think of a bust, where the face is printed at 0.1mm, and the back of the head is printed at 0.2mm. This idea exists, but there is no implementation. I’ve been hearing about it since 2011 or thereabouts, but so far no one has cracked this algorithmic nut. If you’re looking for a challenge or a master’s thesis, there you go.