ambisonictoolkit / atk-reaper

Ambisonic Toolkit as a set of JSFX plugins for the REAPER DAW.
Other
74 stars 10 forks source link

Update GUIs for FOA Transforms #87

Closed lossius closed 2 years ago

lossius commented 2 years ago

Update the indication of perceived localization focus from |rV| to |rE|.

Mapping to |rE| offers a stronger sense of how localized an encoded planewave will appear after transform.

This change will require an update to the figures presented in the documentation for atk-sc3.

To implement will require a brief conversation with @lossius as to details.

This is further discussed in Issue 24. Even though that issue is closed (moved here), the information in the discussion remains valid, and should be referred to when implementing this.

lossius commented 2 years ago

I have looked into this further. What is currently indicated in the plugin GUIs is neither |rV| nor |rE| but rather degree of directedness (normalsed to [0, 1] ), calculated according to how it is done in the Direct transform:

Directedness = 1 - 2 / PI * asin( ( 2 * W^2 - X^2 - Y^2 - Z^2 ) / ( 2 * W~2 + X^2 + Y^2 + Z^2 ) )

The calculations behind this can be found in our 2014 ATK SMC/ICMC paper (see equation 3).

I have a working prototype of the Direct transform plugin using |rV|. The difference between the two is subtle (the new prototype can be seen to the left in the below screenshot, the previous version to the right), but as you can see, with |rV| the points are no longer fully aligned with the blue interaction circle, but instead move somewhat faster towards the centre as the transformation angle increase. That is probably to be expected.

Screenshot 2022-02-19 at 19 33 24

If I am to implement |rV| and |rE|, it might make sense to keep Directness as well?

Apart from that I also wonder if there is a small typo in the formula given here. Is it instead of

active_admittance_vector = (pow(2, 1./2)) * [X, Y, Z] / W

meant to be:

active_admittance_vector = (1 / pow(2, 1./2)) * [X, Y, Z] / W

? I had to adjust to that to have this work within a [0, 1] range.

lossius commented 2 years ago

Some further development and testing today. Trying to visualise Directedness, rE and rV differently in order to make it more apparent to the user what mode of display is currently used (without having to always double-check the last (new) slider.

Here is a screenshot showing Focus and Push using all three display modes. Any thoughts on this, @joslloand ?

Screenshot 2022-02-20 at 19 54 02
lossius commented 2 years ago

And the Direct plugin

Screenshot 2022-02-20 at 20 18 48
mtmccrea commented 2 years ago

Nice to see some more details added to the displays! If you'd like to see a few other ideas, I implemented a number of extra features in the atk-sc3 utility FoaXformDisplay (docs), which was in fact inspired by your original plugin design ;):

  1. a variable number of "probe" points (the display can be cluttered with many points and aggressive transform angle, but more informative with more points and subtle application of the transform)
  2. an indication of which direction was Forward pre-transform (red circle + "F")
  3. alternatively dis/abling the filled circle around of the "probe" points (in which case only the radius is an indication of rE, like your second example)
  4. gain display for each probe point (useful for knowing how the transform will affect a sound in a particular direction)
  5. A global maximum and minimum gain of the probe points (useful to know the gain adjustment bounds of the transform to anticipate issues with headroom)
  6. introspection by selection of each probe point for values of az/el/rE/gain (similarly useful as 4. above but also to observe a particular probe direction evolve over the modulation of a transform)

Some of these features were more useful in the context of chaining transforms (you can play with this by pressing the "Chain >>" button), where the aggregate effect of multiple transforms can become unwieldy and hard to track the orientation, so they may not be as useful in the plugin context, but maybe this gets some ideas flowing for you :)

Note that the radius is the rE vector, although I call it "directivity" in the introspection window. It's a useful term and well motivated but admittedly a bit vague and in the literature "directivity" has multiple uses.

Screen Shot 2022-02-20 at 23 50 44Screen Shot 2022-02-20 at 23 49 24 Screen Shot 2022-02-20 at 23 47 54Screen Shot 2022-02-20 at 23 47 11

lossius commented 2 years ago

Thanks, @mtmccrea .

The SuperCollider GUI looks awesome. I have given this some thought and will go a slightly different route, responding to your points above:

  1. I believe I found a reasonable value for this when I first designed the plugins, and it has never bothered me much since then, so I'll leave it as is.
  2. This I really like and will adapt.
  3. This looks nice in your GUI. In my plugins, I am concerned that if it is possible to make all three view modes look the same in the GUI, they might be hard to tell apart when coming back to them later in a big and complex Reaper project. So, I will instead ensure that Directedness, rE and rV looks distinctly different so that one immediately knows what ones looking at.
  4. This can be nice in a larger GUI, but I am concerned that my plugins get too cluttered then, so I will leave it out.
  5. Same here, although I can see how it might be useful.
  6. And same here.

I have additionally decided to only implement the additional |ırE| and |rV| views where they actually are of importance; in the Direct, DirectO and FocusPressPushZoom plugins, as they are the only transforms that alter the degree of directedness.

joslloand commented 2 years ago

@lossius

meant to be:

active_admittance_vector = (1 / pow(2, 1./2)) * [X, Y, Z] / W

? I had to adjust to that to have this work within a [0, 1] range.

Yep, this is correct! Sorry for the typo!! Fixed in reference: https://github.com/ambisonictoolkit/atk-reaper/issues/24#issuecomment-1048166349