Thursday, November 8, 2012

Surface Character Rigging Tips

Hi,

Here I show a little on how I was breaking down workflow for rigging a character.

This is the current rig with surface. It definitely needs a lot of work. And the facial deformation is pretty limited.



This is the Anim Rig it moves the surface rig. Mostly these geometry pieces are parented to joints. The stretching happens via mostly Spine IK. This one mostly moves surface via (naming conventions and parent constraints) a node based approach may be more robust.




This is the base part of the skin rig. It mostly uses spine ik to stretch joints, a joint based iksc stretching system, and a nurbs type of surface to stretch torso. It still needs lots of work.


I painted weights on here then used a tool I wrote (see Some Mel Tips For Rigging link) to move these weights onto the surface.

Its helpful to paint weights on these geometry parts because we don't have to search through lots and lots of influences in the paint weight manager, just the ones needed for that part (ex: arm).


Here is a brief look at how I painted the ear weights. I made a plane (roughly matching the ear size, edges) and moved it over to the ear, then skinned it with ear joints. Then I used Maya's copy weight tool to move the plane weights to a duplicate of the surface ear. Finally, I used the geometry to geometry transfer weight tool I wrote to move the ear weights to the whole surface. The geo transfer weight tool I wrote is still very slow but it was  helpful.

Here is an example of the neck data used in the tool.
global proc barky_neck()
{
    string $fromInfClust = "skinCluster24";    
    string $toVtxRange[] = na_cpSkinToVtxRange("neck_cut_geo","body_skin1");//piece, final , needs current selected final vertices to speed search
    
    string $fromInf[] = {};
    
    select -r neck_1_skin neck_2_skin neck_3_skin neck_4_skin neck_5_skin;
    
    
    $fromInf = `ls -sl`;
    
    select -r neck_1_skin neck_2_skin neck_3_skin neck_4_skin neck_5_skin;
    
    string $toInf[] = `ls -sl`;
    
    
    na_copyWeight($toVtxRange, "body_skin1", $toInf,"neck_cut_geo", $fromInf, $fromInfClust, 0.001);
    
}


Here are some other random poses I made.







Hope you find this helpful.
Cheers,
Nate

Inspired by Jason Schleifer's Animator Friendly Rigging (jasonschleifer dot com)
Inspired by Chris Lesage (chrislesage dot com) (Using Proxy Geometry For Better Skinning Results)