-
Notifications
You must be signed in to change notification settings - Fork 1.3k
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 #3950
Comments
Regarding the quality of the undersides of the overhangs, I guess a detail pic is warranted. This is Atomic "Deep Black" PLA, printed with 0.2 mm layers, all extrusion widths locked at 0.4 mm, exterior perimeters first, and with lots of cooling. Photo was taken with a bright light pointed at the part, but I desaturated the image and cranked the contrast and brightness way up to make the details more visible: Not visible in this image is that the middle one also exhibits the least amount of upward curl/warping. The ~63 second minimum layer time in the right two pieces was created by adding a sacrificial object to the plate that is set to print extremely slow to make it "waste time", so that the actual test part could print at normal speeds. |
Is someone going to address this? It's been nearly a year. |
Some questions: Using "Detect bridging perimeter" should already decrease the speed & increase the flow.
tl/dr: note: @Tinchus2009 np, i've created the thread to have feedback. "separate bridge perimeter from perimeter generator" : i didn't. |
I wish this was a Slic3r "issue". My UM2 is always late with higher fan speeds. When a small bridge (< 15 mm) is coming up, the fan has reached its speed about when the bridge has been passed. So, if I print bridges, I need the fan to be at 100% - from layer 0 to the end.... |
@foreachthing #3308 Generally I agree though re: not being Slic3r's job to handle the minutae of fan speeds. There's a post-process script there though that should be helpful. |
also kickstart != spin-up time |
Overhangs are not bridges 😄 and really, nothing related to bridging should be used to handle overhangs, because they require an entirely different logic. For example, a bridge segment (as defined in slicing terms) never turns a corner or goes around a curve; the perimeters are always long, straight line segments. Since it's unsupported, it's always drawn at "full" flow (or close to it, per the configured bridging flow ratio). Bridges necessarily always use rectilinear infill, though not always oriented ideally. Since they're always straight, a bridge can be drawn quite fast compared to an overhang, and one can exploit the filament's die swell and shrinkage characteristics in a bridge, as well, where one definitely wants to minimize their effects when drawing an overhang. Overhangs that are especially steep (about 65° from vertical) do currently use what I assume is bridging flow, but shallower overhangs are just drawn as a simple wall. I now don't recall if bridging speed is ever used on an overhang. Overhangs don't seem to get any extra fan at all, regardless of angle.
For larger parts, wider perimeter lines definitely produce better-quality overhangs, as seen in my photos. For small, detailed overhangs on super-thin layers (such as the edges of the front window in https://www.thingiverse.com/thing:2719434), narrower lines seem to be better.
Although I had it in mind to do this per-island, per-layer (so not switching order mid-perimeter), it occurs to me that it may be better to do this on a whole-mesh basis, so that the whole mesh has its perimeters first or not, for consistency. That way, if you have a dozen assorted meshes on the plate (whether as individual files, or as copies, or if a single .STL brings in several meshes), but only one mesh needs this special treatment, then it would get handled automatically. Basically, always assume that the user can't change the existing global setting (in the per-part "Settings" dialog) without taking other steps that would ruin the project.
That looks like it covers it, yeah.
As above. A bridge generally requires 100% fan speed (if the filament allows fan at all), while an overhang might do best with say 50%, with the rest of the part printed with say 10% fan.
As mentioned above kick-start is not spin-up time. It's just a brief 100% burst to get over the "hump" to get a fan to start spinning at a low final speed. Has to be done in the slicer - while it's possible to program a firmware to know how long a fan takes to spin up, and the firmware can look ahead in its receive buffer to predict and adapt to some things (such as changes in flow rate, as in Linear Advance), it's impossible for the printer to know when to start spinning up the fan in a real print. On a complex or detailed model, your fans may need enough spin-up time to put a couple dozen line segments between the bridge/overhang where the extra airflow is needed, and the point ahead of it where the fan would need to start spinning-up. Problem is, the firmware only buffers maybe 8 line segments, so even if it did look ahead, by the time it finds the fan command and its successive bridge or overhang segment, it's already too late to start spinning it up.
I hope I did 😄 |
They both draw "unsupported" feature. I will test with reduced speed & acceleration when printing your first test object to convince myself.
Do you know why (it should help me to know the reason behind that)? just a note, as it's unsupported, this extrusion should be round, so wider & deeper. Do you used "Detect bridging perimeter" when making these tests (for making my own)?
You can use a mesh setting for that. I don't see the need to do it automatically (it can surprise the user in a bad way).
Really? Do you have some stl/filament combination for me to test it?
It is, that's the purpose of the cgode. I say to the printer to have the fan at X% at this moment of the print. I will try to make something on klipper.
Not yet ;-p edit:
|
Just stepping in to ask people to confirm terms (to make sure people aren't talking past each other). Thanks. |
For the sake of this thread: "Overhang" means any section of the print that temporarily leads out at an angle from a vertical wall, partly over air, turns one or more corners while out there, and has start and end points in the same general region of the print. A bridge is a completely unsupported section that just stretches straight across the void between two opposing anchor points. It is of course possible for an overhang to lead to a bridge, or to stretch a bridge between two overhangs, as in the case of the uppermost few layers that complete a horizontal hole.
I am not sure why it works, but it does -- I'm not a fluid dynamics expert. 😄 Since most overhangs are less than the aforementioned 60° threshold (or 65°, or whatever it actually is), such overhanging extrusions are not round - they're partly flat, because at least part of the width of each line is supported by and squished down onto the layer underneath. And yes, I always have "detect bridging perimeters" enabled.
I suppose so, but asking the user to create/use a modifier mesh is a LOT more complicated than just having them turn on/off a checkbox. No, there's too much focus on modifier meshes, when the program could just do some stuff automatically. To be honest, although they are useful, they're turning into a crutch, just as post-processing scripts are.
It was a hypothetical example, however: As I write this, I'm printing a new revision of the MK8 gear cartridge for my extruder, using Atomic Bright White PETG. This combination does well with a continuous 25% fan. As you may know, PETG doesn't bridge worth a damn without 100% fan, and it likes a goodly amount of airflow on overhangs as well, but not necessarily 100%. It's possible to "over-cool" PETG, leading to curling and warping, enough to pop it right off the plate.
The point is, if you insert See these spikes in the fan speed? In no real-world use will the fan ever make it to to 100% actual speed in response. All bots using commonly-available components have this problem. The only way to combat that is to turn the fan up early. If that means a segment of the part ends up with the fan turned up continuously (i.e. if turning the fan on early means doing so while it's in the middle of a preceding spike), then so be it. At worst, you'll get a few extra seconds of fan. That is, unless you're using a valve-controlled hose leading to a big, remotely-mounted, always-on fan, or a tank and air compressor. 😛
I guess I need to try harder 😛 |
I've made a test (it's the top part of the 55° to 85° test): first (left) is my default settings + Detect bridging perimeter if you have a config file with good parameters for ovehangs, i'll be happy to try it. for the fan speed start-up time, I've addressed that here : Klipper3d/klipper#474 |
Well that's at least consistent with my initial experiments. |
Hello. Main problem of handling overhangs currently is that it is difficult to tell if overhang is 'unsupported' - geometries of vector paths on both layers need to be taken under account. Analysis of gcode is difficult and does not allow to f.e. change arc or circle to a segmented object easily, Also extrusion widths vary. It might happen that extrusions below path we analyze have weird shapes (like being perpendicular to our path) and all this makes computation and segmenting complex, and devels pulling out their hair out, while attempting to code algorithms for inter-layer analysis... but there is simpler path :) after slicing there is volumetric path (not yet gcode) being created for each layer - used also for preview. Having such crude volume maps for two layers , 'correction' layer can be computed using various methods. Just difference and threshold tells much. Areas with no support will mean bridging and are Now this map can be used to segment and correct overhang extrusions at next layer, as it represents Also as we are not dealing with gcode, we know width and extrusion volume of each feature, so And as another benefit - array map can be of any defined resolution, so it is predictable computationally (does not depend on model size) and allows corrections to be computed in reasonable time. If resolution will be changed, this time will change aswell, allowing to choosing memory/time vs correction accuracy compromise by user. I would like to hear more comments on that as this is one of very pressing issues causing |
stl & most 3D models store only triangles, so no "arc" or "circle" can exist. Do you propose something similar to my "over-bridge compensation" in my fork, but also for overhangs (perimeters)? |
Anything new on this issue yet? I see this being requested and marked duplicate to the original issue but nothing regarding putting this on the development roadmap. |
I'm struggling to print some parts in ABS that have overhangs right now. In particular I would love to have overhang-dependent fan speed. My parts are super brittle if I print with fan all the time, but there's no way to get a decent overhang without it. Much like we have filament cooling options based on layer time, I'd love to have them based on "supportedness" too. |
@supermerill has implemented a number of these changes in his SuperSlicer fork. |
@VanessaE Not to bug-jack, I've been looking for specifically a fan power during overhangs for ABS. I've got a current build of SS but I didn't see it in there. Have to read through SS a bit more carefully to see what else of your requests have been baked in. Good stuff! |
Vanessa, I landed to this this post because I was looking for the same specific overhangs settings in PrusaSlicer. I totally agree with you that overhangs are probably the worst scourge of 3d printing and are underestimated by slicing programs. I recently discover some of them were implemented in SuperSlicer. Thank you for your efforts in supporting this. One note: reading your posts I was impressed by your skills and competences: you should definitely take part in SuperSlicer developer team! Greetings from Italy. |
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: #328, #2158, and #2313
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]
[Filament Settings]
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](https://cloud.githubusercontent.com/assets/1733537/26076344/76ca8662-3986-11e7-8b2b-3d7f8cd9bbb4.JPG)
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:
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° overhang arch with only moderate curling, but at 0.1 mm layers, it loses corner quality beyond 45° (as expected), and starts to curl up too much by about 55° (i.e. the hotend knocks the part off the plate).
The text was updated successfully, but these errors were encountered: