Limit rotation in last IK bone

To limit rotation in IK Bone you simply go to Bone properties window, and play with Inverse Kinematics section to make sure your rig will work properly, as Limit Rotation constraint will not work here. However this trick does not seem to work with last bone defined in chain order of IK constraint. I have attached .blend file with my simple piston rig: Piston arm.blend (1020 KB)

Here I want to limit arm.01 bone to make it move only in the pistons limit. The local space rotation should be between -45d and 26d. As this is the third bone in IK chain (the last one) it moves freely regardless of limits put in the properties -> bone -> IK.
HOWEVER, when the Limit Rotation constraint is turned on, IK solving changes a bit, and Swiftness slider also does… something with solver, but still arm.01 remains free from the limits.

For sake of testing i also added auto-IK (no target nor pole) to arm.03. arm.01 moves within its limits as it should.

My question is, how to limit this bone? Or is there another way to limit rotation of bones, that would solve my problem?

Take the Pole Target off the IK chain - you do not need it as you have locked the Y & Z axes or the bone in question and limited its rotation in the IK properties - then it works fine, you should also delete the IK Pole bone. Pole targets are only necessary if you have say a human arm and you want to control the roll of the elbow or knee, or the bend angle, when you move the hand or foot. For mechanical models like this they are only a nuisance and override the rotational limit - as you have found out.

Also take off ALL the Limit Rotation constraints and the AutoIK constraint - Limit Location/Rotation/Scale constraints are all redundant in an IK chain and only serve to bugger things up - do all the control work of IK chain bones in the IK properties for each bone in the chain. Your AutoIK constraint is not doing anything - nor will it… Oh yes - uncheck the Stretch Checkbox as well in the IK constraint - you do not need the bone arm.03 to stretch.

Otherwise - Well Rigged Sir!

Cheers, Clock.

Thanks! It works perfectly well now!

I always thought, that pole is necessary to make IK work without actually testing it. But it’s a bit weird for me why does pole overdrive all limits just to last bone.

Pole is only really necessary on Human type models to keep knees and elbows in line - as far as I know! i don’t know why it messes up last bone, perhaps it needs anchoring to stop this behaviour? I never uses pole targets on mechanical models, but I do use them on my characters.

Cheers, Clock.

It’s a limitation of the Pole Target feature because of how it works.

“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.”
http://archive.blender.org/development/release-logs/blender-246/inverse-kinematics/index.html

“Note that, if a Pole Target is used, IK locking will not work on the root boot.”
https://www.blender.org/manual/rigging/posing/inverse_kinematics.html#bone-ik-panel

-LP

Hi,

Same kind of question here (Complex Armature-Biomechanics - #2 by Melodicpinpon),
I want to limit the rotation between the foot and the shin, the hand and the forearm, the leg and the hip:
https://pasteall.org/blend/ce51520c8fac41e3bafba56c7b2854f5

Isn’t there any way to limit these rotations between the first/last bone of an IK chain and the next one, belonging to the FK system?

Option 1: Include the foot in the IK chain. Now you can use IK angle limits on the foot:

Option 2: Enable rotation on your IK constraint, to control the end angle of the calf:

If you want to allow some swing, run a first pass, non-deforming IK, then copy rotation onto your second pass IK target, then limit rotation as desired:

Notice how the calf doesn’t reach the IK target here, even though the first pass IK does. That’s because it can’t reach the IK target with the rotation limits you’ve given it (and it prioritizes rotation over reaching the target.)

Neither of these are great solutions. IK angle limits and IK rotation are likely to lead to twitch and aren’t going to capture the full range of human movement. You’re much better off allowing your intelligent human animator to decide how to orient a bone than you are relying on a simple IK algorithm. Humans are better artists than computers are.

1 Like

It is probably a stupid question, but isn’t it possible to merge IK and FK together?
When the IK is moved, it would update the FK rotation/position and inversely.

Currently, loc/rot are doubled, and constraints too.

Kind of. It’s possible for IK to control FK, or for FK to control IK, but not both at the same time. To create a keyable switch, you need to do some scripting.

The purpose was, in fact to invite non-specialists to use the armature to pose the model:
https://www.z-anatomy.com/

Unfortunately, my mind refuses to accept that there is no way to get the thing to work properly:
keep the rotation limits in all positions, keep the controller following the objects that it controls.

In either way, it takes forever to get a full pose, if it even gets there. (starting from a supination anatomical position is not really helping with IK)
I guess that the only thing that I can do with it is to, as you said, prepare quietly a few poses, and make them available through the pose library.

Oh, I was just looking at that! (From your other post.)

You can, you just need a clear hierarchy of action. Do you want the foot to control the leg? Then there are going to be some orientations where the leg can’t meet the combination of rotation and position unless the foot also controls the body (and the other foot).

For your needs, you could easily use a pure FK rig, with angle limits (I would probably use hidden-mesh-defined angle limits, which would let you meet anatomical specifications better than Euler angles ever do.) But if you wanted, you could use something like the last picture I offered, where the angle limits override the positional needs. For just posing, twitch is less of an issue.

Or, you could override the rotation-- meet the positional requirements of the IK as much as possible, then rotate the foot from IK orientation back into angle limits with respect to the calf.

I suppose you’d be using a mesh deform cage to handle all the internal geometry (kinda unweightable otherwise.)

1 Like

I made a copy of the armature that I had made and, on the original, I got rid of all IK’s to create a fully FK armature.
I goes well and will allow to create the pose library.
Just one question: Anatomically, certain articulations, like the wrist, have a different pivot point in flexion/extension (very close to the interosseous space), than in abduction/adduction(further).
Is there any way to re-create this effect in Blender?
It seems difficult, since the objects can only be parented to one bone; I could use a driver transforming the Z-rotation into a Y-location of the bones’s head, but it will only create an average mix of the two movements, not the real anatomical behavior.

N.B.:I must apologize for judging the system too soon: I had several things misunderstood.
One of them was to use global axis, and the other one was to have followed automatically the basic tutorials that all create the IK-controller bones in the opposite direction than the one of the foot for example, which leads to strange behaviors.

I have been searching for existing armatures that re-create the biomechanical principles and could not find any. I also wrote to several organisms; who knows?

Yes, by using a series of non-deforming parents. For example, create “control”, “deform”, “DP” (deformParent), and “DPP” (deform parent parent) bones. Deform is parented to DP, which is parented to DPP. DPP has a driver to copy rotation from control if and only if that rotation exists in a particular direction. DP has a driver to copy rotation from control if and only if that rotation exists in a different direction.

Something similiar is achieved by what I call “rocker bones”:

Here, I’m using an intermediate parent with a floor constraint to change the way that the final deform bone works, but only when the control is rotated in a particular direction.