Inverse Kinematics Control Instance for animation is now in Beta!

I saw the video last week, we incorporated some of your feedback, thanks for making it!

6 Likes

Yes, as mentioned by someone we had to temporarily revert some of the flags so that might be why. Feel free to DM if you still have issues in a bit so I can have a look. Thanks

2 Likes

Yes, if you move the parts directly you’ll break the joints and disconnect the rig. You should create a separate part to use as Target.

4 Likes

We temporarily rolled back due to some unrelated issue but now it should be available again. Sorry for the inconvenience.

2 Likes

i finally got it to work. its a pretty cool feature ngl.

https://cdn.discordapp.com/attachments/999521266614665227/1024784150516998244/Screen_Recording_2022-09-28_at_21.44.53.mov
(although it looks a bit strange that my characters lower left arm and hand keeps on rotating like that)

2 Likes

This is amazing. I cannot wait until it is live in-game!

1 Like

Yes! Thank you so much for releasing this. I first saw a reference to this in the Release Notes section a couple weeks ago, right before I was about to start a new project. I specifically paused that project until this release, to save myself some hassle in writing my own IK implementation (since IK plays a crucial role in the game). After some quick testing within studio, I’ve found this to fit my needs, and I greatly appreciate this release and hope others do as well. Great job!

1 Like

This is such a cool feature, can’t wait when it gets fully added!

Some things I would recommend:

  • A property to affect how much the IK overrides animations (Hands look funny when the walking animation plays).

  • An enumeration to affect where the center of the target is (The center or the pivot).

  • Setting the weight should update the positions of the part correctly and also make them gradually interpolate to the new weight. If I set the weight from 1 to 0.5, the next time I move it will be jittery to the new weight meaning to get a good effect I would have to manually lerp it myself.

  • If I set weight to 0 it just keeps my hand in the same last position unlike how AnimationTracks act where it just stops affecting its position.

Anyways, super stoked for this! No more are the days of using performance heavy IK modules!

2 Likes

works really well from testing, got the player legs to follow the ground by raycasting a point from the player feet and then using IKControl on that raycast point

13 Likes

After playing with this for a bit more, something that would be useful is an offset for the EndEffector.

Consider this case, where I want the arm to be pointing toward an attachment but not necessarily stretching to it:
image
desired behavior
image
current behavior

Current options are to rotate the c0/c1 of the wrist joint or place the target in a different place, both of which are not ideal.

This would also help with making sure the correct part of the EndEffector is moving to the target, so the wrist/ankle/etc joint is not always stretching to the desired point but rather the center/offset.

Another example, aligning the bottom of the feet rather than the ankle:
image

4 Likes

This is awesome, but why does my character look at the complete opposite direction of the targeted object when LookAt is enabled? (the targeted object is the door)
https://gyazo.com/c3e5431d1373e334859e500dcbffc84f

epic embed fail

1 Like

Sadly it’ll probably be rthro only.

Great suggestion, thanks! We are working on some of the points you mentioned:

A property to affect how much the IK overrides animations

  • The Weight property should allow you to do that

An enumeration to affect where the center of the target is (The center or the pivot).

  • This feature will be released soon, we’ve just finished development on it

Setting the weight should update the positions of the part correctly and also make them gradually interpolate to the new weight. If I set the weight from 1 to 0.5, the next time I move it will be jittery to the new weight meaning to get a good effect I would have to manually lerp it myself.

  • We don’t have any smoothing factor applied on top because not all developers might want that feature, and can code a lerp like you said on top of the Weight property. But if this becomes something many people ask, we might add something like it.

If I set weight to 0 it just keeps my hand in the same last position unlike how AnimationTracks act where it just stops affecting its position.

  • If you have an animation playing, that will be the behavior. If not, the IKControl will not have any effect but the previous position will be preserved. We might look into providing an option to reset the pose in the future.

Thanks!

1 Like

This looks awesome, glad to see you could already get this working!

2 Likes

IKControls work with R15, rthro, R6 and custom-skinned imported meshes with Bones.

4 Likes

Amazing work! I really like these beta features so far, Humanoid physics & this is super cool.

3 Likes

Hi, this is a great suggestion and I completely agree. We’ve got an API update prepared that will introduce what you mention, probably under the name of “AlignmentOffset”. It should solve the use-case you mention and others like moving the arms to point the tip of a rifle to a point (and not point the hands themselves). It will probably be released in the next 1-2 weeks.
At the moment the behavior you mention can be achieved by recomputing Target or using the Offset property to compute an offset in the EndEffector space but that’s not ideal.

Thanks!

8 Likes

I just finished my IK library :smiling_face_with_tear:
Oh well, I’m guessing this will perform way better than any solution I make so, great update!

2 Likes

For anyone who is confused to why the sample code is not working, you need to add an Animator to the Humanoid or AnimationController.

4 Likes

I am not the sharpest tool in the shed, but how do I take a pre-existing animation like a walk and apply this IK stuff to it? Only way I can think of doing this is by creating the entire animation by updating IKControl.Target, but there has to be a better way, an automated one perhaps?