Okay, i've got my model here and my question is: How do you mirror the rig from one side of the model to another on Maya? This including the binds with the verticies and bones.I did the binding on one side and now I want to mirror those binds to the other side. Any help would be appreciated. THX
Replies
For the skeleton, use the mirror joint tool and for mirroring the weights go to Edit Smooth Skin - mirror skin weights. Choose your mirror axis and you're good to go.
another solution for this problem might be to save weights based on world coordinates with a tool such as aeTransferSkinWeights, then get rid of your skincluster, work on your skeleton, bind and load in those weights again, ready to mirror.
whatever you decide, do test it out with a less complex scene first. i often create some tiny dummy scene prior to applying some scripted tool to my project. there's just so much that can go wrong...
While is may be annoying to have to redo the weights, I think your best solution is to get rid of the skin, mirror the bones, and then redo the weights. I know that Maya has an excellent system for mirroring weights, so that shouldn't be too bad.
1. Select the root of each skeleton structure you need mirrored, and do a "mirror joint". ie select the thigh bone, clavicle, etc. Don't select the whole skeleton, just the part you want a mirrored copy of. A little unintuitive at first.
2. (these next two parts can be tedious) Select the mesh, then one of the new, unbound bones, and use the skin -> Add Influence.
3. Repeat for each bone.
(I wrote a script some time ago for selecting multiple bones & a mesh and it adds all the influenes for you. I'm not sure why they limited it to one at a time though Maya 7 fixes this. )
4. After all the bones are bound, use the skin -> mirror skin weihgts tool.
Done!
<font class="small">Code:</font><hr /><pre>
//global proc CRaddMultiInfluence()
{
string $sel[]=`ls -sl`;
string $objects[];
string $bones[];
for ($node in $sel)
{
if (`nodeType $node`=="joint") $bones[`size($bones)`]=$node;
if (`nodeType $node`=="transform") $objects[`size($objects)`]=$node;
}
for ($obj in $objects)
{
string $cons[] = `listHistory $obj`;
string $clusters[] = `ls -typ skinCluster $cons`;
for ($bone in $bones)
{
print ("adding bone:"+$bone+" to object "+$obj+"\n");
skinCluster -e -dr 0.5 -lw true -wt 0 -ai $bone $clusters[0];
}
}
select -r $sel;
}
</pre><hr />
Ripped out of a much larger, comprehensive set of skin tools, so I hope it works
All you do is select the bones you want added & the meshes you want them added to and run it. Done!