v4.0
キャラクタ リギング
ボーンのジョイントの配置と方向付けにガイド オブジェクトを使用して、1 ボーンの手と指のボーン一式を作成します。
手の作成には、ガイド オブジェクトのコレクションが 2 つ必要です。指のジョイントを配置するための指のガイド
オブジェクトのコレクションと、指を曲げる方向をコントロールする「ブレード」オブジェクトのコレクションの 2 つです。
指のチェインは、ボーンの Z 回転がブレードのプレーンとなるようセットアップされます。
必要に応じて、手と指にシャドウ リグをアタッチすることができます。 腕のチェイン エレメントそれぞれにシャドウ
オブジェクトが作成され、そのエレメントにポーズによって拘束されます。 シャドウ
リグはリグのアニメーションをプロットする際に使用できます。
oHand = MakeHand( HandParent, FingerGuideCollection, BladeGuideCollection, HandGuideCollection, [Prefix], [FingerBoneType], [ShadowType], [ShadowParent], [NegativeScale] ); |
Hand JScript オブジェクトを戻します。
| パラメータ | タイプ | 詳細 | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| HandParent | 文字列 | 新しい手の親となるオブジェクト。 | ||||||||||||||||||||
| FingerGuideCollection | 文字列 | 各指の開始となる、ガイド オブジェクトのコレクション。 たとえば「LRing1」のように、コレクション内のガイド オブジェクトを 1 つ指定すると、手はジョイントが検出されなくなるまで「LRing2」、「LRing3」のようにオブジェクトを検索します。ボーンを描画するには、シーンでルートにつき 1 つ以上の追加のジョイントが検出される必要があります。 | ||||||||||||||||||||
| BladeGuideCollection | 文字列 | 描画対象の指の方向を示す、ブレード オブジェクトのコレクション。 Root Guides と同じ順序でなくてはなりません。 | ||||||||||||||||||||
| HandGuideCollection | 文字列 | A collection of two objects in the order:$$$手のボーンの開始から手のボーンの終端の順に並んだ、2 ボーン オブジェクトのコレクション。 | ||||||||||||||||||||
| Prefix | 文字列 | 新しい手を作成する際に、新しいオブジェクトの名前に付加するプリフィックス (例: 「L」や「R」など)。 | ||||||||||||||||||||
| FingerBoneType | Integer | 2D または 3D チェインから指のボーンを構築するオプション。
デフォルト値: 0
|
||||||||||||||||||||
| ShadowType | Integer | 手にアタッチするシャドウ リグのタイプ。 シャドウ リグは、アニメーションを転送または再マップするために使用します。
デフォルト値: 0
|
||||||||||||||||||||
| ShadowParent | 文字列 | シャドウ リグ階層の親。 空の場合には、シャドウ リグは作成されません。 | ||||||||||||||||||||
| NegativeScale | ブール | チェイン上の負のスケーリング。 負のスケーリングは、左と右の手または指を対称に操作する場合に便利です。
デフォルト値: False |
/*
Loads the Biped Guide then generates a left
hand matched to the guide
*/
GetProportionalGuide("Biped_Guide", 0, 0);
var Guide = ActiveSceneRoot.FindChild("Biped_Guide" );
var LFingers = new ActiveXObject("XSI.Collection");
var LBlades = new ActiveXObject("XSI.Collection");
var handKeys = new Array("Pinky", "Ring", "Middle", "Index", "Thumb");
for(i=0;i<handKeys.length;i++){
var finger = Guide.FindChild("L" + handKeys[i] + 1);
var blade = Guide.FindChild("L" + handKeys[i] + "_fingerBlade");
if(finger && blade){
LFingers.add(finger);
LBlades.add(blade);
}
}
var LHBone = new ActiveXObject("XSI.Collection");
LHBone.add(Guide + ".LHand");
LHBone.add(Guide + ".LHandEnd");
var LHand = makeHand(ActiveSceneRoot, LFingers, LBlades, LHBone, "L", 0, 0, null, 0);
DumpHand(LHand);
//Delete the guide
DeleteObj("B:"+Guide);
//Move hand to the origin
var xfo
xfo = LHand.Root.Kinematics.Global.Transform;
xfo.SetTranslationFromValues(0,0,0);
LHand.Root.Kinematics.Global.Transform = xfo;
function DumpHand(inHand)
{
logmessage ("Data in the returned hand object:");
logmessage ("---------------------------------");
logmessage ("HandRoot : " + inHand.Root);
logmessage ("HandEff : " + inHand.Eff);
logmessage ("#FingRoots: " + inHand.FingerRoots.count);
for(var b=0;b<inHand.FingerRoots.count;b++)
{logmessage (" FingerRoot" + b + ": " + inHand.FingerRoots(b));}
logmessage ("Hidden : " + inHand.Hidden);
logmessage ("Envelope : " + inHand.Envelope);
logmessage ("Shadows : " + inHand.Shadows);
}
//results from running this script:
//INFO : "Data in the returned hand object:"
//INFO : "---------------------------------"
//INFO : "HandRoot : LHandRoot"
//INFO : "HandEff : LHandEffector"
//INFO : "#FingRoots: 5"
//INFO : " FingerRoot0: LPinkyRoot"
//INFO : " FingerRoot1: LRingRoot"
//INFO : " FingerRoot2: LMiddleRoot"
//INFO : " FingerRoot3: LIndexRoot"
//INFO : " FingerRoot4: LThumbRoot"
//INFO : "Hidden : LPinkyRoot,LPinkyEffector,LRingRoot,LRingEffector,LMiddleRoot,LMiddleEffector,LIndexRoot,LIndexEffector,LThumbRoot,LThumbEffector,LHandRoot,LHandEffector"
//INFO : "Envelope : LPinky1,LPinky2,LPinky3,LRing1,LRing2,LRing3,LMiddle1,LMiddle2,LMiddle3,LIndex1,LIndex2,LIndex3,LThumb1,LThumb2,LThumb3,LHand"
//INFO : "Shadows : undefined"
|