PrusaSlicer
PrusaSlicer copied to clipboard
Add independent setting for external perimeter fan speed
Adds a new setting and plumbs through the UI to independently control the fan speed for external perimeters. Higher fan speed on external perimeters improves surface finish and overhangs, while lower fan speeds for internal perimeters and infill improves layer adhesion. Filed as issues #2776 and #154.
@bubnikv sorry to bug you, but since you had someone review and land my PR for fan speed visualization and you replied on the discussion in bug #154 I wondered if you could take a look at this change?
I've been running with this patch for several weeks now and am very happy with it. I don't have equipment to properly compare the strength of the resulting parts against those produced without the patch. However, anecdotally I'm now able to print at lower temperatures while getting robust parts with very good surface finish (particularly for top layers). This has been especially useful for structural PETG parts, because I can now enable the fan for only external perimeters, bridges, and overhangs. Whereas previously I would strengthen parts by making the tradeoff of either reducing the cooling (worsening the surface finish) or cranking up the nozzle temperature (worsening overhangs and bridges).
If you want to try this patch on Windows, here's a build compiled from my fork. I would certainly recommend you build from source rather than downloading and running random executables, but I appreciate that building isn't an option for everyone.
@jschuh Tested. It works. But i think better to use it only on overhang perimeters instead all external. What do you think?
It sounds like what you're asking for can already be achieved by enabling "Detect bridging perimeters" under "Layers and perimeters". I know that I specifically wanted to control the fan speed for all external perimeters. My typical config is: very low or zero fan for infill and internal perimeters, medium fan speed for normal external perimeters, and the highest fan speed for bridges and overhangs (so I enable "Detect bridging perimeters").
It sounds like what you're asking for can already be achieved by enabling "Detect bridging perimeters" under "Layers and perimeters". I know that I specifically wanted to control the fan speed for all external perimeters. My typical config is: very low or zero fan for infill and internal perimeters, medium fan speed for normal external perimeters, and the highest fan speed for bridges and overhangs (so I enable "Detect bridging perimeters").
Thanks. True! Found it.
@enricoturri1966 could you look into merging this? I think I added the feature in the safest way possible (i.e. clean merge, minimal changes, and doesn't take effect unless the new filament setting is added). I'm happy to make any other necessary changes, but I'd really appreciate getting it landed since I've found this feature essential for printing structural parts.
And sorry if you're the wrong person to ask, but I figured I'd give it a shot since you merged my last PR.
@jschuh, I'm interested in your PR. I'm trying to find ways to improve corner overhang that curls up. The main issue is that too much cooling stress the corners and the resulting shrink makes them curl up. Do you think your PR address that issue? Test-Overhang-Remplissage-r08b - Defaut.zip
@rongith, I don't have any idea if this would address your issue. It might, since this patch allows me to print at lower temperatures with significantly reduced cooling. So, perhaps that would give you a lower temperature differential with the surrounding air, and thus reduce the curling affect. However, I assume there are a lot of other contributing factors (material, base temperature, ambient room temperature, etc.), and to be honest I haven't had the time to experiment with this patch in the last several months anyway.
@bubnikv any interest in pulling this in? I realize the PR is well over a year old at this point, but there's no conflicts since I've been maintaining it for a custom build I run locally. FWIW Superslicer has added an equivalent feature in the interim, so it seems like other people find it useful.
Most likely not in this version. We have to evaluate its usefulness first.
Totally fair. I just figured I should ask since I realized that it's been sitting here long enough that the assumption might be it was bitrotted. Also, If it's evaluated and considered useful but changes are needed in the implementation/approach, I would be happy to make those.
thanks
@bubnikv, figured I'd follow up to see if someone will be able to evaluate the usefulness of this change. Like I mentioned before, I'm happy to alter the implementation/approach if that would help.
This is an extremely useful feature. It allows for fine detail whilst retaining the strength.
Here's an example of 3 benchies, printed in ABS with 230°C in a build chamber. Print speed was 40mm/s max. From left to right:
- Printed without cooling. Unable to break by hand.
- Printed with 1% cooling fan. Relatively easy to break by hand.
- Printed with 1% cooling fan for external perimeters only. Unable to break by hand.
Note: Newer Marlin Firmware can equalize the fan speed to the usable PWM range of a fan - 1% fan in the slicer equals to 20% PWM duty cycle.

Out of curiosity I separated the chute of each benchy using pliers. It is noteworthy that ABS turns white if bent and in this case it shows us how effective the perimeter fan is compared to no fan or a permanent fan.
Again, left is without any fan, middle is with 1% permanent fan, right is 1% perimeter only fan.

The middle chute took very little effort, the right one took a bit more force and the left one took quite some force.
It is also interesting to see that there is a small perimeter gap with the perimeter fan (rightmost chute), yet this part is much stronger than the permanent 1% fan one where the perimeters touch each other.
Thanks @Drachenkaetzchen, your testing matches what I've found anecdotally when printing with PETG and PC blends (I rarely print with ABS, so I don't have enough experience to say on that). I get a good surface finish and comparable part strength to no-fan by enabling the fan for only external perimeters and bridges/overhangs (after dialing in the exact cooling parameters for those flows).
@bubnikv, I see the version was recently switched to alpha. Any chance of someone taking a look at this in time for the next release? I'm happy to help, and make any changes or do any cleanup that might be needed. If you have specific prints or demonstrations you'd like to see of usefulness, I have a stock MK3S that I can test with.
I assume it's too late to target the current alpha, so I squashed and rebased the patch to make it easier to maintain my local build.
The upcoming Alpha 5 will introduce Dynamic Fan Speeds in Cooling section. Similarly to dynamic overhang speed, you will be able to set fan speed for certain extrusion overlap levels, with the rest covered by linear interpolation. It is a little bit different in the fact that the fan speed is driven by overhang size, not extrusion type.
I would like to know your opinion, whether you prefer to use high fan speed on all external perimeters, or if the overhang driven fan speed is sufficient.
@Godrak, I just took a quick look at the Alpha 5 implementation and it seems really useful. Accepting that, I still think there's a value in also having a separate fan speed for external perimeters, because it helps avoid tradeoffs between layer adhesion and surface finish. This assumes something like ABS or PETG, where you usually don't even want any cooling for well-supported internal extrusions, but cooling on the external perimeters helps ensure that the extrusions look even and consistent.
I actually tested this late last year with a very hacked up version of this sort of overhang cooling, and while at first I thought it made external perimeter cooling unnecessary, after a bunch of attempts I found that the exterior extrusions just didn't look as good with only the overlap-based cooling. Functionally I wouldn't say there was any difference in parts, but there was just a lot of variation between matte and glossy surfaces in the extrusions, and in general the extrusion lines looked less uniform. I could of course dial up the base cooling a bit to improve the surface finish, but then I would get worse layer adhesion.
I'll see if I can integrate this PR with the Alpha 5 code and run off some prints to demonstrate what I encountered. Although, I may not get to it for a bit (I've had COVID for the last week and am only just getting back to normal).
Thanks, that is an interesting point about the consistent surface finish. Please, show your results if you do some testing.
I just did a quick and dirty integration with ExtrusionQualityEstimator (the new code is so much easier to integrate with than the old code). The added UI is a minimum speed for external perimeters option tacked onto the Dynamic fan speeds section:

I'll try to run off some prints today or tomorrow that demonstrate the surface finish issues I mentioned.
@jschuh
I'll try to run off some prints today or tomorrow that demonstrate the surface finish issues I mentioned.
How did tests went? I am very much interested in this feature.
There's a difference in the surface finish; basically some portions of the print come out a bit more glossy versus having more of a sheen. But it's subtle enough that it just wasn't very noticeable when I tried to photograph it (at least for the filament I tried). So, I didn't bother uploading pics.
I have kept the PR updated, because it's what I run in my own build (see the last setting in the pic below for an example of how I use it).
The PR also fades in the dynamic fan speed (including the external perimeter fan), because otherwise you get a really stark change in surface finish at the layer that it kicks in.