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

Brick Layers / Staggered Perimeter implementation #8181

Open
wants to merge 15 commits into
base: main
Choose a base branch
from

Conversation

vipulrajan
Copy link
Contributor

@vipulrajan vipulrajan commented Jan 25, 2025

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

VID_20250125_123307.mp4

Tests

Currently testing with prints. Issues have been found. It's in alpha stage

@igiannakas
Copy link
Contributor

igiannakas commented Jan 25, 2025

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

@SoftFever
Copy link
Owner

This is an exciting stuff.
Looking forward 👍

@philyeahz
Copy link

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.

@theboee
Copy link

theboee commented Jan 26, 2025

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

#7282 #4133

@vipulrajan
Copy link
Contributor Author

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

@philyeahz
Copy link

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

@igiannakas
Copy link
Contributor

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

@vipulrajan
Copy link
Contributor Author

@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 vipulrajan marked this pull request as ready for review January 26, 2025 17:26
@Anthony-Bec
Copy link

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

@vipulrajan
Copy link
Contributor Author

@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

@Anthony-Bec
Copy link

Anthony-Bec commented Jan 26, 2025

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

@theboee
Copy link

theboee commented Jan 27, 2025

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.

walls for internal holes are not staggered
@TengerTechnologies
Copy link

TengerTechnologies commented Jan 27, 2025

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.

@Wulfsta
Copy link

Wulfsta commented Jan 27, 2025

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…

@dewi-ny-je
Copy link
Contributor

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)

@undingen
Copy link
Contributor

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

@nubnubbud
Copy link

nubnubbud commented Jan 28, 2025

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.

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.