2010年11月7日 星期日

在模型點或線上產生 Joint


這小工具尤其適用於臉部表情rig製作。當你想把幾個Joint布置在嘴部或眼部的上下方,就可以用它來快速把 Joint 產生出來。

使用方法 :
  • 先選一個或多個點/線,然後執行以下的程式。選點的話,Joint會產生在點的位子上。選線的話,Joint會產生在線的中間位子。

{
$verts=`filterExpand -ex 1 -sm 31`;
$edges = `filterExpand -ex 1 -sm 32`;

for($vtx in $verts)
{
select -cl;
$pos = `pointPosition -w $vtx`;
$newJoint = `joint -p $pos[0] $pos[1] $pos[2]`;
}

for($edge in $edges)
{
select -cl;
string $toVtx[]=`polyListComponentConversion -fe -tv $edge`;
$toVtx = `ls -fl $toVtx`;

$p0 = `pointPosition -w $toVtx[0]`;
$p1 = `pointPosition -w $toVtx[1]`;

float $center[];
$center[0] = ($p0[0]+$p1[0])/2;
$center[1] = ($p0[1]+$p1[1])/2;
$center[2] = ($p0[2]+$p1[2])/2;

$newJoint = `joint -p $center[0] $center[1] $center[2]`;
}

}

2 則留言:

  1. 我是初學,有些看不明白。

    string $toVtx[]=`polyListComponentConversion -fe -tv $edge`;
    // 上面是把 edge convert 做點,這個理解。

    $toVtx = `ls -fl $toVtx`;
    // 但這個就不明白了。
    // 上面已把 $toVtx 定義為`polyListComponentConversion -fe -tv $edge`;
    // 但馬上又 $toVtx = `ls -fl $toVtx`;

    豈不是雙重了嗎?

    回覆刪除
  2. 因為 polyListComponentConversion -fe -tv $edge 可能會回傳類似 pCube.vtx[3:4] 這種東西, 接下來的 pointPosition 就會錯了. 因此先把有可能的 pCube.vtx[3:4] 利用 ls -fl 轉為 pCube.vtx[3],pCube.vtx[4] 再做下一步.

    回覆刪除