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 | ダブル | 前腕の回転のオフセットを度数で指定します。 回転は -180 ~ 180
度の範囲で、オフセットによって回転に継ぎ目を配置することができます。 この値は Hand Bone の下に配置されるカスタム
パラメータを制御し、インタラクティブに変更することができます。
デフォルト値: 0 |
/* 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" // |