In college (in the 70’s) I used to work in the theater, and one of the things I did was operate the “light board”. This was a large analog device which occupied most of the projection booth above the back of the house. It controlled 50 dimmers, each of which was connected, via a patch board in the basement, with circuits, which, in turn were connected to the lights illuminating the stage. It came in two parts. The main console had two large levers. The first was the “master fader”. When it was in the down position, all dimmers were off (0%). When it was in the full up position, the dimmers were set by a “scene fader” as described below. The preset console had 10 banks of 50 dials, so that 10 “scenes” of 50 dimmers each could be preset (there was one more set of 50 dials on the main board for optional manual control). A typical show would have 50-100 presets. Before the show started, the preset operator would dial in the first 10 presets on the preset board. The main board operator would use buttons on the main console to link Preset 1 to the down position of the scene fader and Preset 2 to the up position of the scene fader. To start the show, the operator would set the scene fader to the down position, and move the master fader from 0% to 100%. This had the effect of placing all the dimmers in the states specified by Preset 1. Each lighting cue consisted of an event on stage which triggered it, a fade count (in seconds), and a preset. When the first cue came, the main board operator would move the scene fader from the down position to the up position over the time interval specified by the cue. This brought the dimmers into the state specified by Preset 2. The main board operator would then “punch out” of Preset 1, and “punch in” Preset 3 to the down position of the scene fader. Preset 1 being no longer in use, the preset operator would look up the 50 presets for Scene 11 and dial them into Preset 1 (In this way, the next 9 presets in the play were always available to the main board operator in a circular buffer, in case of a rapid sequence of cues, as long as the preset board operator could keep up). On the second light cue, the main operator would fade from Scene 2 to Scene 3 by moving the scene fader from the up position to the down position. In summary, the state of each of the 50 dimmers at any given time was:
Code: Select all
Dim_Level[i] = Master_Fader x (Scene_Fader x Preset[up] +((1-Scene_Fader) x Preset[down])
Nowadays, of course, this is all done by computer. The scenes are all pre-programmed, and the ramp rates between the scenes are pre-programmed as well. All the operator has to do is trigger each scene change (or sequence of them) on cue. There can also be overlapping scene changes involving subsets of dimmers.
I want my light board back.
Introduce an Action called a “Fade”. A Fade consists of two scenes (which, it seems to me, map pretty well onto Virtual Devices) and a fade time, in seconds. Its behavior would be as follows: In the simplest case, the two Virtual Devices contain the same list of physical devices, and these are all dimmable devices. Then at the start of the Fade each included device would be set to the “On” state of the first Virtual Device. Index the physical devices by “i” and call the dim levels of the first Virtual Device d[i,1] and the dim levels of the second Virtual Device d[i,2]. Let T be the fade time in seconds, and let t be the time since the start of the Fade. Then during the fade, the dim levels of each physical device would be governed by:
Code: Select all
d[i,t] = d[i,1]*(T-t)/T + d[i,2]*t/T
1) Physical devices that are On/Off instead of dimmable: If their states are identical, do nothing. If their states are opposite, toggle them either at the beginning of the fade or at the end of the fade. This could be a global property of the fade, or a global property of the second scene. A more sophisticated implementation would be to be able to specify the fractional time within the fade at which the toggle would take place. The beginning would correspond to 0 and the end would correspond to 1. This could be specified in the definition of each Virtual Device, with the second Virtual Device in the Fade taking precedence.
2) Physical devices which are in the first Virtual Device but not in the second: Leave them unchanged.
3) Physical devices which are in the second Virtual Device but not in the first. Ramp dimmable devices smoothly, according to the formula above taking their state at the beginning of the Fade as d[i,1]; switch on/off devices as in 1. An extension of this, or, perhaps as a replacement for having the first Virtual Device at all, would be to take the current states of all of the devices in the second Virtual Device as the d[i,1].
4) RGB devices. Treat each RGB value as a separate device. Translate other color spaces (e.g. HBS) into RGB first.
It would be nice to have values of T be as short as 0 (instantaneous) and as long as several hours. It would also be nice to be able to abort the Fade, leaving all devices in their existing states at the time of the abort.
I don't really know how Virtual Devices are implemented, so I don't know how hard this would be, nor how it would map to various types of dimmable device. Another problem is whether to allow simultaneous Fades. My guess is that it would be possible to allow them as long as they did not have any overlapping physical devices. Attempting to activate a Fade while another Fade involving the same physical device(s) would generate an error. I can see there might need to be a great deal of messaging between Indigo and the involved devices, and perhaps that would be too much overhead for the overall efficiency of the system. But it's a thought.