Approach to visualize DMX fixture color/panning/tilt/zoom data?
I’m building a basic DMX mixer in Max and I’m still fairly new at virtually all aspects of the project. It may be too ambitious, but I’d like a way to visualize what the lights will look like, even when not at the venue. My thought is to have Max draw a shape that represents the light angle, zoom and color. Even just color would be great — how can I have a color swatch change the color of a shape on screen? Even an LED with a specific color would be good.
Thanks in advance for any tips on how to approach this…
I’m thinking that the LCD object may be a good option. I can draw arcs and assign color, etc. Can I affect transparency in LCD? How would you depict tilt? I think I need 3D animation for this… still haven’t touched Jitter yet. Maybe it is time.
To save yourself a lot of bother you could just use this free version of an existing visualizer. There’s a limited number of fixture types but I’m sure you can find something similar to what you actually need.
To communicate with this software you need to output DMX via Art-Net, there’s an external in my imp.dmx package for this.
If you do want to build your own visualizer though, you’lk want to use OB3D and Jitter, as that can handle most of the difficult drawing calculations for you. A good approach would be to draw your beams as semi-transparent cones, with cone base width set by the beam angle and zoom, colour of the cone set by DMX colour values, etc. There’s tools in the above package to assist with this.
David, thanks. While I have your attention, I wonder if you could clarify something for me that is probably very straightforward to anyone with DMX experience:
I am trying to plan for a project in which I have very limited access to the actual fixtures, but I want to figure out as much as I can ahead of time. I’ll be using Robe LEDWash 600s. For Pan and Tilt, range for pan is 450 degrees, tilt is 300. What does that mean for the DMX values? What position would 0 be in either case? Does 127 for each mean a central position? Does it depend on how the fixtures were set up?
Sorry for the aside, but I don’t know who else to ask… =)
For pan and tilt, DMX values always describe the full range of movement available. So in a fixture with 450 of pan, 0 will be -225 deg and 255 the will be plus 225 deg. Therefore you can always home the fixture by sending it 127. Also bear in mind that pan and tilt on most fixtures will be a 16-bit control (spread over two 8-bit DMX channels), so the effective resolution is actually 0 to 65535.
On most lighting desks however, the actual DMX values will be abstracted during programming as they have no relevance to the user. Generally it’s pointless to think in terms of numbers when programming fixture positions, as it’s impossible to visualize that information in your head when dealing with large numbers of fixtures all in different physical positions.
If you’re trying to deal with this purely from Max rather than a lighting desk, the best strategy is to set up a preset saving system whereby you program all the positions you will use and give them index names/numbers. Each index should be able to store a different position value for each light, or store no information for a light in order to leave it unaffected. Then any time you want to move a light to a position, recall it using the index. The advantage here is that if you need to move a light, or your venue changes, you can reprogram all the index positions and the show will still work.
This system on a lighting desk is called ‘palletes’, and it’s basically how all touring shows work. Advanced desks have palletes for every single possible feature of a fixture.
Great thread—David’s advice is very informative.
Adding to the preset discussion, depending on the kinds of motions you want, you could also have two levels of presets: the "light level" (store a few dozen of the common settings for each light), and the "master level" (which is a preset of presets, it calls specific light-level presets for each light, to get different combinations). It just depends on the setup and the needs.
Also, you probably want to use an abstraction for each light (presets and jit.gl drawing commands) so you can easily reuse for as many lights as you need. The abstraction can store the "light-level" presets, which can be set from your master level.
You could also use [pattrstorage] instead of presets, which has some advantages like interpolation between its presets. That way you can get fades in your colors, levels, pan, tilt, etc. But maybe the DMX hardware implements this already?
Great info guys. Thanks!
@Seejayjames What you’re talking about there is often referred to as a ‘universal’ preset (although all lighting desk manufacturers have their own terminology). For information like colour mixing, or gobo selection you would use a universal preset, because this information doesn’t change with each fixture. Clever desks can even translate universal information between different fixture models (although not with perfect accuracy).
Generally, DMX hardware doesn’t behave very cleverly in terms of automatic fades and other advanced functionality. All you get is real-time control. Sometimes movement fades are included (with a channel to set from a number of preset fade times), but these are only included for doing very accurate timed position fades, which is only necesary when using large numbers of fixture over long throws.
So I’ve been having quite a bit of trouble dealing with DMX data, mostly because I’m so new at both Max and DMX. I am having a hell of a time trying to conceptualize how to send the DMX values to my dmxusbpro. I started with simple messages stored in coll, Then I started in on a very convoluted approach in which I tried to set up "scenes" that represented various lighting sequences. This is not working very well at all. It’s too confusing to keep track of the state of each light and where. I’m back to wanting to use coll or something similar.
And then there is the imp.dmx package, which seems like the solution! But I’m still just wading in this field and barely understand the concept of a Jitter matrix. Can someone (David?) explain how imp.dmx works and why it is preferred? The Art-Net implementation seems like the way to go towards visualization… how should I get started with this? I want MIDI to trigger various actions in the lighting rig. The rig only has six fixtures.
I know I’m in over my head, but this community has helped me at least delay my inevitable drowning! Thank you!
Here’s something to get you started. Also, check the imp.dmx help patches.
----------begin_max5_patcher---------- 1043.3oc6ZEsaaCBE84juBjeNqx.F6391zj1Ov1aSSUjDVJcw3LaRa1l1+9L X6E2MVCIyEHZUVJVlXiO2CbO26Ey2mNIZQ4dVcD3ZvG.Sl78oSlnaR0vjtqm DUP2ubCsVeaQK1IkkhnYs+EektwxE28JRZeihcEbwFlT+.vCMVtS96stkJWd KWr9lJ1RYKLfowWEOCfSzmP+5WvG6dl1tQ90sr1GHZAUrNB7Q0+9ioSU+LyR iofUWSWy5AtjsWChHDg.he43kiWN9+7nWQXCWvVVtSnkEfIFT8R5u0OUJjBZ gVTJ50Ub5Fi5gnmTOT0I07uo6DHpQ56uKSlOTlD2dELe9SITddhjB1CMV5en QxK1d0ph8WQqjBlr4cYJl.5DYGyQKhOY1AOjbfwYGBhbFDvxxhBlP9GLv6jM 1N38UTQcAutlaNrHzSTPaXTTGEPh+mn.Y450a9UbxszpF6PxptgInK1vFBvA ldBdbxH.OzRrIg.txecDmp+kFispDjj.t8aFFhSfdRCniXxzmlCeNyT5Hh.U L5J.DPfHS7S7IxO3Qkevwst.vriSPiJ4rojtRkgI.ZfTv4ihtvYD3.1RGsjS FxWjRlIRYtmHkjrvfTRLQJYdhTP4tgTd53qu4VpPv1bswTxPFnqDOEvMANLT aeUrmY.2FvrfUYS.2FKgWrqXnkLjMHGmMZdw88.AFaOEgNa2rVxgXYn7YOiA tdnhKYl0hR8UT87NdQeJO+3jzcb4METYEeeP3.5qLdQ3PzADERNf8R5glCnw 3dXO4.hfW3NfwdxAjDf9en4gj+Wex2gl+moJTPo9srV2498WnnszOC3pCSjC zW0z1of2WTatqyJ+s78xcUL.9ZSzh2VvutkCssTk+sE65rjdLr9WH7II8fHj m0buyGHK6FkmwhGSBJdL4hkGIgDOhc+7wSWlGl5IY9tbP8uLOxjLOLyWk3AC OYd37fxsBdoJOAyCIdDkdwJyGGT7H7RPlm30uPk+U4gFU487WuOjD4CpTP69 hLWfZSAUEQyuXU3CpDNFKVT+H5E2721Pp5Wpp8GSs0k6pV12q86y.vg27JVs jKnR09x4vMo1lpCtoa4qVwDOl5WssrAj08kobEoQKBCaW2tCWc38vqUCe5gm XiyJFWCnQJB.OSCfzHm5cC.cjQfQDOXKviZ663J7.sAOwNCOpMgxQwiZEzcE dlaAdTeRaWgmLavi6lOirY9CN0c7CwV7.cCdP1fGryvCL0V73n4O13egb23E jXKdbD+XEdbW7B0JeaGdby3EBaKdPtY9iMym0NgNBO41hGGMdEaKdbz7Yafi CCuaKbbynUhsv4blL2VcEc616YU0c8oFIMkJdWYk5xzYSaK8r8RcOFUwtm2e +jopd6GS+IbL2mlM -----------end_max5_patcher-----------
You really wanna go the object-oriented way, like David ‘s suggesting.
I did something like this to develop the spatial, interactive light and sound setup for a dance piece before having access to the actual hardware. We used COSM (http://www.allosphere.ucsb.edu/cosm/) to make an animated 3d simulation of the system and composed the whole piece on that. Then when the gear came we interfaced it to the DMX (led-strips, blinders, moving heads) and sound (4.1) equipment and were good to go. Worked very well.
Here’s a short clip of the system in action: http://dietervandoren.net/filez/100606-int02-COSM.mov
"I want MIDI to trigger various actions in the lighting rig. The rig only has six fixtures."
You might have a look at [mtr] as well, to record the MIDI in and be able to save sequences etc. You can use them as intermediate values in the chain and have the MIDI active or not. With intermediate values you can also just use keyboard and mouse for testing. So, hook up controllers and/or notes and parameter and trigger commands.
This is really only part of the system, you can then use the intermediate boxes as storage for presets, and can draw from them to do your visualizations.
You can use [seq] instead of [mtr] if it’s definitely going to be MIDI control information, because it has more playback options. But [mtr] has the advantage of working with numbers directly, without a need for translating to and from MIDI, and you can control individual sumber streams (scale them, gate them, etc.) Fancier control like "turn off all color control but let everything else keep playing" is easy if you have gates for each parameter of each light, and master gates which control all 6 lights’ specific parameters at once.
----------begin_max5_patcher---------- 1116.3oc6ZssaaiCD8Y6uBB8r1.wa5x9V+NJVTPKwZqt5FnnqS1h9uuRTRo1 INQbkEGmBrHHxlzxbN5LmY3vI4Ga23sq9QYqG5OQeFsYyO1tYiYp9I1LNdiW o3wzBQq417RqKKkUZO+gOSKeTalu9nFoqQGDprSBkb5yaTx1taWnyqq9hRlp GrEiReHvGQXw8uDLdA8WiequVWoqDkRyJ+IUtnXZ8pNV1YoBo1flfIqHzoGx q1etEh4CVf0+BlarA4kFoM+eLFASdH3WVHuZx.3wIyyFdH28s+fv85m6ma21 ew2RZqT11J1KeEsQPQTTDdF5hFSLvOlcSz0zSyvT5mZjCKum2yK00XRJav3F 6hoFnfi+OxjjqvjgKgI0062WLm9hxCMXlPtJgYIsj2oyeWlIvHeI33Iw0KjX MBUmaQKUeQVI1UHOWyNqNKZIrSk7T2W9Uxr8B8rTV7pDRtTM14QqiBtfUPhE uDR7XWFtiyQWiIVnA2DcQeOsmeGq4OCyQSLJcLw7RRzff7sXN5CAVHMy0xxw ME7Z00M8fvu+RmYqUYOOroP7zyCJO1KwFGbr5hgYxg6LXZhulqZ0mOgRJ905 dRke1WNsPJTdmG699wMIqXbSoVgn1E3fCCuIk.6MCb7O6WKBhvgCYn4QKJJh 8ZJkFrhTZptHuBEgB8VqLKykllGQm1xxGwIqUg.TrCXENbrR.yIrBcIrxaUU 4o7hBTkTlgZSEERTaco7zAoRh5XK8AIJ8fn6cMp5ccIwdZtH0DyiLOwYEcxL 4.3CalkrZ0bRYNPpw.SpMkXZskZ7UjUZD+MJn+GKKSJfb+JSBmDeKY3oWgJW To3cq5NoZFBi2WMxTkIKluHyTmzNQ0da1DHwb09SCdKUvSibFoxFhht6j5vd HfRpwNiTGCsu2j5XPNnjZxZto8azJnUX+0Dpi5oCyg8zwwaIPbTyYH2dyYVo xGvgNrKKANpKKttP.mztDb3M2tDvZ7A6+a6wEovItpsGP1.C2z+BL2AGehB1 wmvwXWb7IrKNTIANVASbBq7Qn+EqPoRblS5DA1EsBDCXmHbglIxk8g.hBIV+ FJrB8S.rCbMleExCbw+chdFRzBI8v9MhdXf2WoKpzyXHut7nu7eiCCT6m+RJ qs9nJc5Yb7OiQWAoOi2LYqNuxzZjyuonKtoC4YYxpywbVda+igAjAW04YMdn 1fmX3vC2F7j.GdhrAOcaefnvfmXawCAF7jXKdvvfmKM08W+boq39GecoT89m +wJ+U3GL+UHr5YpM3Al3cRhM9q.37WgVj+gDCl+hDYKdfgeH1reAAN8L1J+E AN+UfE3ACW9mPagCPoeHVDti4fQOFSMW5P3xFZfCwB3fgCNXKfyGHmEvZm4b VLXgybNKBbaTXShGNXRYlsvAl.ctsvAlSAhsgd.LxxllH.WjkUkfsPzLz.HQ Sy2kp1wkz.DuRw2pU8CC8MCyqFFZVQOk764S2Oaa+p8ys+KfxyOeO -----------end_max5_patcher-----------
This is wonderful advice, thanks guys. Yes, the plan is to move to imp.dmx ASAP, as soon as I get my proof-of-concept prototype completed. I’ve been getting fair results with very ugly programming, just to help get things rolling. I will post some of this when I’m at my development machine, just to give you guys a chuckle and beg for feedback.
Control over individual parameters is certainly preferred, and I am doing that currently (even though my patch is inefficient and difficult to navigate.) My hope is that I can have MIDI trigger various "static" lighting events, like "turn on light 1 full zoom, blue, with no new pan or tilt data " and then use Max to throw a Pan/Tilt pair of values at the light to change position.