Printing lampshades with a Makerbot
One of the joys of working with an open platform like the Cupcake is the ability to experiment with ideas that would be difficult or impossible to tinker with on a closed platform. The other day I wanted to take a break, so I tried to print some patterned lampshades.
Creating a translucent patterned lampshade as a traditional 3D model doesn’t work very well. The small variations in wall widths are hard for slicing engines to handle. Your wall width will have to be a multiple of your extrusion width. You’re also limited by the resolution of your X/Y positioning system. I decided to try a different approach.
Instead of embedding the design in a model, I wrote a script that takes a bitmap as input and generates gcodes to draw a straight cylinder or cone. The trick is to vary the wall thickness by extruding more plastic at the “darker” parts of the design. I did this by lowering the feedrate during these parts of the print; more plastic is extruded during the motion that draws that particular segment, and you end up with a thicker wall.
The advantage of this technique is that you can get very fine gradations of wall thickness– much finer than the positioning resolution of your X/Y stages, in fact. If you look at the “globe” patterned lampshade closely, you can actually see some subtle hyperbola-shaped gradations that are an artifact of the X/Y resolution of our machine.
This approach has applications beyond lampshades. You could use it to apply textures to model walls by reading ordinary 2d model textures as heightmaps, or someday even achieve “sub-voxel” print resolution by varying the wall thickness as the print head moves.
If you want to experiment with creating your own lampshade, you can download the script here, or explore the source on GitHub. Have fun!
| Tagged with | 12 comments | |







12 Comments so far
RevarBat
Freaking brilliant!
Will
Awesome. I had tried this last summer using the conventional 3D modeling approach and it totally failed but this looks like it works really well. So cool!
MaskedRetriever
Quite groovy!
If SuperSkein ever gets far enough along, I’ll look into varying the extrude pressure according to a texture map– Blender’s procedural texturing library could be ours for the co-opting!
Applications note: Blender has the ability to push an object’s vertices around based on an image map, which could be useful for this kind of technique applied to more complex objects….
Jaymes Dec
Awesome. It reminds me a lot of my submission to the Lesson Plan contest…
I hope that even though my design may not work on a MakerBot, that does not count against my entry. Having never used a MakerBot, it’s difficult to know what is and what is not possible.
If I won a MakerBot, I would certainly update my lesson plan to make it makeable!
madscifi
Since you are generating the gcode directly you can get rid of the seam by distributing the z axis motion across all of the x/y movements. Although I have not tested the code, I believe the following is correct: change the line that sets z in the getXYZ function to “z = layerHeight * layer + layerHeight * angle/(2*math.pi)”.
Adam
madscifi: in theory, yes, but it’s actually ever-so-slightly more tricky than that in practice. The driver in ReplicatorG breaks xyz motions into separate xy and z moves; this is old legacy code that I haven’t disturbed to avoid breaking anyone’s expectations. I’m going to add a flag for it to the driver soon, and once that happens, we can get rid of the seams altogether.
madscifi
Drat – I did not know about the limitation in ReplicatorG. I use EMC2 to run my Repstrap, where the technique works reasonably well for single wall objects. I’ll note that it is often useful to put down the first layer at a constant height and only start distributing the z axis movements after the first layer is complete.
whosawhatsis
It may not be an STL, but this is a great thing. I would like to see this on Thingiverse so that I can like it. Side note: endowing generic terms such as like and thing with new meanings that are simultaneously more specific and more esoteric was, perhaps, ill-advised.
casainho
GREAT!! that’s innovation! — such a mind you have
Erik de Bruijn
Nice innovation. I think that at some point we really want to take this into account for detailed sections of any kind of print. This is a great way for subtle variations! Good thinking!!
RevarBat
I’d been thinking about using varying speed to vary extruding width, but i’d been thinking of it for use in preventing gaps in walls that are only a few perimeter width’s wide.
Anar
That’s brilliant and opens new directions !
One day we might print UV mapped objects with displacement mapping to get very subtile details.
I have tweaked the code to be able to use it on a BfB Rapman and it works fine !
I’m impressed how small the details can be. You can print a photo and it will only reveals it’s subtility when some light will pass thru.
Very good job !