-
-
Notifications
You must be signed in to change notification settings - Fork 854
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
Conversation
…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
d1fad01
to
a1b8ae1
Compare
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 The downside to |
I am doing some testing 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. Comments welcome. So far it looks very good to me. |
And there is the overhang performance. 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). |
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. |
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 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 :-) |
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 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. |
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. |
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? |
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. |
Yeah, I closely followed this approach. I talked about it in the linked issue, see this branch here: |
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. |
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. |
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.
Yep! Yeah I'm fine with the name. Was struggling myself to find something suitable :-)
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. |
Yes it does solve the seam issue too, as does internal first- only the outer first suffers from it. |
@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. |
Yeah, it's not implemented in this branch. But I might do that actually for you all to have a look at it
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. |
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 :) |
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 :-) |
Not exactly - the mode should work like this: Print order: This is similar to how inner outer inner works on Arachne: |
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. |
Referring back to my comments in the thread that spawned this PR, I would prefer to see: 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. |
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. |
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. |
That's what @Wulfsta suggested and I was thinking about the long travel moves and got confused. It makes no sense, sorry
Can you clarify? What do you mean unsupported? |
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. |
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. |
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 |
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. |
|
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! |
Same here, tested for last 15 prints, works fine. Maybe in future we will get more feedback (beta release). |
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. Other than those few instances I am really liking it! Print quality is really good without the downsides of outer-perimeter-first. |
@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! |
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. |
@skuep |
Sort off, the implementation is a bit different between the two. |
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. |
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... |
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 toOuter-Inner
(Lighting is purposely exaggerating the imperfections). But from what I can tell, overhang work as good asInner/Outer
(even slightly better at the root of the overhang, where there is a gap in theInner-Outer
mode, presumably because there is a bit too much material squishing the wall to the outside).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.