Skip to content

Euler rotation order should clarify whether it's intrinsic or extrinsic #105115

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
FreyaHolmer opened this issue Apr 7, 2025 · 4 comments
Open

Comments

@FreyaHolmer
Copy link

FreyaHolmer commented Apr 7, 2025

Tested versions

Godot 4.4.1

System information

Windows 11

Issue description

Euler angles have an ambiguity in whether the axes listed are extrinsic (chained world/parent space rotations) rotations or intrinsic (chained self/local space) rotations, and it's not clear right now that godot is referring to an intrinsic order

For example, godot and blender both let you pick the euler order, but these are actually different because blender is implicitly referring to an extrinsic order, while godot is implicitly referring to an intrinsic order, and so even if you set them both to the very same euler order, the order doesn't actually match, and you get a different result, because of this

Image

Wikipedia uses different notations for each, and it actually happens to be the case that if you reverse the order, you get the equivalent rotation for the other interpretation.

x-y'-z" is used for intrinsically rotating X, then Y, then Z
Z-Y-X is used for extrinsically rotating Z, then Y, then X, which is actually equivalent, because the order is reversed!

I'm not sure what the best solution here is, but some clarification in the UI would be nice, whatever form it takes! Wikipedia uses the lowercase tickmark notation for intrinsic rotations, but that might get confusing for users. At the very least some kind of tooltip, or just using lowercase, might be enough of a clarification?

Also attaching two rotating cats, to show that the intrinsic x-y'-z" on the left, ends up being the same orientation as the extrinsic Z-Y-X

Image

Link to the sister issue over at blender's house

Steps to reproduce

N/A

Minimal reproduction project (MRP)

N/A

@akien-mga
Copy link
Member

CC @aaronfranke

@aaronfranke
Copy link
Member

aaronfranke commented Apr 7, 2025

Correct, Godot's YXZ is order is intrinsically Y then X then Z when composing, or extrinsically Z then X then Y when composing, or intrinsically Z then X then Y when decomposing, or extrinsically Y then X then Z when decomposing. This is all quite a mouthful, and I'm not sure what's the most concise way to convey this information. I think when people see YXZ they assume intrinsic+composing, but somehow this should be explicitly documented.

blender is implicitly referring to an extrinsic order

That explains why I always found Euler angles in Blender infuriatingly difficult to use! 😛

@FreyaHolmer
Copy link
Author

I think the most low hanging fruit would be to plop it into a tooltip on the rotation order field. Another would be to use the x-y'-z" notation in the UI, although it might be a good idea to only use that notation in the dropdown menu when unfolded, to avoid cluttering the UI, or at least use lowercase letters to make it at a bare minimum distinct from wikipedia's and blender's use of uppercase for the extrinsic order

@Rindbee
Copy link
Contributor

Rindbee commented Apr 8, 2025

It is recommended to use +/- signs to represent extrinsic/intrinsic order respectively. Currently it is common to use uppercase and lowercase letters for distinction, although this may be ignored in formatted displays.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants