[NetBehaviour] Crystalline Chlorophyll

Joseph Gray josephgray at grauwald.com
Thu Sep 3 02:06:55 CEST 2009

This is a piece created in the last few months being shown at  
Bumbershoot in Seattle.  It involves projection mapping, camera  
tracking and pseudo-organic growth scripts.


Below is a description of how the thing was built, with links to the  
project files, just in case anyone might stumble upon this and be  
interested in the technique.


Working Files:
The working files, digital sketches and conceptural renderings for  
this piece are being "open-sourced" under a Creative Commons license.  
Below are links to folders containing all files generated in the  
production and realisation of this piece.

Sketches >

These are the original concept designs. The original object was  
designed in Blender, it's facets were unfolded using the "unfold"  
python script. The key to using this script is to break the triangles  
up in rows and unfold those rows as individual objects. The unfolded  
meshes are then exported as .svg UV maps. More information on the  
technique of going from 3D model to papercraft can be found in this  

Production >

These are the files used for production. Mostly open-source software  
was used for this piece (albeit running on OS X), however Adobe's  
Illustrator program was used to convert the .svg files exported from  
Blender to .pdf files for print. The various facets of the physical  
sculpture were printed on standard tabloid sized paper (11x17 inches)  
at a local copy shop.

The individual triangles were cut-out by hand with tabs on the edges  
that were folded under and glued together.

Code >

The code is written in Processing and uses the Saito .obj loader  
library to import the 3D object which was exported from Blender as  
a .obj file with a .mtl file. Texture maps were also created in Adobe  
Illustrator and exported in .png format, though other, open-source,  
programs may have worked just as well (i.e. Inkscape).

The software also allows for rotation, scaling and positioning of the  
object so that it can be aligned to the real world object. This is a  
bit of an awkward portion of the tool, but essentially holding x y or  
z on the keyboard while dragging the mouse changes position. Shift+x y  
or z changes rotation. w d and h keys change scale. In early versions,  
and then later added back into the most current version, the l key  
changes the virtual cameras field of view which is very important for  
matching the real-world video projectors lens properties to the  
virtual cameras lens properties.

Camera tracking is done with a simple difference algorithm. Each  
channel (RGB) of each pixel of the camera image is tracked for the  
amonut of change from the previous frame. If the number is above a  
certain threshold a random number is generated to determine if the  
associated pixel in the real-time texture map should change. A height  
map generated in Blender partially determines the probability of a  
pixel changing from the static "ice-crystal" texture to a "mossy" one.  
Other influences are neighboring pixels values and the amount of  
change in the camera pixel.

Promotion >

These are promotional materials for the Bumbershoot show.

Images >

Images of the process of constructing the piece and other documentation.

More information about the NetBehaviour mailing list