Ultimaker / Cura

3D printer / slicing GUI built on top of the Uranium framework
GNU Lesser General Public License v3.0
6.12k stars 2.07k forks source link

Allow using a bump (displacement) map for the fuzzy feature. #13627

Open Poikilos opened 2 years ago

Poikilos commented 2 years ago

Is your feature request related to a problem?

Currently, to create an effect of bump mapping (displacement mapping technically), users of any slicer must create dense (up to or greater than a polygon-per-pixel) meshes.

Describe the solution you'd like

The solution seems to adapt the existing Fuzzy Skin feature to have an option to change the type of input from "Random" to "Bump Map". Then the detail could be added during slicing rather than during modeling, following the industry standard if slicing is considered a form of "rendering." Detail of any pattern can be faked, as long as it is shallow enough to not create new overhangs (suggested calculated maximums are below). The features would become visible if the existing fuzzy_skin ("Fuzzy Skin") checkbox is checked. The following settings would be required:

Caveats

* If the detail is of the same depth as fuzz, only mapping and file reading code is necessary (fuzz_depth and fuzz_offset can be excluded from the GUI and the values can be hard coded to the defaults. The user can adjust the image brightness in a different program to adjust the outcome). Other fuzzy code would be reused.

Describe alternatives you've considered

Having more polygons seems to be the only other way to add displacement mapping. Most people who want this type of thing apply a displacement map before uploading an stl, causing it to have a huge number of polygons, causing the aforementioned delays even on an older i7 with similar benchmarks as modern ones. One outcome I've seen is hanging for over a minute just by switching to edit mode in Blender (in the worst case scenario with a very detailed mesh plus multiple boolean modifiers).

Affected users and/or printers

Anyone who wants the part to have non-random bumpy surface will benefit from this. Ultimaker itself and any other company or person utilizing the internet or networks for transferring models will benefit from this any time they or their customers have this use case. This problem was solved in gaming, CAD, and 3D animation pre-production quite a while ago: bump mapping (called displacement maps in terms of physically-based rendering). The same realtime rendering technology applies to the "Prepare" view of Cura, and to various programs used to model prior to opening the model in Cura.

Additional information & file uploads

Some additional caveats seem to be out of scope but could be solved with this new iteration to the Fuzzy Skin feature or in a later iteration:

External Links

There are some possibly different notes that I made at the following PrusaSlicer (not Cura) issue:

For developers trying to implement this and test it, 5.2.1's "What's New" slideshow has a slide that says Cura is now easier to build. Here is the link it provides:

Example models:

Example displacement maps:

PhilBaz commented 1 year ago

This would be amazing!

TQM21 commented 22 hours ago

I came here to suggest changes to using the fuzzy skin function to create a simple regular pattern for surfaces. Any shallow regular pattern can greatly improve the visual appeal of flat surfaces by hiding/disguising the layer lines, and assist in hiding the Z-seam.

User control of the random effect, down to 0 if desired, would be a good start. Allow triangle or trapezoid shape. User control of duty cycle. User control of rotational offset increment for each band. User control of how many print layers per band. Something like that.

@Poikilos bump map feature request is even better, and orders of magnitude better expressed than I ever could!

As already said, it is much more efficient to add texture in the slicer than modeled onto the object. Hoping this comment gets his feature request more support. Bump!