Additive shapes:
One of the big problems with intensity shapes is the fact they use a pattern that adjusts values equally above and below an origin.
This presents two difficulties:
Firstly, in order to achieve a full range fade you must set an origin of 50% with a size of 50%. While you can set an origin at zero or full, with 100% size, half of the shape is lost giving the appearance of delays between fades.
Secondly, it is not possible to fade in a separate intensity cue to override the shape. You will always end up with the reduction side of the pattern resulting in dimming in/out.
This can be solved by using a pattern that only works on the positive side of the 'amplitude' axis.
Here is my additive sine wave plot:
Code: Select all
<Pattern ID="Sine Positive">
<Function ID="1" Value="500"/>
<Function ID="2" Value="549"/>
<Function ID="3" Value="598"/>
<Function ID="4" Value="645"/>
<Function ID="5" Value="691"/>
<Function ID="6" Value="736"/>
<Function ID="7" Value="778"/>
<Function ID="8" Value="817"/>
<Function ID="9" Value="854"/>
<Function ID="10" Value="887"/>
<Function ID="11" Value="916"/>
<Function ID="12" Value="941"/>
<Function ID="13" Value="962"/>
<Function ID="14" Value="978"/>
<Function ID="15" Value="990"/>
<Function ID="16" Value="998"/>
<Function ID="17" Value="1000"/>
<Function ID="18" Value="998"/>
<Function ID="19" Value="990"/>
<Function ID="20" Value="978"/>
<Function ID="21" Value="962"/>
<Function ID="22" Value="941"/>
<Function ID="23" Value="916"/>
<Function ID="24" Value="887"/>
<Function ID="25" Value="854"/>
<Function ID="26" Value="817"/>
<Function ID="27" Value="778"/>
<Function ID="28" Value="736"/>
<Function ID="29" Value="691"/>
<Function ID="30" Value="645"/>
<Function ID="31" Value="598"/>
<Function ID="32" Value="549"/>
<Function ID="33" Value="500"/>
<Function ID="34" Value="451"/>
<Function ID="35" Value="402"/>
<Function ID="36" Value="355"/>
<Function ID="37" Value="309"/>
<Function ID="38" Value="264"/>
<Function ID="39" Value="222"/>
<Function ID="40" Value="183"/>
<Function ID="41" Value="146"/>
<Function ID="42" Value="113"/>
<Function ID="43" Value="84"/>
<Function ID="44" Value="59"/>
<Function ID="45" Value="38"/>
<Function ID="46" Value="22"/>
<Function ID="47" Value="10"/>
<Function ID="48" Value="2"/>
<Function ID="49" Value="0"/>
<Function ID="50" Value="2"/>
<Function ID="51" Value="10"/>
<Function ID="52" Value="22"/>
<Function ID="53" Value="38"/>
<Function ID="54" Value="59"/>
<Function ID="55" Value="84"/>
<Function ID="56" Value="113"/>
<Function ID="57" Value="146"/>
<Function ID="58" Value="183"/>
<Function ID="59" Value="222"/>
<Function ID="60" Value="264"/>
<Function ID="61" Value="309"/>
<Function ID="62" Value="355"/>
<Function ID="63" Value="402"/>
<Function ID="64" Value="451"/>
</Pattern>
and a standard dimmer shape to apply it:
Code: Select all
<Shape ID="x" Name="Dimmer Wave Add" Group="I">
<Function ChannelID="Dimmer" PatternID="Sine Positive" Amplitude="1000" Phase="0" Speed="29"/>
</Shape>
Now, with an origin of zero and size 100% this will give you a full fade without delays. Running this with size on fader will allow fading in/out nicely. Fading in another cue with fixture intensities will just set a base that cannot be overridden. The only time this partly falls over is if the size is less than 100% with a changing origin. Here you will naturally see the 'peaks' increase or decrease with the origin until they hit their ceiling. But in the majority of scenarios I think this works well.
The same principles are also useful for colour mixing shapes. The most obvious example is to create white overlays.
For RGB fixtures this is a simple matter of applying the 'positive' pattern used above onto the RGB components:
Code: Select all
<Shape ID="x" Name="White Wave RGB" Group="C">
<Function ChannelID="Red" PatternID="Sine Positive" Amplitude="1000" Phase="0" Speed="29"/>
<Function ChannelID="Green" PatternID="Sine Positive" Amplitude="1000" Phase="0" Speed="29"/>
<Function ChannelID="Blue" PatternID="Sine Positive" Amplitude="1000" Phase="0" Speed="29"/>
</Shape>
In order to achieve this with CMY we need a pattern that only subtracts values:
Code: Select all
<Pattern ID="Sine Negative">
<Function ID="1" Value="-500"/>
<Function ID="2" Value="-549"/>
<Function ID="3" Value="-598"/>
<Function ID="4" Value="-645"/>
<Function ID="5" Value="-691"/>
<Function ID="6" Value="-736"/>
<Function ID="7" Value="-778"/>
<Function ID="8" Value="-817"/>
<Function ID="9" Value="-854"/>
<Function ID="10" Value="-887"/>
<Function ID="11" Value="-916"/>
<Function ID="12" Value="-941"/>
<Function ID="13" Value="-962"/>
<Function ID="14" Value="-978"/>
<Function ID="15" Value="-990"/>
<Function ID="16" Value="-998"/>
<Function ID="17" Value="-1000"/>
<Function ID="18" Value="-998"/>
<Function ID="19" Value="-990"/>
<Function ID="20" Value="-978"/>
<Function ID="21" Value="-962"/>
<Function ID="22" Value="-941"/>
<Function ID="23" Value="-916"/>
<Function ID="24" Value="-887"/>
<Function ID="25" Value="-854"/>
<Function ID="26" Value="-817"/>
<Function ID="27" Value="-778"/>
<Function ID="28" Value="-736"/>
<Function ID="29" Value="-691"/>
<Function ID="30" Value="-645"/>
<Function ID="31" Value="-598"/>
<Function ID="32" Value="-549"/>
<Function ID="33" Value="-500"/>
<Function ID="34" Value="-451"/>
<Function ID="35" Value="-402"/>
<Function ID="36" Value="-355"/>
<Function ID="37" Value="-309"/>
<Function ID="38" Value="-264"/>
<Function ID="39" Value="-222"/>
<Function ID="40" Value="-183"/>
<Function ID="41" Value="-146"/>
<Function ID="42" Value="-113"/>
<Function ID="43" Value="-84"/>
<Function ID="44" Value="-59"/>
<Function ID="45" Value="-38"/>
<Function ID="46" Value="-22"/>
<Function ID="47" Value="-10"/>
<Function ID="48" Value="-2"/>
<Function ID="49" Value="-0"/>
<Function ID="50" Value="-2"/>
<Function ID="51" Value="-10"/>
<Function ID="52" Value="-22"/>
<Function ID="53" Value="-38"/>
<Function ID="54" Value="-59"/>
<Function ID="55" Value="-84"/>
<Function ID="56" Value="-113"/>
<Function ID="57" Value="-146"/>
<Function ID="58" Value="-183"/>
<Function ID="59" Value="-222"/>
<Function ID="60" Value="-264"/>
<Function ID="61" Value="-309"/>
<Function ID="62" Value="-355"/>
<Function ID="63" Value="-402"/>
<Function ID="64" Value="-451"/>
</Pattern>
Applied to CMY:
Code: Select all
<Shape ID="x" Name="White Wave" Group="C">
<Function ChannelID="Cyan" PatternID="Sine Negative" Amplitude="1000" Phase="0" Speed="29"/>
<Function ChannelID="Magenta" PatternID="Sine Negative" Amplitude="1000" Phase="0" Speed="29"/>
<Function ChannelID="Yellow" PatternID="Sine Negative" Amplitude="1000" Phase="0" Speed="29"/>
</Shape>
These should be used at 100% size to guarantee white from any origin. Neat if your base colours are coming from palettes and you want a white overlay without losing the base colour while it runs.
Ramp patterns are equally useful:
Code: Select all
<Pattern ID="Ramp Up">
<Function ID="1" Value="0"/>
<Function ID="2" Value="16"/>
<Function ID="3" Value="32"/>
<Function ID="4" Value="48"/>
<Function ID="5" Value="63"/>
<Function ID="6" Value="79"/>
<Function ID="7" Value="95"/>
<Function ID="8" Value="111"/>
<Function ID="9" Value="127"/>
<Function ID="10" Value="143"/>
<Function ID="11" Value="159"/>
<Function ID="12" Value="175"/>
<Function ID="13" Value="190"/>
<Function ID="14" Value="206"/>
<Function ID="15" Value="222"/>
<Function ID="16" Value="238"/>
<Function ID="17" Value="254"/>
<Function ID="18" Value="270"/>
<Function ID="19" Value="286"/>
<Function ID="20" Value="302"/>
<Function ID="21" Value="317"/>
<Function ID="22" Value="333"/>
<Function ID="23" Value="349"/>
<Function ID="24" Value="365"/>
<Function ID="25" Value="381"/>
<Function ID="26" Value="397"/>
<Function ID="27" Value="413"/>
<Function ID="28" Value="429"/>
<Function ID="29" Value="444"/>
<Function ID="30" Value="460"/>
<Function ID="31" Value="476"/>
<Function ID="32" Value="492"/>
<Function ID="33" Value="508"/>
<Function ID="34" Value="524"/>
<Function ID="35" Value="540"/>
<Function ID="36" Value="556"/>
<Function ID="37" Value="571"/>
<Function ID="38" Value="587"/>
<Function ID="39" Value="603"/>
<Function ID="40" Value="619"/>
<Function ID="41" Value="635"/>
<Function ID="42" Value="651"/>
<Function ID="43" Value="667"/>
<Function ID="44" Value="683"/>
<Function ID="45" Value="698"/>
<Function ID="46" Value="714"/>
<Function ID="47" Value="730"/>
<Function ID="48" Value="746"/>
<Function ID="49" Value="762"/>
<Function ID="50" Value="778"/>
<Function ID="51" Value="794"/>
<Function ID="52" Value="810"/>
<Function ID="53" Value="825"/>
<Function ID="54" Value="841"/>
<Function ID="55" Value="857"/>
<Function ID="56" Value="873"/>
<Function ID="57" Value="889"/>
<Function ID="58" Value="905"/>
<Function ID="59" Value="921"/>
<Function ID="60" Value="937"/>
<Function ID="61" Value="952"/>
<Function ID="62" Value="968"/>
<Function ID="63" Value="984"/>
<Function ID="64" Value="1000"/>
</Pattern>
Reverse that for ramp down, add negative values for subtractive version (ie. for CMY) etc. etc.
There are plenty of other applications for these - for instance individual R/G/B/C/M/Y, along with the multi-cell attributes. You could use the 'negative' patterns on dimmers as a kill function, although I see less real-world use for this. Similarly this works on RGB to reduce to black. Sine positive can theoretically be used on CMY for the same reason but it will be less effective in reality.
I'll conclude with an example that applies the additive ramp pattern to multi-cell intensity fixtures with a spread of 10 (ie. sunstrip active). The reason there are 25 attributes in total is to account for fixtures with that many attributes (ie. Jarag's). The phase is simply repeated 2.5 times.
Code: Select all
<Shape ID="x" Name="Dimmer Ramp Up 10 Cell" Group="I">
<Function ChannelID="Dimmer1" PatternID="Ramp Up" Amplitude="1000" Phase="0" Speed="29"/>
<Function ChannelID="Dimmer2" PatternID="Ramp Up" Amplitude="1000" Phase="36" Speed="29"/>
<Function ChannelID="Dimmer3" PatternID="Ramp Up" Amplitude="1000" Phase="72" Speed="29"/>
<Function ChannelID="Dimmer4" PatternID="Ramp Up" Amplitude="1000" Phase="108" Speed="29"/>
<Function ChannelID="Dimmer5" PatternID="Ramp Up" Amplitude="1000" Phase="144" Speed="29"/>
<Function ChannelID="Dimmer6" PatternID="Ramp Up" Amplitude="1000" Phase="180" Speed="29"/>
<Function ChannelID="Dimmer7" PatternID="Ramp Up" Amplitude="1000" Phase="216" Speed="29"/>
<Function ChannelID="Dimmer8" PatternID="Ramp Up" Amplitude="1000" Phase="252" Speed="29"/>
<Function ChannelID="Dimmer9" PatternID="Ramp Up" Amplitude="1000" Phase="288" Speed="29"/>
<Function ChannelID="Dimmer10" PatternID="Ramp Up" Amplitude="1000" Phase="324" Speed="29"/>
<Function ChannelID="Dimmer11" PatternID="Ramp Up" Amplitude="1000" Phase="0" Speed="29"/>
<Function ChannelID="Dimmer12" PatternID="Ramp Up" Amplitude="1000" Phase="36" Speed="29"/>
<Function ChannelID="Dimmer13" PatternID="Ramp Up" Amplitude="1000" Phase="72" Speed="29"/>
<Function ChannelID="Dimmer14" PatternID="Ramp Up" Amplitude="1000" Phase="108" Speed="29"/>
<Function ChannelID="Dimmer15" PatternID="Ramp Up" Amplitude="1000" Phase="144" Speed="29"/>
<Function ChannelID="Dimmer16" PatternID="Ramp Up" Amplitude="1000" Phase="180" Speed="29"/>
<Function ChannelID="Dimmer17" PatternID="Ramp Up" Amplitude="1000" Phase="216" Speed="29"/>
<Function ChannelID="Dimmer18" PatternID="Ramp Up" Amplitude="1000" Phase="252" Speed="29"/>
<Function ChannelID="Dimmer19" PatternID="Ramp Up" Amplitude="1000" Phase="288" Speed="29"/>
<Function ChannelID="Dimmer20" PatternID="Ramp Up" Amplitude="1000" Phase="324" Speed="29"/>
<Function ChannelID="Dimmer21" PatternID="Ramp Up" Amplitude="1000" Phase="0" Speed="29"/>
<Function ChannelID="Dimmer22" PatternID="Ramp Up" Amplitude="1000" Phase="36" Speed="29"/>
<Function ChannelID="Dimmer23" PatternID="Ramp Up" Amplitude="1000" Phase="72" Speed="29"/>
<Function ChannelID="Dimmer24" PatternID="Ramp Up" Amplitude="1000" Phase="108" Speed="29"/>
<Function ChannelID="Dimmer25" PatternID="Ramp Up" Amplitude="1000" Phase="144" Speed="29"/>
</Shape>
The reason for these shapes is a solution for the multi-cell problem where you cannot adjust the spread between each attribute of a single fixture. There's lots of fun to be had writing one for each possible spread. Oh yes.
For maximum flexibility though you can also create single shapes for each attribute.
For example:
Code: Select all
<Shape ID="x" Name="Dimmer1 Wave Add" Group="I">
<Function ChannelID="Dimmer1" PatternID="Sine Positive" Amplitude="1000" Phase="0" Speed="29"/>
</Shape>
<Shape ID="x" Name="Dimmer2 Wave Add" Group="I">
<Function ChannelID="Dimmer2" PatternID="Sine Positive" Amplitude="1000" Phase="0" Speed="29"/>
</Shape>
etc.
Enjoy!