OrcaSlicer icon indicating copy to clipboard operation
OrcaSlicer copied to clipboard

Brick Layers / Staggered Perimeter implementation

Open vipulrajan opened this issue 11 months ago • 129 comments

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. image

Screenshots/Recordings/Graphs

image

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

vipulrajan avatar Jan 25 '25 07:01 vipulrajan

Fantastic and what a legend! Excellent to see this being implemented natively, thank you!

igiannakas avatar Jan 25 '25 08:01 igiannakas

This is an exciting stuff. Looking forward 👍

SoftFever avatar Jan 25 '25 15:01 SoftFever

Damn you beat me to it 😄

Additionally to what's already here, I implemented wall ordering which looks like this:

Before (Inner/Outer): bambu-studio_2025-01-26_02-18-51_

After (Even/Odd): bambu-studio_2025-01-26_02-08-19_

I don't know if this is actually an useful addition or counterproductive yet, but regardless, I thought it would be nice to share.

philyeahz avatar Jan 26 '25 01:01 philyeahz

Glad to finally see some progress on this! Thanks to everyone for all the time, discussion and research put into it.

#7282 #4133

theboee avatar Jan 26 '25 02:01 theboee

@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 avatar Jan 26 '25 04:01 vipulrajan

@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... image 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!

philyeahz avatar Jan 26 '25 13:01 philyeahz

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 :)

igiannakas avatar Jan 26 '25 13:01 igiannakas

@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.

vipulrajan avatar Jan 26 '25 17:01 vipulrajan

sorry for my ignorance but when will this be implemented in orca slicer?

Anthony-Bec avatar Jan 26 '25 19:01 Anthony-Bec

@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 avatar Jan 26 '25 19:01 vipulrajan

@vipulrajan Thanks for the fast reply! I am new to github.

Anthony-Bec avatar Jan 26 '25 19:01 Anthony-Bec

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.

theboee avatar Jan 27 '25 01:01 theboee

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.

TengerTechnologies avatar Jan 27 '25 12:01 TengerTechnologies

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…

Wulfsta avatar Jan 27 '25 12:01 Wulfsta

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

dewi-ny-je avatar Jan 28 '25 12:01 dewi-ny-je

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? https://github.com/prusa3d/PrusaSlicer/pull/10429

undingen avatar Jan 28 '25 13:01 undingen

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:

  1. "vary line width, always print between extrusions",
  2. "offset by half average line width" and
  3. "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.

nubnubbud avatar Jan 28 '25 17:01 nubnubbud

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?)

undingen avatar Jan 29 '25 12:01 undingen

👍 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.

nubnubbud avatar Jan 31 '25 10:01 nubnubbud

Just curious, is there technical difficulties to make it work with Classic walls?

Noisyfox avatar Feb 01 '25 10:02 Noisyfox

@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

vipulrajan avatar Feb 01 '25 11:02 vipulrajan

I noticed that when this option is enabled, it ignored the wall order settings: image image

image image

As you can see, the outer wall is printed first even I set the wall order to "inner/outer".

Noisyfox avatar Feb 01 '25 11:02 Noisyfox

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?

Gurrrra avatar Feb 04 '25 09:02 Gurrrra

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.

vgdh avatar Feb 04 '25 10:02 vgdh

@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.

vipulrajan avatar Feb 04 '25 20:02 vipulrajan

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.

sharkovich avatar Feb 04 '25 21:02 sharkovich

@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 avatar Feb 05 '25 00:02 Noisyfox

@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.

vipulrajan avatar Feb 05 '25 05:02 vipulrajan

@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.

Noisyfox avatar Feb 05 '25 06:02 Noisyfox

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

20250206_152954 Screenshot 2025-02-07 095526

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.

xboxhacker avatar Feb 07 '25 01:02 xboxhacker