I’ve been experimenting with IK while trying to decide between FK and IK and I noticed that if I rotate a bone that is part of the IK chain, it affects the rotation of the bones in the chain, even though I would have expected that the IK constraint would override the rotation of the bones. I found this can be used for elbow control. I wanted to ask: is it “safe” to rotate bones in an IK chain for elbow control? It’s hard to explain what I mean by “safe”. Would rotating the bones produce unpredictable results, is it likely to cause conflict, have people tried doing this and only had problems? If it’s safe, it could be useful when I can’t get the pole target to work the way I want.
I actually think that’s the most sensible way to animate the roll of your IK chains (their plane angle), using the roll of the base bone of the chain instead of using a pole object.
It makes more sense because then you have one property controlling another: the roll angle of the base bone controls the roll angle of the chain, instead of having the pole object location controlling it – that’s X, Y, Z, three properties.
Think of it in terms of the graph editor: the base bone roll is one curve affecting the chain roll, as opposed to the three curves (the X Y Z location) affecting it. To me that’s simpler to manage, if you want an easing in the chain roll you just ease the bone roll curve, instead of having to ease three separate curves.
Anyway, on Blender, the safest way that people use to set up bone rolls on the chain is by letting your IK bones stretch. It’s the property “Stretch” of the Inverse Kinematics panel of the bone properties:
Any value above zero (use the same value on all bones of the IK chain, otherwise one bone will stretch more than the others) will let the chain stretch to reach the IK goal. If you don’t use stretch the chain will snap in a ugly way.
Then you set the rotation mode of the base bone of the chain to EULER ZXY, with X and Z locked, so you can rotate the base bone of the chain around its local Y axis to control the chain roll.
I wish this was natively supported with something like the animatable “swivel angle” from 3ds max.
The equivalent in Blender, the “Pole Angle” property of the IK Constraint panel, only allows values between [-180, +180] and is only visible when you set a pole object.
When you say the base bone, do you mean the bone with the IK constraint or the bone on the end of the chain opposite to the one with the IK constraint?
My rig is set up so the arm has separate bones for the Y axis and the XZ axes. The chain is: UpArm > UpArmY > LowArm > LowArmY > Hand (with the IK constraint on Hand and a chain length of 5). UpArm and LowArm are locked on the Y axis, and UpArmY and LowArmY are locked on the X and Z axes. I don’t quite remember why I rigged it like this but I think it was to fix issues I had with segmented bones. I also have my bones set to quaternions because I had problems with Eulers.
With my rig, rolling UpArm would not work since I locked it on the Y axis (though I don’t know if you meant UpArm or Hand would be the base bone). Should it work just as well to roll UpArmY instead, even though it is second in the chain?
The IK constraint works backwards, you set it on the bone that’s going to be at end of the chain and choose a chain length, and the constraint will travel upwards in the hierarchy, from parent to parent, until that chain length is reached. The “base” bone would be the top-most bone in the armature hierarchy where the IK chain stops travelling.
Rotating the base bone rotates everyone below it in the hierarchy. The parent of this base bone (if there is one) isn’t included in the IK chain.
I think if UpArm and UpArmY are in the exact same location then it should make no difference which one rotates.
edit: Oh, and remember that there’s also the IK locks in the bone properties, depending on your setup this can help (like avoiding two bones from bending between each other):