So I re made this rig from March when I first did it. My first rig in Blender having previous experience from Autodesk Maya.
The issue is the bend at the top where the shoulder would be. Previous simple version of this rig, from earlier versions of Blender seem to work how I want it, to make a curve when the IK handle is used. Instead I get this wonkiness and I have tried everything I know of and from cruising through the internet to find a solution.
Just thought I may be able to get some advice on a direction to take with it. The bones of the arm are connected with an IK constraint and the count goes up to but not including the small bone by the shoulder. All other bones work as they should. When I created them, I just created one big bone and then Subdivided by how many bones I required.
IK handles and Pole Targets are parented to the root bone.
I have tried:
Weight painting using the automatic weights and custom weight painting, nothing fixes it gently, its all extreme.
I have tried recalculating the roll for all the bones along the arm, didn’t make a difference.
I have redone all the bones along the arm, didn’t make a difference.
I did move the bones out a little to create a bend for the pole target, I am wondering if maybe that might have affected it.
Tried removing the pole target, didn’t do anything.
Everything about this rig works as intended, its just these two bones that don’t seem to be following the rotation of the IK handle.
If anyone has any ideas, they would all be appreciated.
Lila
Hey, In my experience it is usually due to bone alignment when created (Edit mode), but given that you re-built it, that is a conundrum. I mocked up a simple example, as you can see, ‘Armature’ has a bone moved slightly to the left and I changed the ‘Bone Roll’ on it and the next one. ‘Arm.001’ bones are aligned same as ‘Arm.002’ but I changed the ‘Bone Roll’ on every other one (arm.002). So as you can see, bone roll had no effect on how it bent, its the same as ‘Arm.001’.
IK behavior in default Blender IK solver depends on pose prior to IK evaluation. That means, rest pose, plus transforms or drivers. (Not other constraints, those don’t do anything.)
So first thing, select all in pose, delete keyframes if any, alt r to clear rotation. Can’t figure it out if it’s posed.
Second thing is to look at the rest pose, which you can do by disabling the constraint, dropping to edit, or just setting the armature to rest pose. Rest pose should describe the curve you want to see the IK chain prefer. But my tests (same as ajcdfin’s) show that a straight chain works okay.
After that, double check for “standard” solver type in properties/armature/inverse kinematics, and check each bone in the chain to make sure they don’t have any IK angle limits, locks, or stiffness in properties/bone/inverse kinematics. Look on the IK constraint, make sure “rotation” is unchecked.
After that, I’d need to see a file to say any more. (Wouldn’t need the mesh though, just the armature. Mesh, incl. weights, has nothing to do with anything.)
You have a slight curve modelled into the arms (one arm at least, it might not be symmetrical). Compare your bones (unselected) with the bones I got from snapping a bone to beginning and end of chain and subdividing:
That angle is being used by Blender to weight bones for IK-- to prefer more or less rotation on certain bones. Since the curve is slightly uneven, Blender ends up with uneven bone weighting, and you end up with even more unevenness as the curve deepens.
For a really even curve, I would remake the arm straight, and not use a pole target (because a pole target won’t work with a straight bone chain.) Instead of a pole target, I would use a parent bone for the IK chain to act the same way that a pole target would.
In edit mode, duplicate the root bone of your IK chain. Scale about individual origins by -1. Parent the original to the duplicate. In pose mode, transform lock all transformations except Y rotation. Optionally, move the new chain parent to a different bone layer.
Now, rotate the chain parent to change the rotation of the IK chain.
I’d show a pic, but there’s nothing really to show.
What I did was duplicate the shoulder bone that isn’t part of the IK chain and set up a Copy Rotation constraint on the original shoulder bone, using the duplicate bone as a ctrl. For what I need and wanted, it works fine.