Skip to content
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

Inverse Kinematic Improvements #2494

Draft
wants to merge 6 commits into
base: master
Choose a base branch
from

Conversation

PROMETHIA-27
Copy link

Improves inverse kinematics to behave better generally and adds support for inverse kinematic poles.

To do this I removed FIK as a dependency and instead wrote a custom, simple FABRIK implementation with a modification to support poles as they function in blender. This should generally give a lot more flexibility when it comes to animating with IK, although it isn't full IK constraints. Constraints (and multiple end effector) support can be added in the future using the techniques described in this paper.

Solves #1775.

Currently unfinished:

  • Localization for the set ik pole action (do all languages need to be added right now or will they be filled in later?)
  • Ideally further testing to ensure it behaves correctly and as desired (I have high confidence but have ultimately not done that much with it so far)
  • Unsure if interface is ideal (in particular I would like the pole target to be a null object, rather than a locator, but null objects seem to cause issues because their update order matters? So sometimes the null object will always report its original rather than animated location).

@HatzDev
Copy link

HatzDev commented Oct 16, 2024

An IK pole without being able to control the rotation doesn't make much sense to me, maybe you could leave it as a null object instead a locator and make the position/rotation of the null object affect the rotation of the IK Bones? (just like it is in blender)

@PROMETHIA-27
Copy link
Author

I tried to make it a null object, but that doesn't work, it can just ignore the null object's position. I think this is due to null object update order (if the target updates before the pole it won't recognize the pole's position) but I'm not certain.

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

Successfully merging this pull request may close these issues.

2 participants