Mapping with Quartz

When a friend asked me to help put together some projection mapping for a new event in 2010, the tools were obvious. Quartz Composer had been the go-to technology for interactive video toys for a while (at least for OSX users) and VDMX was always the most flexible and powerful way to combine and perform with these in a live situation.

What follows is a record of the process for posterity; the development leading up to one summer night in our small corner of Japan.

Make White Shapes

We thought it best to stick to cubes or at least rectangular boxes just to keep the surfaces simple and the digital elements consistent and re-usable. So cardboard boxes were a natural choice.

Only being able to source the usual plain brown cardboard, we needed some way to make them white. After a failed experiment in spray paint, we hit on the idea of just gluing white paper to the outsides.

Rough Quartz

There are many simple ways to make a cube in Quartz Composer. At the time the community had added even more to the standard library. But we were doing this from scratch and wanted a fully-custom set up. Because of stubbornness.

nc-map-cubes-screen1.png

Each cube was to have three visible faces, with each corner position to be set and saved inside VDMX. This meant exposing the x/y controls for each corner; seven corners in total with six around the outside and a single central one.

Each face needed to be individually mappable for video and colour variation inside the VDMX performance interface. We also wanted some independent automation for each face as well as the cube as a whole. We ended up including ‘preset’ modes within Quartz such as ‘flash’ and ‘colour cycle’ with controls for LFO type, variation etc.

Though we’d hoped to avoid using any QC plugins, we found that corner-pinning and warping wasn’t going to be that easy. We eventually settled on the excellent 1024 Perspective plugin (seen below in Figure 2a) made by the ever-generous François Wunschel.

nc-map-cubes-screen2.png

2a: Main sub-patch with three faces; most of the work was in running the cables.

Mask Myself

This might seem like overkill when a great deal of these things can be achieved directly inside VDMX without the need for additional Quartz programming. Until you consider the problem of masking.

Naturally some boxes will sit in front of other boxes, effectively ‘masking’ them from the projector’s point of view. If you turn off the video on a front-most box, you don’t want the video on a box behind it to become visible. So each digital cube needed to have its own dark twin below it, exactly following its shape and positioning in order to block (or mask) whatever was behind it.

nc-map-cubes-screen3-2.jpg

Parent patch including mask and built-in automation presets

Seeing how Quartz is entirely void of the notion of inheritance, these two twin cubes needed to be maintained directly. The primary cube was simply duplicated for the mask version of itself, with the resulting headache of having to remember to make any changes to one that was made to the other.

Exposed Control

Once the automation presets were in place, most of the prep work for performance was in adding and labeling the input splitters which would expose the controls to VDMX.

nc-map-cubes-screen4.jpg

Final root patch with absurd wiring for VDMX control

nc-map-cubes-screen5.jpg

VDMX interface with mapping dropdown visible at bottom right

mapping-test1-crop.jpg

Initial placement test in the living room

nc-map-cubes-deshi1-1.jpg

Some low-res shots of mapping at Yuzi’s Denshi-topia event at Namba Rockets

§

Published 2012-02-06 under Code, Media, Installation, Performance

Generating Body Horror

Building the code and interface for a Cronenbergian inspiration machine.

Hating Robert Hughes

A formative period as a different person.

Against ‘Design Thinking’

Some ire directed at one of the most insidiously banal phrases to arise in recent memory.

Self-Promotion is Distasteful

Yet they say I should introduce myself

Vibratory Revelations

A brief reflection on the beauty of noise.