3D Printing on Fabric — Tips, Tricks, and Code
Over the years I have seen several videos (3D Printing on Fabric and How To 3D Print On Fabric) that showed how to combine 3D printing and a thin fabric such as tulle. I also saw Sophy Wong’s amazing 3D-Printed Dress, of course.
The process always looked a bit delicate and tenuous to me, and I was not sure if I could make it work.
Give it a Try
Earlier this month I skipped past my misgivings, ordered a roll of ivory tulle, and fired up new Prusa MK4 printer to see what I could do. I created a very simple print that included nine pyramids, and added a Pause command a few layers in:
I sliced the design, loaded it into OctoPrint, and started printing. Oddly, the pause was not respected, and I had to initiate a filament change manually in order to regain control and add the tulle. Later, after some investigation, I learned that this particular printer only honors the Pause (M601) command when printing from a USB stick.
During the pause, I cut a piece of tulle to size and carefully taped it to the print bed using blue painter’s tape. I was confident that the tulle would melt, that the tape would snag on the printer, and that I would have a mess on my hands. None of this happened and I ended up with a simple yet inspiring (to me, anyway) print:
I went to sleep that night thinking about all sorts of fun ways to use this, most of which involved creating grids of repeating elements. My first late-night thought was to create some sort of tiling framework that would accept limits, stepping values, and a shape to repeat.
OpenSCAD For the Win
The next morning, with visions of various tilings running through my head, I installed OpenSCAD (“The Programmers Solid 3D CAD Modeller”) and quickly learned enough to write a pair of nested loops:
Step = 22;
Lim = 80;
Size = 18;
Height = 3;
/* Grid of squares */
for (x=[0 : Step : Lim])
for (y = [0 : Step : Lim])
translate([x, y, 0])
{
linear_extrude(height=Height) {square(size=Size);};
};
This was so easy and clean that I decided to forego the idea of a framework, and just started creating simple programs! Here’s the printed output from that code:
Improvments — Printed Frame
After carefully placing the tulle on the print bed a couple of times, I started to think about a better way to hold it down. After thinking up a few overly complex solutions, I came up with a simpler and better one: a 3D-printed frame:
Here’s the OpenSCAD code for the frame:
/* Frame to hold tulle to print bed */
OuterSize = 150;
Border = 10;
Step = 10;
InnerSize = OuterSize - (2 * Border);
linear_extrude(height=0.1)
{
difference ()
{
square(size=OuterSize);
translate([Border, Border, 0]) square(size=InnerSize);
}
};
The roll of tulle that I bought is 150 cm wide, so that’s how big I made the frame. I lay it out on my cutting mat, and use a medical-grade scalpel to cut it. The tulle is so thin and transparent that it is almost invisible, and I have momentarily lost my pre-cut pieces more than once I already!
Next, I started to experiment with various sizes and shapes. So far, I like the hexagons the best:
Here’s the code for the hexagons:
/* Hexagons in an offset grid */
R = 7; /* Radius */
H = 3; /* Height */
G = 13; /* Gap between items */
F = 6; /* Hexagon */
N = 15;
for (y = [0 : 2 : N / 2])
{
/* Even Row */
for (x=[0 : 2 : N])
{
linear_extrude(height=H) translate([x * R, (y * G), 0]) rotate([0, 0, 90]) circle(R, $fn=F);
}
/* Odd Row */
for (x =[1 : 2 : N])
{
linear_extrude(height = H) translate([x *R, ((y + 1) * G), 0]) rotate([0, 0, 90]) circle(R, $fn=F);
}
}
My Workflow
Here’s my entire workflow:
- Use OpenSCAD to create the desired pattern, previewing along the way with the F5 key.
- Render the pattern in OpenSCAD by hitting F6.
- Export the render to an STL file by hitting F7 and entering a file name.
- Open PrusaSlicer and add the STL file from the previous step.
- Slice the object, and add a pause after 3 or 4 layers, then slice it again:
- It is a good idea to note the printing time (PrusaSlicer used to show this right after it finished slicing, but I somehow “lost” that feature).
- Save the GCODE file to a USB drive.
- Connect the drive to the printer, ensure that the desired filament is loaded, and start to print.
- Wait for the printer to pause.
- Carefully tape the tulle to the frame at the corners, then lay the frame over the partially printed objects, taking care to get the tulle to lay as flat as possible.
- Resume printing.
- Wait for amazing results!
It is also possible to do the usual filament changes as part of this process. For example, here’s a work in progress that looks black when it is flat, with red inside when flexed. I made the squares too close together and this one doesn’t flex all that well, but that’s part of the learning process.
Moving Forward
I’m totally fired up about this, and have lots of further experiments planned.
Let me know what you think, and give this a try yourself!
Links and Resources
Here are links (affiliate and otherwise) to all of the items that I mentioned above:
- Prusa MK4 printer.
- Tulle — available in lots of colors; I started with ivory.
- Painter’s Tape — I used 1/2".
- Scalpel — I used #11 blades. Whatever you choose, use these with care!
- Cutting mat.
- OctoPrint.
- OpenSCAD.