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: 16
Joined: Sat Dec 24, 2016 8:54 pm
Location: Poland
Real Name: Bartek

Moving head control with ray tracing to floor

Post by enbyted2 » Tue Jul 04, 2017 8:34 pm

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: 524
Joined: Mon Nov 02, 2015 11:03 am
Location: Germany
Real Name: Lukas

Re: Moving head control with ray tracing to floor

Post by siegmund » Wed Jul 05, 2017 7:59 am

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: 16
Joined: Sat Dec 24, 2016 8:54 pm
Location: Poland
Real Name: Bartek

Re: Moving head control with ray tracing to floor

Post by enbyted2 » Wed Jul 05, 2017 9:03 am

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: 1866
Joined: Sun Apr 12, 2015 9:09 am
Location: Italy
Real Name: Massimo Callegari
Contact:

Re: Moving head control with ray tracing to floor

Post by mcallegari » Wed Jul 05, 2017 9:23 am

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: 16
Joined: Sat Dec 24, 2016 8:54 pm
Location: Poland
Real Name: Bartek

Re: Moving head control with ray tracing to floor

Post by enbyted2 » Wed Jul 05, 2017 1:45 pm

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: 1866
Joined: Sun Apr 12, 2015 9:09 am
Location: Italy
Real Name: Massimo Callegari
Contact:

Re: Moving head control with ray tracing to floor

Post by mcallegari » Thu Jul 06, 2017 10:39 am

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.

Post Reply