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

Middle outer inner wall ordering mode (Draft) #4333

Open
wants to merge 43 commits into
base: main
Choose a base branch
from

Conversation

igiannakas
Copy link
Contributor

@igiannakas igiannakas commented Mar 4, 2024

Building on the PR #3809 bringing this feature to Arachne, including handling of multiple islands following the inner-outer-inner code model and incorporating the above PR (classic) in its code.

Marking it as draft as this needs testing to confirm to what extent it benefits print quality and, hence, whether it is beneficial as a wall ordering mode. Also the classic mode could do with more development to handle multi-island special cases.

Fixes #3924

I'll be running the following print tests:
Voron cube - Middle Outer Inner vs Inner Outer Inner vs. Inner Outer Objectives:

  1. Test overhang performance.
  2. Test wall extrusion consistency
  3. Test seam consistency.

Precise wall enabled. Objectives:
Test improvement and delta in wall extrusion consistency compared to baseline

Overall testing objective: Can this mode reasonably supplement inner-outer-inner and if so with what tradeoff in print quality. Is this mode an improvement over inner-outer mode and if so to what extent.

commit cf39ba0
Author: igiannakas <ioannis@my-spot.co.uk>
Date:   Mon Mar 4 12:22:39 2024 +0000

    Update PerimeterGenerator.cpp

commit ff4347f
Author: igiannakas <ioannis@my-spot.co.uk>
Date:   Mon Mar 4 12:09:03 2024 +0000

    Middle Outer Inner implementation

commit 00486f7
Merge: 3b34635 1cb88d0
Author: igiannakas <ioannis@my-spot.co.uk>
Date:   Mon Mar 4 11:34:25 2024 +0000

    Merge branch 'middle-outer-inner' of https://github.com/igiannakas/OrcaSlicer into middle-outer-inner

commit 3b34635
Author: igiannakas <ioannis@my-spot.co.uk>
Date:   Mon Mar 4 11:34:20 2024 +0000

    Update PerimeterGenerator.cpp

commit 1cb88d0
Merge: 78e23b6 27439ed
Author: Ioannis Giannakas <59056762+igiannakas@users.noreply.github.com>
Date:   Mon Mar 4 11:23:00 2024 +0000

    Merge branch 'SoftFever:main' into middle-outer-inner

commit 78e23b6
Merge: 4e7a0f9 5dab9b2
Author: Ioannis Giannakas <59056762+igiannakas@users.noreply.github.com>
Date:   Sat Mar 2 11:36:57 2024 +0000

    Merge branch 'SoftFever:main' into middle-outer-inner

commit 4e7a0f9
Author: igiannakas <ioannis@my-spot.co.uk>
Date:   Mon Feb 5 10:01:26 2024 +0000

    First commit - MiddleOuterInner
commit cf39ba0
Author: igiannakas <ioannis@my-spot.co.uk>
Date:   Mon Mar 4 12:22:39 2024 +0000

    Update PerimeterGenerator.cpp

commit ff4347f
Author: igiannakas <ioannis@my-spot.co.uk>
Date:   Mon Mar 4 12:09:03 2024 +0000

    Middle Outer Inner implementation

commit 00486f7
Merge: 3b34635 1cb88d0
Author: igiannakas <ioannis@my-spot.co.uk>
Date:   Mon Mar 4 11:34:25 2024 +0000

    Merge branch 'middle-outer-inner' of https://github.com/igiannakas/OrcaSlicer into middle-outer-inner

commit 3b34635
Author: igiannakas <ioannis@my-spot.co.uk>
Date:   Mon Mar 4 11:34:20 2024 +0000

    Update PerimeterGenerator.cpp

commit 1cb88d0
Merge: 78e23b6 27439ed
Author: Ioannis Giannakas <59056762+igiannakas@users.noreply.github.com>
Date:   Mon Mar 4 11:23:00 2024 +0000

    Merge branch 'SoftFever:main' into middle-outer-inner

commit 78e23b6
Merge: 4e7a0f9 5dab9b2
Author: Ioannis Giannakas <59056762+igiannakas@users.noreply.github.com>
Date:   Sat Mar 2 11:36:57 2024 +0000

    Merge branch 'SoftFever:main' into middle-outer-inner

commit 4e7a0f9
Author: igiannakas <ioannis@my-spot.co.uk>
Date:   Mon Feb 5 10:01:26 2024 +0000

    First commit - MiddleOuterInner
@igiannakas
Copy link
Contributor Author

The below were taken in the worse angle possible and using a macro lens:
Inner-Outer-Inner:
2F0E5721-3E61-4D87-95E2-B4F6F96A161C_1_102_a

Middle-Outer-Inner:
BF7BDC23-DECD-44D9-AF3A-DAB5EA8D4FEB_1_102_a

Inner-Outer:
78DEFF98-716F-4320-A8B6-A5F08422E19B_1_201_a

Surface Quality wise, the inner outer inner is the clear winner, followed by Middle Outer Inner then by inner outer. Precise wall was enabled for Middle Outer and Inner Outer as expected. The delta between Middle Outer and Inner Outer may get larger if more than 3 internal perimeters are printed. However it is not huge. I'll need to print a benchy to see what difference it makes to more organic shapes.

@igiannakas
Copy link
Contributor Author

Overhangs:

The inner-outer-inner mode is competent enough in printing 45 degree overhangs with ease especially if using 0.48 external perimeter width and 0.16 LH. The step over is adequate enough to get a decent overhang.

From left to right:
Inner-outer-inner
Middle-outer-inner
Inner-outer
5696A872-A02D-45DF-9619-D20C17B8ED70

However there is a very slight improvement compared to the inner outer inner mode when using middle outer
Left: Inner Outer Inner
Right: Middle Outer Inner
75ADFBEC-E37E-4E9A-A3E5-6766EC79FBBE

Final test is with a smaller external line width - trying 0.42 external perimeter as this will give a better external precision compared to 0.48.

@igiannakas
Copy link
Contributor Author

0.42 external perimeter made some marginal difference, but the quality level is still worse than the inner-outer-inner mode:

Left: Inner outer inner
Middle: Middle outer inner - 0.48 extrusion width
Right: Middle outer inner - 0.42 extrusion width
F0454B4F-B373-4ED8-9E91-5953E27E0C2F_1_102_o

@igiannakas
Copy link
Contributor Author

In summary I have mixed feelings about this mode. In most regular printing scenarios, inner outer inner works best and gives the best external wall finish. Also overhang wise, it can easily achieve 45-50 degrees angles without much issue, especially if attention is paid to extrusion step over.

On the other hand, this setting is marginally better in terms of external wall quality compared to inner-outer mode, as there is one (or more) less internal perimeters deforming the external perimeter. It always is affected by the one neighbouring perimeter. This also theoretically means it can print better overhangs.

For me, its a mode that I will use on rare occasions. I always print with inner-outer-inner mode as most models that I print do not contain 50+ degree overhangs. And when they do they are at limited locations which can be addressed with careful support placement.

The rare models where this may work best are models of threads and also to print the Voron parts. That is because threads need specific external dimensions that are working best with inner-outer-inner mode but inner-outer-inner can on occasion lead to extrusion "detachment" from the wall.

Equally with Voron parts, the fixed 0.4mm extrusion width and 0.2 layer height doesn't allow for much step over meaning some parts suffer due to their steep overhangs.

In the above two situations, this mode may be useful.

I'll leave to the community to test further if there is interest in this mode.

@skuep
Copy link

skuep commented Mar 5, 2024

Well that confirms my findings, that the middle-outer-inner mode is a compromise between print quality and overhang issues.

Are you printing ABS by any chance? Even overhangs of 45° can get tough with outer-inner or inner-outer-inner, because you cannot just increase part cooling beyond a certain point due to warping issues.

Also for the Voron print settings, the perimeter width is forced to 0.4mm so you cannot adjust the stepover (EDIT: Oops, that is what you have already written). The improvement compared to inner-outer mode will be much more apparent, if you use the Voron 4-perimeter setting (or even more than that).

I am having a hard time finding the artifact (Linux) for the PR build, can you give me a hint?

@igiannakas
Copy link
Contributor Author

All artefacts are here: https://github.com/SoftFever/OrcaSlicer/actions/runs/8141514816

bottom of the page - you need to log in to GitHub to download.

@igiannakas
Copy link
Contributor Author

Well that confirms my findings, that the middle-outer-inner mode is a compromise between print quality and overhang issues.

Are you printing ABS by any chance? Even overhangs of 45° can get tough with outer-inner or inner-outer-inner, because you cannot just increase part cooling beyond a certain point due to warping issues.

Also for the Voron print settings, the perimeter width is forced to 0.4mm so you cannot adjust the stepover (EDIT: Oops, that is what you have already written). The improvement compared to inner-outer mode will be much more apparent, if you use the Voron 4-perimeter setting (or even more than that).

I am having a hard time finding the artifact (Linux) for the PR build, can you give me a hint?

Completely agree with you. Theoretically this wall ordering mode should reduce artefacting on external walls when printing with more than 2-3 perimeters as there is less material squishing the perimeter. Combined with the precise wall feature which increases the spacing between the first and second perimeter, it should give good smooth walls. However, the quality for me is still not 100% there. I was hoping that it would replace the inner-outer-inner mode for me but turns out that is not the case as still there is some slight deformation due to the first internal perimeter, even with precise wall on.

Agree that for the Voron parts specifically this could be a good use case to improve quality - its the ideal combination for this feature - thin extrusion widths, with large layer heights leading to small step over together with 4 perimeters leading to more squish.

It would be great if someone from the community did an AB test with Voron parts to test that - I've finished printing all of mine so done with ABS right now :D BTW, printed them all using inner-outer-inner with some limited exceptions and they worked great btw.

@skuep
Copy link

skuep commented Mar 6, 2024

bottom of the page - you need to log in to GitHub to download.

Okay, that was surprisingly hard to find :-)

I have done some more testing, this time with Precise Wall actually turned on for Inner-Outer mode (I never bothered to enable it before) and I have to admit, that there really is not much difference between Middle-Outer-Inner and the regular Inner-Outer mode anymore. I am curious, is there any downside to the precise wall feature? Do overhangs still perform good?

From left to right: Inner-Outer, Middle-Outer-Inner, Inner-Outer-Inner. It almost looks like Middle-Outer-Inner (No precise wall) loses against Inner-Outer (With precise wall).

IMG_20240306_071234

Material is ABS, printed on a Micron+ with a Vz-Hextrudort Extruder and Dragon SF hotend.

@igiannakas
Copy link
Contributor Author

igiannakas commented Mar 6, 2024

bottom of the page - you need to log in to GitHub to download.

Okay, that was surprisingly hard to find :-)

I have done some more testing, this time with Precise Wall actually turned on for Inner-Outer mode (I never bothered to enable it before) and I have to admit, that there really is not much difference between Middle-Outer-Inner and the regular Inner-Outer mode anymore. I am curious, is there any downside to the precise wall feature? Do overhangs still perform good?

From left to right: Inner-Outer, Middle-Outer-Inner, Inner-Outer-Inner. It almost looks like Middle-Outer-Inner (No precise wall) loses against Inner-Outer (With precise wall).

IMG_20240306_071234

Material is ABS, printed on a Micron+ with a Vz-Hextrudort Extruder and Dragon SF hotend.

As you didn’t enable precise wall for middle outer inner it will look worse for sure.

indeed, there is very little benefit from what I see but you’re not comparing apples to apples :)

Precise wall slightly increases the spacing between the middle extrusion and the wall to allow for more space for any extrusion deviations coming from the internal walls to go to without affecting the external perimeter too much. It doesn’t have really any downside print quality wise.

@skuep
Copy link

skuep commented Mar 6, 2024

As you didn’t enable precise wall for middle outer inner it will look worse for sure.

I was a bit thrown off by the tooltip saying it's for inner-outer only, but that may be currently outdated. Slicer was Classic in this case, but preview looked fine in middle-outer-inner mode.

indeed, there is very little benefit from what I see but you’re not comparing apples to apples :)

Precise wall slightly increases the spacing between the middle extrusion and the wall to allow for more space for any extrusion deviations coming from the internal walls to go to without affecting the external perimeter too much. It doesn’t have really any downside print quality wise.

I see, thanks. It looks to me a bit like, if your extrusion factor is reasonably well tuned, there is not much difference between one wall and three walls printed, before external perimeter is printed. At least with the additional "decoupling" that precise wall provides.

So in a sense, "precise wall" actually already achieves, what I set out to achieve with the proposed wall order mode. Without precise wall, the difference is larger (as shown by the images in the earlier pull request of mine). But precise wall may be a cleaner solution.

@igiannakas
Copy link
Contributor Author

Yeah I didn’t update all the tool tips yet - it’s draft to evaluate quality and whether it’s worth it as a mode. It may be beneficial if you could also run an Arachne test with precise wall on and the three modes to do a final comparison. Maybe with 4 walls too, to check whether that is a reasonable use case or not.

thank you for this 👌🏻

@skuep
Copy link

skuep commented Mar 6, 2024

Yeah I didn’t update all the tool tips yet - it’s draft to evaluate quality and whether it’s worth it as a mode. It may be beneficial if you could also run an Arachne test with precise wall on and the three modes to do a final comparison. Maybe with 4 walls too, to check whether that is a reasonable use case or not.

thank you for this 👌🏻

Yeah, happy to. I switched to Arachne however and the perimeter order looks different. Is it supposed to be 1, 3, 4, 2 (with 1 being innermost, 4 being external perimeter)?

Screenshot from 2024-03-06 12-39-36

@igiannakas
Copy link
Contributor Author

Yeah I didn’t update all the tool tips yet - it’s draft to evaluate quality and whether it’s worth it as a mode. It may be beneficial if you could also run an Arachne test with precise wall on and the three modes to do a final comparison. Maybe with 4 walls too, to check whether that is a reasonable use case or not.
thank you for this 👌🏻

Yeah, happy to. I switched to Arachne however and the perimeter order looks different. Is it supposed to be 1, 3, 4, 2 (with 1 being innermost, 4 being external perimeter)?

Screenshot from 2024-03-06 12-39-36

Yeap that is intentional - it prints inside out for overall better overhang performance and then swaps to print the two external perimeters then the final remaining one. Appreciate that is slightly different to the classic implementation; however it shouldn't create any downsides as the perimeters are still well spaced because of the middle perimeter printed last to prevent external impact from internal perimeters.

@zviratko
Copy link

zviratko commented Mar 6, 2024

Yeap that is intentional - it prints inside out for overall better overhang performance and then swaps to print the two external perimeters then the final remaining one. Appreciate that is slightly different to the classic implementation; however it shouldn't create any downsides as the perimeters are still well spaced because of the middle perimeter printed last to prevent external impact from internal perimeters.

I'm not completely sold on that - with more layers (for example 10), this "middle" (2nd outer) perimeter will get squished quite a lot and this will propagate the only way it can - upwards. That material still needs to go somewhere... Usually it ends as a blob on the nozzle (I printed lots of parts with PETG CF which tends to do this and with 10+ walls and I had to clean the nozzle for this exact reason during the print even with Inner-Outer where the filament should have a way to go).

@igiannakas
Copy link
Contributor Author

That can change if there is value in the mode. Currently it’s not certain whether there is any visual impact…

@skuep
Copy link

skuep commented Mar 6, 2024

Here you go, Arachne now, precise wall enabled. 4 perimeters 0.4mm width (Voron spec)

From left to right: Inner/Outer/Inner, Middle/Outer/Inner, Inner/Outer
Orcaslicer

From a surface quality standpoint (i.e. waviness), Inner/Outer/Inner is the best, Inner/Outer the worst and Middle/Outer/Inner is in between. You can see (probably flow rate) bulging at the bottom-right of the µ getting stronger from left-to-right (the more perimeters are printed prior to the external perimeter. Note that I print with 80mm/s internal perimeters and 50mm/s external perimeters. So could also be related to pressure advance.

@igiannakas
Copy link
Contributor Author

I've pushed a new commit to change the handling of wall ordering for Arachne. Now it does first internal, external, then the remaining internal perimeters outside in, to move the excess material towards the inside of the model.

Build files should be available soon here: https://github.com/SoftFever/OrcaSlicer/actions/runs/8176241198

@igiannakas
Copy link
Contributor Author

Here you go, Arachne now, precise wall enabled. 4 perimeters 0.4mm width (Voron spec)

From left to right: Inner/Outer/Inner, Middle/Outer/Inner, Inner/Outer Orcaslicer

From a surface quality standpoint (i.e. waviness), Inner/Outer/Inner is the best, Inner/Outer the worst and Middle/Outer/Inner is in between. You can see (probably flow rate) bulging at the bottom-right of the µ getting stronger from left-to-right (the more perimeters are printed prior to the external perimeter. Note that I print with 80mm/s internal perimeters and 50mm/s external perimeters. So could also be related to pressure advance.

OK I presume these are all also with precise wall enabled?

If so, it seems like there may be some benefit to this mode. Let's keep the PR alive until further community testing is done I suppose? Code wise for Arachne its there I believe. For Classic it needs further work to handle edge cases with scenarios where multiple islands (perimeter 1&2) are in the same ordered perimeters list.

Won't have time to look at the classic implementation for a while due to work, but Arachne should do well for now for testing.

@skuep
Copy link

skuep commented Mar 6, 2024

I've pushed a new commit to change the handling of wall ordering for Arachne. Now it does first internal, external, then the remaining internal perimeters outside in, to move the excess material towards the inside of the model.

Build files should be available soon here: https://github.com/SoftFever/OrcaSlicer/actions/runs/8176241198

Can confirm, thanks a bunch!

@skuep
Copy link

skuep commented Mar 6, 2024

I've pushed a new commit to change the handling of wall ordering for Arachne. Now it does first internal, external, then the remaining internal perimeters outside in, to move the excess material towards the inside of the model.
Build files should be available soon here: https://github.com/SoftFever/OrcaSlicer/actions/runs/8176241198

Can confirm, thanks a bunch!

Can you have a look at this model? In the first few layers, Arachne also seems to have some wall ordering problems..

back_cartesian-tpl.stl.zip
Screenshot from 2024-03-06 21-02-16

@SoftFever SoftFever added the Community testers wanted Looking for community testers and feedback label Apr 3, 2024
@StuSerious
Copy link

StuSerious commented Apr 16, 2024

hey there @igiannakas! thanks for the work, looks interesting!

here are some test results sliced on the Windows build artifact of this run (commit 4b63ff3)

hardware

  • BondTech CHT 0.5mm nozzle
  • SliceEngineering Mosquito Magnum hotend
  • BondTech LGx extruder

profile

NOTE: I know the profile is a bit weird, but this is a production machine so this is the baseline. I welcome any suggestion of speed, accel, PA, geometry, whatever. looking forward to do more testing on this.

Outer Wall Speed: 100mm/s | Outer Wall Accel = 4000mm/s²
Inner Wall Speed: 250mm/s | Inner Wall Accel = 6000mm/s²
Pressure Advance is tuned for much greater speeds, but is present.
Precise Wall is enabled as per your original comment.


for the results I suggest clicking on the pics to see the full res image

results: angle 1

inner-outer inner-outer-inner middle-outer-inner
A1-IO A1-IOI A1-MOI

results: angle 2

inner-outer inner-outer-inner middle-outer-inner
A2-IO A2-IOI A2-MOI

results: angle 3

inner-outer inner-outer-inner middle-outer-inner
A3-IO A3-IOI A3-MOI

conclusions

pictures do not really show the details as much as i wanted to. (I should probably try more directional lighting, I have a lightbox for product pictures but that really drowns out the imperfections)

to me it looks like inner-outer-inner is the winner when it comes to outer shell evenness/quality.
overhangs are probably a mix between inner-outer and inner-outer-inner

on paper I had expected middle-outer-inner to come out ahead as a great middle ground, but from my limited testing it seems to yield unexpected results.
I think this could be from bad handling of the profile on my end.. I'll wait for feedback from this thread to get a second pair of eyes on this.

I hope this has been useful, open to a lot more testing and suggestions
cheers!


NOTE: I've had some issues getting the Windows Portable and Linux builds to work reliably (or at all) but this is most likely due to something off on my side or with 2.1.0-dev, I haven't had time to dig deeper and look at logs, have you had any issues with startup/crashing?

@igiannakas
Copy link
Contributor Author

hey there @igiannakas! thanks for the work, looks interesting!

here are some test results sliced on the Windows build artifact of this run (commit 4b63ff3)

hardware

  • BondTech CHT 0.5mm nozzle
  • SliceEngineering Mosquito Magnum hotend
  • BondTech LGx extruder

profile

NOTE: I know the profile is a bit weird, but this is a production machine so this is the baseline. I welcome any suggestion of speed, accel, PA, geometry, whatever. looking forward to do more testing on this.

Outer Wall Speed: 100mm/s | Outer Wall Accel = 4000mm/s² Inner Wall Speed: 250mm/s | Inner Wall Accel = 6000mm/s² Pressure Advance is tuned for much greater speeds, but is present. Precise Wall is enabled as per your original comment.

for the results I suggest clicking on the pics to see the full res image

results: angle 1

inner-outer inner-outer-inner middle-outer-inner
A1-IO A1-IOI A1-MOI

results: angle 2

inner-outer inner-outer-inner middle-outer-inner
A2-IO A2-IOI A2-MOI

results: angle 3

inner-outer inner-outer-inner middle-outer-inner
A3-IO A3-IOI A3-MOI

conclusions

pictures do not really show the details as much as i wanted to. (I should probably try more directional lighting, I have a lightbox for product pictures but that really drowns out the imperfections)

to me it looks like inner-outer-inner is the winner when it comes to outer shell evenness/quality. overhangs are probably a mix between inner-outer and inner-outer-inner

on paper I had expected middle-outer-inner to come out ahead as a great middle ground, but from my limited testing it seems to yield unexpected results. I think this could be from bad handling of the profile on my end.. I'll wait for feedback from this thread to get a second pair of eyes on this.

I hope this has been useful, open to a lot more testing and suggestions cheers!

NOTE: I've had some issues getting the Windows Portable and Linux builds to work reliably (or at all) but this is most likely due to something off on my side or with 2.1.0-dev, I haven't had time to dig deeper and look at logs, have you had any issues with startup/crashing?

Thank you for this! Excellent test.

I’ve personally used this profile a couple of times on my Voron parts. It helps a bit there, marginally, as they are printed with 4 walls which causes more bulging than 3 walls when using inner outer mode. That being said, it’s an experimental mode, with a very very limited use case (4+ perimeters) to show any benefit.

would be great to know how many walls did you use in the prints above?

@StuSerious
Copy link

would be great to know how many walls did you use in the prints above?

ah! there goes the mistery then!

I am printing with just 3 perimeters!

will retest with 4, do you have any more suggestions? maybe a different geometry to make the benefits more visible?

@zviratko
Copy link

The biggest benefit is if you print with large number of walls. The only way to get a really exact print with 10 wall sis outer-first, which has very poor overhangs.
What you see is going to depend heavily on how well tuned your printer is and what your settings are. I print sturdy parts with 1.0 extrusion multiplier (the default for most filaments is 0.95-0.98) which makes the problem worse.

@StuSerious
Copy link

@zviratko thanks for the tip! I suspected this ordering would also be beneficial to lower numbers of perimeters, but was in fact wrong.

I will retest with more perimeters on a more sloped geometry, maybe with some accuracy measurements and report back here!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Community testers wanted Looking for community testers and feedback
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Solving the problem with large overhangs during Inner/Outer/Inner
5 participants