Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Overhang handling suggestions #767

Open
VanessaE opened this issue Mar 7, 2018 · 17 comments
Open

Overhang handling suggestions #767

VanessaE opened this issue Mar 7, 2018 · 17 comments

Comments

@VanessaE
Copy link

VanessaE commented Mar 7, 2018

3D printer slicer programs just do not handle overhangs very well, and as printable objects get more detailed, they demand more from the slicer and the printer to get things right. Printers are getting better, but slicers just aren't keeping up, and this really needs addressed. They've been a thorn in the side of 3D printer users for quite some time - seems like none of the popular slicers have good overhang handling (I've tried both Slic3r forks, KISSlicer, and Cura). Of course, only Slic3r can be considered for this particular Github issue, but I'm sure other slicer authors will want to use some of these ideas also.

Related issues: slic3r/Slic3r#328, slic3r/Slic3r#2158, and slic3r/Slic3r#2313, and #242 in this fork.

After doing a lot of testing, I've made a list of overhang settings and behaviors that I think should be added. I know you don't like adding new settings, but in this case I think it's unavoidable. These should all be applied to (and only to) partial overhangs, not bridges:

[Print Settings]

  • Overhang corner speed - the idea here is to be able to slow down to infinitesimal speeds while rounding an overhanging corner, then speed up for the rest of the overhanging line (then repeat as necessary). Go slow enough and you can draw nearly-horizontal 90° corners in mid-air if you also have enough cooling. Obviously one could just slow down the whole print, but that wastes time and can have a negative impact on overall print quality. For the purposes of start/endpoints for this speed, I would define "corner" as the two line segments on either side of the turn, equal in length to say 3x the line width (so a "corner" would be the range of 1.5 mm before to 1.5 mm after the actual turn, if the line is 0.5 mm wide). This includes the overhang's anchor points (e.g. where the line deviates from the wall under it, and where it rejoins at the end of the overhanging perimeter). Suggested default: 5 mm/s.
  • Overhang straight line speed - just as it sounds, the speed between corners. Slower is better, but not necessarily as slow as the corner itself. This speed should also be used between the overhang's anchor points and its first and last unsupported corners. Suggested default: 20 mm/s.
  • Overhang acceleration - aside from the obvious effect of creating a sharper corner, the slower the acceleration, the less ringing you'll get at the corner. For a normal perimeter, a little ringing is fine, but on an overhang, even a little ringing can completely destroy the corners. This should be in effect for the entirety of the overhang, from just before one anchor point to just after the other, and all corners in between. Recommended default: 100 mm/s²
  • Overhang line width - For overhanging perimeter lines that still have at least some overlap with the previous layer, wider lines tend to produce better surface quality on the underside of the overhang, but one surely does not want to use extra-wide perimeters around the rest of the part. Suggested default: "auto", 1.5 times the corresponding perimeter line width, but let the user plug in a specific value if they want.
  • Overhang exterior first threshold - For any island that has overhanging perimeters, if the total length of the longest overhanging perimeter is less than this value, that island will have its exterior perimeter printed first. Any islands whose perimeter lengths exceed this threshold would have their exterior perimeters printed first or last according to the existing global setting. Small overhangs tend to work better with exterior perimeters printed first, but long overhangs (such as a beveled edge on the bottom of a project box) tend to warp less if the exteriors are printed last. My theory here is that, in the case of small overhangs, printing the exterior perimeter first allows it to cool into place, allowing it to "contain" the inner perimeters better, even if they would otherwise stay hot for too long, but doing interiors first allows them to keep the exterior perimeter hot longer, and allows them to cool and pull everything inward (and curl upward) more easily. On longer overhangs, the ends of the overhanging perimeter are merely far enough apart that they have no effect on whether the main overhanging line holds up well enough while it cools. Suggested default: 50 mm.
  • A checkbox to force concentric infill for the unsupported parts of the overhang's bottom solid layers (with the user's normal solid infill pattern just inside of that), as this pattern of infill tends to produce better undersides. My theory here is two-fold: 1) long, narrow rectilinear infill concentrates too much heat at one end of the area, with the hot zone moving along as the infill is drawn, causing the overhang to want to curl sideways, while concentric spreads the heat fairly evenly, and 2) overhanging perimeters will droop some no matter what you do, so for a particularly steep overhang, the perimeters that rectilinear infill should anchor to just won't be where Slic3r expects, while concentric infill is already anchored at each "end" where the loops go in/out of the overhang. Global, super-thick walls have a similar effect, but that wastes filament. Suggested default: enabled. Maybe this function should just be hard-coded to always use concentric infill for these areas.

[Filament Settings]

  • Overhang flow ratio - for overhanging lines that have no overlap with the previous layer (i.e. because they're too close to horizontal), less flow may be better, at least for some filaments (think ABS versus PLA). There will likely need to be a setting for these that is different from bridging flow ratio. As an aside, bridging flow ratio should be moved to filament settings, for the same reasons. Less flow of course would cool faster, but this would depend on the filament type, temperature, and cooling settings. Suggested default: 1.0 (what is is now). Note: this should be completely independent of the above "Overhang line width", so that it's possible to force a slight over- or under-extrusion without affecting the line spacing, if the filament needs it.
  • Overhang fan speed - some filaments can't have the fan turned on all the time. Suggested default: 100%
  • Minimum fan spin-up time (or distance) - fans need time to spin-up, and some filaments or print jobs can't have them on at 100% all the time, so they need to be turned on/up/down some distance before and after the endpoints of the overhang. Suggested default: 2 seconds or 50 mm.
  • A threshold setting to decide how much of an overhang is needed (in degrees or percent of line overlap), before invoking the various above settings. Suggested default, 60° (basically what it is now).
  • Height-over-bridge fan threshold: if the bridging or overhang drawing was invoked somewhere, and the current draw path crosses/draws on top of it (as when building more layers on top of the initial bridge/overhang), and the current layer is less than this height above its first lines, turn the fan on at bridging speed. This would be good for filaments that don't need a fan normally, except for bridging/overhangs and the first millimeter or two above them (some brands of PETG for example).

These two test models (especially the first one) are very good for evaluating these sorts of settings:
http://www.thingiverse.com/thing:1564848
http://www.thingiverse.com/thing:58218

By using enough global settings to simulate some of the above overhang-specific settings, good overhang quality can be achieved, at least with 0.2 mm layers. Here's an example of what I was able to produce (the settings, below, are somewhat conservative compared to what I might use in practice, should these suggestions be implemented):
p1170479

Example config (this is what was used to produce the parts in the photo above - do not use for a real print, it'll waste filament and/or time): segfault-config.ini.zip

Another point of note, which doesn't need a setting but which is a ...ahem... corner case 😄

Aside from never putting a seam on an overhang, don't put one close to the overhang either (the above "criss-cross" override notwithstanding). For example, on the "XYZ" test cube pictured above (XYZ_20mm_calibration_cube.stl.zip), if you use the "Aligned" seam position, Slic3r moves the seam around, depending the features on the sides of the cube. For those layers that include the lower half of the "X" on the cube front, Slic3r consistently puts the seam on the lower right leg, inside right corner:

screenshot_2017-05-16_14-18-14-2

Red marks indicate the moves as they exist now, with the travel ending at the red "X" and printing proceeding forward and then to the right, as per the bent arrow, leading to a sharp, distorted edge at the overhanging corner that follows. Blue marks indicate the path I would have expected Slic3r to use. Of course, moving the seam as suggested there would move the distortion to the inset, but then it only affects a flat vertical surface, not an overhang. One's filament choice has an effect here, likely due to viscosity and related to print temperature (the white that I use is much trickier to get "just right", compared to the other colors).

Of note, after doing a whole lot of tests (thankfully without a whole lot of wasted filament 😛 ), one thing I've just about settled on is that as layers get thinner, the maximum overhang you can draw gets less and less. At 0.2 mm layers, I can do a full 30-85 degree overhang arch with only moderate curling, but at 0.1 mm layers, it loses corner quality beyond 45 degrees (as expected), and starts to curl up too much by about 55 degrees (i.e. the hotend knocks the part off the plate).

[ This issue has been copied over from upstream alexrj/Slic3r as it affects this fork also ]

@Sebastianv650
Copy link

I'm looking forward to see something like this implemented.

And I'm quite happy that LA seems to be somewath "VanessaE approved" that you now switched over to Slic3r to point out some issues here instead of Marlin 😊
It's always helpful to read your reports 👍

@VanessaE
Copy link
Author

VanessaE commented Mar 7, 2018

haha wiseguy 😜

I'm glad my ramblings are useful 😄

@rennne
Copy link

rennne commented Feb 2, 2019

Another overhang improvement:

  • avoid seam (retraction with z-lift) near overhang

I observed while extruding on some more extrem overhangs, that ending of the movement on an overhangs, tends to pull the corner where the z-lift and retraction happens (curling up).

Then for next layer the overhang gets quite ugly because it has to extrude on these hardened bump on the corner, and cannot attach cleanly.

I comparison when the nozzle start and ends on the other side (there is no overhang on my model) it looks nearly perfect.

I had a different problem with that: because of the hardened bumps on the overhand my print got kicked over. So this then would also be improved.

@gnydick
Copy link

gnydick commented Nov 11, 2019

How about we break this up into a ticket per feature so they can get done faster. I think proportionally slowing down based on overhang angle would be a great low hanging fruit compared to the other suggestions.

@anerb
Copy link

anerb commented Nov 20, 2019

Hi, I'm a bit late to this thread. Can I please add this suggestion/request:
In case of overhangs, print the outer perimeter last.
If the inner perimeter/infill is not overhanging, the outer perimeter will have something to hold onto (from the side) for a better chance of remaining at the correct z location as it is being extruded. Thanks.

@gnydick
Copy link

gnydick commented Nov 20, 2019 via email

@avirtuos
Copy link

some awesome ideas in this issue. Would love to see at least some of them (overhang speed, overhang line width, and avoid retracting on overhangs) implemented.

@ss89
Copy link

ss89 commented Jul 10, 2020

Is someone actually working on this? Would love to see this feature implemented too, but i'm not into python and c++ deep enough to help out myself.

@hitchcme
Copy link

hitchcme commented Dec 9, 2020

I think I'm thinking out loud here, but maybe a post-processing script or program to find overhangs and then circular shifts the order of printed segments if the first segment isn't supported by the last layer? I think the corners can be resolved with the "right" temperature, cooling fan speed, and overhang extrusion speed.

@mopedcrosser
Copy link

mopedcrosser commented Jan 31, 2021

Any progress here ? Cura just implemented a slow down on overhangs, its awesome. Fixes curling on steep overhangs and gives nice and smooth walls. Really the only feature missing in prusa slicer that keeps me going back to cura for certain prints. @vanssaE Great suggestion how to implement

@patrickmcquay
Copy link

Add another vote for this one, it would help me pretty significantly.

I think for my setup specifically, I could get away with a general overhang speed setting (if over x degrees overhang, reduce speed to y) and avoiding seams in overhangs.

@mopedcrosser
Copy link

Maybe this is more a pull request than an issue ? Makes sense to move this topic there ?

@VanessaE
Copy link
Author

VanessaE commented Mar 9, 2021

A pull request would require code to implement the requested changes.

@IMightGitIt
Copy link

To me, this is the single most important setting to add in PrusaSlicer.

This might be the only real thing left in PrusaSlicer, which I cannot fix by changing the current settings.
I mean YES, I could just turn down the speed of external perimeters on the entire print, to avoid the parts with overhang, but that is really inefficient. Being able to have the Prusa Slicer recognize overhang and slice those areas differently would help me so much!

The torture test of this is a pretty basic shape: a cylinder that expands at a 45-degree angle from the centre in both the x and y-direction. This also provokes the seam issue, as there is no good place to place the seam. For any cylinder shape, I usually set the seam to "rear" to at least hide them on a single angle, and make it easier to sand if needed.

The only workaround I currently have is to add a modifier block manually to the areas with an overhang and set the perimeter speed to 50%. This does usually yield much better results, but it is a bit fiddly manual step whenever I spot some overhang.

@halfshavedyaks
Copy link

I would very much like to see such features. I'm not using PrusaSlicer at present, but I would if some of those features were present.

Overhang print speed and overhang fan speed are the most important two settings to add IMO.

@kech61
Copy link

kech61 commented Jan 21, 2023

I love the automatic fan speed - but on overhangs I would need fan on.
At least adding the fan speed as option to the modifier would be a great help.

Up to now I have to switch on fan parmanent for objets with overhangs without any need for 90% rest of the object.
This means higher noise level and higher power consumption w/o any need.
With all other features of PrusaSlicer I'm perfect happy - fan speed is the only issue I have with this.

@zhangrui1114
Copy link

Great suggestions, I notice even you set auto-FanSpeed and MAX-Speed to 25, when your model have some overhang, the fan speed still keep MIN-speed automaticely. This is too bad for some filament like ABS/ASA.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests