3D printed halftone image from digital image to physical 3D print.
I had an idea to 3D print a halftone image by making a grid of holes where the larger holes would be brighter halftone pixels, and the smaller holes would be darker ones, and then I’d light it from behind. I tried several approaches, including one performed after I made this video, and they all failed. Blender 3D was not up to the task of doing a giant boolean operation, and the P5.js SVG library was not up to the task of drawing all the outline squares that I needed. So, I resorted to printing a background (just a large, white rectangular slab) and switching filaments to print the halftone pixels on top in a different color (black squares).
I have a lot of ideas for variations, like a non-solid background, and slicing a larger image and printing it out in pieces. Ultimately, I still want to try my original plan, so maybe Inkscape, or learn some Fusion 360 to see if it can do it, and then maybe openSCAD if that fails.
Here are the software tools I used:
- SVG library for P5.js: https://github.com/zenozeng/p5.js-svg
- Blender 3D: https://www.blender.org
- GIMP: https://www.gimp.org
- Prusa ColorPrint: https://www.prusaprinters.org/color-p… (watch out for the gotcha)
Amazon Associate Link: Made with Hatchbox PLA
I found this Golden Rectangle Icosahedron while reading about Icosahedrons on Wikipedia: Regular Icosahedron and wanted to make a 3D print of it. I realized that I could print it with a minimum of supports if I printed it standing on three corners.
Constructing the figure is super easy by making a golden rectangle, duplicating and rotating it two times. The problem that I encountered next was getting three corners resting on the XY plane. You’d think there’d be an easy to use tool or two, or maybe a plug-in, to do this in Blender, but haha–no. After a bunch of googling and wasting time trying to figure out how to do this with Blender tools, I landed on the idea of using duh-duh-duh MATH!
The process is simple, and can be generalized to any object. It requires only simple and familiar Blender tools: moving the origin of an object, translating the object, and rotating the object.
The basic steps are:
- Move the origin of the object to one of the vertices
- Move the object to 0,0,0
- Get the coordinates of the next vertex and find the angle to rotate around the Z axis align it on one of the major axes
- Get the coordinates of the vertex again and calculate the angle to rotate to the XY plane
- Get the coordinates of the last vertex and find the angle to rotate around the axis in step three to the XY plane
I had a lot of trouble getting this to print on my new Prusa I3 MK3. Here’s some troubles I ran into, and how I resolved them:
- After a week of printing fine, I started to notice that first layers were sometimes failing. The solution was to preheat the bed for just a couple of minutes before starting the print.
- I never really had the Z-axis set correctly because the Prusa’s built-in first layer calibration routine is not good, and makes you guess too much. I used the instructions in this thread: life adjust Z – my way (sic), and everything was so much clearer and easier.
Once I had the printer dialed in, I had to experiment a lot with Slic3r settings. I think the most important three settings in getting this to work were enforcing support for the first 40 layers, setting the XY separation to 5%, and setting the infill speed to 375 mm/s².
Model on Thingiverse: https://www.thingiverse.com/thing:2822976
As far as the video itself goes: The Blender session was complete garbage, and I discovered that it’s really hard to edit that type of video. Also, voice overs are hard. Also, the painting was long and unnecessary (and badly done to boot!).
Just got a Prusa I3 MK3 printer. I ordered the MK2 in June 2017, switched my order to the MK3 in October, which added a few months on to my delivery time. Finally arrived, February 2018. I’m super happy with it so far. Leagues beyond my Tronxy, but I’m keeping it and will still use it.
Here’s a time-lapse video of me assembling it: