ジョイントを使用したクロスシュミレーションの手順を、 MEL スクリプトで自動化してみましょう。
global proc clothJoint1()
{
int $i;
string $jname1 = `joint -p 0.0 8.0 0 `;
joint -p 1.0 3.0 0 ;
joint -p 1.0 -3.0 0 ;
string $jname2 = `joint -p -0.0 -8.0 0`;
string $pname[] = `nurbsPlane`;
scale -r 20 20 10;
setAttr ($pname[1] + ".patchesU") 20;
setAttr ($pname[1] + ".patchesV") 30;
select $jname1;
select -add $jname2;
string $iname[] = `ikHandle -sol ikSplineSolver`;
string $cpname[] = `soft -c -g 0.5 $iname[2]`;
string $tname[] = `turbulence -m 50 $cpname[0]`;
connectDynamic -f $tname[0] $cpname[0];
string $psname[] = `listRelatives $cpname[0]`;
addAttr -longName goalWeight0PP -dt doubleArray $psname[0];
addAttr -longName goalWeight0PP0 -dt doubleArray $psname[0];
float $val = 1.0;
int $count = `getAttr ($psname[0] + ".count")`;
for($i = 0; $i < $count; $i++)
{
particle -e -or $i -at goalWeight0PP -fv $val $psname[0];
$val /= 2.0;
if($val < 0.1)
{
$val = 0.1;
}
}
skinCluster -weight 0.1 $pname[0] $jname1;
soft -g 1.0 $pname[0];
}
global proc clothJoint1()
int $i;
string $jname1 = `joint -p 0.0 8.0 0 `;
joint -p 1.0 3.0 0 ;
joint -p 1.0 -3.0 0 ;
string $jname2 = `joint -p -0.0 -8.0 0`;
string $pname[] = `nurbsPlane`;
scale -r 20 20 10;
setAttr ($pname[1] + ".patchesU") 20;
setAttr ($pname[1] + ".patchesV") 30;
select $jname1;
select -add $jname2;
string $iname[] = `ikHandle -sol ikSplineSolver`;
string $cpname[] = `soft -c -g 0.5 $iname[2]`;
string $tname[] = `turbulence -m 50 $cpname[0]`;
connectDynamic -f $tname[0] $cpname[0];
string $psname[] = `listRelatives $cpname[0]`;
addAttr -longName goalWeight0PP -dt doubleArray $psname[0];
addAttr -longName goalWeight0PP0 -dt doubleArray $psname[0];
float $val = 1.0;
int $count = `getAttr ($psname[0] + ".count")`;
for($i = 0; $i < $count; $i++)
particle -e -or $i -at goalWeight0PP -fv $val $psname[0];
$val /= 2.0;
if($val < 0.1)
{
$val = 0.1;
}
skinCluster -weight 0.1 $pname[0] $jname1;
soft -g 1.0 $pname[0];
string $jname1 = $name[0];
string $joints[] = `listRelatives -path -ad $jname1`;
string $jname2 = $joints[0];
string $pname[];
$pname[0] = $name[1];
string $name[] = `ls -sl`;
int $num = size($name);
string $jname[];
for($i = 0; $i < $num-1; $i++)
{
$jname[$i] = $name[$i];
}
$pname[0] = $name[$num-1];
string $jname1;
for($jname1 in $jname)
{
string $joints[] = `listRelatives -path -ad $jname1`;
string $jname2 = $joints[0];
// ikHandle、ソフトボディ、フィールド、goalWeight0PP の設定など
}
skinCluster -weight 0.1 $pname[0] $jname;
soft -g 1.0 $pname[0];