0
$\begingroup$

I have this robot that I'm trying to rig with an IK chain and I'm running into an issue where certain joints don't want to obey the rotation constraints I put on them. My goal is to have every joint rotate on the axis to which the servo it's attached is designed to rotate. I've been able to accomplish this fine for the lower joints of the leg using the normal rotation constraints in the IK tab of the bone properties, but for whatever reason, they don't want to work for the joints in the upper "hip" portion of the leg.

I've posted the .blend file here: https://filebin.net/mphozhgm5rzmrxj4

enter image description here

I need to stop this joint from clipping through its bearings, how would I do this?

$\endgroup$
4
  • 1
    $\begingroup$ without seeing your settings it is really hard, we can just guess. So i think the best help for us would be, if you provide your blend file. $\endgroup$
    – Chris
    Commented Aug 10, 2022 at 7:23
  • $\begingroup$ Your file link is broken for me, or else I would take a look. $\endgroup$
    – Nathan
    Commented Aug 12, 2022 at 16:44
  • $\begingroup$ @Nathan It's not broken for me, i see walkerrig.blend in the link 21MB. $\endgroup$
    – Harry McKenzie
    Commented Aug 12, 2022 at 16:58
  • $\begingroup$ @HarryMcKenzie Thanks, it's working for me too now. Maybe just a hiccup... $\endgroup$
    – Nathan
    Commented Aug 12, 2022 at 17:10

1 Answer 1

1
$\begingroup$

Hip.L.001, the bone that you want us to look at it, is the root of a 12-bone long IK chain with a pole target.

The problem here is that Blender does not take IK root bone limits into account for IK chains with pole targets. The pole target code needs to rotate the root bone freely for its algorithm. This is a known issue, with a long-standing bug report associated with it (which Google can't find for me at the moment), and it's unlikely to get fixed, because it's part of how pole targets work.

So if we need the IK to respect the angle limits and locks on the IK chain's root, we need to disable the pole target. As soon as we do that, we can see that those limits are respected:

enter image description here

The question then is, how to control the rotation of the leg structure as a whole, if not with a pole target, and not with a parent outside the IK that would break angle limits?

Even when bones are under the control of IK, they still respect their base transform, which provides angles for each bone. The IK solver tries to minimize the difference from these angles in its solutions. So we can rotate bones in the IK chain to control the structure's rotation.

In this case, we have 12 bones, many of which are strongly limited, so it's a little tricky to decide exactly how we should rotate bones in the IK to rotate the entire IK. There are two good choices here, Knee2.L.001 and Hip4.L.001, but Hip4.L.001 looks like its limits aren't quite right for the mesh, so let's rotate Knee2.L.001:

enter image description here

By rotating this bone manually, we can control the general direction of the chain's bend. Other bones will adapt to meet the changing angle of Knee2.L.001 in relationship to its parent.

If we want a more automatic solution, we can't use constraints-- constraints are ignored by IK-- but we can use drivers, which reference the transforms of constrained bones (provided those constrained bones are in no way dependent on IK, otherwise Blender chokes. IK->driver->IK doesn't work.)

enter image description here

Here, I've created a bone with the same parentage as the IK root bone, damped tracking the IK target, with a new child bone locked tracking the pole target. I can use the Y rotation of this child bone to drive the rotation of Knee.2.L.001. This isn't exactly the same as a pole target, and it's often something you'd need to tune individually for each chain, to get the exact automatic behavior you want, but it is a possibility.

$\endgroup$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .