[Maya] Merging Skinned/Weighted Geometry?


Just wondering what’s your workflow on merging two skinned/weighted geometry.
Case in point

  1. Body geo is skinned with facial joints.
  2. Body geo (same geo) is skinned with body joints (from another artist)
  3. Need to have only one geo with the facial and body joints.

I already tried brute force method (i.e. exporting weights in #1 and #2 and importing them in #3). doesn’t work since at the end it will be normalize.

I’m dead set in just scripting it at the moment, but I’m wondering if there are any other methods I’m missing.

P.S. Normally, I just do a blendshape #1 to #2. In this case, the requirement is to only have one body geo.

I wrote a script to do exactly this at a previous job. I am afraid that there is no way to do this otherwise. Unless something has been updated in latest version of maya or someone knows a clever trick. For your sake I hope to be proven wrong. Good luck!

gotcha. thanks for the confirmatiion.

just wondering if you have any tips on how to optimize it.
so far, here is my go to plan.

After exporting the weights

  1. Query the weight of face_geo.
  2. Identify each joint.
  3. Within each of those joints. Identify the points.
  4. With the points on the #3, query them on the weight of body_geo. Zero them out. And add the weights on the face_geo.

As you might surmise, there is a heavy for loop on #3 and #4.
Do you have tips on optimizing it?

I wish I had maya on my personal pc so I can give this a go, but maybe you can give this a try? So basically dup and merge all the meshes, reskin to the same joints and then transfer?

1 Like

You could save the weights as layers in ngSkinTools on 01 and 02, and then transfer from there. Then on the target geo (which has all of 01 and 02 joints in the skinCluster), you’ll have two separate layers, and then it’s just a matter of painting a mask on the second layer to isolate the face area and paint a gentle blending between the two if needed.

Dup and merge skinning would work too, except it sounds like 01 and 02 are the same geo, in which case it won’t really work. There is nothing to “merge”.

Otherwise yeah, scripting works too. It doesn’t have to be an extremely fancy script. Just use a simple script to copy weights to a component selection that corresponds to the separate areas. But this works better when you’re copying to clean separate poly shells. Since this seems to be one body, I’d use ngSkinTools.

1 Like

@ricgreen1 @clesage

Thanks for the response.

RE: ngSkinToools
That could work (i.e. isolate the face area) but its not really robust especially if I’m merging weights other than face and body. That is merging weights that doesn’t have a clear separation.

RE: Transfer Skin Weights
I actually did this above as part of brute force but failed to mention it.
It doesn’t really work since if the joint name doesn’t match, it will click the closest joint to match to.

Or so I believe haha.

So I usually don’t open the option dialog box on commands (Totally my bad). The video showed that and it seems like there is another option that fits my needs. Mainly to match based on name. This solves my problem if there is a joint name mismatch.

I don’t have to paint things out. Of course, the more direct solution is scripting since its literally copying weights point per point. But this works so far.

Thanks again for the insights! Helped me to rethink what I know so far.


Why wouldn’t it have a clear separation? Presumably the face skinning has some kind of a head joint too? In the face layer, cut that influence away, and you’ll have a perfect seam. The head will come from the body. All the face joints will come from the face.

“Painting a blend” was a bad suggestion on my part. But if you cut away the face head, you should have a 100% perfect match with zero loss to your face joints.