Designing for 3D printing (especially ceramics)

I’ve been using Grasshopper to design for 3D printing for about six months now, and figured I’d share some of what I’ve learned. I’m not asking a question here, just documenting what I wish I had found when I started out months ago.

I’m 3D printing ceramics, which are different from plastics in that extrusion width is more or less fixed.

For plastics, you can make thinner and thicker lines by extruding at different flow rates. Higher rates squish against the already-hardened previous layers and produce a wide line, and low flow rates cause the plastic to stretch and produce a thinner line. If the nominal extrusion width is 0.4mm, you can get anywhere from 0.2mm to 0.6mm with high reliability (depending on specific plastic and printer).

Ceramics don’t work that way. Because the previous layer is still soft, high flow rates squish into and deform the print. And clay doesn’t stretch; low flow rates result in tearing and holes.

What does this mean for Grasshopper? Well, organic shapes tend to have variable cross-sections. Surface offset, etc, use offsets relative to the normal of a surface at a given point, so when the slicer comes along, a wall that is 2mm thick at each surface normal might vary between 2mm and 4mm depending on the angle from vertical.

Take a simple vase shape, modeled as a loft of a bunch of polygons with some variation in radius to make it interesting:


…baking that into Rhino, take a look at the variation in wall thickness depending on phase of the wave:

23 92

For plastics, that might work fine, and the slicer will adjust flow rate to produce the different width walls. For ceramics, it’s catastrophic.Either the thick part will crush the previous layer (and likely cause a collapse, because it’s at the steepest overhang angle), or the thinner parts will have gaps and stutters as material is stretched (also likely causing a print failure when the next layer hits the gap and goes all twonkyfuddles.

So, rather than feeding the slicer geometry that doesn’t lend itself to cross-sectioning in clean multiples of our extrusion width… it’s cleaner to do build each slice in Grasshopper and produce an STL where each layer will slice perfectly:

The result is roughly the same, though the renderer doesn’t like it as much:

And now when we bake into Rhino, we have perfect little stair steps for each layer because their cross sections are the same:


The downside here is that it can be a lot slower to process, especially if there’s a desire to solid union each layer into a single whole object again (hence the data dam in the attached).

This example shows nearly the same geometry built using both loft and layer-by-layer approaches. (19.1 KB)


I don’t do ceramic printing but interesting! Thanks for sharing

Hey that looks awesome! Could you share this in our 3D ceramic forum?

1 Like

Most Interesting post Brooks, thanks. I do only plastic prints, but I have looked at several examples of clay printing (and concrete printing as well).

From the photos and videos I’ve seen it looks to me like those results are produced by using Vase mode on 3D models that are solely single surfaces. The Loft surface you showed is such a surface - it is obviously a closed 3D curved surface, but it has no thickness. So I don’t understand how your 2 images have any thickness at all, let alone different ones in different places.

Although I’ve never looked at the actual code from a slicer program I have inspected their generated GCode. What slicers do is produce printhead GoTo points in a given layer and an accompanying extruder feedrate that will produce a bead of material that has the specified layer height as the printhead moves from one point to another.

A print made using Vase mode from an STL file that is a just a single curved surface with no actual thickness produces a part that is a single layer thick because the slicer can generate only one toolpath of width for each layer printed. From what I can tell from the Vase mode prints I’ve made there doesn’t seem to be any significant variation in extruder speed other than adjustments for acceleration/deceleration at corners.

The problem with Vase mode of course is that, for surfaces that incline more than 45 degrees or so, there can be insufficient width of material from the previous layer to support the next layer. The typical workaround for this is variable layer height - by making the layers thinner you get more overlap between layers.

But this also results in a thinner printed surface, which would be an especially bad problem for ceramics. This is one reason why I always generate parts that have a real thickness and are not just a single shell with no 3D thickness.

So I wonder if a better approach for clay printing might be to modify a slicer program to create custom GCode that takes into consideration the unique characteristics of clay “filament”. If this were the case a given part could then be printed in plastic or clay - or even some other material (concrete? cookie dough?)

Some interesting thoughts there – I have not tried surface-based prints, and have always done lofts and then offset surface to create solids, then exported that STL to the slicer. The offset of the lofts is what leads to variations in outline thickness for any particular layer, since the loft offset is in the direction of the normal for that height.

When you use a surface in vase mode, how do you control thickness for the base? Separate pieces and change the slicer settings by height?

Many ceramics do use vase mode for the walls, since the single extrusion spiraling up results in less jarring (no layer changes, no retraction), but the challenge comes in printing larger pieces… with a 1.1mm extrusion width, you just can’t make something 300mm tall, since the bottom layers will collapse under the weight of upper layers.

So I have focused on generating STL’s that the slicer will export as correct gcode for my forms, including a thicker base and multiple perimeters on lower layers that can support the upper part.

In addition to modifying a slicer to consider filament properties, there are also some interesting approaches to generating the gcode directly in Grasshopper, so the model building and gcode creation are in a single place and can share logic (e.g. “gradually reduce extrusion multiplier over height of piece”). I haven’t touched that yet but am excited to.

Thanks for the comments… I will explore using surfaces, since I hadn’t even considered that as an input to the slicer.

I too use lofts quite frequently for my prints. My basic method is really simple:

Create the outside loft shape
Cap it
Scale it down to about 99% in XY only
Slice off the bottom 8mm of the scaled down Brep
SDiff the smaller one from the bigger one.

This results in a closed Brep that has thickness in all dimensions, is a solid/manifold Brep, and that always slices properly. Sometimes, depending on the shape of the initial loft, the down-scaled Brep has to be somewhat small. This requires more infill between inside and outside, but my infill is 10% so it’s not a big deal. Here’s a recent example of that approach: Elliptical vase

I’ve seen some postings here about creating GCode diretly from GH. My sense is that’s never going to happen because there is a large amount of pretty specialized code required to slice and produce GCode. And to do that takes a much different mindest from those folks who develop GH.

Finally - this guy does the best clay printing I’ve seen: Olivier Van Herpt. He’s got what appears to very nicely made custom printers. I’d love to know what slicer he uses.

I like the vase! It’s a good technique and I’ll try it. For the elliptical vase, is the scale constant in X and Y or did you compensate for the different axis lengths by scaling differently, so as to produce a constant wall width (would it be constant? now I’m doubting my math)

I don’t think the scaling approach would work for open curves like this:

I’m a fan of Olivier Van Herpt’s stuff, he’s definitely doing great work. His printers look similar to the WASP approach. I’m decently happy with the WASP extruder I have, but ordered my next printer from 3DPotter and am excited to see how it does.

For gcode generation in GH, I believe you’d get away from slicing entirely and just generate the tool path. The nice thing here is that the path can be non-planar… rather than slicing everything into X layers, you can have a single path that snakes back and forth, or draws walls at angles to the build plate.

It is definitely a lot more work, but it’s attractive because the gcode is exactly optimized for each piece. Bowie Croisant gave a talk at NCECA about this approach and it looks very intriguing.

For the elliptical vase, is the scale constant in X and Y <== Yes

**did you compensate for the different axis lengths by scaling differently, so as to produce a constant wall width ** <== No - I’m too simple-minded for that. What I do is pick what seems to be a reasonable scale factor for the inside surface. Then I bake and slice the final Brep. One of my slicer’s has a nifty “Section” capability that slices the sliced results vertically, thus revealing the cross section of the entire piece. I just look at that and see if any of the walls are too thin or too thick. If so I just tweak the scale parameter accordingly.

Needless to say this method does not always work. In that case I have to get more creative (and complicated): Crenellated2

The blue spiral vase you showed is quite spiffy indeed - and you are correct - my simple method would not work for that one. For something like that my approach would be to make the spiral shape via 2 loft curves, and then do a + & - offset from that. (Or maybe just a + or a-.) That Would yield 2 zero thickness surfaces that need to be turned into a solid closed Brep. I’d use their top and side edge curves to make ruled surfaces, or maybe Sweep2 surfaces using an arc.

I’ve looked at the 3DPotter stuff too. Unfortunately to accommodate that I’d have to move my printing place from a bedroom to the garage, and that’s more than I’m prepared to do. But I hope you’ll post some results when you get your gear set up.

As far as GCode generation goes - without slicing there would have to be some way to generate GoTo points on the part’s surface that meet the desired smoothness tolerance and that also meet the special requirements you describe that are specific to clay material. I know how to do the first part, but it’s not clear to me how one would translate the parameters of clay material into an algorithm that would control the placement of proper GoTo points.

Your point is well taken though - today’s 3D printers are really 2 1/2 D machines because they move either in the Z or the X & Y directions, but not all 3 at any given time. I have read some postings about how nice it would be to have a true 3D printer - with a machine like that you could print a perfectly smooth spoon shape, something that is not possible today.

The Crenellated vase is pretty!

I will definitely report back on 3D Potter and other progress. I’m a bit stalled right now due to moving house and kiln tech difficulties, but that is all temporary.

For gcode generation, take a look at Silkworm, Xylinus, and Droid… I have not used any of them yet, but expect to soon. Silkworm allows true 3d paths, Droid looks like a traditional slicer.

Thanks for those links - I’ll take a look at all of them.

Hi Brooks - your blue vase gave me the idea to do this:
I’m still working on it - biggest issue is that due to the way I create the spiral the final geometry gets thinner towards the center. There’s got to be a simple way to prevent this but I just haven’t figured it out yet.

Since my print will be plastic I think I’ll turn it into an LED table lamp by adding a base the holds the light source. (That way I don’t have to make a separate piece that closes it.)


I think you’re running into the offset problem that prompted my original post in this thread: the width at any given section will vary with the sine of the angle. If the bend became completely horizontal, it would be zero width. Offset surface manifests this because it uses surface normals, but the same thing happens with scaling.

My “solution” is to program the layers in Grasshopper, using one plane per layer (if the piece is 200mm tall and layer height is 0.5mm, 400 planes). Then I draw a 2D spiral on each plane, user a curve offset, close ends, and extrude just that one plane by the layer height. Finally, join all 400 of them into a solid and give that STL to the slicer.

That takes perimeter thickness and wall angle out of the slicer’s hands. Not sure it counts as a simple way, though :slight_smile:

EDIT: I may have misunderstood you; I thought you meant “thinner halfway up”, when you probably meant “thinner in the XY center” (which I can see). I actually kind of like that, but I’m sure it’s solvable.

Your edit is correct Brooks - I made the final geometry from a loft of 3 2D spiral shapes at different elevations. Each of the 2D spirals gets thinner (horizontal width reduces) as you go from the outside end to the inside end. For the example I posted I scaled the top @1.2 times the size of the bottom, and the middle @ 1.121 times. The whole thing actually gets thicker from bottom to top.

Here’s what I came up with for my first print:

I tweaked the design so that there would always be 2 layers of plastic for the light to shine through. The fact that the surface is thinner at the center of the spiral should let more light through. It will be interesting to see how it looks. I’ll start printing it tomorrow.

1 Like

Did you guys ever try Dual Color Clay Printing?

Project from Tom Lauerman, Professor of Art, School of Visual Arts, Penn State University, USA.

1 Like

Hi Carol - I’ve only done standard PLA plastic prints, but I got interested in other material when I first saw some concrete printers making low cost housing. After that my son showed me this video of his friend Peter Houk’s glass printer at MIT: Glass.

With a multiple nozzle printer it should be possible to print with as many different materials as you have nozzles. I did beta testing with my printer using a single nozzle with dual extruders & 2 colors of PLA. That did not work, and my conclusion was you just have to have a separate nozzle for each extruder’s material. So it looks like the video you showed is on the right track.

1 Like

@carol.portugal18, thanks for sharing! Very cool stuff. I have not yet tried two color. I have a new printer on the way with two clay tanks and extruders, and I’m looking forward to experimenting with two colors and different nozzle diameters.

I am also very interested in using a single extruder but injecting colored slip or stain near the nozzle; seems like it should be possible to do color mixing that way.

1 Like

Constant thickness for the spiral geometry is soooo simple! Why didn’t I think of this first? Instead of creating 2 separate spirals curves, all I had to do was create one and then use the GH Offset component to make the second one. I’m keeping both methods in my GH file until I see the results of my first print.

I want to see the results when you try!

Hi Carol - so do I! I’m currently having a problem with my printer’s hotend that is preventing me from completing a print. So it may be a while before I can post any actual results.

Now if I had a clay printer instead…:grin:

I did continue to work on my GH file so I could make something like Brooks’s blue spiral vase. What I came up with is this:
Making the straight divider part turned out to be quite difficult (for me anyway) and to do it I had to use a bunch of different GH components. So I opted to use the simpler approach for making the spiral part a constant thickness. I think this makes for a better looking result,