v4.0
character rigging
Creates a quaternion or skeleton spine given four objects: chest
control, hip control, chest depth, hip depth. These four objects
define 4 point bezier curve along which the vertebrae are traced.
On a skeleton spine the vertebrae are bones, on a quaterion spine
the vertebrae can be implicit or polygon cubes. On a quaternion
spine these four objects also control the spine's curve (each
object controls one of the curve's control points).
Optionally a shadow rig can be attached to the arm. Shadow objects
are created for each chain element in the arm, and shadow arm bones
are pose-constrained to the acutal arm bones. Shadow rigs can be
used to plot animation off of a rig.
oSpine = MakeSpine( Model, Parent, [NbVertebrae], [SpineType], [Stretchy], SpineBaseObject, SpineTopObject, [BottomDepthObject], [TopDepthObject], [ChestTop], Sliders, [ShadowType], [ShadowParent], [VertebraeName], [CharacterSetName], [ShadowCharacterSetName] ); |
Returns a Spine JScript object.
Parameter | Type | Description | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Model | String | The model the spine will belong to. | ||||||||||||
Parent | String | The object to which the spine will be parented. | ||||||||||||
NbVertebrae | Integer | The number of Vertebra on the spine.
Default Value: 3 |
||||||||||||
SpineType | Integer | The type of Spine and controls objects used.
Default Value: 0
|
||||||||||||
Stretchy | Boolean | Make a stretchy spine that doesn't clip length.
Default Value: True |
||||||||||||
SpineBaseObject | String | Bottom of the spine, should be pointing y+ along the path of the spine. | ||||||||||||
SpineTopObject | String | Top of the spine, should be pointing y+ out from the Curve. | ||||||||||||
BottomDepthObject | String | Goal for a 4 point bezier going through the spine. If empty will be computed automatically. | ||||||||||||
TopDepthObject | String | Goal for a 4 point bezier going through the spine. If empty will be computed automatically. | ||||||||||||
ChestTop | String | (optional) Top of chest goal. If filled, this command uses the spine top as a position reference only and builds an icon from spineTop to chestTop. If empty there is no extra icon on top of the spine, only an implicit cube is used. | ||||||||||||
Sliders | String | A slider PPG to put the spine parameters on. If none is supplied a slider page is added on the spine Curve. | ||||||||||||
ShadowType | Integer | The type of shadow rig to attach to the spine. Shadow rigs can
be used to transfer or remap animation.
Default Value: 0
|
||||||||||||
ShadowParent | String | Parent of the shadow rig hiearchy. If empty, no shadow rig is generated. | ||||||||||||
VertebraeName | String | The name that should be used for the vertebrae.
Default Value: "" |
||||||||||||
CharacterSetName | String | The name of the character set that should be used for this
chain; it gets stored in a Custom PSet for use.
Default Value: "" |
||||||||||||
ShadowCharacterSetName | String | The name of the shadow character set that should be used for
this chain; it gets stored in a Custom PSet for use.
Default Value: "" |
/* Makes a spine with 3 vertebrae */ var Base = GetPrim("Null", "Base"); var Top = GetPrim("Null", "Top"); var Depth = GetPrim("Null", "Depth"); var TopDepth= GetPrim("Null", "TopDepth"); var lXfm = XSIMath.CreateTransform(); lXfm.SetTranslationFromValues(0,0,0); Base.Kinematics.Global.Transform = lXfm; lXfm.SetTranslationFromValues(0,8,0); Top.Kinematics.Global.Transform = lXfm; lXfm.SetTranslationFromValues(0,2,0); Depth.Kinematics.Global.Transform = lXfm; lXfm.SetTranslationFromValues(0,6,0); TopDepth.Kinematics.Global.Transform = lXfm; var Spine = MakeSpine( ActiveSceneRoot, //model ActiveSceneRoot, //parent 3, //number of vertebrae 0, //quat spine with polygon vertebrae false, //non-stretchy Base, Top, Depth,TopDepth); DumpSpine(Spine); function DumpSpine(inSpine) { logmessage ("Data in the returned spine object:"); logmessage ("----------------------------------"); logmessage ("Curve : " + inSpine.Curve); logmessage ("TopVertebra : " + inSpine.TopVertebra); if(inSpine.Shadows) { logmessage ("#ShadowObj : " + inSpine.Shadows.count); for(var b=0; inSpine.Shadows && b<inSpine.Shadows.count;b++) {logmessage (" Shadow" + b + ": " + inSpine.Shadows(b));} } logmessage ("#ShadowObj : " + 0); logmessage ("#EnvelopeObj: " + inSpine.Envelope.count); for(var b=0;b<inSpine.Envelope.count;b++) {logmessage (" EnvelopeObj" + b + ": " + inSpine.Envelope(b));} logmessage ("#Vertebrae : " + inSpine.Vertebra.count); for(var b=0;b<inSpine.Vertebra.count;b++) {logmessage (" Vertebra" + b + ": " + inSpine.Vertebra(b));} } //result of running this script //INFO : "Data in the returned spine object:" //INFO : "----------------------------------" //INFO : "Curve : crvlist2" //INFO : "TopVertebra : TopVertebra2" //INFO : "#ShadowObj : 0" //INFO : "#EnvelopeObj: 4" //INFO : " EnvelopeObj0: TopVertebra2" //INFO : " EnvelopeObj1: Vertebra6" //INFO : " EnvelopeObj2: Vertebra7" //INFO : " EnvelopeObj3: Vertebra8" //INFO : "#Vertebrae : 3" //INFO : " Vertebra0: Vertebra6" //INFO : " Vertebra1: Vertebra7" //INFO : " Vertebra2: Vertebra8" |