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

Change direction for perimeter extrusion at odd layers. #2413

Merged
merged 12 commits into from
Oct 21, 2023

Conversation

Noisyfox
Copy link
Collaborator

@Noisyfox Noisyfox commented Oct 14, 2023

@Noisyfox Noisyfox marked this pull request as draft October 14, 2023 12:12
@Noisyfox Noisyfox force-pushed the dev/overhang-alternate-wall-order branch from 3db8f64 to 2f568b4 Compare October 15, 2023 04:24
@igiannakas
Copy link
Contributor

Been testing this for a couple of prints together with remaining PRs from noisyfox. Looks good. Not sure what else is pending (and it’s in draft).

btw the new release is going to be so good! A super combo of features from prusa slicer & super slicer 🎉

@Noisyfox
Copy link
Collaborator Author

Been testing this for a couple of prints together with remaining PRs from noisyfox. Looks good. Not sure what else is pending (and it’s in draft).

btw the new release is going to be so good! A super combo of features from prusa slicer & super slicer 🎉

I'm going to add filtering and config for this feature then the PR will be ready.

@igiannakas
Copy link
Contributor

igiannakas commented Oct 15, 2023

Stupid question but is there a particular reason why we wouldn’t want all loops to be alternating irrespective of the overhang angle? Maybe seam inconsistency?

Also my 2 cents - I wouldn’t add this as a config option - it’s such an obvious improvement that it should always be active in my view.

@Noisyfox
Copy link
Collaborator Author

Noisyfox commented Oct 15, 2023

Stupid question but is there a particular reason why we wouldn’t want all loops to be alternating irrespective of the overhang angle? Maybe seam inconsistency?

Also my 2 cents - I wouldn’t add this as a config option - it’s such an obvious improvement that it should always be active in my view.

To support modifier so that you can only turn this on at certain part of your model while not affecting the surface quality of other parts.

Alternating extrusion direction will affect surface quality, even for perfectly vertical surfaces, due to the fact that your nozzle /motor/belt/etc. behave slightly differently on different directions:
e02c64b0a6c9c980aaf2faa5492f45dd
You can clearly see the lower one has those alternating pattern on the side while the upper one does not.

So I want to allow user to fine control this feature to achieve the best of both worlds.

@Noisyfox Noisyfox force-pushed the dev/overhang-alternate-wall-order branch 2 times, most recently from b2f599f to ee55d13 Compare October 15, 2023 14:51
@Noisyfox Noisyfox force-pushed the dev/overhang-alternate-wall-order branch from ee55d13 to 7c5feb6 Compare October 15, 2023 14:54
@Noisyfox Noisyfox marked this pull request as ready for review October 15, 2023 15:19
@igiannakas
Copy link
Contributor

igiannakas commented Oct 15, 2023

Stupid question but is there a particular reason why we wouldn’t want all loops to be alternating irrespective of the overhang angle? Maybe seam inconsistency?
Also my 2 cents - I wouldn’t add this as a config option - it’s such an obvious improvement that it should always be active in my view.

To support modifier so that you can only turn this on at certain part of your model while not affecting the surface quality of other parts.

Alternating extrusion direction will affect surface quality, even for perfectly vertical surfaces, due to the fact that your nozzle /motor/belt/etc. behave slightly differently on different directions: e02c64b0a6c9c980aaf2faa5492f45dd You can clearly see the lower one has those alternating pattern on the side while the upper one does not.

So I want to allow user to fine control this feature to achieve the best of both worlds.

Thank you! I did indeed notice this in my test print.

In which case maybe an option to exclude the external perimeter from the change of direction would be a good option to add. So to always avoid external perimeter artefacts on all cases but compromising a bit on the overhang quality.

The extra perimeters on overhang should be able to deal with the majority of the overhang anyway. Have you done any tests with the above? Ie clockwise and counterclockwise internal perimeters & infill and always clockwise external?

@igiannakas
Copy link
Contributor

Also why disable the algorithm for fuzzy skin?

@Sineos
Copy link

Sineos commented Oct 16, 2023

In which case maybe an option to exclude the external perimeter from the change of direction would be a good option to add. So to always avoid external perimeter artefacts on all cases but compromising a bit on the overhang quality.

This would be a great feature to have.
As I'm printing a lot of ASA and also quite big objects, this alternating wall directions is a life saver (using Cura) since it significantly reduced warping.
Despite having around 50°C chamber temperature, I have seen 300+ mm ASA prints lifting the magnetic PEI sheet of its base.

@SoftFever
Copy link
Owner

In which case maybe an option to exclude the external perimeter from the change of direction would be a good option to add. So to always avoid external perimeter artefacts on all cases but compromising a bit on the overhang quality.

This would be a great feature to have. As I'm printing a lot of ASA and also quite big objects, this alternating wall directions is a life saver (using Cura) since it significantly reduced warping. Despite having around 50°C chamber temperature, I have seen 300+ mm ASA prints lifting the magnetic PEI sheet of its base.

Wouldn't the alternating external perimeter be the main factor contributing to the improvement of overhangs though?

@igiannakas
Copy link
Contributor

In which case maybe an option to exclude the external perimeter from the change of direction would be a good option to add. So to always avoid external perimeter artefacts on all cases but compromising a bit on the overhang quality.

This would be a great feature to have. As I'm printing a lot of ASA and also quite big objects, this alternating wall directions is a life saver (using Cura) since it significantly reduced warping. Despite having around 50°C chamber temperature, I have seen 300+ mm ASA prints lifting the magnetic PEI sheet of its base.

Wouldn't the alternating external perimeter be the main factor contributing to the improvement of overhangs though?

It depends. If the overhang is severe it should have two or almost two perimeters in mid air. In that case it would work nicely without affecting the external surface of the model I would think?

@Noisyfox
Copy link
Collaborator Author

Also why disable the algorithm for fuzzy skin?

Ah when I started working on this I reused the overhang detection result from the overhang slowdown code, which is disabled when fuzzy skin is used. Then later when I decided to not use it (as it's only available in classic overhang speed mode) and write my own steep overhang detect code, I just kept the same logic.

I think the logic behind this is when fuzzy skin is used, there will be countless of tiny overhangs due to the uneven surface, which could mess the algorithm up, and also since those overhangs are just so tiny they should not affect print quality.

I've never used this feature before personally, so I'm not sure if this will be a problem or not. Maybe if fuzzy skin is enabled we ignore the overhang detection and force reversing regardless? Since I think with the fuzzy skin you won't notice the surface quality decreasing cause by the alternating extrusion order?

@igiannakas
Copy link
Contributor

Also why disable the algorithm for fuzzy skin?

Ah when I started working on this I reused the overhang detection result from the overhang slowdown code, which is disabled when fuzzy skin is used. Then later when I decided to not use it (as it's only available in classic overhang speed mode) and write my own steep overhang detect code, I just kept the same logic.

I think the logic behind this is when fuzzy skin is used, there will be countless of tiny overhangs due to the uneven surface, which could mess the algorithm up, and also since those overhangs are just so tiny they should not affect print quality.

I've never used this feature before personally, so I'm not sure if this will be a problem or not. Maybe if fuzzy skin is enabled we ignore the overhang detection and force reversing regardless? Since I think with the fuzzy skin you won't notice the surface quality decreasing cause by the alternating extrusion order?

Ah I see. Maybe let’s give it a try with it always enabled on fuzzy skin - it won’t show the artefacts due to the surface variation that’s inherent to it. Happy to test it for you (I’ve printed a few models with it - crochet style pumpkins for Halloween :D)

@igiannakas
Copy link
Contributor

So i've been trying to test the new version but the app crashes on start up. Unfortunately no helpfull error logs other than an unknown exception has occured. Maybe something is wrong with the variable setup in the GUI. Any chance for a cross check?

…e-wall-order

# Conflicts:
#	src/libslic3r/Preset.cpp
@Noisyfox
Copy link
Collaborator Author

Noisyfox commented Oct 20, 2023

So i've been trying to test the new version but the app crashes on start up. Unfortunately no helpfull error logs other than an unknown exception has occured. Maybe something is wrong with the variable setup in the GUI. Any chance for a cross check?

Sure, how could I reproduce the issue?

Are those crashes caused by those asserts?

@Noisyfox
Copy link
Collaborator Author

Also why disable the algorithm for fuzzy skin?

Ah when I started working on this I reused the overhang detection result from the overhang slowdown code, which is disabled when fuzzy skin is used. Then later when I decided to not use it (as it's only available in classic overhang speed mode) and write my own steep overhang detect code, I just kept the same logic.
I think the logic behind this is when fuzzy skin is used, there will be countless of tiny overhangs due to the uneven surface, which could mess the algorithm up, and also since those overhangs are just so tiny they should not affect print quality.
I've never used this feature before personally, so I'm not sure if this will be a problem or not. Maybe if fuzzy skin is enabled we ignore the overhang detection and force reversing regardless? Since I think with the fuzzy skin you won't notice the surface quality decreasing cause by the alternating extrusion order?

Ah I see. Maybe let’s give it a try with it always enabled on fuzzy skin - it won’t show the artefacts due to the surface variation that’s inherent to it. Happy to test it for you (I’ve printed a few models with it - crochet style pumpkins for Halloween :D)

I've added the support for fuzzy skin, feel free to give it a try.

@igiannakas
Copy link
Contributor

So i've been trying to test the new version but the app crashes on start up. Unfortunately no helpfull error logs other than an unknown exception has occured. Maybe something is wrong with the variable setup in the GUI. Any chance for a cross check?

Sure, how could I reproduce the issue?

Are those crashes caused by those asserts?

Nope they wouldn’t - the assert statements only affect the debug build as that is when they are evaluated. Something else is going on - I’ll give a try to the latest build from softfevers pipeline as mine doesn’t seem to work with this PR and let you know.

@igiannakas
Copy link
Contributor

@SoftFever tried your build of it- works great. Maybe some merge error on my side was causing it to crash.

@@ -283,6 +332,22 @@ static ExtrusionEntityCollection traverse_loops(const PerimeterGenerator &perime
BoundingBox bbox(polygon.points);
bbox.offset(SCALED_EPSILON);

// Always reverse extrusion if use fuzzy skin: https://github.com/SoftFever/OrcaSlicer/pull/2413#issuecomment-1769735357
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Question: why are we differenciate contour and hole for reversing?

Copy link
Collaborator Author

@Noisyfox Noisyfox Oct 21, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To improve surface quality when only contour/hole surface has steep overhang. There is no need to reverse the hole surface if only the contour surface has steep overhang, and vice versa.

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

make sense 👍

@SoftFever
Copy link
Owner

@Noisyfox Thanks for the fantastic work.
Looks all good.
Merged 👍

@SoftFever SoftFever merged commit 951252c into SoftFever:main Oct 21, 2023
4 checks passed
@Rhotix
Copy link

Rhotix commented Oct 29, 2023

So what is the use of this? I can print such overhangs flawless. Is there an issue to it or some special design? Please dont implement things as always active, since it can affect others setup

@Noisyfox
Copy link
Collaborator Author

I can print such overhangs flawless.

I cannot.

Please dont implement things as always active

It's not.

@vovodroid
Copy link
Contributor

vovodroid commented Dec 28, 2023

this alternating wall directions is a life saver

@Sineos , what is infill percent in you prints? Interesting, that Cura not just alternates directions each layer, but also alternate each perimeter direction. Questions is whether it's necessary to reduce warping, or each layer alternating is good enough?

@vovodroid
Copy link
Contributor

Hi, actually using term "odd layer" is wrong from user point of view. Though in code expression layer_id % 2 == 1 is used, layer numeration in GUI starts from 1, i.e. layer_id+1. Thus reversing happens on even layers, starting from layer 2.

@Sineos
Copy link

Sineos commented Dec 30, 2023

what is infill percent in you prints?

Typically 40% to 60%.
Interesting information that Cura is doing more here. Matches to my empirical feeling that Cura prints with this option are less prone to warping, but OTH it is difficult to tell since warping heavily depends on size and geometry of the part.

@vovodroid
Copy link
Contributor

Matches to my empirical feeling that Cura prints with this option are less prone to warping

Speed, layer height, seams position, etc. I successfully printed quite big ASA object sliced in Prusa with draft shield (not on photo):

image

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

Successfully merging this pull request may close these issues.

7 participants