Sunday, July 9, 2017

[3dprint] Adaptive slicing, smooth and optimized

IceSL 2.1 introduces per-layer settings, with a simple interface allowing to customize many parameters per-layer. Below is a screenshot for layer thickness (blue is thinner).

Model is https://www.thingiverse.com/thing:222814
The bar on the left represents the height of the print, and by simply placing keys (a setting value at a given height) you can precisely control how the parameter varies along the print. In between keys a smooth interpolation is done, avoiding abrupt changes that might produce visible differences (but if abrupt changes are required, simply place two keys with different values next to each others).

The idea that smoothness is important for adaptive slicing was recently introduced by Prusa. My experience with adaptive slicing is that indeed abrupt changes lead to noticeable differences in surface finish, and therefore if visual quality matters, smoothness is great. IceSL smoothly interpolates all per-layer parameters.

However, regarding adaptive slicing IceSL goes much further than just providing an interface. It features a novel, state of the art algorithm for automatic layer thickness selection. This is powered by an algorithm developed by Marc Alexa, Kristian Hildebrand and myself, that was recently published in ACM Transactions on Graphics (will be presented at SIGGRAPH this summer, don't miss it!).

What is different between this algorithm and previous work is that it computes a provably optimal result (in a discrete setting): the best possible choice of slice thicknesses that will minimize an error, in this case the part accuracy (the volume difference between the print and the actual geometry). Not only that, but it finds a solution for all possible number of slices in a single optimization pass.

The bottom line is that you get automatically a great selection of layer thicknesses, for a desired number of slices. Yes, this means you get to choose a number of slices (which strongly correlates with printing time in most cases), and the algorithm selects the slice thicknesses than provide the most accurate result for this choice.

One drawback of the algorithm as described in the paper is that it does not produce a smooth result. As smoothness is important for visual quality, I provide in IceSL a modified version that generates smooth results (but gives up optimal accuracy). Of course you can choose between both versions!

Let's see some results! (To activate the optimizer simply click on the "Optimize" button at the top of the left bar, in IceSL-slicer of IceSL-forge. After optimization a slider lets you choose the number of slices.)

Here is the castle for 999 slices from 0.1 to 0.3 mm, smooth solution. See how the algorithm uses thick slices in vertical parts and thinner ones in slanted/detailed regions. Keep in mind this is a compromise constrained by the chosen number of slices.

Result with 999 slices, smooth solution

One thing that cannot easily be seen, is that the position of the horizontal surfaces (tops) is now very accurate. When slicing at 0.3 mm, if a horizontal surface is located at height 1.05 mm, the positioning error is as large as 0.15 mm ! (because 3 slices give 0.9 mm, and 4 slices give 1.2mm, we cannot reach height 1.05mm). Our algorithm will insert one smaller slice to ensure the top part is accurately positioned, and this is true of all complex alignment cases that can occur.

Here is another solution with more slices (you can interactively select the number of slices you want in the print, with immediate feedback):

Result with 1499 slices, smooth solution
Great isn't it? And you can always fall back to manual selection, if you do not like the optimized result.

Stay tuned for other focuses on the new features of IceSL 2.1, and don't miss the SIGGRAPH presentation this summer about our algorithm (Session "Fabricating curves, surfaces and volumes, Tuesday, 1 August, 10:45 am-12:35 pm).

Follow us on @iceslapp