Concepts
Projectors
How projectors are modeled in Moonshine and what each one owns.
A projector in Moonshine is the central entity around which most of the workflow revolves. Each projector is a first-class object with its own warp, keystone, masks, and output configuration. The model is “one physical projector = one Moonshine projector,” and the data layout reflects that.
What a projector owns
Each projector entity owns:
- Identity — name, color, description
- Output configuration — resolution, framerate, output index, blend zones with neighbors
- Warp data — the 3D mesh warp baked specifically for this projector’s view of the scene
- Keystone data — the 4-corner correction for this projector’s flat-surface fallback
- Mask stack — the layered bitmap and vector masks applied to this projector’s output
- Lock state — which operator currently has this projector’s editing surface
- Monitoring data — PJLink-derived live telemetry: signal status, lamp hours, temperature
A warp on projector A and a warp on projector B are completely independent. The shared input is the scene model — the imported 3D geometry — but each projector gets its own alignment data on top of that shared geometry.
Why projectors own warps
Two projectors covering the same physical surface still see it from different angles. The mesh vertex that needs to move 12mm right from projector A’s view might need to move 8mm down from projector B’s view. The geometry of the surface is the same; the alignment for each projector is not.
This is also why you can do edge-blended setups: each projector has independent warp on top of the same scene, and the blend zones can each be tuned per projector without affecting the other.
Why projectors own masks
The mask stack lives per-projector for the same reason: a soft edge that needs to taper at one edge from projector A’s view is not the same soft edge as projector B’s. Masks aren’t a property of the scene; they’re a property of what each projector outputs.
If you do need the same mask shape on multiple projectors, you can copy it — but the copy is independent, and editing one won’t change the other.
Projector list and selection
The browser shows a list of all projectors in the Projectors panel. Click to select a projector for editing — its warp, keystone, masks, and output settings become the active editing target.
If another operator has a projector locked, the lock indicator shows their color in the projector row. You can still select the projector to view its current state, but editing surfaces are read-only.
Adding and removing projectors
Projectors are added in TouchDesigner — typically when you wire up a new physical output. Once added on the TD side, the projector appears in every operator’s browser within seconds.
Removing a projector from the show is a TD-side operation. The Moonshine browser shows the projector list as TouchDesigner reports it.
Output binding
A projector’s output index maps to a Decklink output, NDI stream, or display output configured on the TD host. The output binding is set in TouchDesigner; the browser shows you the current binding read-only.
The browser does not control the physical signal path. That’s a TouchDesigner concern, intentionally — we don’t want a stray click to route an output to the wrong projector mid-show.
Related
- Warping workflow — editing the warp data this entity owns
- Keystoning workflow — editing the keystone data
- Monitoring workflow — reading the telemetry data