Introduction
For the final project of this course, I explored how to use transparent plastics in designing objects that make use of light. Over the last few weeks I have designed objects that lens, block, and diffuse light. My final artifacts are a lampshade that represent the celestial sphere, and a string of holiday lights with crystal forms.
Related Work
My background research began with a reading of these three papers:
- Assefa, Bisrat G., et al. “Imaging-quality 3D-printed centimeter-scale lens.” Optics express 27.9 (2019): 12630-12637.
- Torres, Cesar, et al. “Illumination aesthetics: Light as a creative material within computational design.” Proceedings of the 2017 CHI Conference on Human Factors in Computing Systems. 2017.
- Pereira, Thiago, Szymon Rusinkiewicz, and Wojciech Matusik. “Computational light routing: 3d printed optical fibers for sensing and display.” ACM Transactions on Graphics (TOG) 33.3 (2014): 1-13.
The first describes how to print accurate lenses with a FFF printer; the second paper reviews how light can be viewed as a physical material in computational design; and the third paper describes uses for FFF-printed optical fibers.
Process
Lenses & Bubblegrams
I began with designing lenses. In OpenSCAD, I developed a script that can produce both bi-convex lenses and fresnel lenses. Both types of lenses are formed by rotationaly sweeping a 2D curve that represents the profile. The script accepts a few basic parameters which define a lens, such as its thickness, radii of curvature, and diameter. Using a known value for the refractive index of PLA, this script also calculates the focal length.
Designing a script to produce these lenses was straightforward, but printing them proved to be otherwise. Below, you’ll see some of the lenses that I’ve printed in transparent PLA and PETG. Despite my best efforts, I was unable to produce a lens of adequate quality to work with. My main obstacle was the surface quality – the ridges on the top/bottom surfaces heavily distorted light.
I also experimented with embedding 3D forms into solid cubes (otherwise known as bubblegrams). I developed a script which created tree-like shapes via a Lindenmayer system, in which you devise a (typically context-free) grammar for which every terminal corresponds to a turtle movement. For similar reasons as above, the printed forms of these designs were not very recognizable.
Celestial Sphere
Next, I worked on creating a design that would selectively block a light source in an intentional and interesting way. Drawing some inspiration from the astronomy class I’m taking this semester, I decided to create a spherical lampshade that incorporates stars visible to the naked eye.
But before I discuss the design process, I should discuss the design tool. For this part and the next, I used a solid modelling CAD tool named libfive-studio. libfive is a library and suite of tools that, like OpenSCAD, are for parametric and procedural design. Where libfive differs from OpenSCAD is in it’s underlying data representation; in libfive, all objects are processed as functional representations, rather than meshes. In this form, any shape is defined by a function Z3->Z f(x,y,z). The boundary of the shape is the isosurface where f(x,y,z) = 0, f(x,y,z) > 0 is the interior, and f(…) < 0 is the exterior. One neat advantage to this project over OpensCAD is that boolean operations are very efficient!
Like OpenSCAD, libfive can be scripted via Python (which is what I did here). I utilized the ATHYG database, which is a selection of stars from the much larger Gaia releases. It includes position information (RA/Dec), distance, apparent magnitude, and other interesting info for each star. In my script, I filtered from the ATHYG database all stars visible to the naked eye within 16 kpc. Earth is about 8kpc from the galactic center, so a 16kpc sphere around Earth should include most of the Milky Way.
My script creates a sort of “celestial sphere”, which in Astronomy is the imaginary sphere upon which stars appear to be projected. It creates a solid shell of 100mm diameter, and subtracts a hole for each star from it. The sizes of the holes for the stars are scaled such that the amount of light they pass through should be proportional to their relative brightness, scaled to be between 1mm and 4mm in diameter. The surface is textured with tiers of increasingly large holes, for a pleasant topographical-map-like effect.
Crystal Lights
Since by this point I had expertise in printing not-quite-transparent plastic, I decided to create some objects that would use diffuse light. I settled upon creating a set of crystal-inspired forms, to be used as covers on a string of holiday lights.
Crystals in nature often from in large aggregates, with minerals crystalizing around impurities and other things that encourage nucleation. They are often described in terms of their “crystal habit”, which is the characteristic shape that they form. Many are variations on simple regular polygon.
I developed a script which recursively “grows” a crystal by placing shapes of decreasing size (2^-n) and increasing quantity (e^n) on a surface. The shape is a defined by a function which returns a libfive shape primitive. I created a variety of crystal-like forms based on three habits: cubes, spheres, and hexagonal prisms.
Outcome
Lenses
Celestial Sphere
Crystal Lights
Future Work
Lenses
- Using a different printer or material for lenses is an obvious next step. A resin printer perhaps might be able to achieve a finer quality.
- Should I be able to print lenses of acceptable quality, I’d need to use them somehow! I have and idea for a program that would design a grid of lenses with varying focal points, which would be aimed to create a simple image of some sort from the overlapping focii.
Celestial Sphere
- I think the affect of the emitted light might be improved by narrowing its focus. You could do this by thickening the shell.
- This current lamp’s construction doesn’t allow for accessing the inner bulb, which is a pretty big drawback. A fix for this would be to make a section removable.
- There’s a seam along the equator — printing the sphere as one coherent shape would remove this.
Crystal Lights
- I’d like to expand my work within libfive to generate N forms at a time, so that I might print these on a scale suitable for filling out a 50/100ct string of lights.
- The hole for the lightbulb should be included at design time, rather than drilled in after.
Reflection
I learned a lot about both design and material in this project. On the material front, I discovered that transparent plastics — PLA or PETG — are more difficult to print than their opaque counterparts. I achieved my finest results with these plastics when printing very slow and hot; often walking a fine line on not discoloring the plastics from heat.
I’m probably most pleased with what I learned about libfive and the wider-world of f-rep solid CAD. It is a very neat tool that allowed me to rapidly iterate on these complex generative shapes, and I’m excited to utilize it for future projects.