Moving head control with ray tracing to floor

Request a feature that you would like to see in QLC+.
Explain in details why you would need it and which is your usage case.
Post Reply
User avatar
enbyted2
Posts: 17
Joined: Sat Dec 24, 2016 8:54 pm
Location: Poland
Real Name: Bartek

I thought about it on last party that I played on.

I wanted a very simple functionality with moving heads - to be able to draw a perfect line/circle/square on the floor but found it rather hard to do.

So an idea came to my mind - what if I had a function (like EFX) and VC component (like XY pad) that would get the following information:
- each head's position in x/y/z space
- each head's "zero" orientation
- each heads max pan/tilt (probably from fixture definition)
- plane on which you want to operate (floor, back wall, etc.), maybe allow for custom planes by specifying their normal (vector perpendicular to that plane) or something.

Then you could make all heads point to the same exact point on the given plane (let's say floor) with just one entry. You could make all heads follow a circle on the floor with just one simple to configure function. Also you could make all heads point to a single point with just two sliders.

From maths point of view this is fairly easy. From programming point of view it would be mostly copy of existing EFX function and XY pad - just with additional math.

What are your thoughts about it? Would it be as useful as I see it? How would you improve it?
Would you, Massimo, merge such change into QLC+? Of course I'm willing to code it and send a PR - if there is demand for this feature.
siegmund
Posts: 703
Joined: Mon Nov 02, 2015 11:03 am
Location: Germany
Real Name: Lukas

Hey enbyted,

I would really appreciate such a feature. My thoughts on this so far:
  • Sounds like this will be the "real" x/y pad, the existing one is more a pan/tilt one as it is atm -> Maybe rename?
  • In general, the retrieval and input of all the coordinates could be a little complicated for the average user. So I would suggest to either do
    • configuration of positions visually (like 2d monitor -> 3d monitor)
    • or offer some functionality to "calibrate". This is most probably the more easier one from a programming point of view. I think about that in a way of placing the moving heads manually (during programming) in some corner cases of movement and from these points calculate the missing coordinates/vectors/whatever.
  • Where are the coordinates configured - in each vc widget individually? This would be cool since you could create a vc widget for each "plane" to operate on. Or include a drop down list in the vc widget to select the plane when live.
That's all so far. In general, this would be a very nice feature, but I think the decisions have to be made carefully. Also, I'm not sure if Massimo wants to struggle with something like this before QLC+ 5.

Regards,
siegmund
User avatar
enbyted2
Posts: 17
Joined: Sat Dec 24, 2016 8:54 pm
Location: Poland
Real Name: Bartek

Thanks for your feedback, siegmund
siegmund wrote: Wed Jul 05, 2017 7:59 am In general, the retrieval and input of all the coordinates could be a little complicated for the average user. So I would suggest to either do
  • configuration of positions visually (like 2d monitor -> 3d monitor)
  • or offer some functionality to "calibrate". This is most probably the more easier one from a programming point of view. I think about that in a way of placing the moving heads manually (during programming) in some corner cases of movement and from these points calculate the missing coordinates/vectors/whatever.
Hmm, you are probably right. What I need to know(math wise) to do ray tracing is:
  • Position of all heads expressed as offsets from common point (can be a base of a stand for example)
  • Position of center of plane as offset from common point (the same as for heads)
  • Orientation of plane - it's normal
  • Any known tilt/pan and x/y pair - to calibrate '0' point (tilt/pan for plane's 0/0 x/y)
  • each head's max pan/tilt - to calculate each plane's size - common area of operation reachable by all heads
Units don't matter as long as they are linear - 2 units are 2 times as far as 1 unit. That means that users can measure in meters, feet, A4 paper lengths, whatever they want/have.
I'd have to think about the maths to be sure if that's enough.

I though about a table just like in the XY pad, but with additional 'X offset', 'Y offset', 'Z offset', 'zero tilt', 'zero pan' fields.
And similar for planes - maybe expressed like presets in speeddial - that would allow mapping each plane to a button on console.
Having a visual editor would not be accurate, but we could show a visualisation or something.
Also a better editor could be added later on - after we get more feedback on this.
Where are the coordinates configured - in each vc widget individually?
Yes, this would be widget/function specific, cause I wouldn't want to pollute fixture code to contain this information and it allows for more flexibility - you could have many different "real" XY pads each grouping different heads, but they might share few fixtures (if anyone wants that).
User avatar
mcallegari
Posts: 4710
Joined: Sun Apr 12, 2015 9:09 am
Location: Italy
Real Name: Massimo Callegari
Contact:

This has been discussed a lot of times already in these forums. The problem is always the same and the answer is the same too.

Right now QLC+ doesn't take into account any spatial positioning of a fixture in Functions (not even 2D).
Therefore no calculation can be done of where an emitted light beam will go.
Also, what's being specifically requested in this topic is to deform EFX algorithms to reflect a 3D spatial position of a fixture. That's a huge change as well and I'm not even sure this will go into QLC+ 5 either.
I cannot even imagine the nightmare of making EFX aware of the stage floor position and angle. (by the way: what if it's not a floor but a wall...or a ceiling?)

So the answers are:
- 3D spatial positioning -> QLC+ 5
- EFX deformations -> probably never

If you want to speed up the 3D developments in QLC+ 5, then find me an OpenGL expert developer. In 3 years I haven't found one yet willing to contribute to an open source project...
User avatar
enbyted2
Posts: 17
Joined: Sat Dec 24, 2016 8:54 pm
Location: Poland
Real Name: Bartek

mcallegari wrote: Wed Jul 05, 2017 9:23 am Right now QLC+ doesn't take into account any spatial positioning of a fixture in Functions (not even 2D).
And I'm proposing a way in which it could take that into account that would not pollute any of existing engine code.
I cannot even imagine the nightmare of making EFX aware of the stage floor position and angle. (by the way: what if it's not a floor but a wall...or a ceiling?)
That's just multiplication of 2 matrices and a vector if I'm not mistaken.
Also, what's being specifically requested in this topic is to deform EFX algorithms to reflect a 3D spatial position of a fixture.
Could you put that in different words? Do you mean "Draw a shape on a given plane knowing the position of fixture in 3D" or "Draw a shape in 3D space knowing the position of the fixture and verticies of this shape" or something different?
Both of these are fairly simple calculations. The hard-ish part of that is that moving heads make more that 360 rotation and this creates situation where there are multiple solutions to the equation and it's about finding the one that gives shortest path.
If you want to speed up the 3D developments in QLC+ 5, then find me an OpenGL expert developer. In 3 years I haven't found one yet willing to contribute to an open source project...
Yeah, I can imagine that. It's hard enough to find employee with decent skills in any kind of 3D graphics programming.
User avatar
mcallegari
Posts: 4710
Joined: Sun Apr 12, 2015 9:09 am
Location: Italy
Real Name: Massimo Callegari
Contact:

Also, what's being specifically requested in this topic is to deform EFX algorithms to reflect a 3D spatial position of a fixture.
Could you put that in different words? Do you mean "Draw a shape on a given plane knowing the position of fixture in 3D" or "Draw a shape in 3D space knowing the position of the fixture and verticies of this shape" or something different?
I mean "Draw a shape on a given plane knowing the plane 3D position/rotation and the EFX fixture 3D positions/rotations"
In other words this means QLC+ needs to be 3D aware of everything.
MarcoM
Posts: 5
Joined: Sun Apr 08, 2018 8:56 am
Real Name: Marco Manieri

Sorry for bringing this up, but a few days ago I had to deal exactly with this need.

While trying to account for "real" 3d relative offsets between fixtures and planes might be for sure a great feature (as well as a big programming nightmare :cry: ) there might be a simpler implementation to allow a "basic" mapping of x-y positions to tilt-pan values.

The XY pad could be extended (or cloned) to work in "plane mode" instead of "pan-tilt". This was already implemented in an another software package.

The linked implementation looks much simpler than "real 3d tracing" and probably requiring much more contained code changes.

Each fixture added to the widget must have 4 "calibration" slots (upper/bottom - left/right). The user has to define pan-tilt values for each "corner" of the given plane (maybe a quick "get actual values" button?). Obviously is up to the user to properly calibrate all the fixtures accounting for things like subject height respective to the floor (i.e. calibrating the fixtures having an "average height" model moving on the 4 corners).

In Operate mode the x-y value on the pad is then transformed via a rather simple matrix calculation to the pan-tilt values for each fixture.

Presets and operating usages (absolute, EFX, scene) would then work as usual, changing the x-y position values.

Hope this make sense!
Marco Manieri
Perugia - Italy
User avatar
mcallegari
Posts: 4710
Joined: Sun Apr 12, 2015 9:09 am
Location: Italy
Real Name: Massimo Callegari
Contact:

MarcoM
Posts: 5
Joined: Sun Apr 08, 2018 8:56 am
Real Name: Marco Manieri

No, I did not see it. Wonderful.

Just a suggestion.. might the "target spot" position be a "virtual channel" on it's own?

In the video you create scenes with pan-tilt values, and therefore you have to create separate "centre pos tilt/pan" scenes for each fixture group and therefore "find the centre" for each of them.

Creating a "virtual" channel for actual targeted position would allow for less scenes to be managed and much easier "adjustings"!

BTW... Great work you are doing and THANKS a lot!
Marco Manieri
Perugia - Italy
User avatar
andres robles
Posts: 187
Joined: Tue May 17, 2016 7:41 am
Location: Spain
Real Name: Andres Robles

Hello everyone, I think something that maybe helps to have a function like this, for example: to create a new FX, I think it would be fine, before creating the FX, position the mobile heads, for example in the center of the stage , and then be able to apply the fx from that position, that is, if they are positioned in the center of the stage, and you apply the circle, you must make a circle taking the position created before as a center of the circle, it would also help to turn on the light while you edit the fx to see where it goes .. and record the fx .... In common dmx tables an example of creating an fx is: Selection of fixtures ... html-menu_locate fixture (pan / tilt 50% lamp on and other functions to zero) places position (pan / tilt) and shape generator, and only edit size of the fx and speed .... I do not know if the current fx could be compatible with functions like this ... Greetings ... ..
User avatar
mcallegari
Posts: 4710
Joined: Sun Apr 12, 2015 9:09 am
Location: Italy
Real Name: Massimo Callegari
Contact:

andres robles wrote: Tue Apr 10, 2018 11:55 am Hello everyone, I think something that maybe helps to have a function like this, for example: to create a new FX, I think it would be fine, before creating the FX, position the mobile heads, for example in the center of the stage , and then be able to apply the fx from that position, that is, if they are positioned in the center of the stage, and you apply the circle, you must make a circle taking the position created before as a center of the circle, it would also help to turn on the light while you edit the fx to see where it goes .. and record the fx .... In common dmx tables an example of creating an fx is: Selection of fixtures ... html-menu_locate fixture (pan / tilt 50% lamp on and other functions to zero) places position (pan / tilt) and shape generator, and only edit size of the fx and speed .... I do not know if the current fx could be compatible with functions like this ... Greetings ... ..
Relative EFX are there since ages. I show it in various videos.
Post Reply