Brick Layers / Staggered Perimeter implementation
Brick layers have been a hot topic lately. I prefer calling it staggered perimeter. Printing alternate perimeters at an offset can create significantly stronger prints.
Screenshots/Recordings/Graphs
https://github.com/user-attachments/assets/2f04e60d-2563-4725-b676-0e90180e1f35
Tests
Currently testing with prints. Issues have been found. It's in alpha stage
Fantastic and what a legend! Excellent to see this being implemented natively, thank you!
This is an exciting stuff. Looking forward 👍
Damn you beat me to it 😄
Additionally to what's already here, I implemented wall ordering which looks like this:
Before (Inner/Outer):
After (Even/Odd):
I don't know if this is actually an useful addition or counterproductive yet, but regardless, I thought it would be nice to share.
Glad to finally see some progress on this! Thanks to everyone for all the time, discussion and research put into it.
#7282 #4133
@philyeahz It's a collaborative effort. You add make a pull request for these orderings in my fork. Or you can let this be merged and then raise a pull request for those. But I know how it feels to have someone beat you to the punch. I had been working on it for weeks. Orca code is very hard to sift through.
@vipulrajan No hard feelings, I would love to collaborate on this.
I created an pull request on your fork for adding the wall sequencing independent of the staggered perimeters and also implemented the staggering for classic wall generator.
Next I would like to look at angled walls...
As you can see the walls do not align perfectly with the surface below. I got some ideas how to implement something to shift the loops according to the previous layer and insert something like a gap infill for classic wall generator. With arachne we already have variable width extrusion, so this should be easier to implement on that end with a special beading strategy.
Maybe this is an overkill optimization, but I think this could improve extrusion quality. Will let you know if I make progress on that front!
That would be necessary in order to avoid over extrusion on the top slanted surfaces. I think you could look at how the one wall top surface detects polygon edges based on the layer underneath and insert a half height (ie half flow) line to support the slant, basically the same as the first layer.
Just an idea, haven’t opened the code up in any detail but it may give a pointer :)
@philyeahz The slope issue is certainly something that will need more thought. For now, I'm putting the pull request up for review. I will keep brainstorming about how slopes can be dealt with and I will let you know if I think of something.
sorry for my ignorance but when will this be implemented in orca slicer?
@Anthony-Bec A version of it is already available to test. That is how it works. It will be tested and then eventually merge into the main. Go here https://github.com/SoftFever/OrcaSlicer/actions/runs/12976821206?pr=8181 and scroll to the bottom to find the download links
@vipulrajan Thanks for the fast reply! I am new to github.
One thing I'd recommend adding would be a way to adjust offset layer flow extrusion. The script by TengerTechnologies allows users to adjust the extrusion multiplier of the offset layers to help fill gaps. It will be hard to fix under/over extrusion with staggered perimeters with the traditional flow ratio.
One thing I'd recommend adding would be a way to adjust offset layer flow extrusion. The script by TengerTechnologies allows users to adjust the extrusion multiplier of the offset layers to help fill gaps. It will be hard to fix under/over extrusion with staggered perimeters with the traditional flow ratio.
Got a comment from @koenvanduffel2084 on my video with some testresults. The extrusion multiplier seams to increase strenght a bit if not overdone.
As promised some measurement data: Samples are made with black ABS ex TM3filament in the netherlands and printed on an enclosed RatRig Vcore IDEX 500 at a chamber temperature of 70 °C and nozzle temperature of 260 °C. And sliced in OrcaSlicer.
horizontal vertical reference: 47.9 MPa 17.7 MPa Brick layers extrusion multiplier 1.00 47.5 MPa 19.7 MPa (11% increase) Brick layers extrusion multiplier 1.05 51.2 MPa 20.9 MPa (18 % increase) Brick layers extrusion multiplier 1.10 48.0 MPa 16.3 MPa (8% decrease)Horizontal means the stress in in layerline direction, vertical is perpendicular to the layer lines.
Remarks:
- both the extrusion multiplier 1.05 and 1.10 look overextruded. Fr the 1.05 just a tiny bit, my guess is that 1.02~1.03 is optimal. I will print an additional set of samples at 1.025% to check this.
- I had scarf seams on for these prints (outer and inner layers). wihtout scarf seams the reference value for the vertical samples is 24.1 Mpa. In my tests with regular slicing to my surprise scarf seams decrease the layer adhesion. I expected that not having the seam in 1 point would avoid a weak spot. When watching the print carefully I saw that while making the scarf quite bit of shear force was put on the samples which could well cause them to be slightly damaged already before the stress test itself. The fact that they all break at the bottom narrow point supports this. Hence for regular size prints scarf seams might still be stronger (or the same) as regular seams.
From the data it is clear that brick layers improve the layer adhesion and that a slightly increased extrusion multiplier is helpfull. Overdo it and the layer adhesion is worse (this probably also happens with regular slicing though I have not tested this). The flow rate for my prints is optimized using the OrcaSlicer test where I err to the higher side.
For the horizontal samples there seems to be an improvement as well. This is however, wihtin error, the additional amount of plastic extruded.
From the data it is clear that brick layers improve the layer adhesion and that a slightly increased extrusion multiplier is helpfull. Overdo it and the layer adhesion is worse (this probably also happens with regular slicing though I have not tested this).
That seems suspicious? Was the flow rate on these tests controlled, or is it possible speeds were held constant and the filament was not being fully melted during these tests? I guess I could believe that a massive amount of over-extrusion could be detrimental, but something like a few percent does not match my intuition…
I think that the vertically staggered perimeters are difficult to implement correctly anytime a sloped wall is present.
I think the first implementation should focus on the horizontally staggered perimeters, which is almost trivial to define: just make the outermost perimeter 30-50% wider, and the innermost thinner, every other layer.
https://github.com/prusa3d/PrusaSlicer/issues/1823#issuecomment-1961309760
I think that the vertically staggered perimeters are difficult to implement correctly anytime a sloped wall is present.
I think the first implementation should focus on the horizontally staggered perimeters, which is almost trivial to define: just make the outermost perimeter 30-50% wider, and the innermost thinner, every other layer.
Is this different to this? https://github.com/prusa3d/PrusaSlicer/pull/10429
I think that the vertically staggered perimeters are difficult to implement correctly anytime a sloped wall is present. I think the first implementation should focus on the horizontally staggered perimeters, which is almost trivial to define: just make the outermost perimeter 30-50% wider, and the innermost thinner, every other layer. prusa3d/PrusaSlicer#1823 (comment)
Is this different to this? prusa3d/PrusaSlicer#10429
Staggered perimeters/infill (really, it's the same stuff when solid) is different, largely because it focuses on extruding exactly between existing extrusions, not just a partial offset. I want it because that's the limiting factor for optically clear FDM prints. I can make mine clear, but there are vertical striations due to all the layers printing on top of each other, and avoiding the gaps in the precious layer. Transparency is valid here, as you can only get transparent prints with near-perfect layer adhesion and by massively tuning out voids, which improves strength, or at least isotropy dramatically.
It's true- that implementation would work, if it could calculate it by % of extrusion width. Part of the issue is that it didn't work well with arachne, and I can totally see that being a thing. the algorithm assumes if you print between two lines, you will cover half of each extrusion. **In order to rectify this, it would need three checkboxes/modes:
- "vary line width, always print between extrusions",
- "offset by half average line width" and
- "disable/limit variable line width for staggered extrusion"**.
The first one is a naive fix which should work fine unless arachne makes two perimeters of wildly (~30%) different size. The second simply shifts the extrusion by half the average width of the lines it is printing between- could result in worse adhesion or transparency, but should always make good lines. The third is a direct override which would guarantee good results at the cost of arachne's benefits. Arachne will still work, but it will be set not to vary widths for staggered perimeters, or at the vary least ensure two touching perimeters are within X% of each others' width.
arachne really does complicate this feature, but I personally think it is totally worth it, even just for transparent prints alone.
I think that the vertically staggered perimeters are difficult to implement correctly anytime a sloped wall is present. I think the first implementation should focus on the horizontally staggered perimeters, which is almost trivial to define: just make the outermost perimeter 30-50% wider, and the innermost thinner, every other layer. prusa3d/PrusaSlicer#1823 (comment)
Is this different to this? prusa3d/PrusaSlicer#10429
Staggered perimeters/infill (really, it's the same stuff when solid) is different, largely because it focuses on extruding exactly between existing extrusions, not just a partial offset. I want it because that's the limiting factor for optically clear FDM prints. I can make mine clear, but there are vertical striations due to all the layers printing on top of each other, and avoiding the gaps in the precious layer. Transparency is valid here, as you can only get transparent prints with near-perfect layer adhesion and by massively tuning out voids, which improves strength, or at least isotropy dramatically.
👍 Thanks for your detailed response and interesting use case with the transparency (it's for 3d printed lenses after polishing?)
👍 Thanks for your detailed response and interesting use case with the transparency (it's for 3d printed lenses after polishing?)
lenses... and beyblades. (long story, had an old business where I was making custom parts based on kids' drawings. always wanted to make a gacha-style grab bag of parts to sell in collectible colors and patterns, with rare ones like transparent and metallic)
actually, I'm getting things approaching optically clear even without polishing. Sure, to get proper caustics and reflections I would need to, but for right now, a proper print setting to help eliminate voids is 90% of the issue, in my humble experience... or not so humble. https://community.ultimaker.com/topic/26593-please-include-an-iron-every-layer-option-for-clearer-prints/ https://github.com/Ultimaker/Cura/issues/3065 https://github.com/supermerill/SuperSlicer/issues/38 if you'd like to see my half-decade of testing and analysis. all amateur I assure you, but I did go back and forth with some far bigger names than my own to coerce them into trying my filthy non-coder suggestions.
but long story short, with the help of all these talented people, I've been able to systematically remove and gauge the usefulness of every technique to make clear prints. I've also redoubled my efforts this past month now that offset layers, one of my suggestions in 2019, seems to be becoming a reality.
https://github.com/user-attachments/assets/d85061bf-0fd3-49dc-8775-24dabf4d3785
https://github.com/user-attachments/assets/b66ef4ee-cca6-44db-890d-568b312211b6
https://github.com/user-attachments/assets/e8557194-3312-41c1-8997-1a634e9a4890
apologies for the video spam, but I think it's important to note that we're just one breakthrough away from adding a simple mode for transparent 3D prints. Real ones, the ones you thought of when you first saw that clear filament. ones that don't yellow because they're not resin-based, and ones that don't require some sort of surface goop or things like that.
now, to reiterate, I was wrong a whole lot in those threads up there, and I was just as confident then... This is just one more feature that MIGHT be the key... but given how many I've gone through, it seems as good a chance as we'll get for now.
Just curious, is there technical difficulties to make it work with Classic walls?
@Noisyfox No, I have just been a little busy this past week. There is a pull request someone has raised on my fork that has already implemented classic walls. I just need to take a proper look and if it's all good, merge
I noticed that when this option is enabled, it ignored the wall order settings:
As you can see, the outer wall is printed first even I set the wall order to "inner/outer".
Hey, this is really awesome stuff! Related to this, will you be adding the possibility to print the outer layer with smaller layer height than the inner? I mean so we can get the detail of for example 0.1mm on the outside but the strength on the inside with 0.2mm?
le 0.1mm on the outside but the strength on the inside with 0.2mm?
That would be cool but i think it will be tricky on the sloped surfaces.
@Noisyfox It does ignore the wall order setting. And that is by design. So all the non-staggered (lower) perimeters are printed first and then the staggered (offset by half) perimeters. This was done to make the possibility of the nozzle colliding with the print zero. I have been debating whether I should keep it this way or let the walls print in whatever order that has been set. Open to suggestions.
When Alternate extra wall option is turned on Orca becomes unresponsive when slicing. Just something to be aware of, not a big deal. Back to testing this.
Build ubunt-24.04 running on fedora 41.
@Noisyfox It does ignore the wall order setting. And that is by design. So all the non-staggered (lower) perimeters are printed first and then the staggered (offset by half) perimeters. This was done to make the possibility of the nozzle colliding with the print zero. I have been debating whether I should keep it this way or let the walls print in whatever order that has been set. Open to suggestions.
You can print the outer wall staggered instead when the wall order is in-out.
@Noisyfox It does ignore the wall order setting. And that is by design. So all the non-staggered (lower) perimeters are printed first and then the staggered (offset by half) perimeters. This was done to make the possibility of the nozzle colliding with the print zero. I have been debating whether I should keep it this way or let the walls print in whatever order that has been set. Open to suggestions.
You can print the outer wall staggered instead when the wall order is in-out.
That can be done, yes. Messing with the surface finish does not seem like the best idea though. If you recommend, I will take out the logic that forces non-staggered before staggered sorting.
@Noisyfox It does ignore the wall order setting. And that is by design. So all the non-staggered (lower) perimeters are printed first and then the staggered (offset by half) perimeters. This was done to make the possibility of the nozzle colliding with the print zero. I have been debating whether I should keep it this way or let the walls print in whatever order that has been set. Open to suggestions.
You can print the outer wall staggered instead when the wall order is in-out.
That can be done, yes. Messing with the surface finish does not seem like the best idea though. If you recommend, I will take out the logic that forces non-staggered before staggered sorting.
Use inner/out order is always a trade off between surface finish/dimensional accuracy vs. better overhang I think. Better to leave that choice to the user, since they can always swich the wall order to out/inner if better surface quality is more important. I personally prefer better overhang though.
Getting a very odd behavior on the outer shells. The loop is not being completed. I was not looking when it was printing, so I am unsure if it was at the start of the loop or the end. This gap is not visible in the slicer, you only see the white dot for the seam.
7 Walls 1.2mm nozzle 0.8 layer height Staggered enabled
This photo was from the second print. I saw this happening on the first print, on the first layer. The orca slicer gap was set to 10%. So I turned it to zero for the second. The first layer looked OK, so I walked away.
It is also not on every seam, it seems to be random. I would say the print is 97% defect-free.