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