Keep up-to-date with Free tutorials!!

 

Sign up to our twice-monthly newsletter today for the latest tutorials, interviews and product information.

Sign me up to receive third-party emails from 3dtotal's partners, too!

- Latest news
- Exclusive Shop Offers
- Preview early content
- Plus much more

 

Not Ready to take that step? OK, Why not just Subscribe to the RSS Feed

 
submit tutorial
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8
Painting Weights and Skinning: A Straightforward Approach

By Kiel Figgins
| Your Rating:
rating star fullrating star fullrating star fullrating star fullrating star half
(8 Votes)
| 107862 Views
| 1 Comments
| Comments 1
Date Added: 10th April 2013
Software used:
Maya

Merge the meshes together, then weld the Border edges back together. Here are the results in a single mesh (Fig.20).

1699_tid_fig20_mesh_final.jpg
Fig. 20 - Single final mesh


Transferring the Weights Back

Here is a MEL script that will transfer the weights from one mesh and apply them to other meshes.
To run this script, do the following:

• Select all of the code below and paste it into the Script Editor
• Select all the meshes you'd like to paste weights to
• Shift + select the mesh that has proper weighting
• Select all the code in the Script Editor
• Hit Enter

//////////////////////////////////////////
//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





< previous page next page >
 
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8
Related Tutorials

Tutorial

Gallery Image.



Keywords: Maya, ZBrush, Modeling, Character

Go to tutorial
rating star fullrating star fullrating star fullrating star fullrating star full (9)
Comments 0 Views 5339

Tutorial

Gallery Image.



Keywords: character, creature, zbrush, armored,

Go to galleries 1
rating star fullrating star fullrating star fullrating star fullrating star full
Comments 0 Views 3511

Tutorial

Gallery Image.



Keywords: 3ds Max, ZBrush, Photoshop, V-Ray, character

Go to galleries 1
rating star fullrating star fullrating star fullrating star halfrating star none
Comments 0 Views 5246

Tutorial

Gallery Image.



Keywords: MODO, AMD, Character, Male, Tutorial

Go to galleries 1
rating star fullrating star fullrating star fullrating star fullrating star half
Comments 0 Views 9037
Readers Comments (Newest on Top)
avatar
(ID: 305403, pid: 0) Joshua R. Dodson on Sun, 26 October 2014 8:20pm
Thank you this has helped to improve my understanding of Weight painting. In my own personal work I have found that the combination of Basic skin cluster, maya muscle and corrective blend shapes yield highly satisfactory results. It's always a great idea to have a low poly version of your model for animation and simulation testing aside from the full resolution detail model.
Add Your Comment