Inverse Kinematic constraints don't work for root bone #87923

Open
opened 2021-04-30 04:16:38 +02:00 by Luke Costello · 18 comments

System Information
Operating system: Windows-10-10.0.19041-SP0 64 Bits
Graphics card: GeForce GTX 750 Ti/PCIe/SSE2 NVIDIA Corporation 4.5.0 NVIDIA 456.71

Blender Version
Broken: version: 2.91.0, branch: master, commit date: 2020-11-25 08:34, hash: blender/blender@0f45cab862
Worked: (newest version of Blender that worked as expected)

Short description of error
When using the tools meant to constrain the rotation of bones involved in the IK chain it seems to only apply to the first one. In the example file bone 2 has lock IK X,Y, and Z as well as the limit rotation contraints for X,Y, and Z for good measure. Bone 2 is the one with the IK chain of 2 applied and bone 1 is clearly effected but with the limits and locks applied it shouldn't be moving at all and yet it does.

Exact steps for others to reproduce the error
see that IK locks are applied to bone 1, move the Target bone around and observe that indeed the locks are not being applied.
IKbug.zip

**System Information** Operating system: Windows-10-10.0.19041-SP0 64 Bits Graphics card: GeForce GTX 750 Ti/PCIe/SSE2 NVIDIA Corporation 4.5.0 NVIDIA 456.71 **Blender Version** Broken: version: 2.91.0, branch: master, commit date: 2020-11-25 08:34, hash: `blender/blender@0f45cab862` Worked: (newest version of Blender that worked as expected) **Short description of error** When using the tools meant to constrain the rotation of bones involved in the IK chain it seems to only apply to the first one. In the example file bone 2 has lock IK X,Y, and Z as well as the limit rotation contraints for X,Y, and Z for good measure. Bone 2 is the one with the IK chain of 2 applied and bone 1 is clearly effected but with the limits and locks applied it shouldn't be moving at all and yet it does. **Exact steps for others to reproduce the error** see that IK locks are applied to bone 1, move the Target bone around and observe that indeed the locks are not being applied. [IKbug.zip](https://archive.blender.org/developer/F10046257/IKbug.zip)
Author

Added subscriber: @lukostello

Added subscriber: @lukostello
Member

Added subscriber: @filedescriptor

Added subscriber: @filedescriptor
Member

AFAIK this is intended behavior. See the manual on the Limit Rotation constraint.

This transform does not constrain the bone if it is manipulated by the IK solver. For constraining the rotation of a bone for IK purposes, see the “Inverse Kinematics” section of Bone properties.

AFAIK this is intended behavior. See the manual on the [Limit Rotation constraint](https://docs.blender.org/manual/en/latest/animation/constraints/transform/limit_rotation.html). > This transform does not constrain the bone if it is manipulated by the IK solver. For constraining the rotation of a bone for IK purposes, see the “Inverse Kinematics” section of Bone properties.
Member

Changed status from 'Needs Triage' to: 'Archived'

Changed status from 'Needs Triage' to: 'Archived'
Author

all it says is "This transform does not constrain the bone if it is manipulated by the IK solver. For constraining the rotation of a bone for IK purposes, see the “Inverse Kinematics” section of Bone properties" which is true for the first bone in the IK chain but as I've demonstrated in this example, it doesn't get applied for any bone after the first one.

all it says is "This transform does not constrain the bone if it is manipulated by the IK solver. For constraining the rotation of a bone for IK purposes, see the “Inverse Kinematics” section of Bone properties" which is true for the first bone in the IK chain but as I've demonstrated in this example, it doesn't get applied for any bone after the first one.
Author

my complaint wasn't that limit rotation didn't limit the rotation for the IK solver (although personally this would make sense to me, but I'm sure there is some rational behind why IK constraints are separated) I only included the rotation constraints to show that its not an alternate solution to getting the end result I'm looking for which is having bone 1 be constrained while using IK solver.

my complaint wasn't that limit rotation didn't limit the rotation for the IK solver (although personally this would make sense to me, but I'm sure there is some rational behind why IK constraints are separated) I only included the rotation constraints to show that its not an alternate solution to getting the end result I'm looking for which is having bone 1 be constrained while using IK solver.
Member

Changed status from 'Archived' to: 'Needs Triage'

Changed status from 'Archived' to: 'Needs Triage'
Member

Added subscriber: @dr.sybren

Added subscriber: @dr.sybren
Member

@dr.sybren Could you take a look at this?

@dr.sybren Could you take a look at this?

I tested with Blender as old as 2.75, and the behaviour has been the same through the years.

In the example file the IK limits are applied just fine when I change the chain length from 2 to 3; that way the bone is inside the IK chain instead of at its root. If you don't want the root to be influenced by the IK chain, just make it one step shorter (so length 1). Would that be a suitable workaround?

I tested with Blender as old as 2.75, and the behaviour has been the same through the years. In the example file the IK limits are applied just fine when I change the chain length from 2 to 3; that way the bone is inside the IK chain instead of at its root. If you don't want the root to be influenced by the IK chain, just make it one step shorter (so length 1). Would that be a suitable workaround?

Added subscriber: @Format64

Added subscriber: @Format64

Is this related? https://devtalk.blender.org/t/pole-target-and-inverse-kinematics-limits/5604

From that I've read it's 2.46 limitation: https:*web.archive.org/web/20101224021652/http:*www.blender.org/development/release-logs/blender-246/inverse-kinematics/

Degrees of freedom and limits for the first bone will be ignored, aiming the chain at the pole targets works completely separate of IK solving, rotating the chain as a whole, and hence does not use any of these settings.

Modern manual is less clear and doesn't say that adding pole target will make ik ignore all these limit settings.

Is this related? https://devtalk.blender.org/t/pole-target-and-inverse-kinematics-limits/5604 From that I've read it's 2.46 limitation: https:*web.archive.org/web/20101224021652/http:*www.blender.org/development/release-logs/blender-246/inverse-kinematics/ > Degrees of freedom and limits for the first bone will be ignored, aiming the chain at the pole targets works completely separate of IK solving, rotating the chain as a whole, and hence does not use any of these settings. Modern manual is less clear and doesn't say that adding pole target will make ik ignore all these limit settings.

Changed status from 'Needs Triage' to: 'Confirmed'

Changed status from 'Needs Triage' to: 'Confirmed'

In that case let's consider this a known limitation that is also under-documented. As far as I'm concerned, it can be resolved by simply clarifying this in the manual.

I've at least removed the horror of see the “Inverse Kinematics” section of Bone properties in the Limit Rotation Constraint manual chapter, and replaced it with an actual link to the relevant page.

In that case let's consider this a known limitation that is also under-documented. As far as I'm concerned, it can be resolved by simply clarifying this in the manual. I've at least removed the horror of `see the “Inverse Kinematics” section of Bone properties` in the [Limit Rotation Constraint](https://docs.blender.org/manual/en/latest/animation/constraints/transform/limit_rotation.html) manual chapter, and replaced it with an actual link to the relevant page.
Sybren A. Stüvel changed title from Inverse Kinematic constraints only work for first bone to Inverse Kinematic constraints don't work for root bone 2021-06-07 12:25:32 +02:00
Author

In #87923#1170908, @dr.sybren wrote:
I tested with Blender as old as 2.75, and the behavior has been the same through the years.

In the example file the IK limits are applied just fine when I change the chain length from 2 to 3; that way the bone is inside the IK chain instead of at its root. If you don't want the root to be influenced by the IK chain, just make it one step shorter (so length 1). Would that be a suitable workaround?

No that would not be a suitable work around. I only limited all the axis to demonstrate that none of them work. In my actual workflow, what I'm dealing with is I want to limit a hip joint such that it isn't allowed to go into the ribs, so instead of the locking any particular bone I'm using particular min and maxes on each axis.

I don't see why the constraints of the first bone should be ignored. Results in hips in chests.

> In #87923#1170908, @dr.sybren wrote: > I tested with Blender as old as 2.75, and the behavior has been the same through the years. > > In the example file the IK limits are applied just fine when I change the chain length from 2 to 3; that way the bone is inside the IK chain instead of at its root. If you don't want the root to be influenced by the IK chain, just make it one step shorter (so length 1). Would that be a suitable workaround? No that would not be a suitable work around. I only limited all the axis to demonstrate that none of them work. In my actual workflow, what I'm dealing with is I want to limit a hip joint such that it isn't allowed to go into the ribs, so instead of the locking any particular bone I'm using particular min and maxes on each axis. I don't see why the constraints of the first bone should be ignored. Results in hips in chests.
Author

The article on pole target and inverse kinematics seems relevant and helpful here. I'm trying to understand the solution they came up with but its hard to understand because they make it seem like they have a bone for the shoulder and a bone for the upper arm. Which seems really weird to me. Maybe they are talking about the clavicle or something because the shoulder is the joint not a bone. It would be really helpful to see what this solution they came up with for the shoulder problem is. How do they handle it in Maya? Is there the same struggle over prioritizing pole targeting and shoulder target limitations?

The article on pole target and inverse kinematics seems relevant and helpful here. I'm trying to understand the solution they came up with but its hard to understand because they make it seem like they have a bone for the shoulder and a bone for the upper arm. Which seems really weird to me. Maybe they are talking about the clavicle or something because the shoulder is the joint not a bone. It would be really helpful to see what this solution they came up with for the shoulder problem is. How do they handle it in Maya? Is there the same struggle over prioritizing pole targeting and shoulder target limitations?
Author

So if I were working on this solution, my goal would be to program it such that if you have a IK on the shin bone with a length of 2 incorporating the thigh bone in it with a PT for the knee, the hip bone if it has IK constraints such that it prevents the thigh from going in the torso. That when placing the IK and PT targets it results in what would happen if you asked someone "Hey could you put your foot towards here, while your knee points here?"

So if I were working on this solution, my goal would be to program it such that if you have a IK on the shin bone with a length of 2 incorporating the thigh bone in it with a PT for the knee, the hip bone if it has IK constraints such that it prevents the thigh from going in the torso. That when placing the IK and PT targets it results in what would happen if you asked someone "Hey could you put your foot towards here, while your knee points here?"

Added subscriber: @0xb

Added subscriber: @0xb
Aaron Carlisle removed the
Module
Animation & Rigging
label 2023-02-08 05:03:54 +01:00
Aaron Carlisle added the
Module
Animation & Rigging
label 2023-08-13 14:30:35 +02:00
Sign in to join this conversation.
No Milestone
No project
No Assignees
5 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: blender/blender-manual#87923
No description provided.