Projection Mapping onto circular object

Joshua Westerman's icon

Hello friends,

I need to projection map a simple fixed media video on the 1cm wide lip (imagine projection mapping onto the rim of a glass but on a much larger scale) of an acrylic basin. It is circular and 6 feet in diameter. I have a short throw projector and a high ceiling so I'm not really worried about throw issues BUT I have no idea where to start. Halp?

kennethnewby's icon

So the moving image you want to project is a circle, correct? I'm also assuming your basin lip is a perfect circle. There are many ways to do this, but here's a simple one I've used in the past:

In your graphics tool of choice (photoshop?). Create a mask. It's a white circle on a black background. Save it as a greyscale image.

In MaxMSP:

Set up a basic OpenGL system: qmetro, jit.gl.render, jit.window, etc.

Play your source movie—the image you want to be masked, using a jit.movie object.

Play the circle mask you created in photoshop using a second jit.movie object.

Use jit.op @op * to multiply the source movie frames by the circle mask frames. Only the source movie pixels multiplied by white circle mask pixels will be output, i.e. you've applied the mask.

Use the resulting masked image as a texture to a jit.gl.videoplane object. Adjust the fit of the projected ring to the lip of the basin by controlling the videoplane's x-position, y-position, x-scale, y-scale, and rotation parameters. These should let you fit the masked movie exactly to the shape of the basin.

Save the adjustments to a preset object (store 1) in your patch and restore them on load (loadmess 1) for the exhibition.


Refinements include feathering the edges of your mask to reduce aliasing. Mask levels between black and white pass an attenuated pixel through. You can also play with an animated mask—one that changes its shape. Not useful in your case, but a lot of fun to play with in other contexts, e.g. animate a mask to project on different parts of an object at different times; or, extract a mask from a moving object such as a person, animal, automobile, etc. using a kinect sensor, and use that mask to project a new "skin" back onto that object. Lots of fun!