-
-
Notifications
You must be signed in to change notification settings - Fork 938
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
[Feature] Introduced option to control amount of internal bridging, fixing internal bridge missing for some sloped surfaces #3319
[Feature] Introduced option to control amount of internal bridging, fixing internal bridge missing for some sloped surfaces #3319
Conversation
@SoftFever Thank you for this comment above, its been fantastic in pushing me to explore this further (and dont be lazy just disabling it completely.) I'm sharing all of the analysis I've done below for your reading, incl some recommendations. Analysis I've implemented part of the above proposed code and graphed the polygons so we can see it visually what is going on (I'm a visual person and need to see the math :)): The above is at layer 147 of the attached 3MF : At layer 147 (1 indexed) the unsupported_area_original has 8 polygons. There are 2 big polygons (the ones you see) and the rest are the tiny ones that appear like dots in the graph on the left hand side (I think a couple are not even drawn as they are too small). Now if I filter out the tiny ones:
The below is the slice (bridge is generated as I didn't turn off the option to do remove the filtering - this is the original unsupported): What you're proposing above is to take the delta region between the Original and New polygons (including all the tiny original ones) and if the area of that delta region is over a specific threshold then replace the New polygon with the Original polygon, reverting the shrinking. Here is where my potentially questionable memory of math from my Computer science classes 22 years ago comes in. While this will work if the threshold is set low enough, the delta area between the two is a function of:
So setting a threshold area as a filtering mechanism won't necessarily work. We could do it as a % but then this is already kind of known because we always shrink by 3 x spacing. (I think). What we could do is shrink the polygon by less - not 3x spacing but say 1x spacing in which case we get this shrinkage: But this doesnt help as the region that would trigger the bridge on the left is clipped more (this is with 1x spacing). (you can see it as the distance from the original polygon on the left compared to the red dotted line is proportionally larger). We could go even lower than that - say half spacing: (the black line) In this case we finally get some bridging going on but that quickly deteriorates on subsequent layers That is now because of the clipping from the lower_layer_solids that are expanded by 3 x spacing (3x + 1x from the previous shrinkage). If I reduce the expansion of the lower_layer_solids to 1 x spacing and leave the unsupported area clipped by 1 x spacing I get good bridges again:
Bingo, we've found our culprit! The artificial expansion by 3x unsupported perimeters of the lower layer solids kills bridging here. Ιt fills it that small region with solid infill as it thinks its supported by a lower solid region and fills the rest with sparse infill as we haven't hit the distance/number of layers to the top surface yet. So its not the thin but long issue that was considered but rather a special case where due to the angle of the slope we are having an unsupported area that is filtered out as supported because of the 3x spacing, with the rest also not being unsupported as its not infill yet - its sparse infill. So the bridge infill is therefore, never generated. So where does this leave us? A few options depending on how much tweaking we leave to the user.
I've implemented number 3 in the latest code push. But equally can do (4) but need more models to try it on. |
Updated some minor errata on the above analysis + submitted new code. |
Also, I tested it with a part where the slope is increasing. Around layer 25, it stops making the bridge layers, and when it prints these small lines, they tend to curl upwards as they cool down. That's when it becomes a problem. |
The downside to removing the filtering is that you may get small sections that are not that uniform. This is dependant on the model geometry unfortunately and is a tradeoff to be made - more bridging with some small artefacts or reduced bridging with none. Think this is making the case to have this as an option for the user. I haven't found a way to trigger bridging on your second scenario, even when removing completely all filtering. The reason for this is that its a single perimeter width that is unsupported, which doesnt "count" as an unsupported region large enough to trigger bridging. Theoretically it shouldn't affect print quality as the vast majority of the surface is supported underneath. Kind of like printing small overhangs. This can be mitigated by ensuring enough top layers are present as this will push those small overhangs down and not be visible to the outside. I think this needs now print tests to verify..... Unless Softfever has another idea on this? :) |
Doing a print test with the below problem area only: Print speeds are reasonably fast and infill is very low - 6%, to show the issue if present and will revert back |
Printer go brrrrr :D https://youtube.com/shorts/Xh_-R8LBpao?si=sqjdzbnGvdOtyuyP I can see every so slight curling up in the layers without support. Will try to find where I can fix this, but I'm not holding my breath. Part so far looks OK, even though I can see it possibly having an issue higher up. |
So turns out you're absolutely correct - the top surface looked like poop because of the curling. I've extended the removal of the filtering even further resulting in this: While this option doesn't "break" anything, it does mean that it creates very conservative internal bridges, increasing print time. And in some cases unnecessarily so. Hence why this now must be an option and not on by default. I'll be pushing a new build for testing. |
New build is up. @neorm please test when you can, ideally also with a real print, if possible. Flagged option as experimental and updated tooltip with the warning that it may unnecessarily create internal bridges over small overhanging solid infill regions. However, it does have a use case like the above example: (ignore the slight perimeter under extrusion - I had pushed my flow rate a tad too low). Clearly it makes a big difference in this particular scenario. However it's a bit ham fisted approach that could be refined further to not be for example so sensitive with internal overhangs that are way way too small. So I'm not 100% happy with it. It works but it's way too conservative. I tried to refine it further by playing with the expansion values in the if statement that is now ignored when this option is enabled but failed miserably. Maybe a fresh pair of eyes on this can help :) For now its a working version that could help with this specific issue (and enabled only for models that really need it) so its still worth it but not comfortable to always have it enabled, like I'd like as it is too conservative and extends print times with out a good reason in most "usual" models. |
593eeb0
to
e14783e
Compare
Fantastic 👌🏻 thank you! I’ve set the limited option as my default for my custom profiles and will be test driving this going forward. Maybe we revisit the default when more data is available. |
Great work, appreciate you guys! When will this be available in stable/alpha of orca slicer? |
Yeap it’s in the nightly release here: https://github.com/SoftFever/OrcaSlicer/releases/tag/nightly-builds |
@igiannakas I just want to chip in saying this is an awesome work and thank you. Not just solved slope in an angle surface artifact, but there are instances just 20 degree straight slope can see the improvement by having no filtering set. It works like a charm! |
Your welcome! Personally I have set my profile to limited filtering as this works great for most cases with the odd exception needing none, and equally the odd exception needing this feature disabled. Big improvement in sloped surfaces over the past few months I’ve been using this |
no filtering works great on this model attached but with limited is poor. any help? i dont like how much extra time and filament it uses so hopefully this will help you improve it! this is one of best features added just need get some testing and tuning. i stopped the test early because it was quite obvious it was going to be perfect with it turned on compared to before. |
WOW! internal bridges looks very well! |
Not much that can be done really - for models like this is why I implemented the no filtering option. It’s a trade off- more print time but better quality. |
That's a huge difference in print quality! Yeah I noticed that too that no
filtering consumes way too much filament and time, and unnecessary in most
but not all cases. I have two comments
1. If there's a way to automatically decide no filtering vs limited
filtering, that would be great, so we don't need to experiment and this
will give us ease of mind. Users don't even need to worry about this toggle
if it's automatic selection
2. Instead of relying solely on internal bridges, I'd recommend slowing
down the internal overhangs like how we slow down the external overhangs.
This could remove need for internal bridges in lots of cases.
…On Fri, Apr 5, 2024, 7:56 AM borris345 ***@***.***> wrote:
no filtering works great on this model attached but with limited is poor.
any help? i dont like how much extra time and filament it uses so hopefully
this will help you improve it! this is one of best features added just need
get some testing and tuning.
model used
https://www.dropbox.com/scl/fi/oynw87altq5yma6vqscdy/gradient-test.3mf?rlkey=61qcutklydx4wm7yvnxfnooft&dl=0
20240405_124728.jpg (view on web)
<https://github.com/SoftFever/OrcaSlicer/assets/27918951/d990ebb1-2512-42ae-832e-4c06b6d31b87>
—
Reply to this email directly, view it on GitHub
<#3319 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AS7LXLFROMSNOZX2VVV3N53Y32GOHAVCNFSM6AAAAABBE3EDO2VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDAMZZGYYTGOBQHE>
.
You are receiving this because you commented.Message ID:
***@***.***>
|
I wish it was that simple… two things that prevent this from getting more user friendly:
I did try setting this more automatically but it cannot be done with the current code base without some significant rework of the bridging code which would introduce the potential for more issues coming up. This is also the reason why none of the other 3 slicers using the same code base have fixed this… |
I agree, I'm very happy with the implementation. This way, I can handle these kinds of problems. Just wanted to say thank you, @igiannakas |
@neorm your welcome!! Hope it helps you ;) @jrmhughes unfortunately it doesn’t work always when the layer height transition is too low compared to the slope. Try with filtering fully “disabled” and let’s see whether that makes any difference |
@igiannakas Thanks for replying. And thank you for all the work you've done improving orcaslicer. I did some more investigation and it seems that, as you say, the layer height is too small compared to the slope (which was 13.2 degrees). I created a table to show the limit of when it generates: I don't know if this was the right place to ask because it seems it's not to do with the filtering, but rather the creation of the bridging layers to begin with. Maybe I should create a feature request for adjusting the overlap width at which they generate because I like to use 0.08mm layer height for printing moulds but sometimes get a wavy surface on shallow angles. I don't know how it works though or whether that would be possible. |
Another way to deal with this is to slow down your internal solid infill. It ideal speed wise but setting your internal solid infill and inner walls to a more conservative speed should address the visual artefacts. And it will help with precision especially at 0.08 mm LH |
Thanks for the tip |
Updated below text with final ready for review implementation
Aiming to address issue #413 and corresponding development backlog item
By default Orca and all the Slic3r derivatives implement filtering to remove areas where internal bridging may be unnecessary as the infill is thought to be supported adequately from the sparse infill below.
However that is not always the case, especially for:
So updated the PR to convert this into an option:
Disabled (default) - Limited filtering - No filtering
The above options can be controlled on a per-object basis, so if any particularly problematic objects exist in the build plate they can be enabled for them only.
In the image below you can see the limited filtering addressing the problematic slope but the regular shaped Voron cube being completely unaffected. With no filtering, there is excess bridging on the Voron cube. However it addresses the issue with the subsequent model (see further down).
No filtering for a challenging model:
Print test for the above model:
Left: Disabled - Right: No filtering
Fixes #413