Monthly Archives: November 2014

Oh man Layer Ping Pong was super fun.

We had really nice commentary and some interesting doodles.

Man does Sir Rice draw fast.

Layer Ping Pong

Check out the results!


This is the update of my project to create stereographic lampshade using the Blender API.


Above is the 3D printed lampshade projecting the snowflake pattern I made.

It measures approximately 4 inches across and 1.7 inches high.

I’ve updated my code to reflect what I’ve learned from this project.

Previously, I generated dome-like lampshades, based on the original formula for height:

z_{new} = a \cos \alpha


  • z_{new} is the height of the vertex on the lampshade, computed from the point on the pattern,
  • a is the radius of the spherical lampshade, and
  • \alpha is twice the angle from the light source (top of the sphere).


However, to more accurately reflect the interplay of the lampshade and the light source, I’ve changed the formula for height:

z_{new} = h - a \cos \alpha

where h is the distance from the plane of the projection of the pattern to the center of the spherical lampshade.

This new formula produces bowl-like lampshades. This makes sense, since the lampshade sits between the projection of the pattern and the light source, curving towards the light.


distance to center of lampshade = 5; radius of lampshade = 5

Decreasing the distance between the center of the sphere and the plane of projection results in a more spherical lampshade. This distance could even be negative.

fish bowl

distance to center of lampshade = 0; radius of lampshade = 5;

Conversely, the greater the distance to the center of the lampshade, the flatter the lampshade will be.

almost flat

distance to center of lampshade = 10; radius of lampshade = 5

The physical light source can also distort the pattern. Ideally you’d want a single point source. More diffuse light sources result in fuzzier projections.

light source

Finally, you can adjust the lampshade for different magnifications and resolutions.

It’s all pretty fun.

Make your own with my code on Github!

Explanation of the code here.