Rigging Paths for Arrays?

Hello!

I’m at the rigging stage of making a character. She wears a jacket with some simplified zippers made from beveled cubes (the “teeth” of the zipper) with an array modifier to put them along a path. Here’s an image of it (you can also see the path next to the objects)

Is there a way to rig the path to the armature? I tried converting the array to a single mesh and attaching that to the mesh (and transferring the weights from the jacket that’s already rigged), but the individual “teeth” on the zipper end up getting distorted and stretched, and I’d like each one to preserve their shape. Is there a good approach to doing this you can recommend?

I’d be really thankful for any insights!

Because the individual vertices of each tooth end up getting different weights. There are a few ways to handle it. For a large number of individual items, I’d recommend the following:

Duplicate your zipper mesh (modifiers applied etc.) Switch to individual origins pivot point. Select all and scale to 0. Merge by distance. You should see all your individual teeth collapsing to single points.

Now, copy weights from your coat onto this array of points (I’d do a data transfer modifier, nearest face interpolated) first, then copy weights from this array of points onto your original zipper (data transfer modifier, nearest vertex.)

Basically what you’re doing is getting solid weights, because a single vert only ever has one set of weights obviously, and transferring them to each entire tooth, because the single vertex is the nearest vertex to that tooth.

1 Like

That didn’t seem to work. I’m still getting a gradient on the teeth in weight paint mode. The stretching is kind of worse, actually. I think it’s transferring the weights from the verts in the merged one to the verts in the un-merged one in kind of a sphere of influence around it, if that makes sense.

Yes. You have to think about what it is you’re weighting. If you provide a file, I could look carefully and see what’s going on.

Thank you for taking a look at it!
Here’s the file


I haven’t shared a blender file before, so hopefully it has everything you need to look at it. The mesh I’m trying this out on is Clothes - Zipper Left (TARGET)
Let me know if anything in it needs clarification since it’s not super organized

Note: I have another file where I didn’t apply the curve and array modifiers. It seems like assigning a single weight per tooth makes them not rotate along the “path” on the jacket to match the direction they’re going. Would a better approach be to somehow rig the curve to the rig somehow? I’ve seen some people suggest hook modifiers, though I haven’t looked into how that works yet

  1. Delete all vertex groups on both zipper target and merged verts.
  2. Put your armature in rest position. (Unposed isn’t good enough because constraints. It needs to be in rest position.)
  3. Temporarily disable subdivision modifiers on zipper, merged verts, jacket.
  4. Data transfer from jacket->merged, vertex groups, nearest face interpolated, all groups, replace. Click generate data layers then apply.
  5. Data transfer from merged-> zipper, vertex groups, nearest vertex, all groups, replace. Click generate data layers then apply.
  6. Re-enable pose on armature and test.

When I do this, I get no stretching of your individual teeth. Note that left zipper clips with jacket as shown-- I’m sure you’d want to fix that before you weight.

Using a curve modifier creates stretch all on its own. If you don’t want anything stretching at all, you don’t want to use a curve modifier to handle the zipper teeth. (Never mind the fact that it would be an enormous pain in the butt to make the curve follow the mesh.)