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 | Boolean |
チェイン上の負のスケーリング。 負のスケーリングは、左と右の手または指を対称に操作する場合に便利です。 デフォルト値: 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" |