MakeForearmRoll

導入

v4.0

詳細

ボーンの長さ全体にわたって回転のヌルを作成します。エンベロープのデフォーマとして使用すると、ボーンの長さ全体に均等にツイストを分散し、より自然なスキンのデフォーメーションを実現できます。

上腕の回転と前腕の回転では、開始と終端の回転は別々の方法で決定されます(MakeBicepRollを参照)。 前腕の回転では、開始の回転は前腕の回転からスピンを除いたもので、上腕の回転から計算されます。 終端の回転は、次のボーン(手首)の回転でスピンが加えられています。 回転分割の回転は、開始と終端の間で補間されます。 上腕の回転の場合には、上腕のボーンが開始の回転および終端の回転の両方に使用されます。 開始の回転はボーンの回転からスピンを除いたもので、終端の回転はスピンありの回転です。

スクリプト構文

oForeArmRoll = MakeForearmRoll( Bicep, Forearm, ArmEff, HandEff, HandBone, [Prefix], [NbDivisions], [RollOffset] );

戻り値

ForeArmRoll JScript オブジェクトを戻します。

パラメータ

パラメータ タイプ 説明
Bicep 文字列 スピンなしの前腕の回転を計算するために使用する、前腕の前のチェイン エレメント。
Forearm 文字列 回転のヌルの親となるオブジェクト。
ArmEff 文字列 上腕と前腕を含むチェインのエフェクタ。
HandEff 文字列 手首のチェインのエフェクタ。
HandBone 文字列 終端の回転を計算するために使用する、手首または手のボーン。
Prefix 文字列 新しい分割の名前に付加されるプリフィックス。
NbDivisions Integer 回転分割の数。 値がゼロの場合には、回転は作成されません。

デフォルト値: 3

RollOffset Double 前腕の回転のオフセットを度数で指定します。 回転は -180 ~ 180 度の範囲で、オフセットによって回転に継ぎ目を配置することができます。 この値は Hand Bone の下に配置されるカスタム パラメータを制御し、インタラクティブに変更することができます。

デフォルト値: 0

JScript の例

/*

	This script creates an arm, then puts roll division

	on the forearm.

*/

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(ActiveSceneRoot, guidecoll, "R",null, 0,0,0,null ,null, 0);

/*

	Add a Hand

*/

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 ForeArmRoll = MakeForearmRoll(	RArm.Root.Bones(0),	//bicep

					RArm.Root.Bones(1), 	//forearm

					RArm.Eff,		//arm effector

					HandChain.Effector,	//hand effector

					HandChain.Bones(0),	//hand

					"R");			//new object name prefix

DumpForearmRoll(ForeArmRoll );

function DumpForearmRoll(inForeArmRoll )

{

	logmessage ("Data in the returned arm object:");

	logmessage ("-------------------------------");

	logmessage ("Sliders   : " + inForeArmRoll.Sliders);

	logmessage ("RollOffset: " + inForeArmRoll.RollOffset.value);

	logmessage ("#Divisions: " + inForeArmRoll.Nb);

	for(var b=0;b<ForeArmRoll.Divisions.count;b++)

		{logmessage ("  RollDif" + b + ": " + inForeArmRoll.Divisions(b));}

}

//results of running this script:

//INFO : "Data in the returned arm object:"

//INFO : "-------------------------------"

//INFO : "Sliders   : bone.Roll_Compensation"

//INFO : "RollOffset: 0"

//INFO : "#Divisions: 3"

//INFO : "  RollDif0: RElbow"

//INFO : "  RollDif1: RForearmRoll"

//INFO : "  RollDif2: RForearmRoll1"

//

関連項目

MakeBicepRoll MakeArm