Giter VIP home page Giter VIP logo

Comments (8)

Sebastianv650 avatar Sebastianv650 commented on May 30, 2024

Confirmed also with the latest code, gaps are now smaller but also visible were there are voids in the previous infill.

from prusaslicer.

bubnikv avatar bubnikv commented on May 30, 2024

Sebastian,

I indeed changed something on the way the infill work. And indeed there is no simple solution to the path planning problem.

I re-wrote the rectilinear, grid, triangle, cubic infills from scratch. The infills are now very fast and they follow the perimeter line wherever possible. In the current master branch I disabled the connecting line following the perimeter for solid infills, if the line is longer than 3x the line separation distance. This leads to a better top solid fill than the build you tried before and it is close to the behavior of the old Slic3r. Actually I believe the way the solid infills worked in Slic3r at the time you printed the cat is very much the same way as it works in Simplify3D and indeed the old Slic3r achieved nicer top infill than Simplify3d. And indeed we noted that the "new" Slic3r behaves differently in regard to the top surface quality.

The original code from Alessandro contains some fudge factors, which are difficult to get hang of and the understanding comes slowly, mainly through a trial and error.

The way the infill lines are calculated, is following: First the infill region is shrank by half a line separation. Then the shrank region is intersected with set of parallel lines spaced by the extrusion line spacing. The trimmed lines may or may not get connected. Alessandro connected the lines by straight segments, me and Simplify3D and kisslicer connect them with a piece of an offset perimeter. Now there are some slight differences. For example, Alessandro extends the lines of the infill 30% of the line separation distance than the theoretic optimum, which is similar as if you extended the perimeter-infill overlap by 30%. With this disabled in the new Slic3r, you have to set a higher perimeter-infill overlap to achieve a similar result. The Prusa3D profiles are set to 25 or 30% perimeter-infill overlap for this Slic3r Prusa Edition build.

Now why there are more gaps along the circles? First the bottom image seems to use thinner lines for the infill. I think you are mixing apples with oranges a bit. The top image shows a solid infill, which uses thicker extrusions, the bottom image shows the top infill, which uses thinner extrusions, leading to a higher chance of fitting the lines in.

The other reason why the old slic3r seems to be better, is an adaptive extrusion line width algorithm for solid infills. True, I have disabled this algorithm, as it has a questionable value in most cases. Namely, it works very well for rectangles aligned with the infill direction (which is very improbable) and now I see it works very well for circles. But that's about it. For general shapes, you will get the gaps anyway, if you don't fill them by some general over-extrusion fudge factor as the perimeter-infill overlap percentage. There is no line width adjustment factor, which would lead to a nice fill of complex shapes.

I have a version of the adaptive extrusion line width, which limits the extrusion width change to a reasonable amout, for example to +20%. I may enable it, as it should be relatively harmless and it would cover this special case of a round extrusion.

It may be reasonable to infill the "ensure vertical shell thickness" walls with a top infill to achieve finer control, but if there was a solid infill touching this "ensure verticall..." infill region, they would be filled in separately. There is no "one fits all" solution.

There are ways to improve these gaps somehow, for example by introducing a thin gap fill. It is certainly on my TODO list, but these algorithms are not simple.

I am open to a discussion on this topic. Please try to increase the perimeter-infill overlap. You may try to enable the "extra perimeters" feature for the cat model as the extra perimeters would be appropriate for circular tops.

from prusaslicer.

bubnikv avatar bubnikv commented on May 30, 2024

You may try to set
params.dont_adjust = true;
to false
at Fill.cpp:231

and then there is a factor_max set to 120% of the line spacing
in function
coord_t Fill::_adjust_solid_spacing(const coord_t width, const coord_t distance)
which you may try to increase or decrease, once you set dont_adjust to false.

good luck, I am looking forward to your results, as I don't currently have time for that myself. I shall fix the bridging issues now.

from prusaslicer.

Sebastianv650 avatar Sebastianv650 commented on May 30, 2024

Thanks for the detailed description!

First the bottom image seems to use thinner lines for the infill. I think you are mixing apples with oranges a bit. The top image shows a solid infill, which uses thicker extrusions, the bottom image shows the top infill, which uses thinner extrusions, leading to a higher chance of fitting the lines in.

Up to now I'm using the exact same profile between the two Slic3r versions. What makes comparison a little bit time consuming is that for whatever reason only the Slic3r I built last will start, the other one throws an error message.
So all line widths should be the same, I fixed everything possible to 0.48mm. Both images are showing the same (maybe +-1) layer. Alessandros Slic3r gives the solid layer, I guess because it's trying to keep the wall thickness as you try it with Ensure wall thickness.
Enabling or disabling of Extra perimeters as needed in or without a combination of Ensure vertical wall thickness isn't changing anything to the infill. In all cases, I get the zig-zag along the perimeter (yes, it is recalculating the infill when I'm checking or unchecking the boxes).

I will play with params.dont_adjust next.

Edit: It's changing something when Extra perimeters or Ensure vertical wall thickness is togled. But it's barely visible, I couldn't tell a mayor difference..

from prusaslicer.

Sebastianv650 avatar Sebastianv650 commented on May 30, 2024

You may try to set
params.dont_adjust = true;
to false
at Fill.cpp:231

Now it looks perfect 😃
This is the only change I made, not a single visible fault left. From the preview, I was a little bit scared if the outermost lines are not a little bit too long, leading to over extrusion. But at least it's not visible, so I'm happy now.

unbenannt

from prusaslicer.

Sebastianv650 avatar Sebastianv650 commented on May 30, 2024

Just an idea: What's about trying to use "extra perimeters" (*) when the vertical wall thickness isn't suficient instead of using tiny zig-zag infill. If this isn't working due to a complex shape for example, use the current behaviour.
This way, especialy in the spherical example of the cat, there could be used aditional perimeters so no voids to the perimeter can occur as with the zig-zag infill and therefore the vertical wall thickness is guarantied to 100%.

*: Same name wording as the existing Slic3r option, but extra perimeters as defined at the moment isn't doing that..

from prusaslicer.

bubnikv avatar bubnikv commented on May 30, 2024

I have re-enabled the adaptive solid infill line width. The line width could be increased by 20% only.
22ca927

Just an idea: What's about trying to use "extra perimeters" (*) when the vertical wall thickness isn't suficient instead of using tiny zig-zag infill.

Please create a new Issue entry for this proposal as it is separate from this issue and it is really more a feature request then a bug report. Thanks.

from prusaslicer.

bubnikv avatar bubnikv commented on May 30, 2024

Up to now I'm using the exact same profile between the two Slic3r versions. What makes comparison a little bit time consuming is that for whatever reason only the Slic3r I built last will start, the other one throws an error message.

You can install multiple Strawberry Perl installations on Windows. Under OSX or linux, you can use perlbrew for the same purpose.

from prusaslicer.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.