How do you rig/weight paint a short skirt properly?

Looks good to me, I think some more tweaking will be good but it’s incredible progress :slight_smile:

2 Likes

Thanks, and good to know! I tend to be a little harsh on myself so it’s hard to judge if something looks good or not. Guess I’ll stick with it longer then. I was super close to just saying “forget it” and doing something like a tutu instead.

2 Likes

It looks great!

First thing I’d say is, turn off autosmooth, or increase the angle on autosmooth (properties/object data/normals/autosmooth.) It’s creating some sharp edges in your skirt that don’t seem appropriate.

Second thing here, is that the weights are probably not as smooth as you’d like. There are some techniques that you can use to improve this.

The quickest, easiest way to copy the weights from a mesh underneath is to use a data transfer modifier (usually on nearest face interpolated method.) Here, I’m data transferring from a copy of the body which doesn’t have an armature modifier (because otherwise, I’d be transferring from the post-armature body to the pre-armature skirt which would be all wrong):

These copied weights have some strengths and some drawbacks. They more accurately match your body at the waist. But they also more accurately match your body at the thighs, which you don’t want…

But we can create a new vertex group to tell Blender where we should be transferring weights and where we should keep our old weights:

Now, where my new “transfer” group is red, I’m copying from the body; where it’s blue, I’m leaving the old skirt weights. When I pose it, I see some clipping here:

Hey, easy, let’s just dab some more “transfer” paint there:

I paint that transfer vertex group just like I paint everything else: linear and radial gradients from hotkeys, on add or multiply at 1.0/0.0 weight and usually 1.0 strength, paying attention to my falloff curve and little else. This is a very, very fast way to weight paint for painting “utility” groups like this one, or for modifying autoweights.

Transferred weights work best when the source and destination meshes are very near to each other in space-- closer than they are here. You might want to use a “smooth” operation following the data transfer, depending on how things look. For autoweights meshes, you can re-autoweight a copy that’s been displaced out to the target and then transfer from it-- but this doesn’t look like autoweights.

2 Likes

Yo, y’all are too kind with all of this prime info your teaching me. To make sure I’m understanding everything correctly, I want to run through this real quick to make sure I’ve got it.

So, I need to make a duplicate of the main body that isn’t bound to the armature and set up the “data transfer” modifier to source that.

This is where you start to lose me. I can see the added “transfer” group which I assume was just added to the skirt like you would any other vertex group. What’s tripping me up is that the Outliner isn’t displaying anything for “Cylinder” (the new skirt) not even any of the modifiers. Just curious why the outliner isn’t showing anything (if that’s not important than whatever, I’ll ignore it). Hope I still understand this okay.

So I have to use the weight paint tool and basically paint what the modifier is allowed to move, set this up with the scale you have set, then use this as an additional tool to help the skirt clip less.

And for some final clarifications to make sure I understand this correctly:

Should I leave auto-normalize on during this?
Should I work from what I have weighted now, or do the weighting over from the start?
When everything is done and over with, will I have to apply the data transfer modifier to get this to work in a game engine?
And did I miss anything in my understanding from the above?

Can’t thank y’all enough for all the help, and I hope I haven’t been asking too much of you. Y’all are great.

It’s not important.

In general, you shouldn’t normalize vertex groups that you’re using for modulating modifiers like this.

You’re only transferring in some places-- the places you’re painting, to tell it to transfer-- so you need some weights there to begin with.

Yes.

2 Likes

Few more ideas for you: when I make skirts for characters, I usually weight paint them to body bones (thighs and pelvis). Then I duplicate the thigh bones in the armature as “skirt bones” and parent each of them to original thighs. Finally, I take the skirt mesh and rename the thigh vertex groups to the same names I gave to these duplicate bones, so skirt is now deformed by them instead of original thighs. Primitive setup, but it lets me fix most clipping issues by moving those extra bones around and keyframing them manually. I am not sure if it can be automated

Some game or realitime engines (good example is MMD) use multiple bone chains like your first attempt, and a physics simulation (rigidbody joints for skirt bones and colliders on the legs). (If you use rigidbody simulation in Blender, it has to be recalculated every time the character animation is changed, so better leave it to Unity where simulation is realtime) Jiggle bones are insufficient though. As far as I know, they cant be made to collide with anything.

3 Likes

Hi, you’re probably getting sick of me at this point and I wouldn’t blame you. I tried what you suggested, following your instructions to the letter and now almost everything has gotten much worse. While this follow up you suggested did help make the sides look better, it came at the cost of the clipping nearly everywhere else to get much worse, namely the front, back, and waist. On top of this, some vertices are now completely unresponsive to the weight paint tool. This seems to happening to anything that the transfer group ends up touching. While there is a work around to this (turning off the armature modifier while painting) it leaves me blind to any changes I make while I make them, greatly slowing down the process. After about 6-7 hours, here’s where I’m at:



I honestly have no idea what I could possibly be doing wrong. I’m not stupid (at least I hope), and it’s not hard to follow along with what everyone is telling me, I just have a weird knack for doing the same thing over and over and getting different results.
I’m kinda at the end of my patience with myself here. I’ll be frank, would you have any free time to maybe sit down with me and point out what I’m doing wrong? Maybe over discord or some other platform? If not maybe record a video of what you’re doing so I can’t possibly get it wrong? I MUST be making a single stupid mistake over and over again due to pure ignorance that I’m just not catching. No pressure if not for any reason, you’ve done more than enough.

And finally, as much as I don’t want to throw in the towel, and as CLOSE as I feel like I am to a breakthrough, should I just call it quits on this skirt? I made the model and textures in a week and a half, yet this skirt alone has had me halted for a MONTH. I’m thinking this is just beyond what I can do. Maybe I do something like Amy Rose from Sonic where the skirt is almost tutu like in fashion? It’s easier to rig and so wide that it never messes with the legs in the first place. It means I have to redesign the character a little, but honestly I just want to go back to making art, not wrestling with fickle code. I’m thinking maybe I find a way to work within my limitations, smarter not harder y’know?

2 Likes

The duplicate thigh bones, as by my advice, should be parented to “real” thigh bones. So they move with the character, but can be adjusted manually if needed. No need for Damped Track on them too.

To be honest, I’d advice you to create multiple copies of your character file, and test different rigs separately. Combining all the suggestions in the single rig might not be a good idea

No worries, I always save different version of my models. Heck this is version 34 that I’m on, and every different rig type has been its own file.

And I haven’t tried your method just yet, I’m trying the tutu idea first and it seems like it’s working so far. After I finfish mine I’ll give yours a shot.

Okay, I noticed you have duplicate bones and got the wrong impression you tried them all at once

There are a lot of things to be careful of with regards to this technique-- you have to put some thought into what everything is doing, and I offered it as more of a long-term, think about it kind of thing. Obviously, if something isn’t working for you, then do something else!

Your first picture, there’s something definitely wrong with your setup. Those clipping verts should be improved by a transfer.

Your second picture, where it’s clipping is not a place you should be transferring weights. The transfer should be near the waist only.

Your third pic, transferred weights at the waist should follow the body, so shouldn’t clip into it. The part clipping into the thigh should not get transferred weights, and so transferred weights won’t help.

… Looked at your file. Your data transfer is set to nearest edge interpolated, when I’d recommend nearest face interpolated, but that isn’t a huge deal. However, your source (“dupe body”) doesn’t have all the vertex groups in it. When your skirt reads these weights, it only replaces the weights that the meshes share, leaving with some original weights, even with full transfer.

To address that, you can parent the dupe body to the armature with empty groups to create those vertex groups (and then, delete or disable the armature modifier that got created.)

For example, here’s the clipping on your default pose, fixed by making sure I was doing a full transfer of weights there:

Now, some of this stuff, weights aren’t going to fix it. If we disable “in front”, we can see exactly what’s going on with the the thigh:

Well, the bone is going right through the thigh. Our skirt is, at best, going to be following the bones, and so it’ll follow them, again, right through the thigh. The easiest fix here is to adjust the animation, quickly tweaking the bone by moving the stretch-to target:

Think about what happens when the thigh rotates 90 degrees in its Y axis. The stretch-to bones will be running right through the middle of the leg. More than 90 degrees, the front will be in back and the back will be in front. Those problems will exist at smaller angles as well, just not so obviously. You don’t want the skirt side to capture any of the twist of the thigh.

2 Likes

Oh, and I’m afraid I’m not having any trouble painting with a live armature modifier and a live data transfer, not in your file or anywhere else, so I’m not sure what’s up with that.

The rig I suggested was meant for manual keyframing of those extra bones. You’d only edit them in those poses where something goes awry. Basic, but at least wont give any unexpected results

I’m wondering if you are using some hot keys or maybe I am not following closely enough, but the draw weight paint is missing… Which can be rectified by going to Brushes > Brush Specials Menu > Weight Paint Tool > Draw . This seems to reset it.

Oh I just realized while I slept what you meant about painting-- you can’t change the base weights of the model. I was assuming that those weights were finalized.

If you want, you can also data transfer vertex groups from original to dupe, but on the basis of topology instead of nearest face interpolated or whatever. The the dupe gets the weights on the basis of vertex index, and passes them to the skirt on the basis of position. This gets a little into Rube Goldberg-esque stuff, and isn’t a great idea a lot of times because you start getting performance problems, but it should be fine in the file you’ve provided.

Hey everyone. So, I went forward with the tutu idea and y’know what? It works almost perfectly. Luckily all of the advice I’ve been getting helped me figure it out pretty quickly. Here’s the gist of how it works:

I have a bunch of bones set up in a flower petal fashion, and rigged it before applying the solidify modifier so save me some time dealing with the underside. A little touch up on the automating painting and it bends beautify. I also added a small controller that grants me the ability to move the entire skirt instead of just single sections, thus saving me time animating big motions, there’s just one thing left to solve.

The problem with the skirt controller is that I can’t find a way to use it that doesn’t remove the ability to move the pieces individually. Both constraints and drivers remove the ability to take individual control of these pieces, so how would I do this? Is it possible to turn the driver on/off to get control back? If this isn’t a thing I’ll just keep the pure manual control.

Thanks again for everyone’s help on the different methods for rigging skirts, and I hope this doesn’t seem like I’m ignoring them, I just need to get this project finished asap. I’ll 100% be going back to these methods and trying again when I’m not on a schedule. And honestly, I wouldn’t have figured out this method without little bits of advice here and there from y’all.

3 Likes

I’m glad you’ve found something that works for you, that’s what matters :slight_smile: Be sure and share your final result here, I’d love to see it!

2 Likes

I figured it out. I duplicated the bones of the skirt, turned the deform of those duplicates off, and applied 2 copy rotation constraints to the original bones. 1 for the new dupe bones, and one for the skirt controller. Made sure to set everything to local space and set the mix to “Add”. Works like a charm! Thanks to everyone who helped me along the way. If I can remember to, I’ll let y’all know how the final project went and if I ever figured out the other methods.

also it breaks the weights of what you what already edited, is better to not have it enabled and normalize manually the vertex group if needed…

1 Like

Hi everyone! Two things:

  1. Once again, thanks for all the help!
  2. My model and first animation is done! I just made a post about it on this site as a matter of fact! Figured some of y’all may be interested in seeing the fruit you helped bare! If you want to see how it turned out, check it out here: