Modifying rigify armature to prevent shoulder stretch

How can I modify the human rigify armature or meta-rig to create some helper bones that I can weight-paint to prevent stretching under the armpit?

This is what I have so far with the default rigify human meta-rig with automatic weight-paint applied.

Notice how the section with the black arrow bulges out as I raise the rig’s arm.

I looked at Rain’s rig and noticed that it has three helper bones that I think are weight-painted to help prevent this kind of stretching.

I’ve tried adjusting the weight paint a bit, but the results don’t look great. I’m thinking that adding the extra bones is the best approach.

Are these extra bones created on the meta-rig?

Are there any examples of how these bones are setup or something similar?

1 Like

You could create such bones both in the meta rig and on the generated one.
Using the Generated rig is simpler but keep in mind that you won’t be able to regenerate again.
So you have to be confident that your work with the metarig is done.

2 Likes

Thanks for the suggestions!

I was able to figure out how to add on a bone to the generated rig with the desired properties:

The new bone is connected, with offset, to the shoulder bone and I added a copy rotation and copy scale constraint to it. The new bone runs parallel to the DEF-upper_arm.L bone and is essentially the same bone with an added offset.

Do you know how I can generate this via a meta-rig setup (using one of the rigify bones)?

Would it be correct to use the basic.raw_copy bone? https://docs.blender.org/manual/en/dev/addons/rigging/rigify/rig_types/basic.html#basic-raw-copy

I think I was able to achieve this using basic.super_copy on the upper_arm.L meta-rig bone!

The generated rig now has a deform bone that runs parallel to the original arm bone!

There’s still one problem though, if the arm extends beyond its normal length and starts to stretch, the new bone gets scaled instead of stretched.

I don’t intend on animating the hand to stretch beyond its normal capacity, but I wonder how this can addressed in the metarig? I could manually add a copy scale constraint on the generated rig… but do you know a metarig solution?

Thanks again!

I think I figured it out. I need to constrain the parallel bone to one of the generated bones instead of the original arm bone.

I had to use Relink Constraints with the target set to DEF-upper_arm.L

Now I can repeat this process to create two more bones for the arm and then copy this to the right side!

One last issue, I noticed that on Rain’s rig, the extra bones parallel to the arm don’t actually stretch.
It doesn’t look like there’s a way to specify this via the meta rig and I might just have to manually delete the stretch-to constraints. But I’ll have to test this out while weight-painting and posing later on.

Hey cool, I didn’t go into the Metarig workflow because I thought it would be complicated. But it sounds like you figured it out quickly! :+1:

Regarding your last post, that can be achieved with a setup like this. The small additional bone inside the arm bone is constrained to the arm bone with Location and Rotation but not Scale. And the actual helper bone is parented to that additional bone. Let me know if that makes sense.

1 Like