2014年11月18日火曜日

バインドされたメッシュをセパレートする

と言う事で作っていたらデタッチセパレートがいらなくなってしまった。
分割したメッシュの両方にウエイトがコピーされますよ
マージするMELも作ったので後日

/*
ちぎりたいフェースを選択して実行
スキンクラスタがあればウエイトも維持

使用しているプロシージャ
yjp_DuplicateMeshSkin
yjp_doImitateBind
yjp_meshUnlook
*/

global proc yjp_SeparateMeshWeight()
{
string $origFaceSel[] = `filterExpand -ex 1 -sm 34`;
print ($origFaceSel[0] + "\n") ;
if(!`gmatch $origFaceSel[0] "*.f*"`)
{
print ("フェースを選択してください" + "\n") ;
return;
}
string $temp[];
string $FaceNum[] ;
string $Amesh;
int $n;

for ($n=0 ; $n < size($origFaceSel) ; $n++)
{
tokenize $origFaceSel[$n] "." $temp;
$FaceNum[$n] = $temp[1];
//print ($FaceNum[$n] + "\n") ;
}

string $origObjShape[] = `listRelatives -p $origFaceSel`;
string $origObj[] = `listRelatives -p $origObjShape`;
string $parents[] = `listRelatives -p $origObj[0]`;
////////スキンクラスター取得

string $scf = `findRelatedSkinCluster $origObj[0]`;

if( size($scf))
{
////////バインドされているジョイントを取得
string $jointlistnameA[] = `listConnections -type "joint" ($scf +".matrix")`;
//最大インフルエンス取得
int $maxInf = `getAttr ($scf + ".maxInfluences")`;

//ソースメッシュウエイトを保存
select -r $origObj[0];
//ウエイト保存のため複製
$Amesh = `yjp_DuplicateMeshSkin`;
}

//Aメッシュ複製
string $newmeshA[] = `duplicate -n ($origObj[0] + "_A") -rr $origObj[0]`;

//Bメッシュ複製
string $newmeshB[] = `duplicate -n ($origObj[0] + "_B") -rr $origObj[0]`;

//Aメッシュ選択フェース以外削除
string $FaceA[];
for ($n=0 ; $n < size($FaceNum) ; $n++)
{
$FaceA[$n] = $newmeshA[0] + "." + $FaceNum[$n];
}
select -r $FaceA;
InvertSelection;
delete;

//Bメッシュ選択フェース削除
string $FaceB[];
for ($n=0 ; $n < size($FaceNum) ; $n++)
{
$FaceB[$n] = $newmeshB[0] + "." + $FaceNum[$n];
}
select -r $FaceB;
delete;

if( size($scf))
{
//ソースメッシュと同じバインドを複製メッシュに摘要
yjp_doImitateBind $origObj[0] $newmeshA[0];

select -r $newmeshA[0];
//ウエイトコピー

$scs = `findRelatedSkinCluster $Amesh`;
$sct = `findRelatedSkinCluster $newmeshA[0]`;
copySkinWeights -ss $scs -ds $sct -noMirror;

select -r $newmeshA[0];
//不要なインフルエンスの除去
removeUnusedInfluences;

//ソースメッシュと同じバインドを複製メッシュに摘要
yjp_doImitateBind $origObj[0] $newmeshB[0];

select -r $newmeshB[0];
//ウエイトコピー
$scs = `findRelatedSkinCluster $Amesh`;
$sct = `findRelatedSkinCluster $newmeshB[0]`;
copySkinWeights -ss $scs -ds $sct -noMirror;
print ("ウエイトコピー" +"\n");

select -r $newmeshB[0];
//不要なインフルエンスの除去
removeUnusedInfluences;

delete $Amesh;

}
delete $origObj[0];
rename $newmeshB[0] $origObj[0];
select -r $newmeshA[0];
}

0 件のコメント:

コメントを投稿