Skirt Rigging Problem

I am trying to rig a skirt that moves along with the legs so that if one leg is raised, then part of the skirt will also raise with it. I attempted this by adding several copy rotation constraints to each of the skirt bones, but several problems came up.

>The first problem is that copy rotation constraints only seem to obey one bone. This means that whenever I try to add two different copy constraints to two different bones, one of the constraints is ignored and the skirt will only adjust properly for one leg.

>The second problem is that the skirt bones don’t exactly match the rotation of the leg bones. This means that the bones will sometimes bend slightly in the wrong direction or that the bones won’t rotate enough/over rotate depending on the angle of the leg.

>The third problem is that the size of the skirt grows a little as it is lifted upwards. I also want to be able to scale it while it rotates along with the leg so that this doesn’t happen.

If anybody has any suggestions on how to improve this method or an alternative method that I can try, I will certainly appreciate it. Here is a blend that shows what I’m talking about and what I have so far. (Note: I deleted the copy rotation constraints on the right leg to make trying to edit and fix it myself easier. It was only all the constraints for the left leg copied over to the right leg and nothing new.)

http://www.pasteall.org/blend/42556

I’m going to address these issues out of order. The good news is that you are already through the hard part. The weighting looks really good!

1. Scaling likely won’t solve your issue. It will just look weird. Try to think of it mathematically. If you take a ring around the skirt, that ring will approximately be a circle with a set radius, and more importantly, a set perimeter. No matter how the cloth moves, this perimeter value should never change. If you have a long not-super-stretchy sports shirt like a soccer shirt, throw it on. The edge of the shirt will represent our perimeter of one of the skirt rings. As you pick up your right leg, not only does the shirt move with the leg, but it doesn’t really stretch at the edge. How? It forms a diagonal oval shape. The left side of your shirt pulls tight against your left leg, and the back right of your shirt follows through a little bit. You’ll also notice that this oval shape is no longer parallel to the ground, meaning that any bones that would be there are now pointing more to the right. You don’t have to perfectly model this, but these are things to look for when you want more realism.

2. The solution for this and for adding the things I just mentioned is drivers. Drivers allow you to take multiple inputs (such as the rotations of both thigh bones) and calculate the desired output rotation. You can also add custom properties to calculate intermediate values. The reason constraints don’t work by themselves is because they are stacked, evaluated from top to bottom. Each constraint has no knowledge of the previous’s existence.

3. Will hopefully be resolved with some tweaking in the drivers. The truth is, you probably don’t want the rotations to always match exactly. You’ll get a better cloth-like look if you allow the skirt to sit on the leg more when the leg comes up.

Hopefully all this helped! Good luck!