Skip to content

Beamer

A Beamer represents a real world projector inside SPARCK's 3D space.

It has a calibration mode to find the orientation and lense properties (extrinsic and intrinsic transformations) of the projector.

It uses the opencv calibrateCamera() method to calculate the tranformation and projection matrix of a projector.

For this to work the node needs a calibration model (3D object) and a set of manually set calibration vertices that correspond to points on the calibration model.

Tutorial: Beamer Calibration

The Tutorial Beamer Calibration walks you through the calibration process step-by-step.

Beamer Node

Fun Fact

Beamer is another word for projector, mainly used in German-speaking countries - and apparently in Australia as well. The reason for this choice of name is to distinguish it from the real world projector hardware of which it is its virtual representation. And also to distinguish it from the TextureProjectory shader that also does a projection, though a purely virtual one.

Beamer vs TextureProjectory

The Beamer node represents a physical projector that outputs to real-world displays. In contrast, the TextureProjectory shader projects textures virtually onto 3D surfaces within the scene — useful for techniques like virtual projection mapping or texture baking. Both can work together in complex setups.

Reference

The following properties can be configured for this node:

Property Type Description
parent Reference Reference to parent transformation node
calibfile File Select the transformation RIG. The file needs to be located inside the ~/_assets/_projectors folder
calibrate Button Opens the calibration editor
dimensions Size Sets the texture size of this render pass
bgcolor Color The background color
stereo Boolean Creates two renderpasses for each stereo texture
blend Boolean Enables blending
antialias Boolean Enables antialiasing
identify Boolean Use the calibration-color as background color
gizmo Integer Set the render group to draw the gizmo to
Inlet Type Description
properties properties properties | use message [set <propertyPath> <value(s)>] (without node/<nodeName> at the beginning) to set internal properties
background texture background texture for camera calibration. Instead of setting the calibration vertices on real world targets, you can set the calibration vertices on the camera feed targets. The result is the same: Beamer node evaluates the video camera's intrinsic and extrinsic parameters.
custom message custom commands. message 'createToXY' creates a new model with calibration vertices relative to the XY-plane: 'createToXY x1 y1 z1 x2 y2 z2 x3 y3 z3 ...'. | message 'addToXY' adds calibration vertices relative to the XY-plane: 'addToXY x1 y1 z1 x2 y2 z2 x3 y3 z3 ...'
Outlet Type Description
captured texture captured texture (left if stereo)
captured warping captured texture (right if stereo)
dump message dump (transform, frustum)

Calibration

Beamer Node

Calibration Settings

The calibration window provides advanced configuration options for projector calibration:

Parameter Type Description
Color Color Identifies the Beamer/Calibrator in the 3DViewer
Model File Calibration model. Needs to be of type Wavefront OBJ
use Model transformation Toggle Additional transformations on the calibration model to place it correctly to the world reference
implement parent transformation Toggle You can calibrate the beamer while attached to a mocap rigidbody that is referenced by the parent transformation node
focus editor Button Opens the editor window and focuses it to this calibration
gather 3DViewer lookat Button Takes the current 3DViewer point of view and applies it as a temporary solution
display.. Button Opens the display window to select the display the projector is currently connected to
width Integer [px] Projector resolution width
height Integer [px] Projector resolution height
enable calibration Toggle Enables the calibration button. Only enable once the correct resolution is set
show/hide Button Shows / hides calibration flags
frustum Display Shows the solution's frustum
transformation Matrix Shows the solution's transformation matrix
reset Button Resets values
save and close Button Saves the solution and closes the calibration window

Calibration with Motion Capture

If you're calibrating while the projector is attached to a motion capture rigid body, enable implement parent transformation. This automatically calculates the local transformation offset from the rigid body to the projector's lens position.

Beamer Editor

Editor Keyboard Shortcuts

The Beamer calibration editor has three main modes for setting up projector calibration:

  • Model Mode - for selecting points on the 3D calibration model
  • Target Mode - for positioning corresponding points in the projector's output
  • Warp Mode - for creating and adjusting warp mesh vertices
  • Press Tab to switch between modes

General Controls (All Modes):

Key Action
Tab Switch between Model, Target, and Warp modes
H Toggle help overlay
Shift+H Change help overlay color
K Toggle visibility of calibration results
L Toggle visibility of labels

Model Mode (No Selection):

Key Action
Select model vertex
S Save calibration
P Purge calibration (requires confirmation)
J Adjust ALL targets to warp or model vertices

Model Mode (Vertex Selected):

Key Action
V Create calibration vertex (both target and warp)
W Create warp vertex linked to model vertex
T Create target vertex linked to model vertex
X Delete calibration vertex

Target Mode (Vertex Selected):

Key Action
J Adjust selected to warp or model vertex
W Add warp vertex linked to model vertex
X Remove target vertex
G Grab vertex with mouse (click to confirm)
Up Down Left Right Move vertex with arrow keys
C Toggle crosshair mode
O Toggle visibility of calibration object

Target Mode (Adjust Vertex Submode):

Key Action
M Adjust to model vertex
W Adjust to warp vertex
Esc Exit adjust mode

Warp Mode (No Selection):

Key Action
Select warp vertex
J Adjust all to target or model vertices
W Create unlinked warp vertex
S Save warp object
F Enter frame subdivision mode
D Enter warp subdivision mode

Warp Mode (Vertex Selected):

Key Action
Select second vertex (for subdivision line)
J Adjust to target or model vertex
T Add target vertex linked to model vertex
X Remove warp vertex
G Grab and move vertex with mouse (click to confirm)
Up Down Left Right Move vertex with arrow keys
0 - 9 Create subdivision line between two selected warp vertices

Warp Mode (Adjust Vertex Submode):

Key Action
M Adjust to model vertex
T Adjust to target vertex
Esc Exit adjust mode

Warp Mode (Frame Subdivision Submode):

Key Action
0 - 9 Set frame subdivision value
Esc Exit frame subdivision mode

Warp Mode (Warp Subdivision Submode):

Key Action
0 - 5 Set warp subdivision (only 2 are displayed)
Esc Exit warp subdivision mode

Model Mode (Purge Confirmation):

Key Action
Y Confirm purge calibration
Esc Cancel purge operation

Save Your Work

Calibration data is saved when you press S in Model mode or when you click save and close in the calibration window. Make sure to save regularly during the calibration process.


Calibration using createToXY and addToXY

You can create calibration targets directly from the Beamer node using the createToXY and addToXY messages using the custom inlet.

This will create calibration targets relative to the XY-plane of the Beamer node and avoids the need for a calibration model.

This apprioach is usefull when the calibration has to happen in a space that provides tracking vertices in world space, e.g. using motion capture markers as calibration targets. The OptiiTrack node provides the 3D positions of the markers in world space that can be used as calibration targets:

Example patcher to create calibration targets. The OptiTrack node provides the 3D positions of the mocap markers in world space from the 'dump' outlet, filtering for '/om' (other markers - markers not assigned to a rigidbody). This list is then prepended with the 'createToXY' message and sent to the Beamer's custom inlet.

Beamer Create XY

This results in the following calibration targets:

Beamer Create XY Targets

Multi-Projector Setups

Soft-Edge Blending with Multiple Beamers

When using multiple Beamer nodes for overlapping projections, use the SpatialShadery shader to automatically compute per-projector pixel visibility and brightness. This produces smooth soft-edge blending across all projectors — essential for Spatial Augmented Reality installations.

Key parameters for multi-projector blending:

  • spread: Controls the distribution of pixel blending between overlapping projections (0 = no spread, 1 = full spread)
  • distance: Additional differentiator based on distance from projector
  • power: Controls the soft-edge blending power
  • luminance: Adjusts brightness balance between projectors

Identify Mode for Debugging

Enable the identify toggle on each Beamer to display a unique calibration color as the background. This helps visually identify which projector is outputting to which display — particularly useful when configuring multi-projector setups in the Window node's display settings.


Important Notes

Known Issues

  • On Windows systems, the calibrattion is not working when max's gfxengine is set to its default setting 'glcore'. The node will respond with a warnning message and ask to switch to 'gl2'. This will require a restart of max. Save your work before switching.

Calibration Requirements

  • Calibration files must be saved before the calibration button becomes active
  • All calibration files are stored in ~/_assets/_projectors
  • Ensure the correct projector resolution is set before enabling calibration
  • The calibration process requires a calibration model in OBJ format that represents the real world object against which the projector is calibrated and referenced to.

File Locations

~/_assets/_projectors/          # Beamer Calibration files (.xml & .json)
~/_assets/_projectors/_calib    # Target vertex files (.xml)
~/_assets/_model/_calib         # Calibration models (.obj)

Render Pipeline

The Beamer node operates in a dedicated Beamer Render Pass (#28 in the SPARCK render pipeline). This ensures that Beamer captures occur after main render passes but before the final preview pass. See Render Groups & Passes for details on render ordering.



Need help or want to suggest improvements?

Report an issue Improve the Docs

Last updated: 2024-12-01 | Edit this page on GitHub