rich strange

the lab / field notes

Structured light in full daylight

· GodotSpacePlane

A lot of the rooms we project into don't go dark when you need them to, especially during commissioning, when the windows and the work lights are still doing their thing. So I wanted GodotSpacePlane's camera calibration to work in the worst case first.

Last week it read its first full set of Gray-code patterns (the striped pictures a projector shows, so a camera can work out which projector pixel lands where) at midday, with the room light 2.7 to 3.3 times as strong as the light the projector adds. It still decoded 99.5 to 99.7% of the projection. The bug that would have stopped it was found in review, before the rig ever saw it: a projector brightens a little as it warms up, and the decoder read that drift as noise, raised its threshold, and refused every bit without saying so. It now takes out the overall brightness change before it judges anything, and reports how big it was.

If you're signing off on a camera-calibrated rig, ask for a second source. Project a handful of dots at known projector pixels, and check that the calibration puts them back where they were drawn. Ours came back within a median of 0.57 and 0.74 pixels on the two cameras. The one dot that was off by about 64 pixels turned out to be a real decoding error, which is exactly what the check is there to catch.

Two views of the calibration steps panel. Left, at midday: the Exposure step refused with 'white clips'. Right, after the fix: Exposure set.
Midday sun, before and after the fix.
Tool
GodotSpacePlane: Projection mapping and calibration inside the Godot engine.
Hire me for
Projection set-up and calibration for your venue.