Set extrusion width not respected
As a long time S3D user, I've gotten a bit tired of the lack of updates from them, so I've been looking a bit at switching to another slicer, and Prusaslicer has a lot going for it. One particularly neat feature is the ability to have a Z contact distance for supports that is not a multiple of the layer height (because that is a terrible idea).
So I've now spent some time trying to transfer my S3D settings to get approximately the same printing times from Prusaslicer, but I am struggling. Prusaslicer seems to generally end up with prints taking longer time, even if I've matched up all I can think of.
Then finally I discovered that Prusaslicer for some odd reason does not seem to use the extrusion width that I have actually set. I've set it manually to 0.4 mm (same as the nozzle diameter), but that is not what I get in the gcode. Prusalicer somehow reduces this to a lower value internally, causing much longer print times due to a much higher count of printing moves to cover the same area. Here's an example of an object that is 8 by 4 mm in size, 3 shells and 0.4 mm extrusion width (rotated 45 degrees on purpose):
As you can see, it generates a total of 12 extrusion lines along the short axis, where it really should have been 10 (4 / 0.4). So in reality it used an extrusion width of around 0.33 mm. For a big object, this results in a lot more lines being printed, and that takes time, of course.
I can compensate by manually setting my extrusion width higher (to 0.45), but I don't think I should have to. Looks like a bug, maybe?
RE: Set extrusion width not respected
Ok, after writing this it seems that there is indeed some hardcoded logic behind this, so it is actually the expected behaviour. Not sure I think it is very intuitive, but it probably means to just go with the flow and find settings that works.
Anyways, it explains why Prusaslicer gave me much longer printing times, which is a relief to figure out.
RE: Set extrusion width not respected
Was it the infill overlap?
RE: Set extrusion width not respected
In my experience, Simplify 3D was usually quite optimistic in print time estimation. Unless it takes into consideration actual real-world acceleration and jerk settings (and there's no place to enter them so it will) it just assumes the printer can come up to speed and change directions instantaneously.
PrusaSlicer is likely much more accurate. Unless you've actually timed prints from both, I wouldn't take a comparison of slicer estimates too seriously.
Every time I fire up S3D, I immediately remember how frustrating it was to use.
and miscellaneous other tech projects
He is intelligent, but not experienced. His pattern indicates two dimensional thinking. -- Spock in Star Trek: The Wrath of Khan
RE: Set extrusion width not respected
Was it the infill overlap?
No, it was the fact that extrusion width in Slic3r/PrusaSlicer is somewhat confusing, in that it works completely different from other slicers (like S3D). In the latter, it directly controls line spacing, but in the former it is simply an input to a formula that then calculates the actual line spacing behind the scenes (and to add insult to injuri, the end result also depends on layer height). When I had it set to 0.4 mm (as I have in S3D), that actully results in a line spacing of 0.335 mm (when layer height was 0.3), and that will create many more lines for the same print, and more lines obviously takes a lot more time to print.
RE: Set extrusion width not respected
In my experience, Simplify 3D was usually quite optimistic in print time estimation. Unless it takes into consideration actual real-world acceleration and jerk settings (and there's no place to enter them so it will) it just assumes the printer can come up to speed and change directions instantaneously.
PrusaSlicer is likely much more accurate. Unless you've actually timed prints from both, I wouldn't take a comparison of slicer estimates too seriously.
Every time I fire up S3D, I immediately remember how frustrating it was to use.
I didn't test print anything big, but to do a reasonably fair comparison, I loaded the g-code from each into Craftware (which by far has the best gcode visualizer of any slicer, period), and inspected the results there. If you haven't tried that to really inspect g-code, you're missing out.
That said, I completely agree that S3D usually is far too optimistic, but as I said, the comparison was done with a different tool.
RE: Set extrusion width not respected
Would be curious to see actual part print times.
and miscellaneous other tech projects
He is intelligent, but not experienced. His pattern indicates two dimensional thinking. -- Spock in Star Trek: The Wrath of Khan
RE: Set extrusion width not respected
Would be curious to see actual part print times.
There's no doubt that a print sliced with PrusaSlicer (using 0.4 mm for extrusion width) would take a lot longer (for a big print), but it would also not be a fair comparison, since it generates way more printing moves. If I bump up the extrusion width to make line spacing approximately the same as in S3D, then print times are very much comparable.
RE: Set extrusion width not respected
There's no doubt that a print sliced with PrusaSlicer (using 0.4 mm for extrusion width) would take a lot longer (for a big print), but it would also not be a fair comparison, since it generates way more printing moves.
The only fair comparison is to document actual print times. Even if one accepts that PS uses narrower extrusion widths (see below), your actual printed part is typically not going to be 100% infill. If you specify 3 perimeters in either slicer on a part that is not 100% infill, 3 perimeters will be printed at whatever speeds the slicer uses. Many other factors come into play.
There have been many discussions over the years about the inaccuracy of print estimation times from slicers, with PrusaSlicer having moved up to among the most accurate when configured with accurate printer acceleration, jerk and move settings. Unless you've entered those parameters into your slicer, it's going to be making its estimates based on unrealistic physics.
As to the extrusion widths used in PrusaSlicer, if I set it to use 0.40mm extrusion widths:
I get the expected result:
You can set extrusion widths to 0 to have PrusaSlicer calculate reasonable values based on your specified nozzle size. This is very much like Simplify 3D's feature to select extrusion width, but with more control:
IIRC, when set to Auto, S3D uses 120% of nozzle size to calculate the extrusion width.
What you may be encountering in PS is an oddity when you specify extrusion widths as a percentage. If you do so, it will calculate widths as a percentage of layer height. This is the legacy behavior inherited from Slic3r, and I'm not really sure why this approach was used. If you leave extrusion widths set to 0, they will be calculated based on nozzle size as described in the tooltip help that pops up when you hover over an entry field. I generally leave extrusion widths set to 0 in my print profiles so they can work with any nozzle size.
and miscellaneous other tech projects
He is intelligent, but not experienced. His pattern indicates two dimensional thinking. -- Spock in Star Trek: The Wrath of Khan
RE: Set extrusion width not respected
I agree that only real-world printing times gives a properly fair comparison, but with the same speeds, a much larger number of printing moves will clearly take more time. No need to test that to know it's true.
Now, you said that you got the expected result when you set 0.4 mm for extrusion width, but you really didn't. If that object was 4 mm wide (like the one I sliced), you should see a total of 10 lengthwise extrusions, but your image shows there are in fact 11 (do the counting), so the spacing is less than 0.4 mm (as expected with the algorithm employed by PrusaSlicer).
I am not using percentages for extrusion widths, I am getting the expected behaviour, as per this document:
https://manual.slic3r.org/advanced/flow-math
It's just that it's not what I would prefer. I want to set line spacing (like in S3D), to have control over how many perimeters will be used for anything I design. I usually design in multiples of 0.4 mm to have an integer number of perimeters (and no zig-zag gap fill), and this approach is not as straightforward with PrusaSlicer due to the odd definition of extrusion width.
A switch to allow us to specify line spacing instead of the current (imo misleading) extrusion width would have been welcome. That would also be independent of layer height, whereas the with the current extrusion width you will get varying line spacing if you keep that variable constant and then change your layer height. Also not good, in my opinion.
So what I will have to do is to just calculate the extrusion widths required to get the line spacing I want for each layer height, and store that in different profiles. That will probably get me reasonably close to what I want, but maybe not completely. I need to test more to know for sure.
The automatic extrusion width in S3D is a joke, it is simply a fixed multiplication factor of 1.2, and the general recommendation for S3D is to set the extrusion width to the same as your nozzle diameter. The auto function is PS is more intelligent, but I want manual control, so it doesn't really matter to me.
RE: Set extrusion width not respected
I agree that only real-world printing times gives a properly fair comparison, but with the same speeds, a much larger number of printing moves will clearly take more time. No need to test that to know it's true.
"More moves equals more time" is a bit of an over-simplification I think. In the reality of physical 3D printing, a number of other factors come into play. Print times are based on the volume of plastic moved through the extruder. Extrusion width is one of 3 parameters affecting the volumetric rate (the others being layer height and linear speed). Real-world speeds vary depending on acceleration and jerk, and the length of extrusions. Smaller prints are going to vary due to the effects of acceleration and jerk settings more than larger prints with extrusions long enough to allow the nozzle to reach linear speeds as specified in the slicer settings. So while I do agree that "more movement generally can result in longer print times", I think we differ in how much weight we're willing to give slicer print time estimations to reflect real-world conditions. I've gotten to the point that I ignore such comparisons between competing slicers, and instead focus on in-slicer improvements for the slicer I'm using and actual print quality.
Now, you said that you got the expected result when you set 0.4 mm for extrusion width, but you really didn't. If that object was 4 mm wide (like the one I sliced), you should see a total of 10 lengthwise extrusions, but your image shows there are in fact 11 (do the counting), so the spacing is less than 0.4 mm (as expected with the algorithm employed by PrusaSlicer).
This is no different with Simplify 3D. Every slicer makes adjustments for situations where solid layers are not exact multiples of extrusion widths. Here's what I get with S3D specifying 0.40mm extrusion widths. Notice that S3D comes up short.:
I am not using percentages for extrusion widths, I am getting the expected behaviour, as per this document:
https://manual.slic3r.org/advanced/flow-math
It's just that it's not what I would prefer. I want to set line spacing (like in S3D), to have control over how many perimeters will be used for anything I design. I usually design in multiples of 0.4 mm to have an integer number of perimeters (and no zig-zag gap fill), and this approach is not as straightforward with PrusaSlicer due to the odd definition of extrusion width.
I'm not sure whether you're asking how to get similar results from PS as you did from S3D, or if you want to do a deep-dive into the theoretical and the internal workings of each slicer. As for the internal workings of the slicer, for gaps between extrusions that are narrower than the extrusion width, PS will use "gap fill", which is definitely not properly documented. I've opened a GitHub issue on this topic. Infill will be used for gaps wider than the extrusion width, so you can get that "zig zag" effect with associated vibration and noise when printing sparse infill in narrow gaps. There is the Print Settings->Infill->Solid infill threshold area setting which may impact this, but I haven't experimented with it myself
A switch to allow us to specify line spacing instead of the current (imo misleading) extrusion width would have been welcome. That would also be independent of layer height, whereas the with the current extrusion width you will get varying line spacing if you keep that variable constant and then change your layer height. Also not good, in my opinion.
There have been a number of "top surface" quality discussions here describing the "lawn mower" effects of printing solid top infill in different directions around features. The latest I found on that topic was a mention by the developers that they're working on it (mentioned on GitHub). For now, you can twiddle with Print Settings->Advanced->Top solid infill extrusion widths. I've found that using a narrower setting here can help with top surface quality without having to adjust all extrusion widths (also avoiding the corresponding impact on print times).
So what I will have to do is to just calculate the extrusion widths required to get the line spacing I want for each layer height, and store that in different profiles. That will probably get me reasonably close to what I want, but maybe not completely. I need to test more to know for sure.
I think this gets into "left as an exercise to the reader" territory. Search around and you should be able to locate some of the relevant threads here. I'm pragmatic about all of this, so using extrusion widths of 0 is sufficient to get me results as good as, if not better than those I was getting with S3D. Specific top surface finish issues are something I only worry about in limited cases. Are you familiar with Cura's "ironing" feature to smooth top surfaces?
The automatic extrusion width in S3D is a joke, it is simply a fixed multiplication factor of 1.2, and the general recommendation for S3D is to set the extrusion width to the same as your nozzle diameter. The auto function is PS is more intelligent, but I want manual control, so it doesn't really matter to me.
Maintaining profiles in S3D drove me nuts. PS is definitely better, but you still wind up doing a lot of redundant configuration if you work with multiple layer heights and nozzle sizes regularly. I've found a work-around (of sorts) by using hand-crafted .ini files that can be combined from the command line. I use this to generate a dozen diagnostic prints in 9 nozzle sizes with 4 materials that I commonly use. Unfortunately, this functionality was broken in the transition from Slic3rPE to PrusaSlicer. I've opened a GitHub issue but it seems to have been overlooked. You can also hand-edit config bundle files to avoid a LOT of redundant entries by using the inherits = feature. Unfortunately, this is all lost when you import the config bundle, so it is necessary to keep an external set of config files.
In terms of actual print times, I found that PS (and Slic3r's) Maximum volumetric speed settings made the biggest difference in balancing "speed" (print times) and quality. Rather than worrying about linear speeds, this settings lets you set limits on the amount of plastic shoved through the hotend. It will use up to your specified speeds until it hits this volumetric rate, at which time speeds will be throttled to avoid extruder skips & jams. I've got some notes on this topic here. I can enter somewhat optimistic speeds for printing specific features and not worry that I'll run into rate problems mid-print on larger pieces.
and miscellaneous other tech projects
He is intelligent, but not experienced. His pattern indicates two dimensional thinking. -- Spock in Star Trek: The Wrath of Khan
RE: Set extrusion width not respected
Edit: More notes on Maximum volumetric rate impact here.
and miscellaneous other tech projects
He is intelligent, but not experienced. His pattern indicates two dimensional thinking. -- Spock in Star Trek: The Wrath of Khan
RE: Set extrusion width not respected
A bit more. While I haven't dissected the source code, it's pretty clear that most slicers are doing a bit of calculation under the hood. If I set extrusion widths under settings:
The actual values are determined by the slicer:
The forum software seems to be truncating the pics, but extrusion widths appear to vary between 0.442mm and 0.392mm as actually sliced. I'm not aware of a preview mode in S3D to show similar detail but it clearly is using some sort of adjustment to deal with surfaces that are not exact multiples of the extrusion width.
and miscellaneous other tech projects
He is intelligent, but not experienced. His pattern indicates two dimensional thinking. -- Spock in Star Trek: The Wrath of Khan
RE: Set extrusion width not respected
@bobstro: Thanks for taking the time to write all of that, I have quite a bit more experimenting to do. I did not know about that hand-editing config files trick, might come in handy one day.
Profile management in S3D is rather useless, and I tend to not even care. I have a main profile that I just use, and then adjust it manually for each print job. PS has a lot of options as well, and it seems that for most of the options in S3D, there is an equivalent option in PS, which is good. My main gripe is still that extrusion width in PS is confusing and (IMO) not logical, even though I now know what it does behind the scenes, and which calculations it performs.
As for Cura, I haven't dived into that yet, as I want to see if PS is a worthy alternative to S3D. Cura has an exceptional amount of features and settings, and I do know about that ironing feature, I just haven't tried any of it.
It seems to me that PS unfortunately has a tendency to generate some odd toolpaths occasionally, and much more so than S3D. Look at this, for instance:
At the top of that arc there is a small chamfer, so PS chooses to use a wide gap fill extrusion, which is fine. But unfortunately it also decides to break that up into some small loops along the way. It has no practical consequences in this case (other than a slightly rough surface that can be fixed with some sandpaper or a sharp knife), but it doesn't inspire confidence.
And finally, the ability to set a maximum volumetric feed rate is something I haven't looked at yet, but I think it is a good and useful concept, especially for prints where accuracy isn't crucial (because you may well end up with higher printing speeds than the rest of the mechanics can handle without artifacts).
RE: Set extrusion width not respected
[...] As for Cura, I haven't dived into that yet, as I want to see if PS is a worthy alternative to S3D. Cura has an exceptional amount of features and settings, and I do know about that ironing feature, I just haven't tried any of it.
It was when I realized I was using a spreadsheet to make sense of S3D's speed settings and realizing what being able to control max volumetric rates would do that I made the jump from S3D. PrusaSlicer (then Slic3rPE) was a good bit clunkier, but Team Prusa was starting to add some great capabilities, and it's only improved since. I think you'll find it more than worthy.
As to Cura, it definitely gives you a lot of granular control over features. I tend to think of PS as my Engineer's slicer. Great for repeatability and consistency. Cura is my Artiste's slicer. Lots of control for tweaking individual prints.
It seems to me that PS unfortunately has a tendency to generate some odd toolpaths occasionally, and much more so than S3D. Look at this, for instance:
The Prusa devs have been working intensely on getting the port from PERL to C++ completed, and are now making great strides with usability and features. It sounds like they may be starting to look at slicing features, so I'm hopeful it'll continue to improve.
Just for grins, be sure to check out KISSlicer and ideaMaker. KISSlicer is well respected for its slicing, although the interface is abysmal.
[...] And finally, the ability to set a maximum volumetric feed rate is something I haven't looked at yet, but I think it is a good and useful concept, especially for prints where accuracy isn't crucial (because you may well end up with higher printing speeds than the rest of the mechanics can handle without artifacts).
I'm still hoping a similar capability will show up in other slicers. That feature really eliminates the need to spend hours trying to tweak speeds for anything but finish.
and miscellaneous other tech projects
He is intelligent, but not experienced. His pattern indicates two dimensional thinking. -- Spock in Star Trek: The Wrath of Khan
RE: Set extrusion width not respected
I was checking out Matt's Hub for something else and noticed that his Dec 1, 2018 post is about this. Check it out here:
https://mattshub.com/2018/12/01/demystifying-thin-walls/
See my (limited) designs on:
Printables - https://www.printables.com/@Sembazuru
Thingiverse - https://www.thingiverse.com/Sembazuru/designs
RE: Set extrusion width not respected
I was checking out Matt's Hub for something else and noticed that his Dec 1, 2018 post is about this. Check it out here:
Good stuff. I followed links from that post and found this in the Slicer docs:
For the outermost loop of perimeters (aka external perimeters) Slic3r will default to a thin extrusion width, equal to
nozzle diameter * 1.05
. This is considered the thinnest safe extrusion width. A thin extrusion width provides better accuracy to the object shape and minimizes the flow errors caused by irregular filament.
I've had good results using automatic extrusion widths. I like to use that feature to only have to worry about one print profile across multiple printer profiles (different nozzles), but this is an added perk.
I find it interesting that PS/Slic3r still modifies the extrusion width even when I specify it manually. Will have to play more with this.
and miscellaneous other tech projects
He is intelligent, but not experienced. His pattern indicates two dimensional thinking. -- Spock in Star Trek: The Wrath of Khan
RE: Set extrusion width not respected
An no where do I see the term INFILL-OVERLAP being mentioned in the discussion.
All 0.45 extrusions, 2 to 5 perimeters. 4 mm part. Notice only the 5 perimeter slice has 11 extrusions.
RE: Set extrusion width not respected
An no where do I see the term INFILL-OVERLAP being mentioned in the discussion.
If you poke through the Slic3r documentation there's some description:
Extrusion Width is the thickness of a single filament extruded either in free air or above a surface. It's not the distance of two adjacent paths since some overlap will be generally applied in order to get better bonding. [...]
The ideal overlap would be something like:
0 < overlap_factor*void_area < void_area
with
overlap_factor
ranging from 0 to 1.overlap_factor
represents how much void remains between the extrusions. It's difficult to estimate this amount, since it probably depends also on viscosity of plastic, extrusion speed and temperature. In the past, several values were tried foroverlap_factor
, but some users were still reporting too sparse paths. A value of 1 is currently being used to guarantee that the error (which is always present) is fully on the side of abundant extrusion rather than lacking material.Path spacing is thus:
spacing = extrusion_width - layer_height * (1 - PI/4)
Not exactly crystal-clear, but that's apparently the answer. I suspect Prusa has just ported over Slic3r's code at this point and haven't reworked anything yet.
So it looks like the legacy Slic3r behavior is to tweak external perimeter widths for accuracy, and adjust the actual spacing between solid infill extrusions to ensure overlap using layer height.
and miscellaneous other tech projects
He is intelligent, but not experienced. His pattern indicates two dimensional thinking. -- Spock in Star Trek: The Wrath of Khan
RE: Set extrusion width not respected
I think the main takeaway from all of this is that extrusion width in PS remains a bit confusing since it is combined with layer height to calculate the line spacing, where line spacing will always be less than the set extrusion width to account for overlap (which is of course needed).
The biggest problem with this is when people want to force an integer number of perimeters for designs that are made to specific dimensions, for example walls that are 1.6 mm (4 * 0.4 mm) wide. The reason for wanting this is primarily to have evenly sized extrusions, and to get a predictable number of printing moves.
As it is now, to get that you need to calculate the extrusion widths for each layer height you want to use, whereas if you instead could input the required line spacing (like in most other slicers), it would work independently of layer height.
So for those that would like to have a predictable line spacing, you will need to use this formula to calculate the required extrusion width in PS:
extrusion_width = line_spacing + layer_height * (1 - π/4)
So if you want for example a 0.4 mm line spacing at a layer height of 0.3 mm, you'd get this (rounded to 4 decimal places):
extrusion_width = 0.4 + 0.3 * (1 - π/4) = 0.4644
It appears to me that the PS developers is firmly of the opinion that the current implementation is what they want to stick with, even if it would be very simple to change the GUI so that we could choose to instead input line spacing and have extrusion width and overlap computed automatically. That would give a more predictable output, which in my opinion is desirable.