MakeArm

導入

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

指定可能な値:

説明:

0 影無し
1 SI|3Dスケルトンのシャドウリグ
2 XSIスケルトンのシャドウリグ
3 ヌルのシャドウリグ
4 ボックスのシャドウリグ
ShadowParent 文字列 シャドウ リグ階層の親。 空の場合には、シャドウ リグは作成されません。
HandRoot 文字列 前腕の回転分割に必要な、手のルートとして動作するオブジェクト。このオブジェクトはチェイン エレメント(ルート、ボーン、エフェクタ)でなくてはなりません。 空の場合には前腕の回転分割は適用されませんが、上腕の回転は適用されます。
NegativeScale Boolean チェイン上の負のスケーリング。 負のスケーリングは、左と右の腕を対称に操作する場合に便利です。

デフォルト値: False

JScript の例

/*

	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"

//

関連項目

MakeForearmRoll MakeBicepRoll MakeHand MakeJointCompression