Middle outer inner wall ordering mode (Draft)
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:
- Test overhang performance.
- Test wall extrusion consistency
- 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.
The below were taken in the worse angle possible and using a macro lens:
Inner-Outer-Inner:
Middle-Outer-Inner:
Inner-Outer:
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.
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
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
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.
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
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.
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?
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.
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.
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).
Material is ABS, printed on a Micron+ with a Vz-Hextrudort Extruder and Dragon SF hotend.
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).
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.
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.
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 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)?
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)?
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.
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).
That can change if there is value in the mode. Currently it’s not certain whether there is any visual impact…
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
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.
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
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
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.
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!
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..
Could you attach the project file too please?
Thx! I’ll look into it in a few days probably as my build environment went a bit wonky today after merging the latest changes 😂
OK I know why that is the case. If you see even in the inner-outer mode the perimeter printing sequence is a bit funny. So unless I bring forward all extrusions in the right wall order before I reorder them for the print sequence this will continue. the issue is happening because we are using the outer-inner mode and these perimeters belong to different islands. The outer perimeter you see printed is printed on its own because it has no internal perimeters attached to it in the same island. The inner perimeters are allocated against the hexagons.
The can be fixed, but it will cause wall ordering issues further down the line as the toolhead will jump around printing all perimeter 4's, then 2's then 1's then 3's without taking into account the current proximity algorithm which sometimes doesnt work that well... So for this case it's something we have to live with I'm afraid.
I see... Is this maybe detectible so that you could move "lone" external perimeters to the end of the total perimeter list? This would emulate a fall back to inner-outer essentially, whereas now, it behaves like outer-inner.
Just an idea, thanks for checking it so quickly.
I see... Is this maybe detectible so that you could move "lone" external perimeters to the end of the total perimeter list? This would emulate a fall back to inner-outer essentially, whereas now, it behaves like outer-inner.
Just an idea, thanks for checking it so quickly.
Possibly a good idea this. I’ll check it out. Basically scan the perimeters and search for any index 0 perimeters that don’t have an index 1 perimeter before them in the array. I’ll have to take a look in the arrays when I can get my build environment running again, as the permutations get way too complex way too fast :)
I already bring forward any index 1 perimeters to be printed before all index 2 in the same layer which I thought would cover this scenario, but sounds like I need to scan and bring forward any index 0 perimeters before index 1. I’ll see…
hey there @igiannakas! thanks for the work, looks interesting!
here are some test results sliced on the Windows build artifact of this run (commit https://github.com/SoftFever/OrcaSlicer/pull/4333/commits/4b63ff37ac992ebee504692ba1b8fef712c447d1)
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 |
|---|---|---|
results: angle 2
inner-outer |
inner-outer-inner |
middle-outer-inner |
|---|---|---|
results: angle 3
inner-outer |
inner-outer-inner |
middle-outer-inner |
|---|---|---|
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?
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-outerinner-outer-innermiddle-outer-inner![]()
![]()
results: angle 2
inner-outerinner-outer-innermiddle-outer-inner![]()
![]()
results: angle 3
inner-outerinner-outer-innermiddle-outer-inner![]()
![]()
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-inneris the winner when it comes to outer shell evenness/quality. overhangs are probably a mix betweeninner-outerandinner-outer-inneron paper I had expected
middle-outer-innerto 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?
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?
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.





