Transform Inverse node. Explanation ?

Ok, I figured out the Inverse Node.

It very simply is providing the negative of the rotations as expressed by the quaternion. This is the only part we are interested in. See below (near the bottom) for final explanation. :slight_smile:

This explains more.
Quaternions.

The order of operations of this is also important.
So first it takes the input rotation as quaternion and multiplies it by -1. Except for the ‘w’ term which represents its magnitude. This provides us the inverse rotations.
Then this quaternion is then applied to the input translation as a rotation to the vector3.
and finally the resulting translation is multiplied by -1.

The return value is then the “negative value” of the Quaternion Rotation and the “negative value” of the translation that resulted from that rotation.

This result is very strange for sure as we go through imaginary space, but it avoids gimbal lock and if we rotate by this value we will return to the original orientation.

Giving credit to the following for explanation and solution to the Quaternion rotation of a vector.

A dot product calculator to help

A cross product calculator to help some more.

Capture of Excel computing

And a screen capture of the input and inverse to confirm result.

I like to note that this is sensitive to the precision of the values so use all the decimals available.

All of that is interesting and discovery on the way to figuring this out.


So the comment of “Put the offset in pelvis space” is accurate, but the explanation is lacking.

The important part of the Inverse Node in this use is actually just the negative value of the rotation of the bone relative to the global axis.

The local bone space is rotated by angles a,b,c from the primary global axis x,y,z. Therefore, if we have a vector that is expressed relative to the global axis we can then use the negative values of the angles a,b,c (ie -a,-b,-c) to rotate that vector to align with the local bone space axis.

The result is a vector that is in the pelvis axis orientation and it is applied to the LOCAL space of the pelvis control (ie it’s zero point is the origin of the control) so our global CurrentPelvisOffsetZ is now oriented in the appropriate direction and placed at the appropriate origin of the control to affect the needed adjustment.

Hopefully this helps anyone else, or prompts the devs to add more documentation on simple looking but powerful little nodes like Inverse.

Cheers

3 Likes