Home Website Youtube GitHub

How do I create an anchor point that maintains relative position?

Hello

In the below gif, you can see that the arm does not maintain equal distance between the bottom spine and the top spine controller. If I were to twist the spine, it would follow the rotation of the top control as well. As this is a simple squash and stretch cartoon character, I would like the root of the arm to maintain its initial position on the body

I would like to create a node that maintains its relative position on the body, no matter how I move the spine controller, so that the arm sticks to where it should be.

Would anyone be able to recommend me a method of doing so?

Well, the first step would be to connect the root of the arm to a joint that is closer to the middle. But on a very squishy or highly deformed area, that still might not be enough.


The second thing I would do is add a piece of geometry, like a small nurbs plane. Place that nurbs geo in the middle of the spine, or near the root of each arm.

Add a uvPin or equivalent pinning node to the nurbs plane. Then skin the nurbs plane so it has the exact same skinning and deformation as your character’s torso, at the point where the arm connects. Then constrain the root of the arm to that pin. Don’t include any arm joints in the nurbs skinCluster, or you’ll end up with a cycle.


An alternative thing you could do. You could constrain the root of the arm to all of the spine joints, and use the same constraint weights as your skinCluster weights. And in most cases, that would match, assuming you only have a skinCluster deforming that area, and that you are using Classic Linear in your skinCluster.

Hi

Thanks for the answer Chris,

I’ve used UVpins to do this kind of thing before with a daisy chained proxy mesh, what you’re describing sounds very similar. I was wondering if there was a way I could do it using the components available in Shifter.

Would doing something like this have to be a step after building the rig with shifter?

I have got quite close using a control leaf joint, however parenting the arm under it hasn’t resulted in what I expected.arm_placement_02

I’m not aware of any way to do it directly with existing Shifter components. There might be.

But you don’t have to do it “after”, exactly. You can do it as a POST Python script during your build. And if you had some good naming conventions, you could likely make it pretty general for reuse on different characters.

(Also, I think if someone were to make this as a custom component to share with the community, it would likely be pretty popular.)