v4.0
2 本のボーンを持つ腕とアップベクター コントロール オブジェクトを作成します。腕のボーンは、肩、肘、手のそれぞれの位置のオブジェクトを持つガイド オブジェクトのコレクションから作成されます。 上腕のボーンは肩と肘のオブジェクトを接続し、前腕のボーンは肘と手のオブジェクトを接続します。
MakeArm コマンドは、オプションで上腕と前腕に回転分割を追加することができます。 分割は、隣接するボーンとの回転の差異をボーンの長さ全体に分散させるために使用します。 エンベロープのデフォーマとして使用すると、ボーンの長さ全体に均等にツイストを分散し、より自然なスキンのデフォーメーションを実現できます。 回転分割は、MakeBicepRollおよびMakeForearmRollコマンドを使用して、別途追加することもできます。 前腕の回転を使用するときには、手のルートを引数として渡すことができるよう、MakeArm を呼び出す前に手を作成します。
必要に応じて、腕にシャドウ リグをアタッチすることができます。 シャドウ オブジェクトは腕の各チェイン エレメントに対して作成され、シャドウの腕のボーンは実際の腕のボーンにポーズで拘束されます。 シャドウ リグはリグのアニメーションをプロットする際に使用できます。
oArm = MakeArm( ArmParent, GuideObjectCollection, [Prefix], [ArmRootConstrainingObj], [NbForearmDivisions], [NbBicepDivisions], [ShadowType], [ShadowParent], [HandRoot], [NegativeScale] ); |
Arm JScript を戻します。
パラメータ | タイプ | 説明 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ArmParent | 文字列 | 新しい腕の親となるオブジェクト。 | ||||||||||||
GuideObjectCollection | 文字列 | 肩、肘、手それぞれの 3 つのガイド オブジェクトのコレクション。 | ||||||||||||
Prefix | 文字列 | 新しい腕を作成する際に、新しいオブジェクトの名前に付加するプリフィックス。 たとえば、「L」、「R」など。 | ||||||||||||
ArmRootConstrainingObj | 文字列 | 腕のルートを位置で拘束するオブジェクト。何も指定しない場合、腕のルートに拘束は適用されません。 | ||||||||||||
NbForearmDivisions | Integer |
前腕の回転分割の数(MakeForearmRollコマンドを参照)。 値がゼロの場合には、前腕に回転分割は与えられません。 デフォルト値: 0 |
||||||||||||
NbBicepDivisions | Integer |
上腕の回転分割の数(MakeBicepRollコマンドを参照)。 値がゼロの場合には、上腕に回転分割は与えられません。 デフォルト値: 0 |
||||||||||||
ShadowType | Integer |
腕にアタッチするシャドウ リグのタイプ。 シャドウ リグは、アニメーションを転送または再マップするために使用します。 デフォルト値: 0
|
||||||||||||
ShadowParent | 文字列 | シャドウ リグ階層の親。 空の場合には、シャドウ リグは作成されません。 | ||||||||||||
HandRoot | 文字列 | 前腕の回転分割に必要な、手のルートとして動作するオブジェクト。このオブジェクトはチェイン エレメント(ルート、ボーン、エフェクタ)でなくてはなりません。 空の場合には前腕の回転分割は適用されませんが、上腕の回転は適用されます。 | ||||||||||||
NegativeScale | Boolean |
チェイン上の負のスケーリング。 負のスケーリングは、左と右の腕を対称に操作する場合に便利です。 デフォルト値: False |
/* This script creates two arms, left and right Left arm also has a hand bone and roll divisions. */ var guidecoll = new ActiveXObject("XSI.Collection"); guidecoll.Add( GetPrim("Null", "ShoulderGuide") ); guidecoll.Add( GetPrim("Null", "ElbowGuide") ); guidecoll.Add( GetPrim("Null", "HandGuide") ); var lXfm = guidecoll(0).Kinematics.Global.Transform var lPos = XSIMath.CreateVector3(); /* Right Arm */ lXfm.SetTranslationFromValues(0,0,0); guidecoll(0).Kinematics.Global.Transform = lXfm; lXfm.SetTranslationFromValues(4,0,-2); guidecoll(1).Kinematics.Global.Transform = lXfm; lXfm.SetTranslationFromValues(8,0,0); guidecoll(2).Kinematics.Global.Transform = lXfm; var RArm = MakeArm(GetPrim("Null", "RArmParent"), guidecoll, "R",null, 0,0,0,null ,null, 0); Logmessage("Right RArm"); DumpArm(RArm); /* Left Arm */ lXfm.SetTranslationFromValues(0,0,0); guidecoll(0).Kinematics.Global.Transform = lXfm; lXfm.SetTranslationFromValues(-4,0,2); guidecoll(1).Kinematics.Global.Transform = lXfm; lXfm.SetTranslationFromValues(-8,0,0); guidecoll(2).Kinematics.Global.Transform = lXfm; var lPosStart = XSIMath.CreateVector3(); var lPosEnd = XSIMath.CreateVector3(); lPosStart.Set(-8,0,0); lPosEnd.Set(-9,0,0); var HandChain = ActiveSceneRoot.Add2DChain(lPosStart, lPosEnd); var LArm = MakeArm(GetPrim("Null", "LArmParent"), guidecoll, "L",null, 4,4,0,ActiveSceneRoot,HandChain, 0); Logmessage("Left Arm"); DumpArm(LArm); function DumpArm(inArm) { logmessage ("Data in the returned arm object:"); logmessage ("-------------------------------"); logmessage ("Bind Null : " + inArm.Root); logmessage ("Top Null : " + inArm.Eff); logmessage ("Base Null : " + inArm.UpVParent); logmessage ("#ForeDiv : " + inArm.ForearmDivisions); if(inArm.BicepDivisions > 0) { for(var b=0;b<inArm.ForeArmRoll.Divisions.count;b++) {logmessage (" RollDif" + b + ": " + inArm.ForeArmRoll.Divisions(b));} } logmessage ("#BicepDiv : " + inArm.BicepDivisions); if(inArm.BicepDivisions > 0) { for(var b=0;b<inArm.BicepRoll.Divisions.count;b++) {logmessage (" RollDif" + b + ": " + inArm.BicepRoll.Divisions(b));} } logmessage ("Upvector : " + inArm.UpV); logmessage ("Hidden : " + inArm.Hidden); logmessage ("Envelope : " + inArm.Envelope); logmessage ("Shadows : " + inArm.Shadows); } //results of running this script //INFO : "Right RArm" //INFO : "Data in the returned arm object:" //INFO : "-------------------------------" //INFO : "Bind Null : RRoot" //INFO : "Top Null : RArmEff" //INFO : "Base Null : undefined" //INFO : "#ForeDiv : 0" //INFO : "#BicepDiv : 0" //INFO : "Upvector : RArmUpV" //INFO : "Hidden : RRoot" //INFO : "Envelope : RBicep,RForearm" //INFO : "Shadows : undefined" //INFO : "Left Arm" //INFO : "Data in the returned arm object:" //INFO : "-------------------------------" //INFO : "Bind Null : LRoot" //INFO : "Top Null : LArmEff" //INFO : "Base Null : undefined" //INFO : "#ForeDiv : 4" //INFO : " RollDif0: LElbow" //INFO : " RollDif1: LForearmRoll" //INFO : " RollDif2: LForearmRoll1" //INFO : " RollDif3: LForearmRoll2" //INFO : "#BicepDiv : 4" //INFO : " RollDif0: LBicepRoll1" //INFO : " RollDif1: LBicepRoll2" //INFO : " RollDif2: LBicepRoll3" //INFO : " RollDif3: LBicepRoll4" //INFO : " RollDif4: LBicepRoll_5" //INFO : "Upvector : LArmUpV" //INFO : "Hidden : LRoot" //INFO : "Envelope : LBicepRoll1,LBicepRoll2,LBicepRoll3,LBicepRoll4,LBicepRoll_5,LElbow,LForearmRoll,LForearmRoll1,LForearmRoll2" //INFO : "Shadows : undefined" // |