This is a continuation of a demonstration of Johnston Architects’ research into fabrication and installations. In our previous post, we looked at using projection and heat formed acrylic. In this article, we’ll be looking at our second concept – a full color, Raspberry Pi-controlled ceiling light.

This concept brings light, color and pattern into a space in a very soft and controlled way, while also pushing forward interactivity in an organic and compelling way. Considering the lobby as a threshold, we wanted to develop something that made the transition from exterior-and-public to interior-and-private more profound. On the ceiling we imagined a grid of fabric rectangles hanging vertically like miniature flags, several inches apart and covering the entire lobby ceiling. Using the parametric design tool Grasshopper, we adjusted the length of each rectangle to create a billowing topography. The flags are alternately rotated, creating boxed spaces between them, and making the inverted terrain of the installation smoother and slightly less uniform. We then light the material from above, replacing the cloth rectangles with ones made of light, and further removing the delineation of an upper surface. The effect is that the ceiling disappears into a hazy pattern of semi-translucent fabric. By dematerializing the ceiling, we create an ambiguous upper limit, a soft edge that evokes billowing clouds or a downtown fog.

To visualize the concept, we used Rhinoceros with Grasshopper to create the pattern of fabric. Then we used Blender to render and animate different lighting scenarios.

For materials we kept it simple. We knew the amount of material we would need for the ceiling would be large, so we kept an eye out for an economical but hardy medium. We tried vellum, silk, copy paper, and a few different nylons. We eventually found that rip-stop fabric, the kind used for sails and kites, suited our purposes very well. It was sturdy, easy to work with, plentiful, and transmitted the light beautifully.

For the lights we started out small and ordered some color changing LED Christmas lights. If this works, we’ll head on to more interesting lights.

To support it all, we set up a rig of 1x4s and 1×1 rods from the lumber store. Laying out the 1×1 rods in  3 inch increments gave us the support we’d need for our alternating pattern of 6 inch wide fabric rectangles. Affixing the flags was simple using a staple gun. This is just a mock-up after all.


The mock-up itself is 4 feet wide by 8 feet deep. Before attaching it to our ceiling at JA, we supported it over a couple of chairs to lay in the Christmas lights, taking care to evenly distribute the light and to mind where the power was coming in from.

We then clamped our mockup to the steel I-beams of our ceiling and plugged in the lights. We were all very pleased with the result: a soft, undulating light playing across our fabric terrain.

Up to now, the concept was simple and straight forward. We could alter the lengths of the fabric rectangles to provide texture and shape, creating interest with its irregularities. But we wanted something a little more reactive, that would feel special and unique to the viewer.

Enter the programmable RGB LEDs. These types of LEDs come on strands and allow one to programmatically change the color of each LED individually. When you lay the strand out in a grid, you can create images and 2D patterns. This is where the project began to take on exciting character.

One of the skills we needed to pick up was wiring electronics. Soldering wires to breadboards, understanding resistances and amperes, and modulating power to avoid fires isn’t usually what one finds themselves learning during an architecture project, but the great thing about architecture is that one usually finds themselves learning a great deal about things that are not strictly defined as architecture. We stumbled through some bad wiring and faulty components, but eventually everything was working just as intended.

We chose to program using the Python programming language. While there are other languages more suited to programming LEDs, Python has many libraries which allow us to vary the types of controls we employ. Using the Raspberry Pi and Linux as our operating system gives us the computing power we need to bring our vision to life.

The choices for creating color patterns is overwhelming. We could programmatically create small animations, we could use it as a sort of coarse viewing screen and play videos and animated gifs, or we could employ algorithms to modulate color and intensity. So, we gave them all a go.

Programming the LEDs to act as a 2D screen wasn’t terribly difficult. It has been done thousands of times, and there is a how-to blog or video for just about every attempt. We eventually learned to play animated GIFs, stream YouTube videos and even webcam footage to the ceiling display.

Now that it inhabits our office, we usually play a variation of 2D ‘Perlin noise’ – an algorithm developed to mimic the organic randomness found in nature. Video games and CGI artists use Perlin noise to simulate clouds, waves, fire, mountains, fog and much more. Our application of the algorithm displays a slow, undulating, random field of varying colors. We implemented a few controls over how it appears, building in a web front-end to control speed and color intensities on the fly. We even implemented a webcam library in Python to track movement and shift the colors accordingly.

Now we are looking at next steps. We’ve fleshed out the practical aspects of running a large, horizontal LED screen covered in fabric, and now face the challenge of adding more interaction. One approach we are looking forward to is motion tracking people through the space, creating wakes as though through an upside-down body of colorful water. We can also update the patterns to reflect external conditions – perhaps moody light on cloudy days, hints of lightning during rainstorms, or oranges and reds during Halloween. The flexibility and variations afforded by the LEDs and their programming means we can update and change well into the future.