OrcaSlicer
OrcaSlicer copied to clipboard
POC - Do not slow down external perimeters to meet minimum layer time
This experimental, proof of concept PR aims to allow the user to skip adjusting the speed of external perimeters to meet the minimum layer time threshold.
Varying print speeds especially on external perimeters can result in variations in shine as well as extrusion consistency, which can be partly mitigated by not changing the external perimeter speeds.
This PR is draft, there's plenty to be done before it's prod ready.
To do:
- Calculate slow down target speeds correctly - currently it includes external perimeter slowdown but doesnt use it (which means the overall layer time will be ever so slightly shorter than desired)
- Make this an option in the filament settings
- Make it compatible with slowdown for overhangs - currently it doesn’t play well with that option enabled
- Maybe adjust slowdown to prefer slowing down internal features first instead of touching the external perimeter down to a minimum speed, then adjust external perimeter speeds.
However seeking testers to see whether this is an option worth pursuing.
Testing ask: Print a model with this build and the standard 2.0 build
- Test with a shiny filament - PLA or petg. Demonstrate whether there is a difference in gloss consistency
- Test with a shrinking filament (ABS). Demonstrate whether there is a difference in layer shrinking due to speed changes
- Ideally test with slowdown for overhangs turned off as looking to maintain uniform external wall print speeds. Also with a small object that results in layer speed variations
- Ideally test with inner outer inner mode to ensure internal wall speeds do not affect the external wall surface finish.
Before:
After:
Fixes #5147
Really hope to see this integrated!
Currently does not seem to be working. Can't wait for this to be a thing.
Currently does not seem to be working. Can't wait for this to be a thing.
New version is up, waiting for the build. Screenshots are up showing the difference.
Big idea! I hope it is implemented soon.
No idea why nobody came up with this idea till now, and why I didn't come up with this till I modded my 3d printer to print so fast that almost all things I print have to slow down due to cooling XD.
Found one case where this would be extremely useful. When printing with "infill combination" on, the layers with infill would take significantly more time than non-infill layers, causing uneven outer surface. Printing the test model right now.
In this case, the outer wall in 2.0.0 would slow down just enough to hit the VFA speed of my printer causing resonance, while with no outer wall slowdown POC, the outer surface is much smoother. Tested with PETG, with belts overtightened to show the artifacts as much as possible. Used inner/outer/inner wall order.
==========================================
==========================================
Thank you!
Wow! This is a fantastic idea! It will be especially helpful when we print those cooling-sensitive materials.
I’ll spend a bit of time working this feature as it’s by far incomplete right now, to get it to a better testing state ;)
@igiannakas let me know if you need some testing like I did for https://github.com/SoftFever/OrcaSlicer/pull/4333 ;)
@igiannakas let me know if you need some testing like I did for #4333 ;)
Yes please - testing requirements are in the top post together with limitations. Please disable slowdown for overhangs as it doesn’t play well with it yet. Also try a small model - benchy is a good one as it has layer time variations accross the board (hull, top part where the windows are). This PR is not ready for daily use and only in a controlled environment as there are many things that don’t work yet - trying to demonstrate value and then I can devote time to productionise it.
please be aware that there is no option to enable yet - it’s always on in this Pr. So the before and after need to be done between the current nightly and this.
Just want to add I've been using this extensively for the last couple weeks. It's been amazing.
I've been getting the best large ASA parts I've ever printed. So far I haven't seen any strange behavior from slowing down for overhangs. But with ASA, my overhangs aren't a ton slower than the external walls anyway unless basically bridging.
I've only had one issue that I'm testing. With thin [basically 6 layer widths thick or less] walls that can't hit minimum time unless outer wall is slowed, and scarf around entire wall, there seems to be some strange behavior.
I don't want to speculate too much. I need to ensure it's something else. Probably just a scarf or general slicing bug.
I'll check against latest live now that I have a model that seems to show this more often than not. If it does end up related, I'll post some pictures.
Other that whatever that issue is, this has been the biggest increase in ABS/ASA print quality from any feature I've seen in a long time.
Gotcha thank you for the testing. I’ll proceed with making it operational - you should really not be using this build for “production” purposes as it barely works and has a ton of bugs :)
Also would you be able to post any pics?
Sorry, was on the road for work. Will be back printing again tonight. I'll try to get a couple good screenshots when I get home from work.
Alright. It's late, so apologies for there not being more pictures yet. I tried my best to get lighting so you can see what I see looking at it.
Here are the good results.... All Inner Outer Inner. Some have extrustion rate smoothing. Some have scarf around all wall.
ASA/ABS
I have lots of different parts of these. They all look this good. The gray is the easiest to tell just how amazing the consistency is of the outer wall. It's a hard part to keeps consistent finish at high temp. These are all at 265 to 270C, so without this they have a lot of banding. I'll talk more about the ammo boxes in the PETG pics.
PETG
The Blue one was from tonight, using latest 2.1 Beta [not nightly] and it's hard to see, but if I print one that keeps gloss consistency, I outrun that filament's ability to flow well and get issues on the internal walls and . Could be that filament [overture petg] so I'm drying it for another 24 hours and we'll see what it looks like after. Regardless, getting the perfect finishes is much harder normally.
You can see a minor layer shrink with the right angle of the flash light. But that's it.
Gray Ammo Box has only one visibly different layer at the thinnest point of only 6 walls. You can't see it without a flashlight at a very steep angle. This model was always printed with the lid and and insert tray, so the first few 10 to 12 take minutes. Next 40% take about 40 seconds, and the last bit varies from 20 to 12 and back to 20. So a wide swing.
Some I threw on a machine at work but didn't have time to send til tonight. The PETG and ASA from Flashforge are amazing already, but with this build, these are the best prints I've ever gotten. Some of the Voron parts look like injection molded parts from a few inches away.
One side effect is that with hot filaments, printing consistently like that helps the Z seams blend/disappear. Irregularities in extrusion speed and cooling time, as you know, contribute to warping, and the Z seams gets the worst of it when at corners or small perimeters. So this at least helps control one of those problems. Yes, there are hours of tuning involved as well, but there's a Z seam on the corners of those boxes and I'm going to guess if I didn't tell you that, you would never have guessed it.
I'll take pics of the failures and other 2.1 beta build prints later. But I'm heading to Michigan to look at adding robots on some rotary cncs.... in 5 hours.
Let me know if you're interested in printing anything else specific. I have a ton of different ABS and ASA..
Have a good night!
This is fantastic. Ok I’m convinced I’ll put in some effort to turn it from POC to feature.
Posting some of my investigation results on the effects of layer time and speed below. I was working on the hypothesis that layer time also plays a role (big? Small?) on external wall consistency so decided to run some tests.
Left equal layer time - Right equal speeds
"Equal" layer time:
Layer time:
Speed used:
The layer time for each layer was between 43.1 sec and 44.1 sec in the blue areas after the screw stopped printing so a deviation of approx 2%. Where there is a solid layer (green area) the layer time was 47.2 sec, so a deviation of 9%.
Equal speeds:
Layer time:
Speed:
Honestly I am puzzled. Or maybe I should be?
- The equal layer time cube even though it was printed much slower overall (speeds of around 18mm/sec) turned out looking far worse than the equal speeds cube (that was printed at 140 & 250 mm/sec external and internal perimeters). That I did not expect as I thought that printing slower and with less variation in layer time and speed it would turn out better. But nope...
- It doesn't appear that the 2% variation in layer time in the top part of the cube is causing these print artefacts - they also dont seem to align up with the 2% variations in layer time from the print preview. But equally the print speed in those areas doesnt vary hugely. So there may be something else at play here.
- Where there is a sharp increase in layer time (the orange band in the middle of the print) in the equal speeds cube I see no or very minuscule artefacts.
- It probably looks like equal speeds between layers is the bigger lever to reduce slight cross layer variation but that is uncertain...
More experimentation is needed. I'm printing another cube with a slower perimeter (50mm/sec) and equal speeds to compare to the faster equal speeds cube. As I need to rule out that for some reason the Voron likes to print faster :P
If it turns out that equal speeds matter the most then the original PR I've got open is probably the way to go - try to limit speed changes as much as possible caused by variations in slowdown due to layer time not being met.
Yeah, I'll definitely try a couple more ASA manufacturers. I do have some from Polymaker here as well and they've looked about the same, slightly worse overhangs, but I have a lot of colors. I'll try printing that Z Coupler in a few variations if I get time this week.
Heck, even just having a checkbox for "Prioritize surface finish" that did a std dev check or similar, and enabled it on parts where it had enough layer time to do so.
I also wonder if just segmenting out a consistent speed/fan setting only for external walls, or walls in general is useful. As with everything, it depends on part size, an especially on the delta from tiny to large features.
Will try more when I'm back from road trip.
Thanks for your hard work on this!
Yeap I'm deeply down the rabbit hole of improving surface finish right now :P
My hypothesis that I am trying to test:
- Consistent Wall speed - may affect extrusion consistency on the external wall
- Consistent internal wall speed - may affect extrusion consistency on the internal wall causing the external to become "deformed"
- Layer time - may affect shrinkage as the toolhead has more or less time to dwell over a specific area
Problem that I have right now is I can pick consistent speed or consistent layer time but not both - to ensure consistent layer time you vary the speed. To ensure consistent speed you vary the layer time. So we can optimise for one of the two. And currently I'm trying to find out what has the biggest impact.
So far:
- We know that speed variation on external walls causes at a minimum surface shine variations. That is confirmed from multiple sources (experiments above + my experience + experience of others especially with a BBL printer)
- I have some evidence from one experiment that shows speed being a bigger factor in extrusion consistency and external wall surface finish compared to layer time. However the relationship between speed and quality is not what I expected (see point 3 below).
- What I am empirically seeing is that slower speeds are not necessarily better in terms of quality. I dont know why... See below pic - left cube was slow and consistent layer time, middle cube had consistent 50mm/sec external wall speed and varying layer time to meet the target speed. Right had 140mm/sec external wall speed and varying layer time. And the quality results are the exact opposite of what I would expect mind blown.
Hm... Deeper in the rabbit hole I go.
So printed the exact same Gcode as last night for the fast print (150mm/sec) and consistent speeds and there is indeed some print to print variation
(the right two cubes - middle from last night, right from today, same gcode)
What I can say for sure is that the variations are "smoother" in the faster print layer to layer. Maybe cause the mechanics and extruder of the printer respond better to higher speeds.
Dont get me wrong, under normal viewing conditions you cannot see any of these minor artefacts but I think I'm fighting a loosing battle to be able to create a reproducible test to confirm or disprove my hypothesis above :(
Under regular viewing conditions:
So where does this leave us. I still think there is value in ensuring consistency in the external wall finish by ensuring the speed is not modified due to layer time variations. However for the rest of the hypothesis, I cannot create a test that would be repeatable enough to demonstrate consistently an improvement in performance :(
Leaving a comment here because this is a feature I really look towards and hope it becomes a reality.
From my experience, having a consistent outer wall speed does improve outer wall quality a lot, specially on different filaments. I mostly only print black and you can easily see any difference in shine when switching speeds. Depending on the filament manufacturer, this can be a small difference or look like a totally different filament, going from full shiny to matte. In this case, maintaining a constant speed is very important in look consistency and quality imo
Also another scenario where this would improve quality a lot is when a specific speed creates a lot of VFAs. Using the CREATE_VIBRATIONS_PROFILE command from Klippain Shake&Tune, you can clearly see there's a lot of speed zones that make VFAs very visible, the best speed zone being the higher speed and the worst speed zones being the slower ones. Slowing down the outer wall at a number made up by the slicer and it not knowing the speeds to avoid will worsen the quality:
Being able to keep the speed high for the outer wall will minimize or totally remove the VFA artefacts, specially from shiny filament
Absolutely right on the ringing front. I've equally tuned my profiles to avoid those frequencies; however the slicer does hit them when slowing down for layer cooling which is annoying. I have also considered creating a "banned speeds" setting so anything that falls in a specific range is clamped either up or down. However the first step would be to allow more control on the external surfaces which this PR will do.
I've figured out the code fixes I needed to do and will push a good workable release for this in this PR today.
PS. your vibration graphs are pretty controlled anyway from the looks of it, because you're running 0.9 degree steppers. Mine at 1.8 degrees are a bit worse (check the graph scale) but getting a pretty clean low end speed and med-high end speed. Hence why I test at 50mm/sec and 140mm/sec
Absolutely right on the ringing front. I've equally tuned my profiles to avoid those frequencies; however the sliver does hit them when slowing down for layer cooling which is annoying. I have also considered creating a "banned speeds" setting so anything that falls in a specific range is clamped either up or down. However the first step would be to allow more control on the external surfaces which this PR will do.
I've figured out the code fixes I needed to do and will push a good workable release for this in this PR today.
PS. your vibration graphs are pretty controlled anyway from the looks of it, because you're running 0.9 degree steppers. Mine at 1.8 degrees are a bit worse (check the graph scale) but getting a pretty clean low end speed and med-high end speed. Hence why I test at 50mm/sec and 140mm/sec
That would also be an awesome feature! The ability to define some speed zones the slicer would prefer and some banned speeds it should never hit, but yes I'd love to see this PR be implemented. For me from the motion system, (running a custom ZeroG Mercury One) low speeds create awful VFAs that only go away while being at 160+mm/s. At 40mm/s you can clearly see artefacts through the print (my x rail is really bad and bindy, even tho hardware should be fixed before implements hacks in software, I believe this will also help people with some issues in their builds).
OK feature is ready and appears to work reliably in my tests. Tests performed:
- Single extruder/Single filament in models with overhangs
- Single extruder/single filament in models with overhangs and extrusion rate smoothing applied
- Multi material SEMM print with one filament having this option enabled and one having this option disabled. The enabled filament maintains a consistent outer wall speed vs. the disabled one that varies to meet layer time calculations
I think this is good to go now! For me, this option will now be permanently on for all my filaments.
@SoftFever all yours for code review etc :) and if you're feeling it for inclusion in the next beta round :P :D The code changes are not super invasive to say the least so not much should break (fingers crossed).
I've updated the first post summarising the feature etc.
@celtare21 @Ataraxia-Mechanica @ramosglauco @StuSerious @Zibit-Meowe the feature is now ready. thank you for your inputs and tests! Please feel free to download the latest PR build and take it through its paces. Please see the first post for the final feature description, where the option is etc.
You know, some of this might also be mitigated through somehow buffering the layer time slow down effect as well by means of a decay?
It seems like for now, layer speeds are modified to meet layer time requirements on an individual layer by layer level which creates the wild inconsistencies.
What if instead a layer time setting 'violation' is detected and a modifier gets applied with a multi layer effect? I.E. layer time violation detected, slow down layer by 50%, layer before and after that apply 50% of that 50% decay (25% speed reduction) and 2 layers beyond that maybe 15% decay - obviously the rate of decay would have to be variable and somehow consider layer times that don't exist yet. Maybe layer time reductions are instead flagged instead of making per layer speed adjustments and then any slowdowns to meet layer time are handled in post processing by a second pass against flagged layers?
I'm spitballing and hypothesizing where I know it's significantly more complex than I make it sound. I'm mostly trying to think about approach.
Something else to consider here is that pressure advance is calibrated statically based on a specific speed/flow in Klipper, right? If you were to calculate your pressure advance at 2 different speeds/flows and then dynamically scale it then you would see more consistency across speed variations (but Klipper doesn't let us do that natively). What if the root cause of the surface quality degradation when speed variances happen is actually a function of those slight changes in flow rate that were never calibrated for?
Compensating for that by making minimum layer time slowdowns a multi layer consideration would drastically smooth the end result.
We could even use a variance for comparison to reduce impact on small features/bridging whereas base layer time changes by more than x% discard any previous layer time slowdown flags.
That is what I tried experimenting with in the prints above. I limited layer time variations to 2% between layers but the print came out comparatively awful. And I cannot explain that - I would have thought that it would benefit but it didn’t. The ones where speed is more consistent were more uniform, hence I’m hypothesising that layer time doesn’t matter as much. But it would be lovely if someone else also run these experiments to confirm or disprove this.
for PA I’ve thought multiple times of creating a PA curve in the slicer and applying the right pa for the feature. It’s trivial to do, but again do we do a double model for acceleration and speed or just acceleration. This needs empirical testing which I’ll get to at some point :)
this article here on PA and the experiment of the effects of speed on extrusion width was quite interesting: https://www.duet3d.com/blog/duet3d-research-nozzle-back-pressure-speed-and-pressure-advance#:~:text=Why%20does%20the%20pressure%20advance,extruder%20force%20at%20higher%20speeds.
I'll run a few tests on PA with varying speeds and let's see what the experimental results show us - that I am curious about!! Running the same PA test (accelerations) at 50-100-150-200 mm/sec with all other variables the same across all and I'll post results below.
