The Barbarian Group was asked to help Goodby, Silverstein & Partners with a multimedia installation for Wired Magazine's NextFest. The purpose of the installation was to promote the new Saturn hybrid cars. Goodby teamed up with Obscura Digital to make the installation space. Obscura is no stranger to convention installations and their expertise was invaluable throughout the entire process.
Our part in this involved making an interactive projection wall shown seamlessly by four DLP projectors on a 45'x12' rear projection screen. The concept was simple enough: 45 feet of grass swaying in a virtual breeze. Visitors to the installation can make the grass sway just by walking in front of it. Additionally, visitors can input text from either of the two kiosks positioned in front of the screen. This text appears in the projection attached to its own grass blade and sways along with the rest of the scene.
Every blade of grass in this project is a simple system of variable decay. Basically, we define a blade's total number of segments and its max width and max height. Each successive segment is a fraction of the max width and max height. So as you progress from the bottom segment to the top segment, the width approaches zero and the height approaches half the max height. This creates the triangular shape for the blade.
The bending of the blades follows a similar variable decay framework. If the bottom-most segment (seg) is told to bend .1 radians, the remaining segments also bend .1 radians. To keep the blades from forming perfect circular arcs, we apply only a fraction of the initial rotation to each successive segment. So, seg would bend .08, seg would bend .064, seg would bend .0512, and so on. This way, by the time you get to the final segment, the amount of bend is minimal.
To simulate a virtual breeze, we turned to perlin noise. Perlin noise is a random number generator with a brain. Used correctly, you can get a smoothly changing set of numbers free of any large spikes or sudden changes. Processing has a built in perlin noise number generator and we use this to generate numbers used to bend the grass in believable ways. Simply supply the x position of each blade of grass, add a simple counter, and you get back a smoothly changing number set used to create the look of wind.
A Processing application picks up camera input and analyzes it for dark spots. The application then compares this information with information from the frame before to check for movement. The virtual grass bends based on the amount of movement. The render is then sent to the video processor (at 40 to 45 fps) where it is split into 4 images that are sent to the DLP projectors. The projectors beam their overlapping images onto the rear projection screen where visitors stand and create silhouettes for the camera to pick up.