Matthew Harrison - Jul 19 2017
All about "layer seams"
I've recently been researching a lot about methods of reducing the visibility of seams in 3D prints. Commonly referred to as layer seams, z seams, blobs, zits, or scarring, the marks appear on prints either in a line or scattered around the model depending on slicer settings. An example can be seen above on this cylinder.
It's a universal problem for FDM printing and there have been a lot of different methods introduced into slicing software to hide it. The most common of these are coast, wipe, and of course spiral vase mode, but some slicers have their own special ways of dealing with it too. Here we will discuss how and why these seams occur, and what you can do about it.
What actually causes it?
Ironically, the most common names for these marks on prints aren't actually accurate. Layer seam, layer change seam and z seam imply that it occurs when the printer moves up to the next layer, however this is not the case. The standard process for printing one layer is as follows: inner perimeters > outer perimeter > infill > layer change. This can of course be confirmed by viewing a gcode preview, or even just watching the printer as it operates. From this we can see that the layer change actually occurs on the inside of the model where the infill ends, as that is the last part to be printed on any one layer.
Not important to the topic of seams, but perhaps of interest are the reasons why this order for the process of printing a layer is used. Firstly - why perimeters and then infill? Printing the perimeters first gives the infill something to adhere to on the edges as it is extruded. It acts as a containment area for all the infill to keep within. You can imagine that when printing at high speeds, it's very important that the plastic has something to stick to on the edges to keep its shape.
Secondly, why are the perimeters printed in the order of internal > external? Again, this order is chosen to ensure that extruded plastic has something to adhere to as its printed. On parts that have overhangs, a fraction of the width of the outer perimeter is not printing directly on top of anything, so it helps to have something next to it to stick to.
Consider for example a model printed at 0.3mm layer height, with an extrusion width of 0.45mm. At a 45 degree overhang, two thirds of the width of the outer perimeter would be printing over air, leaving just one third of this width (0.15mm), to keep the perimeter actually attached to the print. And what is it attaching to? Not just the layer below, but also the previous inner perimeter loop for that layer.
This becomes especially important as the overhang angle becomes steeper. At an overhang of around 34 degrees, the entire outer perimeter would be printing with nothing below it. If this perimeter was printed first, it would simply fall down (hopefully onto support material) and not attach to the print at all. If it has a perimeter beside it to stick to though, then it will remain attached to the rest of the print. I've attached an illustration of this example below:
So if these markings are not caused by layer changes like we originally thought, what actually does cause it? The answer is that it's just the point at the beginning and end of a perimeter. At this point the path isn't smooth and continuous like the rest of the perimeter, so it leaves a small scar. Unfortunately there's no way that we can completely get rid of this other than using a spiral vase printing mode, which has very restrictive limitations.
On well tuned printers, these scars will only look like tiny raised areas or divots, but on a poorly tuned printer it can leave large blobs of filament behind and in some cases make the print unusable.
How can I fix it?
There are a number of ways you can go about trying to make your perimeter seams less visible. I'll start with the settings that are crucial to have correct, and then move on to some other settings that will be able to help you even further.
If your retraction settings aren't well tuned, it's definitely going to have an impact on the visibility of seams in your prints. The important settings to consider are retraction distance and retraction speed. If your retraction distance is not high enough, it will result in plastic oozing out of your nozzle when the printer finishes the outer perimeter. On the other hand, it's important not to have this value too high as it can increase the chances of clogging your hotend (if melted plastic is being drawn too far back into the heatbreak).
The retraction speed is also important in the same way, as if the retraction speed is too slow, the nozzle will just sit there oozing plastic. Just like the retraction distance though, it is possible to go too high. If the speed is set too high, it may cause the drive gear to chew up filament or your extruder motor to skip steps.
This all heavily depends on the viscosity of your plastic and also your extrusion drive system (bowden or direct), and may take some testing to find the optimal values.
Printing with an incorrectly calibrated extruder can make the perimeter seams on your prints appear worse as it can cause a build up of pressure inside your nozzle in the case of over extrusion. When the pressure in the nozzle builds up and has nowhere to go, the plastic is looking for anywhere to spill out. Therefore when the nozzle stops for a fraction of a second at the end of a perimeter loop, it oozes much more readily than it would under normal conditions. This results in bigger and more noticeable blobs on the outside of the print. Printing too hot can also have this effect, so make sure your temperatures are well tuned. My guide on extruder calibration can be found here if you'd like to follow along and make sure your printer is pushing out as much plastic as it thinks.
Wipe, coast, and extra restart distance
I've put these three settings together because in my mind, they're all very similar - they're patches for a deeper issue that can be addressed much more elegantly (see the setting below). Regardless of that, these settings can work well if the correct values are used.
When finishing up the outer perimeter, the wipe setting tells the printer to keep moving the nozzle over the perimeter once it’s complete. This way the pressure inside the nozzle can be gradually relieved over a wipe movement, and it doesn't cause a blob at a single point. The coast setting works by actually switching off the extruder a little before the perimeter is finished and allowing the pressure in the nozzle, and gravity, to push out the last remaining bit of plastic needed to complete that loop. Extra restart distance has a similar effect to this, except it works at the beginning of a perimeter instead of the end. Usually after every retract that the printer does, it re primes the nozzle by extruding the same amount as it retracted. The extra restart distance allows you to tell the printer to extrude a little less than was retracted in order to compensate for oozing which may have occurred (causing the plastic to be pretty much primed already).
All of these settings are related to compensating for pressure in the nozzle, which causes plastic to continue oozing even after the extrusion has stopped. Rather than play around with settings like these that need to be fine tuned for different speeds, temperatures, materials, retraction settings and all of that, why not have an intelligent algorithm built in to the printer firmware that can evaluate nozzle pressure and compensate for it on the fly? Well you can, and it’s called linear advance.
Linear advance is something that I'm going to be talking about a lot more in the future. I won't go into too much detail here, but the idea behind linear advance is that extrusion is not a linear system. It's not like your XYZ axes that only move when you tell them to and stop immediately when you tell them to stop. This is most clearly seen when you extrude some plastic and it keeps going for a short while after the extrusion movement has stopped. As I've mentioned, this is all due to pressure inside the nozzle and how it is not properly compensated for - until now.
Linear advance uses an algorithm that models the filament compression and pressure as a spring. Towards the end of an extrusion, the extruder is gradually slowed down such that the pressure within the nozzle is reduced to virtually zero at the very end. This almost completely removes the need for a retraction too - cool right?
If you use Marlin firmware, it's as simple as enabling the LIN_ADVANCE flag in your firmware and calibrating according to this guide. If you're running Prusa firmware like me, you can update your firmware to Sebastianv650's community firmware found here and follow the guide linked above.
Update: Linear advance is now built into stock Prusa firmware and switched on by default in all the stock profiles.
Intelligent toolpath generation
As well as all the methods above, there have been some interesting tactics used by slicing software to hide seams too. One that received a bit of attention in the media was this patent by owner of Makerbot and notorious patent troll, Stratasys. It describes a method of concealing seams where "at least one of a start point and a stop point of the contour tool path is located within the interior region of the layer". It also includes a number of example images which can be seen below:
As you can see, the idea of this patent is to move the beginning and end points of the outer perimeter inside the model so that they are not visible from the exterior. A description of exactly this was written on a reprap blog post just a few months before the patent was filed, how curious...
As far as I know, this hasn't yet been implemented in the Makerbot slicer. They did sue another 3D printer manufacturer for using it though.
So why am I mentioning any of this if we can't even use it? Because we can.. sort of. Slic3r has something that it refers to as "loop clipping" which is automatically applied to all sliced files (there's no setting for it). After the termination of the perimeter, the print head moves slightly inside from the outer loop. The picture below illustrates how:
This is sort of like a wipe, but the slicing engine does this all the time in addition to wiping as well. So although we can't have the intelligent extrusion path, we can still have a tidied line ending movement with slic3r, which I've noticed does help.
Unfortunately there's no way that you can completely remove seams from FDM prints. However, with the methods I've discussed, you should be able to make them considerably less visible. I strongly believe that once you've got things like retraction and extrusion settings tuned well, the linear advance feature is the best way to go about trying to hide seams. Of course it's also important to decide if you'd like the seams to be aligned or randomly scattered around the print, but that's a decision that should be made depending on the geometry of the print.
I hope you found this article interesting! I've got a lot of guides, prints, and experiments that I'm looking forward to showing off here soon.
If the algorithm was published in a blog post before the patent application was filed, the patent can easily be invalidated.
If it was published in a blog post after the application was filed but before the patent was issued, publication will not invalidate the patent.
So Stratasys is trying to patent lead ins/leadouts that have existed in subtractive CNC manufacturing for decades? Interesting…
wow! what a fantastically written article, i just read the whole thing like it was a calmly flowing river, so smooth. and it got every important aspect of the issue. now I have directions I can take to solve or mitigate this dread problem. you know what? Matthew, you are awesome.