MEL 再SmoothBindツール

SmoothBind使用後、どうしてもオブジェクトの履歴を削除したい。スケルトンの位置を変え微調整したい。フリーズしたい。という場合に行う作業を、MELで行うことができるツールをつくりました。


基本的には、キャラクターをワンスキンで制作している場合のみ使用できます。
複数のスキンオブジェクトがある場合はツールを使用前にグループ化し
グループを1つの任意のスキンオブジェクトとして
使用してください。
最後にグループを解除(削除)しましょう。

グループは表示されないのでアウトライナで確認しグループを選択しましょう。


●基本的にMELで行う作業の流れ


1.スキンオブジェクトとスケルトンを複製し隠します。
2.元のスキンオブジェクトとスケルトンの履歴を削除します。


オブジェクトまたはスケルトンを編集します。


3.オブジェクトとスケルトンを再SmoothBindします。

4.複製していたスキンオブジェクトからスキンオブジェクトにウエイトコピーします。
最初にスキンオブジェクトとスケルトンを複製したものを削除します。



Aは
任意のスキンオブジェクト(一つ)と追加選択でスケルトンのルートを選択し
「3.KEEPSkin」ボタンをクリックすると
ケルトンをグループ化し複製し___S_JNTGに名前を変更。
スキンオブジェクトを複製し、複製したスケルトンとスムーズバインドし
複製元のスキンオブジェクトのウエイトを複製し
___S_OBJに名前を変更。スケルトンをグループ化を解除いたします。
___S_JNTGと___S_OBJを隠します。
アウトライナーで確認できます。


Bは
オブジェクトとスケルトンの関係を切り離すため
任意のスキンオブジェクト(一つ)と追加選択でスケルトンのルートを選択し
「3.DeleteHistory」ボタンをクリックすると
任意のスキンオブジェクトの履歴を削除、スケルトンバインドポーズノードを削除いたします。


注意:オブジェクトのモデリングや履歴の削除、スケルトンのフリーズを行う場合等はBの後行ってください。
ケルトンの名前は変更してはいけません。
任意のオブジェクト変更し、違う名前でも、新たに作成したものでも
スキン > スムース スキンの編集 > スキン ウェイトのコピー(Skin > Edit Smooth Skin > Copy Skin Weights)を使用しますので位置と形状が近いものであれば、あまり問題はおこりません。


Cは
再バインドを行います。
任意のオブジェクト(一つ)と追加選択でスケルトンのルートを選択し
「3.SmoothBind」ボタンをクリックすると
オブジェクトとスケルトンがSmoothBindします。


Dは
任意のスキンオブジェクトを選択し
「2.SKINCOPY」ボタンをクリックすると
Aで作成した___S_OBJのウエイト情報を任意のスキンオブジェクトにコピーし
___S_OBJと___S_JNTGを削除いたします。


このツールは選択数と順を間違えると使用できません。ご注意ください。

下記がMELです。




global proc S_D()

{
string $selOBJS= `ls -sl`;
print $selOBJS[0];
print $selOBJS[1];
string $selOBJSn
= `ls -sl -sn`;

select -cl ;

select -r $selOBJS[0];
duplicate -rr;
string $selOBJSd= `ls -sl`;
print $selOBJSd[0];

select -cl ;

select -r $selOBJS[1];
Group;
string $JntG1= `ls -sl`;
print $JntG1[0];
duplicate -rr;
string $JntG2= `ls -sl`;
print $JntG2[0];
PickWalkDown;
select -tgl $selOBJSd[0];

SmoothBindSkin;

select -cl ;

select -r $selOBJS[0];
select -tgl $selOBJSd[0];

CopySkinWeights;

select -cl ;

select -r $JntG2[0];
select -tgl $selOBJSd[0];
HideSelectedObjects;

select -cl ;

select -r $JntG1[0];
Ungroup;


rename $JntG2[0] "___S_JNTG";
rename $selOBJSd[0] "___S_OBJ";

};

global proc DeH()

{

string $selOBJS= `ls -sl`;
print $selOBJS[0];
print $selOBJS[1];

select -cl ;

select -r $selOBJS[0];
DeleteHistory;

select -r $selOBJS[1];
string $bindP=`dagPose -q -bindPose`;
select -r $bindP;
Delete;
doDelete;

};

global proc S_T()

{

string $selOBJS= `ls -sl`;
select -r ___S_OBJ;
select -tgl $selOBJS[0];

CopySkinWeights;


select -r ___S_OBJ;
select -tgl ___S_JNTG;

Delete;
doDelete;

};


window -width 80 -height 50 -title "SKINOBJECT_EDIT_TOOL" -rtf 1;
columnLayout -adjustableColumn true;
separator;

gridLayout -numberOfColumns 1 -cellWidth 200 -cellHeight 20;
text -label "A:KEEPSkin Select" -align "left";
text -label "1.SkinObj 2.add JointRoot" -align "center";
button -label "3.KEEPSkin" -command "S_D";
text -label "B:DeleteHistory Select" -align "left";
text -label "1.SkinObj 2.add JointRoot" -align "center";
button -label "3.DeleteHistory" -command "DeH";
text -label "C:SmoothBind Select" -align "left";
text -label "1.SkinObj 2.add JointRoot" -align "center";
button -label "3.SmoothBind" -command "SmoothBindSkin;";
text -label "D:SKINCOPY Select" -align "left";
text -label "1.SkinObj" -align "center";
button -label "2.SKINCOPY" -command "S_T";

showWindow;