MakeHand

導入

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

指定可能な値:

説明:

0 指は2Dチェインで、プリファレンスアングルは指のブレードの向きです
1 指は3Dチェインで、プリファレンスアングルはガイドのポーズです
ShadowType Integer 手にアタッチするシャドウ リグのタイプ。 シャドウ リグは、アニメーションを転送または再マップするために使用します。

デフォルト値: 0

指定可能な値:

説明:

0 影無し
1 SI|3Dスケルトンのシャドウリグ
2 XSIスケルトンのシャドウリグ
3 ヌルのシャドウリグ
4 ボックスのシャドウリグ
9 SI|3Dスケルトンハンドシャドウ(指なし)
10 XSIスケルトンハンドシャドウ(指なし)
11 ヌルハンドシャドウ(指なし)
12 ボックスハンドシャドウ(指なし)
ShadowParent 文字列 シャドウ リグ階層の親。 空の場合には、シャドウ リグは作成されません。
NegativeScale Boolean チェイン上の負のスケーリング。 負のスケーリングは、左と右の手または指を対称に操作する場合に便利です。

デフォルト値: False

JScript の例

/*

	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"

関連項目

MakeArm