-
-
Notifications
You must be signed in to change notification settings - Fork 21.2k
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
Fix get_bone_global_pose_no_override()
returning incorrect values
#77194
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I tested #74753 and it works.
Recording.2023-05-18.085512.mp4
get_bone_pose_global_no_override()
returning incorrect values
Great find, thanks! |
I'm not sure it quite fixes the IK though, still getting undesired rotations when acquiring the rest pose transform apparently godot.windows.editor.x86_64_2023-05-19_21-11-23.mp4 |
What git commit is that and can you provide a test project? |
I'll drop the project tomorrow, and I cloned from master since it's already been merged, double checked the changed files to make sure I got the right thing |
Godot4-test2.zip |
@wagnerfs I would encourage you to file a new issues. This issue has already been closed and your problem is going to get lost and forgotten if it's left here only in a comment I believe it looks like a separate bug from this issue. The IK would have been far more broken if you had not used latest master. If you want to verify, can you test the same setup in Godot 3.5 or 3.6 and see if it acts the same? it should |
@lyuma Nah, tested on Godot 3 way before, but did it again just now to make sure, works perfectly on 3, same GLB file. |
Cherry-picked for 4.0.4. |
get_bone_pose_global_no_override()
returning incorrect valuesget_bone_global_pose_no_override()
returning incorrect values
The cherry-pick is going to be reverted for 4.0.4 stable in the end. Since this changes the behavior, even if it fixes a bug it's not fitting for a patch release and I made a mistake picking it in the first place. For a proper fix consider updating to 4.1, if this is important for your project. |
Thank you for doing the revert. I think it's the right call. While this API now acts the same way it did in 3.x (which is why I originally felt a backport made sense), there are already a number of people who expect the 4.0 behavior, since it turns out to be a little more useful for some applications. (I'm having growing doubts that the approach we picked is the right thing in the long term... while it fixes the single IK case, it makes it impossible to daisy chain IK solvers, since each one will solve based on the whole skeleton's rest pose. This whole discussion points to doing more work to design a proper IK solver system in future 4.x releases. ) |
A change introduced in
This is the cause of the bug in SkeletonIK3D
Fixes #60180
Fixes #65167
Fixes #74753
Fixes #77138
and probably more
I double checked against the corresponding if statements from scene/3d/skeleton.cpp in 3.x, with the exception of ignoring the extra
b.rest *
multiply which is no longer used in 4.0