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

New Outer outer inner wall sequence combining good overhang performance (from inner-outer) with print quality (from outer-inner) #3809

Closed
wants to merge 4 commits into from

Conversation

skuep
Copy link

@skuep skuep commented Jan 23, 2024

There have been some recent discussions in this (old and closed) issue:
#468

Long story short is, that this new wall order is supposed to achieve both good print quality of the outer walls (as is the case with outer-infill wall sequence) and still have reasonable overhang performance.

This is achieved by printing the second-most outer wall first, then the outer wall and then all remaining perimeters from outside to inside.

I have done some test prints and it works quite well. See the issue for more details. InnerOuter-Outer-Inner is referring to the new proposed wall sequence. It has similar quality to Outer-Inner (Lighting is purposely exaggerating the imperfections). But from what I can tell, overhang work as good as Inner/Outer (even slightly better at the root of the overhang, where there is a gap in the Inner-Outer mode, presumably because there is a bit too much material squishing the wall to the outside).

Wall-Order-1
Wall-Order-2

Note that I couldn't exactly figure out how to produce all the .po translation files. Any pointers are welcome.

Also, I couldn't figure out how to implement this for Arachne, without having it crash for an unknown reason (see issue above). So until now, this is classic mode only.

Edit: Also I have not tested this with wall count < 4.. I think it will probably break if you go below 2. Will test this in the next day. For now it would be good to have a binary for others to test this.

…er/Inner mode, but first and second external perimeters are swapped. This improves overhang performance at the cost of a slight decrease in print quality
@igiannakas
Copy link
Contributor

The benefit to inner outer inner is that you print the outer perimeter with no internal perimeter to squish on, making it hence more accurate and with less external wall artefacts.

would be awesome to see a comparison with top down lighting to the external wall quality in this mode.

@skuep
Copy link
Author

skuep commented Jan 24, 2024

The benefit to inner outer inner is that you print the outer perimeter with no internal perimeter to squish on, making it hence more accurate and with less external wall artefacts.

would be awesome to see a comparison with top down lighting to the external wall quality in this mode.

If I understand you correctly, exactly this is shown on my photos above (and in the linked issue). I used outer-inner and inner-outer-inner interchangibly, because in my setup they produce essentially the same outside wall quality.

The downside to inner-outer-inner is, that it doesn't perform well with overhangs (with ABS, even 45° overhangs can turn out a bit ugly (as seen above) because you don't have unlimited cooling available due to warping). My proposal has the best of both worlds. The negative effect on the wall quality is barely noticable, because only one inner wall is printed, before the outside wall is.

@zviratko
Copy link

I am doing some testing
Project file is attached (rename to .3mf)

This is the first plate, printed on my X1C using default settings and speeds in PETG except I bumped extrusion multiplier from the default 0.95 to 1.0 in hopes it exacerbates the effects (and I think it does)

Cones use 10 walls.

Surface quality is virtually identical between the new Outer-Outer-Inner and the Outer-Inner wall orders.
The second best is the Inner-Outer (current default) wall order.
The worst is the Inner-Outer-Inner (sandwich mode) wall order. This one had to use the Arachne engine as it didn't work with Classic for me. Not sure if that expected or normal, I don't use this mode.
I'm not sure why Inner-Outer-Inner is the worst one, but my guess is the last (2nd outermost) perimeter pushes and deforms the outer wall randomly when it is somewhat cooled down, while with Inner-Outer everything is still hot and thus becomes smoother(? no idea) . Either that, or Arachne screwed something up.

Comments welcome. So far it looks very good to me.
I am going to do the overhangs (last plate) next.

IMG_2725
wallordertest.zip

@zviratko
Copy link

Few more photos for your viewing pleasure, just because I have them.
IMG_2724
IMG_2721
IMG_2723
IMG_2722

@zviratko
Copy link

And there is the overhang performance.
I didn't include the sandwich mode as I think it's pointless (it's going to be the same as Outer-Inner), but we should probably include it if reproducing.
And the unlabeled sample is Outer-Inner, sorry about that.

I would say that the new mode is much better than Inner-Outer, but to my great surprise Outer-Inner looked much better up to a limit (looking at what the slicer did, I think we could disregard >70º for all the samples, it's always going to be horrible with this layer height).

IMG_2729
IMG_2730
IMG_2727
IMG_2728

@zviratko
Copy link

Oh, and I just noticed I didn't have Pressure Advance set for PETG slot after printer reboot. Not sure if that's bad, as that will exacerbate any inaccuracy again.

@skuep
Copy link
Author

skuep commented Jan 25, 2024

Nice, thanks! What is the wall order for which sample for the overhang test? Also it looks a bit like not enough cooling but that's not important. Did you check the correct wall order for the overhang test, just to make sure?

@zviratko
Copy link

Nice, thanks! What is the wall order for which sample for the overhang test? Also it looks a bit like not enough cooling but that's not important. Did you check the correct wall order for the overhang test, just to make sure?

Yes, I checked everything. But I encourage you to repeat my test, either by using the project file I attached or your own.

I2O = Inner-to-Outer = Inner-Outer
OI2O2I - OuterInner-Outer-Inner = Outer-Outer-Inner (I think Outer-Outer-Inner is confusing)
The unlabeled one is "O2I" - Outer-Inner, I didn't attach the text to it properly.

It was printed on default PETG settings but there was probably not enough layer time to cool. I don't think it matters, moreso I believe that using such worst case (no pressure advance, bordeline cooling, slight overextrusion) helps illustrate why the new mode is awesome :-)

@skuep
Copy link
Author

skuep commented Jan 27, 2024

I have had some more time to play around and I simplified the testing expression where the perimeters are being swapped. So far it works quite well, even with 1, 2 oder 3 perimeter lines.
I noticed that on some complex shapes, where the perimeter of one loop is also the perimeter of another loop, this method doesn't really work anymore. I think for this to be perfect you would need to reorder some chunks in the entity list. That is however not on my paygrade.

I really like this mode and I printed quite some Micron (Voron stuff) parts now with this new wall order. Haven't noticed any downsides so far? Unfortunately I am having a hard time convincing people why this is nice, to get some momentum behind this so it might get the OrcaSlicer's maintainers attention.

@igiannakas
Copy link
Contributor

I have had some more time to play around and I simplified the testing expression where the perimeters are being swapped. So far it works quite well, even with 1, 2 oder 3 perimeter lines. I noticed that on some complex shapes, where the perimeter of one loop is also the perimeter of another loop, this method doesn't really work anymore. I think for this to be perfect you would need to reorder some chunks in the entity list. That is however not on my paygrade.

I really like this mode and I printed quite some Micron (Voron stuff) parts now with this new wall order. Haven't noticed any downsides so far? Unfortunately I am having a hard time convincing people why this is nice, to get some momentum behind this so it might get the OrcaSlicer's maintainers attention.

I'll do some testing on it but I'm not convinced on how this can give equivalent external wall finish compared to outer wall first or inner-outer-inner as the principle is that laying a perimeter down first without any neighbouring ones gives the most accurate result. Printing in this mode is basically like printing with 2 walls and then printing the rest of the perimeters, so the surface quality to expect would be identical to a 2 wall finish.

Regarding the re-ordering, I redid the inner-outer-inner mode in Arachne - basically you need to create an array with all the perimeters and then order them in the right way based on your key principles. Iterate through the array and order. Swaping works for straightforward scenarios but as you've found out it doesnt when you're dealing with multiple islands with varying perimeter counts on each.

I'll do some print tests and if the results are convincing I can help making this a bit more complete.

@skuep
Copy link
Author

skuep commented Jan 27, 2024

I'll do some testing on it but I'm not convinced on how this can give equivalent external wall finish compared to outer wall first or inner-outer-inner as the principle is that laying a perimeter down first without any neighbouring ones gives the most accurate result.

It's not and it's not supposed to and in fact that is also what my photographs above show! You will get never as good as external-perimeter-first. The whole purpose of the new mode is to be (vastly) better quality than the inner-outer (default) mode, without really any downside.

@zviratko
Copy link

Printing in this mode is basically like printing with 2 walls and then printing the rest of the perimeters, so the surface quality to expect would be identical to a 2 wall finish.

As metioned by @skuep - it's not an "external first" replacement, but if you have an object that needs a high amount of walls then the precision and quality suffers a lot with any mode except "external first" (or maybe even with that one as it will still get deformed by excess material when the last perimeter is laid) and that one doesn't like overhangs at all. I think it will have great benefits for anyone printing with 3 walls or more and will be at worst just as good as inner-outer.

Just give it a try and see.

P.S.I still have no idea what the current sandwich mode is supposed to achieve if not what we're trying to do here, what benefit does it have over external first? Nicer internal overhangs?

@igiannakas
Copy link
Contributor

I'll do some testing on it but I'm not convinced on how this can give equivalent external wall finish compared to outer wall first or inner-outer-inner as the principle is that laying a perimeter down first without any neighbouring ones gives the most accurate result.

It's not and it's not supposed to and in fact that is also what my photographs above show! You will get never as good as external-perimeter-first. The whole purpose of the new mode is to be (vastly) better quality than the inner-outer (default) mode, without really any downside.

That I can see - as you only have one wall to push out the external perimeter theoretically the external wall artefacts should be reduced. BTW a better name for the mode may be middle-outer-inner as this is what it’s doing in effect - printing the first internal, then the external, then the rest of the internals.

I’ll give it a test at some point during the week and see how it gets along.

@skuep
Copy link
Author

skuep commented Jan 27, 2024

Regarding the re-ordering, I redid the inner-outer-inner mode in Arachne - basically you need to create an array with all the perimeters and then order them in the right way based on your key principles. Iterate through the array and order. Swaping works for straightforward scenarios but as you've found out it doesnt when you're dealing with multiple islands with varying perimeter counts on each.

Yeah, I closely followed this approach. I talked about it in the linked issue, see this branch here:
7c27f9f
I uncommented all the debug output and the generated new order looks perfectly fine, but still OrcaSlicer just crashes.

@igiannakas
Copy link
Contributor

igiannakas commented Jan 27, 2024

Printing in this mode is basically like printing with 2 walls and then printing the rest of the perimeters, so the surface quality to expect would be identical to a 2 wall finish.

As metioned by @skuep - it's not an "external first" replacement, but if you have an object that needs a high amount of walls then the precision and quality suffers a lot with any mode except "external first" (or maybe even with that one as it will still get deformed by excess material when the last perimeter is laid) and that one doesn't like overhangs at all. I think it will have great benefits for anyone printing with 3 walls or more and will be at worst just as good as inner-outer.

Just give it a try and see.

P.S.I still have no idea what the current sandwich mode is supposed to achieve if not what we're trying to do here, what benefit does it have over external first? Nicer internal overhangs?

The inner outer inner mode gives the best of outer wall first without the typical seam issues you get with outer wall first. If you print with outer wall first you’ll notice that the seams are a bit inconsistent. That is because when you deretract after a long move your nozzle doesn’t deliver exactly the amount of material needed to achieve the exact flow it needs, even with perfectly tuned PA. This results in slight blobs and inconsistencies in the start of the external perimeter which can extend for a while till the nozzle pressure equalises.

by printing an internal perimeter first the theory is that the nozzle is primed and ready to go for the external ones, so you get a bit better surface finish than outer perimeter first.

sandwich mode is meant to be an improved version of that mode for that reason. It still achieves all the benefits (precision, outer wall quality as there is no perimeter pushing it out) but without the downside of potentially inconsistent seam starts.

it also gives slightly better overhangs than outer first as you at worst case have only one perimeter that is unsupported instead of all of them.

@igiannakas
Copy link
Contributor

Regarding the re-ordering, I redid the inner-outer-inner mode in Arachne - basically you need to create an array with all the perimeters and then order them in the right way based on your key principles. Iterate through the array and order. Swaping works for straightforward scenarios but as you've found out it doesnt when you're dealing with multiple islands with varying perimeter counts on each.

Yeah, I closely followed this approach. I talked about it in the linked issue, see this branch here: 7c27f9f I uncommented all the debug output and the generated new order looks perfectly fine, but still OrcaSlicer just crashes.

This usually happens when you go out of bounds on an array. The logic allocating the array sizes is a bit “complex” so you probably just missed the right allocation somewhere.

@skuep
Copy link
Author

skuep commented Jan 27, 2024

Printing in this mode is basically like printing with 2 walls and then printing the rest of the perimeters, so the surface quality to expect would be identical to a 2 wall finish.

As metioned by @skuep - it's not an "external first" replacement, but if you have an object that needs a high amount of walls then the precision and quality suffers a lot with any mode except "external first" (or maybe even with that one as it will still get deformed by excess material when the last perimeter is laid) and that one doesn't like overhangs at all. I think it will have great benefits for anyone printing with 3 walls or more and will be at worst just as good as inner-outer.

That's it exactly. And btw, I printed the parts on the photograph with 4 perimeters (Voron Standard) and you can already see a big difference.

That I can see - as you only have one wall to push out the external perimeter theoretically the external wall artefacts should be reduced. BTW a better name for the mode may be middle-outer-inner as this is what it’s doing in effect - printing the first internal, then the external, then the rest of the internals.

Yep! Yeah I'm fine with the name. Was struggling myself to find something suitable :-)

The inner outer inner mode gives the best of outer wall first without the typical seam issues you get with outer wall first. If you print with outer wall first you’ll notice that the seams are a bit inconsistent.

Just to be a bit cheeky, I think this problem is also solved by my proposed middle-outer-inner order, isn't it? ;-) I really don't have this issue in my setup, maybe non-direct extruder setups do, so I cannot really test it.

@igiannakas
Copy link
Contributor

Yes it does solve the seam issue too, as does internal first- only the outer first suffers from it.

@zviratko
Copy link

@skuep at least on macOS it didn't crash with Arachne, it just behaved like inner-outer if I remember correctly (unless the published action build doesn't actually use it with Arachne at all)

@igiannakas if this works as well as we think it does then it could just replace the current inner-outer mode, it shouldn't have any downsides(?). I am still not sold on sandwich mode being any better than i unless one walls makes such a huge difference to precision. I am seeing fusing and mechanical problems in my prints only on something that has >3 walls or so.

@skuep
Copy link
Author

skuep commented Jan 27, 2024

@skuep at least on macOS it didn't crash with Arachne, it just behaved like inner-outer if I remember correctly (unless the published action build doesn't actually use it with Arachne at all)

Yeah, it's not implemented in this branch. But I might do that actually for you all to have a look at it

@igiannakas if this works as well as we think it does then it could just replace the current inner-outer mode, it shouldn't have any downsides(?). I am still not sold on sandwich mode being any better than i unless one walls makes such a huge difference to precision. I am seeing fusing and mechanical problems in my prints only on something that has >3 walls or so.

One downside of middle-outer-inner mode, the way it is implemented right now is that it is essentially still based on outer-inner mode. That means, that, if you have complex geometry and it cannot easily swap the external perimeter with the first inner perimeter, because the inner perimeter line is shared among multiple external perimeter, it will fall back to outer-inner mode. I tried working around that to fall back to inner-outer mode, but that was too complicated in my head.

Ideally the algorithm should detect this, but this is too complex for me, since you have to know the data model quite well for this.

@zviratko
Copy link

What I meant was after it is correctly implemented. At the moment I consider this just a proof-of-concept, it needs more love and testing before the rest of the world uses it. I am hoping we persuade some of the current devs to implement it properly.

btw do you have some images of your Voron parts? You mentioned them but I see none here. We need to sell it :)

@igiannakas
Copy link
Contributor

@skuep at least on macOS it didn't crash with Arachne, it just behaved like inner-outer if I remember correctly (unless the published action build doesn't actually use it with Arachne at all)

Yeah, it's not implemented in this branch. But I might do that actually for you all to have a look at it

@igiannakas if this works as well as we think it does then it could just replace the current inner-outer mode, it shouldn't have any downsides(?). I am still not sold on sandwich mode being any better than i unless one walls makes such a huge difference to precision. I am seeing fusing and mechanical problems in my prints only on something that has >3 walls or so.

One downside of middle-outer-inner mode, the way it is implemented right now is that it is essentially still based on outer-inner mode. That means, that, if you have complex geometry and it cannot easily swap the external perimeter with the first inner perimeter, because the inner perimeter line is shared among multiple external perimeter, it will fall back to outer-inner mode. I tried working around that to fall back to inner-outer mode, but that was too complicated in my head.

Ideally the algorithm should detect this, but this is too complex for me, since you have to know the data model quite well for this.

The new mode should be based on inner-outer with the reordering happening one perimeter inset 2 instead of inset 1.

@skuep
Copy link
Author

skuep commented Jan 27, 2024

@skuep at least on macOS it didn't crash with Arachne, it just behaved like inner-outer if I remember correctly (unless the published action build doesn't actually use it with Arachne at all)

Yeah, it's not implemented in this branch. But I might do that actually for you all to have a look at it

@igiannakas if this works as well as we think it does then it could just replace the current inner-outer mode, it shouldn't have any downsides(?). I am still not sold on sandwich mode being any better than i unless one walls makes such a huge difference to precision. I am seeing fusing and mechanical problems in my prints only on something that has >3 walls or so.

One downside of middle-outer-inner mode, the way it is implemented right now is that it is essentially still based on outer-inner mode. That means, that, if you have complex geometry and it cannot easily swap the external perimeter with the first inner perimeter, because the inner perimeter line is shared among multiple external perimeter, it will fall back to outer-inner mode. I tried working around that to fall back to inner-outer mode, but that was too complicated in my head.
Ideally the algorithm should detect this, but this is too complex for me, since you have to know the data model quite well for this.

The new mode should be based on inner-outer with the reordering happening one perimeter inset 2 instead of inset 1.

I would like that, but the walls are printed outer-inner anyway (just the first two are flipped). So if you base it on inner-outer you would need to selectively flip the inner perimeters from inner-outer to outer-inner... That sounds very elaborated :-)

@igiannakas
Copy link
Contributor

@skuep at least on macOS it didn't crash with Arachne, it just behaved like inner-outer if I remember correctly (unless the published action build doesn't actually use it with Arachne at all)

Yeah, it's not implemented in this branch. But I might do that actually for you all to have a look at it

@igiannakas if this works as well as we think it does then it could just replace the current inner-outer mode, it shouldn't have any downsides(?). I am still not sold on sandwich mode being any better than i unless one walls makes such a huge difference to precision. I am seeing fusing and mechanical problems in my prints only on something that has >3 walls or so.

One downside of middle-outer-inner mode, the way it is implemented right now is that it is essentially still based on outer-inner mode. That means, that, if you have complex geometry and it cannot easily swap the external perimeter with the first inner perimeter, because the inner perimeter line is shared among multiple external perimeter, it will fall back to outer-inner mode. I tried working around that to fall back to inner-outer mode, but that was too complicated in my head.
Ideally the algorithm should detect this, but this is too complex for me, since you have to know the data model quite well for this.

The new mode should be based on inner-outer with the reordering happening one perimeter inset 2 instead of inset 1.

I would like that, but the walls are printed outer-inner anyway. So if you base it on inner-outer you would need to selectively flip the inner perimeters... That sounds very elaborated :-)

Not exactly - the mode should work like this:
Perimeter:
1-2-3-4-5-6

Print order:
6-5-4-2-1-3

This is similar to how inner outer inner works on Arachne:
6-5-4-3-1-2

@skuep
Copy link
Author

skuep commented Jan 27, 2024

I would like that, but the walls are printed outer-inner anyway. So if you base it on inner-outer you would need to selectively flip the inner perimeters... That sounds very elaborated :-)

Not exactly - the mode should work like this: Perimeter: 1-2-3-4-5-6

Print order: 6-5-4-2-1-3

This is similar to how inner outer inner works on Arachne: 6-5-4-3-1-2

Ah, yeah, that's what I refrained from implementing, because perimeter 3 is now responsible for equalizing the accumulated flow inaccuracies from all other perimeters. I would much rather have the last printed perimeter be the one closest to the infill, because the accumulated flow error does not produce any artifacts there. It might bulge up over time and the neighbouring layers above might get shifted, resulting again in wall artefacts.

But I haven't tested this.

@Wulfsta
Copy link

Wulfsta commented Jan 27, 2024

@skuep at least on macOS it didn't crash with Arachne, it just behaved like inner-outer if I remember correctly (unless the published action build doesn't actually use it with Arachne at all)

Yeah, it's not implemented in this branch. But I might do that actually for you all to have a look at it

@igiannakas if this works as well as we think it does then it could just replace the current inner-outer mode, it shouldn't have any downsides(?). I am still not sold on sandwich mode being any better than i unless one walls makes such a huge difference to precision. I am seeing fusing and mechanical problems in my prints only on something that has >3 walls or so.

One downside of middle-outer-inner mode, the way it is implemented right now is that it is essentially still based on outer-inner mode. That means, that, if you have complex geometry and it cannot easily swap the external perimeter with the first inner perimeter, because the inner perimeter line is shared among multiple external perimeter, it will fall back to outer-inner mode. I tried working around that to fall back to inner-outer mode, but that was too complicated in my head.
Ideally the algorithm should detect this, but this is too complex for me, since you have to know the data model quite well for this.

The new mode should be based on inner-outer with the reordering happening one perimeter inset 2 instead of inset 1.

I would like that, but the walls are printed outer-inner anyway. So if you base it on inner-outer you would need to selectively flip the inner perimeters... That sounds very elaborated :-)

Not exactly - the mode should work like this: Perimeter: 1-2-3-4-5-6

Print order: 6-5-4-2-1-3

This is similar to how inner outer inner works on Arachne: 6-5-4-3-1-2

Referring back to my comments in the thread that spawned this PR, I would prefer to see:
6-2-1-3-4-5

The idea being that if the order starts with 2-1 then the error that sandwich mode fixes could contribute error to the outer perimeter, and that any accumulated error moves from the second-most outer perimeter to the inner ones. I don’t anticipate much of an issue if we deposit a little extra plastic on the second innermost perimeter. Of course, this means that this mode is the same as inner-outer for models with three or less perimeters.

@zviratko
Copy link

If not extremely difficult to implement, we should try to push whatever excess material there is to the infill where it should at most make the infill anchor stronger, else the error could accumulate in the middle and start pushing everything else. Where will this excess material go? Up, pushing the perimeters above next to it further apart, then it happens again and the next layer gets a bit more.... Will this be perceptible or even measurable? I don't know. Is this even a real problem when the extrusion is not rectangular but probably always has little gaps in the corners? And does it? And will it always? We might get a rotating rectangular nozzle on Bambu Lab X12S in a few years.. :)

So I think the order should be 2-3-4-5-6-1, but 6-2-1-3-4-5 sounds good enough. Or are you worried about long travel with too many walls like what the sandwich mode is trying to solve? My solution for that would be to implement some sort of under-extrusion for this "middle" line (middle perimeter extrusion ratio) - this could work and should be very simple to calibrate with the flow calibration squares set to a high number of walls, except it could make the print somewhat weaker in theory.

@igiannakas
Copy link
Contributor

I don’t think printing 6 first then 2-1 makes any sense - what is the benefit?

I get the push the inaccuracies inside, but practically I doubt it would make any difference. You’ll have slight over extrusion somewhere, question is where do you want it :) if the em is calibrated properly we’re not talking huge amounts in any case.

However going outer in you’re risking having perimeter 3 being unsupported which would create an error over 3 perimeters instead of 2 if your overhang is steep enough.

In any case they are all straightforward to do ; just need to apply a sorting algorithm to the array and do some test prints.

@zviratko
Copy link

I don’t think printing 6 first then 2-1 makes any sense - what is the benefit?

That's what @Wulfsta suggested and I was thinking about the long travel moves and got confused. It makes no sense, sorry
Also you might want nice inner overhangs when printing without infill. Something like a hollow sphere could get messed up badly.

However going outer in you’re risking having perimeter 3 being unsupported which would create an error over 3 perimeters instead of 2 if your overhang is steep enough.

Can you clarify? What do you mean unsupported?

@Wulfsta
Copy link

Wulfsta commented Jan 27, 2024

Am I misunderstanding, is the point of sandwich mode to eliminate blobs at the outer seam? If it is, then why wouldn’t we try to eliminate the contribution this blob would have on the outer perimeter by removing it, given that we are trying to maximize overhang performance and minimize outer perimeter error? I genuinely might be misunderstanding, but this is what my proposal was based on.

@igiannakas
Copy link
Contributor

Am I misunderstanding, is the point of sandwich mode to eliminate blobs at the outer seam? If it is, then why wouldn’t we try to eliminate the contribution this blob would have on the outer perimeter by removing it, given that we are trying to maximize overhang performance and minimize outer perimeter error? I genuinely might be misunderstanding, but this is what my proposal was based on.

We can’t remove the blob or the extrusion variances I’m afraid - it’s a factor of simply the mechanical tolerances of the printers. When they start extruding even with perfectly tuned PA and retraction, there is some deviation from the ideal volume till the extruder and nozzle goes in a stable-ish state. So the sandwich mode aims to fix this by extruding the internal perimeter first while keeping the precision of having an external perimeter printed without interference from an internal one that may push it out.

I think the new mode may have merit when better overhangs are needed and it will be an in between quality setting between sandwich and internal first especially with precise wall enabled, which increases the spacing between the first internal and the external perimeter, giving it more space to print without interference.

@igiannakas
Copy link
Contributor

I don’t think printing 6 first then 2-1 makes any sense - what is the benefit?

That's what @Wulfsta suggested and I was thinking about the long travel moves and got confused. It makes no sense, sorry Also you might want nice inner overhangs when printing without infill. Something like a hollow sphere could get messed up badly.

However going outer in you’re risking having perimeter 3 being unsupported which would create an error over 3 perimeters instead of 2 if your overhang is steep enough.

Can you clarify? What do you mean unsupported?

If you have a steep overhang, say the arch of the benchy door, you have 2-3 perimeters printing unsupported, not just the external one. But this is a rare occurance.

@Wulfsta
Copy link

Wulfsta commented Jan 27, 2024

Am I misunderstanding, is the point of sandwich mode to eliminate blobs at the outer seam? If it is, then why wouldn’t we try to eliminate the contribution this blob would have on the outer perimeter by removing it, given that we are trying to maximize overhang performance and minimize outer perimeter error? I genuinely might be misunderstanding, but this is what my proposal was based on.

We can’t remove the blob or the extrusion variances I’m afraid - it’s a factor of simply the mechanical tolerances of the printers. When they start extruding even with perfectly tuned PA and retraction, there is some deviation from the ideal volume till the extruder and nozzle goes in a stable-ish state. So the sandwich mode aims to fix this by extruding the internal perimeter first while keeping the precision of having an external perimeter printed without interference from an internal one that may push it out.

I think the new mode may have merit when better overhangs are needed and it will be an in between quality setting between sandwich and internal first especially with precise wall enabled, which increases the spacing between the first internal and the external perimeter, giving it more space to print without interference.

Yes, by “remove the blob” I meant print the inner perimeter first in the new mode, such that it does not show up on the second-most outer perimeter and contribute error to the outer perimeter. 🙂

It would actually be nice to have both a middle-outer-inner and an inner-middle-outer-inner implemented so we could evaluate the impact to seams in this case.

@skuep
Copy link
Author

skuep commented Jan 28, 2024

Okay, that's a lot of information now 😅

What kind of blobs after travel are we talking about that they still have an effect in the neighbouring layer? Small inconsistencies in extrusion leading to an inconsistent seam, that's okay and I think it will be successfully hidden, even when printing 2-1-... But if you want to hide actual blobs of filament after long travel, you need to use sandwich mode then (I don't think this is normal behavior of a tuned printer).

Regarding 6-2-1-3-4-5, I think this is way too complex. You have to imagine that parts are often complex shapes and not only a series of perimeters. Multiple islands may exist with outer perimeters that have multiple adjacent loops of inner perimeters. I don't see any easy way to implement such a pattern to this complex part.

We can try 2-3-4-5-6-1, although this is, again, based on outer-inner (which was undesired above). Or we can try 6-5-4-2-1-3, which I suspect will not lead to the optimal outer surface finish (under the given circumstances with good overhang performance).

In my mind, I would like to still have 2-1-3-4-5-6, in such a way that at least the outer two perimeters are always inner-outer mode. I.e. even in a complex model, there should be a neighbouring perimeter, before the external perimeter is printed. All remaining layers should be outer-inner mode to preserve optimum wall quality.

So in essence, this mode is both, inner-outer (for the first two perimeters) and then outer-inner for the remaining perimeters (which in my case is mostly also 2, because I essentially only use the voron print settings).

However I suspect that this requires quite complex re-ordering of perimeters across multiple islands. And I am not sure how feasible this is.

@skuep
Copy link
Author

skuep commented Jan 28, 2024

What I meant was after it is correctly implemented. At the moment I consider this just a proof-of-concept, it needs more love and testing before the rest of the world uses it. I am hoping we persuade some of the current devs to implement it properly.

btw do you have some images of your Voron parts? You mentioned them but I see none here. We need to sell it :)

IMG_20240128_093439
IMG_20240127_204754
IMG_20240127_204733

@zviratko
Copy link

Is there an update on this? I have been using a build with this PR for the past 2+ weeks without any issue, but now I have to choose between this and the scarf seam which is tough :) Will this be merged to main so that more people will test it? Please don't let it die. Thanks!

@Eldenroot
Copy link
Contributor

Same here, tested for last 15 prints, works fine. Maybe in future we will get more feedback (beta release).

@skuep
Copy link
Author

skuep commented Feb 23, 2024

I also have been using it a lot. I have seen a few examples of where my algorithm falls a bit short. If you have quite thin walls with single perimeter-single line infill-perimeter, the perimeters are printed first, whereas in this special case, it would be better for the infill line to be printed first.
In other cases with complex shapes with multiple islands, the reordering is can be weird. I have too little knowledge on the data structures to be able to tell what might be going wrong.

Other than those few instances I am really liking it! Print quality is really good without the downsides of outer-perimeter-first.

@igiannakas
Copy link
Contributor

@skuep Ive pushed a PR here: #4333

I've brought the feature over to Arachne and also included your code on classic there. The Arachne code is "feature complete" in the sense that it won't trip over with the wall reordering in multiple islands etc. I haven't had more time to look into the classic code but if we do see this feature being a candidate for merge, I can work on that.

If you want, give the above a try!

@YanceyA
Copy link

YanceyA commented Mar 4, 2024

I wonder if the perimeter order needs to be a feature where a user can select the order directly based on the number of perimeters to be printed. If n perimeters are specified then the user can explicitly specify the order of printing such as: [2,3,6,4,1,5] for 6 perimeters. This would also be great to be as a layer height modifier.

@discip
Copy link
Contributor

discip commented Mar 25, 2024

@skuep
@igiannakas
Am I right in assuming that this PR is superseded by #4333?
If so, this should be closed. 😊

@igiannakas
Copy link
Contributor

Sort off, the implementation is a bit different between the two.

@SoftFever
Copy link
Owner

Thank you, @skuep and @igiannakas, for your implementation and testing. Thanks to everyone who participated in the experiment.

I feel this result is not conclusive enough. Therefore, I will close this PR for now.

@SoftFever SoftFever closed this Jun 28, 2024
@zviratko
Copy link

Sad :( I've been using this ordering mode for everything, always downloading the latest PR build and it's been working great for me. Stuff that normally would have bulged walls because of too many perimeters was smooth, overhangs were great, no blobs or under/overextrusions...

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.

8 participants