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

FR: support inflation and support conform to boundary #4783

Closed
Schild0r opened this issue Sep 22, 2020 · 1 comment
Closed

FR: support inflation and support conform to boundary #4783

Schild0r opened this issue Sep 22, 2020 · 1 comment
Labels

Comments

@Schild0r
Copy link

One thing that always bugs me out about PrusaSlicer is support generation. I have worked with S3D and Cura as well and although PrusaSlicer has a few aces up its sleeve like support blockers/enforcers and support interface etc, support generation of Cura and S3D just works better in most cases. Why do I think they are better? They are just better in matters of removability and simpler which makes them more reliable in many cases. While you can turn off features like the interface in PrusaSlicer to make them simpler there are still missing options to make them just as simple as in the other two slicers and on that I am gonna focus here.

  1. Support inflation (as it is called by S3D) or support horizontal expansion (as in Cura)
    PrusaSlicer has no Option for that. It just always inflates support which often results in worse removal like some support lines that undercut the part in some way. Let me give you an example. Let's look at this part which is a business card holder and lets assume we'd have to build it in that orientation:
    Part
    You could argue that this overhanging beam on the top is well within briding territory but if you look close you will see that it is curved and you cant bridge a curve like that or it will be a straight beam the first few layers so we have to support it.
    If we turn the interface off which gives us a better look at what I want to show as well as making support removal easier we get this:
    PSsupport
    You can see that the supports are inflated in xy direction well beyond the actual boundaries of the surface that had to be supported. This makes support removal harder because they now not only base on the bottom beam but also in front of as well as behind it, thus enclosing the beam from both sides. Also this step the supports create results in less reliability because there now is a transition. Also look at the most left support:
    PSsupport_fail
    Here we have half a mm of a support line that just does not do anything for us because that is just from the support area expansion and also it will not be able to being built. BTW I also but a support blocker there (where the small support segment is) and that did not change anything
    Cura on the other hand lets us set the support inflation distance and if we set it to 0 it will give us that result:
    CURAsupport
    simple and it works and no extra lines we don't need.

Now let me explain the second thing that also plays into that a little bit.

  1. support conform to support surface boundary
    Currently PrusaSlicer seems to always make 90° turns when ZigZagging the support lines (see above), overshooting the actual surface (which results in the expansion) but if you look at the Cura result you will see that it not only not inflates the support but also conforms to the boundary of the supported surface (the curvature of the beam) resulting in non 90° turns within the ZigZag lines.
    This is necessary for the not inflated support to work because otherwise you'd get straight lines again that are being bridged from one support line to the next instead of being supported with a line of the same curvature below.
    Coincidently if we look a few layers lower, PrusaSlicer does exactly that, only that it conforms the inflated support to the outside boundary/curvature instead of conforming it to the inside.
    PSsupport_bot

Implications:
support inflation alone already has a feature request but the thread (#2377) looks kinda dead and has not much explanation and no comments
IMO this feature would make supporting of most models simpler and more reliable.
Note though that with the support inflation distance set to zero (like in Cura) and conforming supports (like in Cura) the interface should be turned off because that probably would not work well together (building a straight line interface on curved supports the interface would be missing straight endpoints to attach to)
So IMO the feature should be implemented the following way:

  • Support conform to boundary: if this is unticked everything behaves just as it does now, if ticked, see above
  • Support inflation value in mm or % of extrusion line width (positive or negative) exactly does that: inflate (or deflate) support area (conformal to boundary)
  • Interface layers: make sure conformal supports are off if interface layers are a non zero value
bubnikv added a commit that referenced this issue Mar 23, 2021
expanded to a grid (the old way) vs.
snug (like the upstream Slic3r, Cura or Ideamaker).

Snug supports suffered from the degeneracies when merging overhang islands
over a large number of layers when projecting the support towers down.
We borrowed the idea & a bit of code from Cura by simplifying the support
polygons by closing the concave cracks, see the smooth_outward() function
and the MutablePolygon class.

Fixes Support problems with models with hole in the walls. #555
Fixes Support in the Air #740
Fixes [Bug] Supports generated beyond bed edges (X<0 and X>250) and where none are needed. #902
Fixes Unable to remove support material/can't change support "inflation distance" #2708
Fixes FR: support inflation and support conform to boundary #4783
Fixes Support blocker not working on this model #1346
Fixes Unnecessary support material #1993
Fixes support blocker enforcer issue #6240
@bubnikv
Copy link
Collaborator

bubnikv commented Mar 23, 2021

Snug supports fixed with af9c7c9.
For the support expansion we have #2377

Implementing a new switch for the shape of support towers:
expanded to a grid (the old way) vs.
snug (like the upstream Slic3r, Cura or Ideamaker).

Snug supports suffered from the degeneracies when merging overhang islands
over a large number of layers when projecting the support towers down.
We borrowed the idea & a bit of code from Cura by simplifying the support
polygons by closing the concave cracks, see the smooth_outward() function
and the MutablePolygon class.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants