projecting onto mirror arrays

This March I was fortunate enough to be invited to participate in a three night event put on by Liminal as part of the March Music Moderne event in Portland.  In addition to providing projection mapping for "Capital Capitals," I worked with Bryan Markovitz to create an installation piece based on Gertrude Stein's novel "The Making of Americans." 

The installation included some custom software that I wrote which would drive projected content.  This content would be projected onto several large pieces of art hanging from the walls of the room.  This all seemed straight forward until we saw the room..  It was approximately the size of a shoe box, meaning my projector would only yield about a four foot wide image.  This gave us very little flexibility for placement of the artwork since all the projected content would end up being constrained to a very small portion of the space.  I was not happy about this.

The most obvious solution I could think of was to use a single large mirror to increase the throw distance.  After testing this idea it only added a marginal increase to the projection size, and due to the already limited space the physical setup was quite bulky. The idea of using a mirror stuck with me though.  If a single mirror works, why not use several small mirror panels, each one aimed at a different location in the room?  Thus was born the idea of an adjustable mirror array.


First I tested out the concept at home with a couple of mirrors, and once I was convinced that my projection mapping software worked through a mirror I set about building the adjustable mirror array.  The array is a set of four small (about 5" square) mirror panels mounted on brackets I made that allow the mirror to swivel horizontally or vertically.  The biggest downfall of this system is trying to drag the control points around when all the mouse movements are reversed.

The final installation included four projected regions spanning three walls of the small room with an almost 180 degree spread around the space.  Being able to project at such strange and diverse angles created a very nice effect since it removed the projector from the experience.  In most cases, it's simple to visually track back from the wall and notice the source of the projection, but when the projector is tucked over in the lower corner of the room the projected regions seem to float on the walls as if by magic.

projection mapping - augmenting detailed surfaces

After tackling projection onto rectangular surfaces, the next step in this process has been to register a projection with a complex surface.  In this test, I used a letter press print by Colleen Romike.  The print is a pangram and contains many highly detailed shapes which provided a nice test for this process. 

I took a single hand-held reference photo without paying much attention to the lighting, then did a bit of processing in photoshop to create a mask of the letters.  The rest of the registration is taken care of by my projection mapping code and some simple behavioral logic to illuminate the individual letters.

poster mask

The result was actually much better than I was expecting.  With more attention paid to the reference photos, this process should be able to yield stunning results with very little time and effort.

minecraft in real life

Now that I'm working on projection mapping it was only a matter of time before this happened.  Thanks to my brother for the inspiration, he mentioned that one of the other projection mapping examples looked a bit like a minecraft block.  Once the idea popped into my head I had to give it a try.

There's a piezo element taped to the box and hooked up to an arduino.  The arduino senses the physical impact with the piezo element and sends serial data to my PC.  Processing picks up the serial signal and takes care of the projection and interaction (particles, etc).

As seen on:


Projection Mapping - now with video!

I've got the projection mapping code working quite well now, I'm in the process of building some classes to manage lots of projection surfaces at once in order to keep the code clean.  Since the last post I've also got video playback (live and pre-recorded) working nicely with this system.  Also, some fun example footage of the code in action! Here's an example of the calibration process, you can just drag the corners directly to the real-world points so it all lines up on the projector.  This is essentially the same calibration technique used in the keystone library with a few updates.  I've added a center point to drag the entire surface, and when you drag with the right mouse button it moves in 1/10th pixel increments for fine adjustments.

Here's the same content split up onto two surfaces and projected onto some random cardboard boxes I had in my office.