Lets start with a simple skin setup that works, then explore the more advanced features.
Smooth Bind options are as follows…
1. Reset Settings
2. Bind To: Selected Joints
3. Max Influences: 3 (or 4 if your preference)
This page will show how we can use more advanced features and scripts to speed up our skinning.
The main tools I use are
– TF Skin Smooth
– Skin Wrangler (which now replaces the max skin weights tool on the vids in this page)
NG Skin Tools is another notable plugin, but I do not have videos for it yet.
See the other pages for the more traditional Maya tools and there’s another page with workflow on how to skin a face.
1.1 – Basic Skinning That Works
2.1 – Space Between Pivots
3.1 – Geodesic and Heat
3.2 – Heat/Geodesic Issues
4.1 – Max Skin Weights
5.1 – Mirroring
6.1 – Updating Topology
7.1 – The Magic Skin Tool
8.1 – Lores to Hires
9.1 – Export/Import
Andrew Silke
Skin Wrangler
Braverabbit Import Export Skin Tool
Max Tool (old)
Select Influence Joints
TF Skin Smooth
October 2015
Lets start with a simple skin setup that works, then explore the more advanced features.
Smooth Bind options are as follows…
1. Reset Settings
2. Bind To: Selected Joints
3. Max Influences: 3 (or 4 if your preference)
Information |
---|
Basic Skinning That Works Here’s the basic skin settings that will work for all characters. See the next section for helping with a more advanced workflow as sometimes these settings will need a lot of weight adjustment to get right. Often I’ll skin characters completely manually, especially simple characters. Even though heat mapping seems to get characters skinned quickly, by the time I’ve finished weighting I’ll usually have weighted most of the character manually except in hires geo examples. 1. Reset Settings |
Important note here, I’ll talk a lot about joint as the space between the joint. This is confusing in Maya as maya’s display only shows the pivot of the joint and not it’s length which will extend to the next joint in the chain.
The following video sets that straight.
Information |
---|
Joints As The Space Between Pivots Joints shouldn’t be seen as the round dots which really mark the pivot points, instead they are the space between joints. Ie a thigh bone goes all the way to the knee fom the hip. The middle of the thigh should be weighted 100% to the thigh bone if we are thinking logically. Also skeletons that aren’t joined must be weighted more manually than skeletons that have a visual connection. This is because maya is smart if the joints are connected, less so if the joints are hovering and not visually joined. The video shows in more detail… |
These very fancy names for skinning simply allow us to auto bind with a little more acuracy. These can be good to get the hang of if you’re skinning loads of characters and need fast good results. Usually I’ll do a lot of manual tweaking that renders a lot of this sort of setup a little negligable, so I’ll often bind simply. Still these are great methods to know about. Simply
– Heat Mapping is a good auto solution for most meshes
– Use Geodesic Voxel in situations where heat fails.
Information |
---|
Geodesic Voxel and Heat Binding Skinning in Maya Heat (2014+) and Geodesic Voxel (2015+) bind methods are available in newer versions of Maya. These methods use smart skinning algorithms to weight characters more efficiently. And they work well except for one large problem… they move the verts after binding. So we need a workflow to get around this. First lets learn about the two methods… Heat Binding introduced in Maya 2014 uses a very clever algorythm that intelligently recognises the form of objects to skin via surface volume and not closest points to joints. It only works in certain conditions. Non manifold geometry for example will break it. Geodesic Voxel (2015 only) is touted by Autodesk as more versatile version of heat binding. It converts the mesh into voxels allowing us to heat bind meshes that usually wouldn’t be suitable with heat binding. From my tests I prefer Heat Mapping, it’s faster and gives better results however Geodesic Voxel is a good fallback if heat mapping fails. Both methods require bones inside a mesh like a characters body and for the polygon normals to point outwards correctly. For any fast simple objects I still use “closest distance”. |
Information |
---|
Problems and Solutions for Heat/Geodesic Voxel Binding Both Heat/Geo methods move the vertices in the bind pose, this can affect mirroring weights and other handy functions. It’s quite annoying. A work around is to bind two identical meshes, one with heat or geodesic binding the other with closest distance. Then transfer the weights from the heat/geo to the closest distance. This will work around the issue and give us heat/geo weighting without moving the vertices. 2 meshes |
One of my favorite scripts was this Max Skin Weights Tool, until I found a better replacement in Skin Wrangler. The following Video explains Max Skin Weights but Skin Wrangler is almost identical and has a better search and longer UI for joint names.
Information |
---|
Max Skin Weights Script, A Better Component Editor The Max Skin Weights script is a great script that weights verts numerically like the component editor (very similar to the way 3dsMax weights verts). It’s often preferable to the component editor because of the simpler interface. Couple of issues mean that it’s still easiest to use the component editor. I use 80% of my numerical weighting in the Max Script Window and 20% in the component editor. |
Mirror skin weights can be fiddly, but I’ve never encountered a situation where my mesh wouldn’t mirror correctly. But there’s a number of things you need to get right.
Also in the case of joints that lie in exactly the same place we can use “joint labels” which I don’t go through here unfortunately but you can look that up.
Information |
---|
Mirroring Skin Weight Settings The following settings will mirror skin weights predictably and well. Be sure to have the character at the bind pose (zero’d controls) when applying. Mesh must be symmetrical and combine L and R objects where possible to save time in skin weighting. Mirror Across YZ Positive to Negative On (character L to R) Closest Point On surface Influence 1: One To One Influence2: None Normalize Off |
Maya has a way of copying skin weights between meshes and it’s very important to understand that we can do this and it’s very powerful. The following script simply automates the cumbersome steps required to copy the skin weights easily from mesh to mesh, even with meshes of differently topology or resolution this feature is a life saver.
Information |
---|
Updating Meshes With Topology Changes We can now update meshes with topology changes with the copy and paste skin weights script. This also works well with low res geometry skinning to hires dense meshes (see following sections) |
Code |
---|
Copy the following script to the shelf (.mel) ////////////////////////////////////////// //Select meshes to transfer weight to, then shift-select the mesh with weights, then run this script string $userSel[] = `ls -sl`; if(`size($userSel)` > 1) { select $userSel[((`size($userSel)`) - 1)]; string $cageMesh[] = `ls -sl`; select $userSel; select -tgl $cageMesh; string $pieces[] = `ls -sl`; //get inputs of weights in skin string $theJoints[] = `skinCluster -q -wi $cageMesh`; if(`size($theJoints)` > 0 && $cageMesh[0] != "") { int $counter; int $sizer = size($pieces); for ($counter = 0; $counter < $sizer; $counter++) { /////////////////////////////////////////////////////////////////////////////////////// //Determine if skinCluster exists on piece string $skins[] ; clear $skins ; string $hist[] = `listHistory -pdo 1 -il 2 $pieces[$counter]` ; string $h ; for ($h in $hist) { if (nodeType($h) == "skinCluster") { $skins[size($skins)] = $h ; }//end of if skinCluster type exists }//end of for loop through history ///////////////////////////////////////////////////////////////////////////////////////// //If skinCluster Doesn't exist, add skinCluster if(`size($skins)` == 0) { select $pieces[$counter] $theJoints; newSkinCluster "-tsb -mi 10 -dr 10" ; }//end of apply skinCluster if none found ////////////////////////////////////////////////////////////////////////////////////////// //Add all influences from cageMesh int $counterInf; int $sizerInf = size($theJoints); string $pieceJoints[] = `skinCluster -q -wi $pieces[$counter]`; for ($counterInf = 0; $counterInf < $sizerInf; $counterInf++) { int $found = stringArrayContains($theJoints[$counterInf], $pieceJoints); if($found == 0){skinCluster -e -ai $theJoints[$counterInf] $skins[0];} }//end of for loop through adding all cageJoints /////////////////////////////////////////////////////////////////////////////////////////// //Remove extra joints that don't match those in cageMesh skinCluster string $theJoints[] = `skinCluster -q -wi $cageMesh`; string $pieceJoints[] = `skinCluster -q -wi $pieces[$counter]`; string $diffJoints[] = stringArrayRemove($theJoints, $pieceJoints); int $counterInf; int $sizerInf = size($diffJoints); if(`size($diffJoints)` > 0) { for ($counterInf = 0; $counterInf < $sizerInf; $counterInf++) { skinCluster -e -ri $diffJoints[$counterInf] $skins[0]; }//end of for loop through removing extra joints }//end of if any joints are different ////////////////////////////////////////////////////////////////////////////////////////// //Transfer the Weights select $cageMesh $pieces[$counter]; copySkinWeights -noMirror -surfaceAssociation closestPoint -influenceAssociation closestJoint -influenceAssociation oneToOne -influenceAssociation name -normalize; ////////////////////////////////////////////////////////////////////////////////////////// //Finalize print ("\nSkin Applied/Weights Transferred: " + ($counter + 1) + "/" + $sizer); }//end of loop through pieces select $userSel; }//end of if there is a skinCluster to copy from }//end of if user has selected enough items |
The following video with the most boring title ever is actually one of the biggest time savers on this page. TF Skin smooth smooths skin weights the way they should be smoothed. The following video explains how this happends regarding Normalisation in Maya. Don't let the big words worry you. It's good to understand this about Maya and it's skin weights.
Information |
---|
Post And Interactive Normalisation Modes and TF Smooth Skin TFSmoothSkin (Maya Script) is like the magic smooth skinning brush, and here's why in the following video which discusses weight normalisation in Maya. |
One of my favorite techniques is to skin a lores mesh and transfer the skin weights to the hires. This gives remarkable accurate and fast results. the downside is we'll need to create a lores mesh. Many riggers who aren't storng modellers might avoid this techinique but I love it.
Information |
---|
Using Lores Meshes to Help With Skinning Dense Models For dense meshes we can model a lores proxy and skin it easily, then transfer the weights across with the copy and paste skin weights script, this can save time on complex geometries. |
Import and Export Skin data between files with Braverabbits Export Import Skin Weights. His latest version has error checking. Zoo Tools also has this feature which work in world space rather than on vertex count. Both methods have advantages, in the following example I look at Braverabbits tool.
Also worth noting that Maya has this feature also, though it is slow and not as nice to use. It's found under import export deformer weights, and not under skinning!
Information |
---|
Export/Import Skin Weights Between Rigs and Files This plugin by Ingo over at BraveRabbit allows us to save skin weights to a file and then reload them onto characters that might be in different scenes. It also works particularly well updating rigs, rebuilding from proxy controls for pivot points and then reweighting meshes together. It avoids the traditional Maya method of saving skin weights to UV'd maps which is complicated and requires accurate UVs. This plugin can be downloaded for free from BraveRabbit... |