ai:examples:movingscreens:movingscreens
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
ai:examples:movingscreens:movingscreens [2018/11/11 17:49] – icke_siegen | ai:examples:movingscreens:movingscreens [2018/12/05 13:57] (current) – icke_siegen | ||
---|---|---|---|
Line 8: | Line 8: | ||
^ published: | here | | ^ published: | here | | ||
^ tested in version: | Ai v8 | | ^ tested in version: | Ai v8 | | ||
- | ^ download: | | | + | ^ download: | {{ : |
//Hint: click the images to show them larger.// | //Hint: click the images to show them larger.// | ||
Line 26: | Line 26: | ||
Some of the special aspects of this project: | Some of the special aspects of this project: | ||
* it was necessary to mimic the real behaviour of the segments, in order to reproduce it from the position data | * it was necessary to mimic the real behaviour of the segments, in order to reproduce it from the position data | ||
- | * something what was completely new to me: we ran into a gimbal lock, and Mr. Dave Green was kind enough to explain this and provide a solution - see tbd. (Euler to Quaternions) | + | * something what was completely new to me: we ran into a gimbal lock, and Mr. Dave Green was kind enough to explain this and provide a solution - see [[# |
* the handles of the projectors and of most of the screen fixtures were hidden from the stage construction page, in order to gain overview | * the handles of the projectors and of most of the screen fixtures were hidden from the stage construction page, in order to gain overview | ||
* it is not possible to do a proper softedge on surfaces which can dynamically tilt. Hence it was decided to go for a hardedge, and only some segments were displayed per projector | * it is not possible to do a proper softedge on surfaces which can dynamically tilt. Hence it was decided to go for a hardedge, and only some segments were displayed per projector | ||
Line 39: | Line 39: | ||
* [[ai: | * [[ai: | ||
* [[ai: | * [[ai: | ||
+ | * [[ai: | ||
+ | * [[ai: | ||
+ | * [[ai: | ||
+ | * [[ai: | ||
+ | * [[ai: | ||
===== Stage Patch ===== | ===== Stage Patch ===== | ||
Line 69: | Line 74: | ||
* top-left, there are some [[ai: | * top-left, there are some [[ai: | ||
- | * '' | + | * '' |
- | * '' | + | * '' |
* two [[ai: | * two [[ai: | ||
- | * [[ai: | + | * [[ai: |
* '' | * '' | ||
* finally, bottom-left is the screen fixture for this very segment: | * finally, bottom-left is the screen fixture for this very segment: | ||
Line 85: | Line 90: | ||
=== Winde 1-3: getting the absolute height data === | === Winde 1-3: getting the absolute height data === | ||
+ | |||
+ | As described above the subpatch '' | ||
+ | |||
+ | {{: | ||
+ | |||
+ | This should be easy to understand - simply read it left-to-right: | ||
+ | |||
+ | * the (exposed to the parent patch) [[ai: | ||
+ | * the [[ai: | ||
+ | * the '' | ||
+ | * of course, for debugging, some [[ai: | ||
+ | * the [[ai: | ||
+ | * the result is then returned via the patch io | ||
+ | * the [[ai: | ||
+ | |||
+ | === Calculate === | ||
+ | |||
+ | '' | ||
+ | |||
+ | **Note that this is not exact - honestly I had wished to have someone with a degree in physics to help me with this. However it was close enough to reality to be used on a tour for more than a year.** | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Let's try to explain the logic: | ||
+ | |||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | === EulerToQuaternion === | ||
+ | |||
+ | When creating this project I ran into a strange problem: x, y, and z rotation are no independent from each other. I described it like this: | ||
+ | |||
+ | > in AI, the x and y rotation of a screen fixture refer to the world’s x and y axis. However, z rotation refers to the screen’s z axis. This leads to the situation – with x_rot = -90 – that y_rot and z_rot do exactly the same, but the screen cannot be tilted sideways (what z_rotation does). | ||
+ | |||
+ | Dave Green was kind enough to give a thorough explanation of this: | ||
+ | |||
+ | > You have discovered one of the draw backs of the Euler angle system we use in to rotate screens in Ai. Gimbal Lock. There is a short video explaining the problem here: https:// | ||
+ | > | ||
+ | >So you are probably thinking what can I do to resolve this problem? | ||
+ | > | ||
+ | >Another option is to use the alternate skin for the Fixture in the stage patch and then connect to the x,y,z,w Quat ports. | ||
+ | |||
+ | And while I was still struggling to find my way through all this Ciaran was so kind to create a patch which is now included as system patch: | ||
+ | |||
+ | >As Dave has said you encounter this problem based on the way Euler angles are defined in Euclidean Space. To get around this we can either use a 4x4 rotation matrix or quaternions. Without getting into the maths too much I have created a patch that should convert your Euler Angles into Quaternions, | ||
+ | |||
+ | |||
+ | {{: | ||
+ | |||
+ | (This concludes the top part - the calculations for the hung models) | ||
+ | |||
+ | ==== Lower part: Mediaspinners, | ||
+ | |||
+ | {{: | ||
+ | |||
+ | This part is pretty much straight-forward: | ||
+ | |||
+ | This is done in a little subpatch: MediaSpinner ArtNet | ||
+ | |||
+ | === MediaSpinner ArtNet === | ||
+ | |||
+ | {{: | ||
+ | |||
+ | This subpatch simply allows to set the DMX addresses per mediaspinner - each one takes two DMX channels as 16bit. From the given start address per spinner, the next channel is computed. Then the '' | ||
+ | |||
+ | ==== Bottom: the projector outputs ==== | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Finally, at the very bottom of the stagepatch, the projectors are defined. Note that again we didn't use softedge, but assigned each screen to a specific projector - see [[ai: | ||
ai/examples/movingscreens/movingscreens.1541958584.txt.gz · Last modified: 2018/11/11 17:49 by icke_siegen