SoftFever / OrcaSlicer

G-code generator for 3D printers (Bambu, Prusa, Voron, VzBot, RatRig, Creality, etc.)
https://discord.gg/P4VE9UY9gJ
GNU Affero General Public License v3.0
6.72k stars 788 forks source link

Allow marking specific layers to be treated as full "top layers" #5738

Open stew675 opened 3 months ago

stew675 commented 3 months ago

Is there an existing issue for this feature request?

Is your feature request related to a problem?

When printing objects that have large flat areas with additional surface features on top, the slicer will try to extend the infill vertically into the top features. This results in the layer that the features sit on top of having an inconsistent appearance as the slicer has to leave gaps in the surface for the lower infill to extend vertically into the upper features.

Embossed text would be one such example where this occurs, where the layer that the text sits atop of is full of moves to exclude the areas that the embossing sits on because it wants to extend the infill vertically into the embossing. The action of filling in the broken up surface often results in a messy appearance.

Which printers will be beneficial to this feature?

All

Describe the solution you'd like

Ideally, much like how we can right-click on a layer height to add in custom g-code, there would be an option to say "Treat as a top layer".

Basically the slicer would treat the object up to that layer as if it were a complete object in its own right, and additional features on top of that as before.

The best way to describe this would work would be like the following gcode splicing example:

Now we have generated g-code that has a fully clean middle-layer that has features added atop of it, without the broken surface moves to avoid the infill that used to extend between the upper and lower portions.

This will result in much cleaner prints without having to do the above g-code splicing work by hand.

Describe alternatives you've considered

No response

Additional context

No response

jeremytodd1 commented 3 months ago

I think I know what you're asking for and I believe the feature you actually want is SuperSlicer's "Anchor Solid Infill by X mm" setting

This specific feature is a better solution to this issue, and is the one feature that I have desperately wanted for Orca to get for about a year now. This single setting has huge impacts on top layers for some models, especially for things like signs with text on the top, or even maps that people have been printing lately.

Here is a bit of an example to illustrate what "Anchor Solid Infill by X mm" does. This is a sign of "The Office." theofficesign

After tuning that Anchor Solid Infill by X mm setting, this is how SuperSlicer prints the top layer before the top text: superslicer_gif

Orca does not have this feature at all, so it's impossible to tune for this. This is how Orca prints the same layer. orca_gif

SuperSlicer is able to print the entire layer in one go, which makes it look much more consistent. Orca has to stop the line and continue it again repeatedly, which can cause inconsistencies in the look of the layer.

@SoftFever , @igiannakas , TLDR: Having this Anchor Solid Infill by X mm feature would be a great way to keep the top layers looking consistent all across the board.

Ataraxia-Mechanica commented 3 months ago

You can add a height range modifier to that layer and the layer below it, set it to 0 top layers and 100% infill, disable only one wall on top, then slow solid infill down so its speed matches top layer. Very hacky but it works. image image

jeremytodd1 commented 3 months ago

You can add a height range modifier to that layer and the layer below it, set it to 0 top layers and 100% infill, disable only one wall on top, then slow solid infill down so its speed matches top layer. Very hacky but it works.

Thank you for this. This is the only workaround that I've seen that works. (Just to point out, you can replicate the "only one wall on top layer" setting by just simply changing wall count to 1 in the modifier as well, so you don't need to lose that setting for the top layer)

Saying that, I think this only shows how badly Orca needs the Anchor Solid Infill by X mm setting. That is a lot of steps instead of just tuning one simple value.

stew675 commented 3 months ago

I think I know what you're asking for and I believe the feature you actually want is SuperSlicer's "Anchor Solid Infill by X mm" setting

Thank you for that. The videos you provided are pretty much exactly that. The Orca Slicer video perfectly explains what Orca Slicer does today, and it's really annoying.

I'm not particularly fussed by what name it would go under, but I think it's important that the layer gets treated as a top layer, rather than as Solid Infill. Perhaps SuperSlicer is treating it as a top layer though?

Thank you for this. This is the only workaround that I've seen that works. (Just to point out, you can replicate the "only one wall on top layer" setting by just simply changing wall count to 1 in the modifier as well, so you don't need to lose that setting for the top layer)

Agree. Thank you for the work around @Ataraxia-Mechanica. I appreciate that, but that is way more complicated than what I'm looking for here.

Saying that, I think this only shows how badly Orca needs the Anchor Solid Infill by X mm setting. That is a lot of steps instead of just tuning one simple value.

I'd even be happy with a radio button that simply says "Treat layers that have partial top-layer infill as a complete/full top layer", so that way it catches all layers that have top-surface features without the user having to manually fiddle with it. The subsequent (higher) layers should start off as if there were 0 bottom layers (ie. immediately start printing infill in the next layer just like what happens currently).

jeremytodd1 commented 2 months ago

@Ataraxia-Mechanica

Another issue with that solution is that with the modifier, it's no longer considered a top surface. zhopsetting

Due to this, Lift Z Enforcement's "Top and Bottom" surfaces setting will not work on this. This will cause scratches on the top layer. You can see here there is no lift in the travels: nozhop

jeremytodd1 commented 1 month ago

@vovodroid

It looks like the actual value's name is "external_infill_margin"

Screenshot 2024-07-26 123505

You can find it in the Infill section in the Print Settings tab.

Eldenroot commented 1 month ago

I believe @vovodroid will send a new PR for this soon :)

jeremytodd1 commented 1 month ago

That would be absolutely amazing. Not being able to tune for this has been haunting me ever since I switched to Orca. I really appreciate it.

vovodroid commented 1 month ago

It doesn't work now in SS 2.7 branch, as function where it was implemented was changed since Prusa 2.5. Let's hope Merill will fix it eventually, thus it could be ported to Orca.