Table of Contents

2024-06-14 - 3D printing fast

before we start… you need to have a decent machine. sturdy, with power to move and power to melt – of course. there are however a ton of slicer settings, that allows you to go faster, on what you have. this is what this article is all about.

why it's not the default? well – the the faster you go, the less precise you get. you can experience underextrusions, poor overhands, poor layer adhesion, and whole lot of other artifacts… so why bother? for draft prints mostly. if the part is not functional, and you need to quickly check if this matches your expectations – you go for speed.

my old 3D printer is by no means speed or accuracy demon. yet it was enough to compare how different elements can affect the overall print time. let's cover these in separate sections.

tools

as usual i'll be using my 3D printing SDK for automated and reproducible builds, using speed mode override. as of writing this article (3D printing SDK v2.6.0) it goes like this:

fill_pattern = supportcubic
perimeters = 2
top_solid_layers = 4
bottom_solid_layers = 3
fill_density = 10%
# keep printing speed at maximum (for non-1st layers)
external_perimeter_speed = 100%
infill_speed = 120
perimeter_speed = 100
small_perimeter_speed = 60
solid_infill_speed = 100
support_material_speed = 100
top_solid_infill_speed = 100
travel_speed = 200
first_layer_speed = 60%
first_layer_temperature = 200
temperature = 200
retract_before_travel = 0
retract_before_wipe = 0%
retract_layer_change = 0
retract_length = 0
retract_length_toolchange = 0
retract_lift = 0.0
retract_lift_above = 0
retract_lift_below = 0
retract_restart_extra = 0
retract_restart_extra_toolchange = 0
retract_speed = 80
use_firmware_retraction = 0
only_retract_when_crossing_perimeters = 1
max_volumetric_speed = 12
max_print_speed = 150
extrusion_multiplier = 1.05
resolution = 0.2
slowdown_below_layer_time = 10
extrusion_width = 0.6
infill_extrusion_width = 0.6
external_perimeter_extrusion_width = 0.6
perimeter_extrusion_width = 0.6
solid_infill_extrusion_width = 0.6
top_infill_extrusion_width = 0.6
variable_layer_height = 0
first_layer_height = 0.3
layer_height = 0.3
cooling = 1
disable_fan_first_layers = 5
full_fan_speed_layer = 5
fan_always_on = 1
max_fan_speed = 100
min_fan_speed = 100
bridge_fan_speed = 100

model

while printing i was testing 3D benchy model (3D benchy with SDK) and 3D calibration cube.

3D calibration cube in OpenSCAD

this this tests we'll just focus on 3D cube, as it's simpler to understand the presented concepts. this model, in the base settings, prints in 24m33s. this will be the reference.

changes

here all changes are covered, one by one.

the less you print, the less head needs to move and the less plastic is extruded.

# 3D support, to make less of it
fill_pattern = supportcubic
# minimal number of walls needed
perimeters = 2
# minimal top and bottom layers, to make it "good enough"
top_solid_layers = 4
bottom_solid_layers = 3
# as little infill as possible, while still being able to decently support top layers
fill_density = 10%

while these changes build time is already down to 21m58s.

faster movements

obviously the next step is to make head move faster.

# that's nearly 2x the speed i use for regular / quality prints!
external_perimeter_speed = 100%
infill_speed = 120
perimeter_speed = 100
small_perimeter_speed = 60
solid_infill_speed = 100
support_material_speed = 100
top_solid_infill_speed = 100
travel_speed = 200
# note that it's still worth to give some extra time to the 1st layer, to make sure we have a solid base
first_layer_speed = 60%

we're down to 18m58s now.

don't waste time on retractions

retractions do take time. on lower-end full-metal hotends, doing loads of these can also cause jams due to heat creep.

# decrease retractions to minimize risk of heat-creep (full-metal hotend)
retract_before_travel = 0
retract_before_wipe = 0%
retract_layer_change = 0
retract_length = 0
retract_length_toolchange = 0
retract_lift = 0.0
retract_lift_above = 0
retract_lift_below = 0
retract_restart_extra = 0
retract_restart_extra_toolchange = 0
retract_speed = 80
use_firmware_retraction = 0
only_retract_when_crossing_perimeters = 1

we're now at 18m57s… not much of a difference, right? well – that's the problem with the model. 3D calibration cube has almost no retractions, thus the difference is minimal. the same changes for 3D benchy is 43m51s (with retractions) vs. 43m20s (w/o retractions). the more complex model, the more you gain, though definitely it's not a driving factor.

decrease quality

# decrease quality (0.2mm as a minimal detail size)
resolution = 0.2
# move fast on small elements, at the cost of quality (this may need some tuning for more tricky models)
slowdown_below_layer_time = 5

now we're at 11m45s. that's significant already.

go wide

in order to do less passes, make sure each pass does more by increasing extrusion width. for a typical 0.4mm nozzle, 0.6mm will do perfect.

# e_w 0.4 -> 0.6 (less passes, at the expense of some extra material usage)
extrusion_width = 0.6
infill_extrusion_width = 0.6
external_perimeter_extrusion_width = 0.6
perimeter_extrusion_width = 0.6
solid_infill_extrusion_width = 0.6
top_infill_extrusion_width = 0.6

while this can increase material usage (note that we use the same number of walls!), it usually pays of in speed (fixed-sized walls, many flat areas, etc.). here we're down to 11m16s.

aim high

in order to do less passes, make sure each pass does more in terms of layer height. for a typical 0.4mm nozzle, 0.3mm layer height (i.e. 150% of the default 0.2mm) is good.

# higher layer == faster print
variable_layer_height = 0
first_layer_height = 0.3
layer_height = 0.3

while this is a considerable loss of visual quality (comparable only to speed increase) it gets us down to 8m06s.

final touches

when printing fast, it's essential to let the plastic cool… well – fast.

# improve cooling
cooling = 1
disable_fan_first_layers = 5
full_fan_speed_layer = 5
fan_always_on = 1
max_fan_speed = 100
min_fan_speed = 100
bridge_fan_speed = 100

this does not affect print speed directly, but generally allows you to go faster, while still preserving (at least rough) shape of smaller details.

volumetric flow rate

while we already bumped up speeds a lot, there's another limiting factor fir printing – volumetric flow rate. it sets how much plastic can go through the nozzle, in cubic millimeters per second. after all what's the point in moving fast, if you cannot extrude at that paste? this often limits the speed of the print – not the actual head movement.

unless your hotend is specially designed to handle high flow rates (eg. 3D Vulcano, CHT nozzle, etc.) you'll likely top out at around 10mm^3/s, before extrusion issues starts.

by lifting hotend temperature, and do a bit of an over-extrusion, this can be partially compensated for.

# printing faster, with thicker layers may require a bit extra temperature for beter melting and bonding
# (but not to much to avoid heat-creep on full metal hotned!)
first_layer_temperature = 200
temperature = 200
# higher temperature allows for more volumetric speed
max_volumetric_speed = 12
max_print_speed = 150
extrusion_multiplier = 1.05

so now we're at… 8m06s.

so… no speedup? let's check the preview with 'prusa-gcodeviewer', in a volumetric flow rate view.

volumetric flow rate on 2x2x2 cm cube

the problem is – the thing is small! for smaller models we cannot go too fast, as it will just become a hot blob of material. thus we need to slow down… and this is one of the magics of 3D printing – getting bigger object does not necessary need to impl significant increase in print time!

let's try the same model, but scaled up 2x (i.e. 4x4x4 cm).

volumetric flow rate on 4x4x4 cm cube

now we can see that we're really utilizing the higher flow rates here. this would print in 31m48s, i.e. despite being 8x larger, it will only take 2.3x longer to print. for comparison, the same 4x4x4 cm cube, w/o speed profile would take 1h39m17s!

final result

here are the test prints from speed-profile of both 2x2x2 and 4x4x4 cm cubes, printed as measured.

2x2x2 cm vs 4x4x4 cm cubes

while there are definitely visible artifacts from the “speed” profile, i'm generally happy with the result.

for small cube we started from 24m33s and lowered it to 8m06s (1/3 of the original value!) and for bigger one from 1h39m17s to 31m48s (again less then 1/3 of the original print time.

as you can see there's a great potential for having slicer settings optimized for different qualities like “speed”.

in the near future i'll also describe some other common profiles are use, for special purpose prints.