This example builds a simple biped using the Character Development Kit's rigging kit commands. You'll notice that the commands have the same options you have in the interface—for example, you can choose a quaternion spine for the torso, define forearm and bicep divisions, control the location of the leg's up vector, etc.
Each command reads from an array of positioned "guide" nulls (see the end of the script). You can either set up your own guide objects, or use the guides available in the Softimage's default guides (see Identifying Guide Objects in the Default Guides).
Each command also returns a list of objects created, which helps you determine the name of object the rig component should be parented to. In this script, however, the script writer knew the names of the objects each command creates (this is easy to figure out by consulting the CDK Object Reference or the Commands and Scripting Reference). You can also use return values to add components to envelopes or hidden groups, etc. For more information about using return values, refer to Working with Return Values.
// build list of guide object positions and names BuildGuideArrays(); var Biped = new Object(); // make the model and the globalSRT icon Biped.Model = ActiveSceneRoot.AddModel(); Biped.GlobalSRT = makeRigIcon(Biped.Model, 4, 0,0,0, //position 1,1,1, //icon length,width,height 893, //color "GlobalSRT" //name ); // make the torso guidecoll = CreateGuideColl(guidepos, guidename, Array(0,1,2,3,4,5,6,7,8,9)); Biped.Torso = makeTorso(Biped.GlobalSRT , //parent object 4, //nb of torso divisions false, //use fixed length spine guidecoll, //torso guides: 0, //use square icons for torso controls 1, //spine head and neck null, //spine parameter sliders 0, //no shadow null, //no shadow parent 0); //don't use negative scaling DeleteObj( guidecoll ); // make the arms. first the left arm, then the right arm // left arm guidecoll = CreateGuideColl(guidepos, guidename, Array(6,10,11)); Biped.LArm = MakeArm(Biped.Torso.LEff, //parent object guidecoll, //guide objects "L", //arm object prefix Biped.Torso.LEff, //object to pos. constrain arm root to 0, //#forearm divs 0, //#bicep divs 0, //no shadow null, //no shadow parent null, //hand root 0); //don't use negative scale DeleteObj( guidecoll ); // right arm guidecoll = CreateGuideColl(guidepos, guidename, Array(9,12,13)); Biped.LArm = MakeArm(Biped.Torso.REff, //parent object guidecoll, //guide objects "R", //arm object prefix Biped.Torso.REff, //object to pos. constrain arm root to 0, //#forearm divs 0, //#bicep divs 0, //no shadow null, //no shadow parent null, //hand root 0); //don't use negative scale DeleteObj( guidecoll ); // make the head guidecoll = CreateGuideColl(guidepos, guidename, Array(14,15,16)); Biped.Head = MakeHead( Biped.Torso.Spine.TopVertebra, guidecoll, "", 1, //use spine-type head and neck 0, //box shadow head type 2, //number of neck spine divisions 1, //neck stretches to meet head controller null, //neck sliders null, //no ears (guide collection for ears) 0, //no shadow null); //no shadow parent DeleteObj( guidecoll ); // make the legs, first the left then the right //left leg guidecoll = CreateGuideColl(guidepos, guidename, Array(4,17,18)); Biped.LeftLeg = MakeLeg( Biped.Model, //rig model Biped.Torso.HipBone,//leg parent "L", //object name prefix guidecoll, //1)top of leg, 2)knee, 3)ankle 1, //place leg upvector behind leg 0, //#thigh divisions 0, //no shadow null); //no shadow parent DeleteObj( guidecoll ); //right leg guidecoll = CreateGuideColl(guidepos, guidename, Array(7,19,20)); Biped.RightLeg = MakeLeg( Biped.Model, //rig model Biped.Torso.HipBone,//leg parent "R", //object name prefix guidecoll, //1)top of leg, 2)knee, 3)ankle 1, //place leg upvector behind leg 0, //#thigh divisions 0, //no shadow null); //no shadow parent DeleteObj( guidecoll ); // make the feet, first the left, then the right //left foot guidecoll = CreateGuideColl(guidepos, guidename, Array(21,22,23,18,24,25,26)); Biped.LeftFoot = MakeFoot( Biped.Model, //rig model Biped.GlobalSRT, //parent of foot controls "L", //short object name prefix "Left", //long object name prefix guidecoll, //foot guide objects null, //foot sliders 0, //create extenstion icon (used for dog leg) 0, //no shadow null); //no shadow parent //attach the leg to the foot Biped.LeftLeg.Eff.AddChild(Biped.LeftFoot.Root); Biped.LeftLeg.Eff.Kinematics.AddConstraint("Position", Biped.LeftFoot.BaseGuide , false); DeleteObj( guidecoll ); //right foot guidecoll = CreateGuideColl(guidepos, guidename, Array(27,28,29,20,30,31,32)); Biped.RightFoot = MakeFoot( Biped.Model, //rig model Biped.GlobalSRT, //parent of foot controls "R", //short object name prefix "Right", //long object name prefix guidecoll, //foot guide objects null, //foot sliders 0, //create extenstion icon (used for dog leg) 0, //no shadow null); //no shadow parent //attach the leg to the foot Biped.RightLeg.Eff.AddChild(Biped.RightFoot.Root); Biped.RightLeg.Eff.Kinematics.AddConstraint("Position", Biped.RightFoot.BaseGuide , false); DeleteObj( guidecoll ); //---------------------------------------------- // Builds an array of guide positions and names //---------------------------------------------- function BuildGuideArrays() { guidepos = new Array(); guidename = new Array(); for (i=0;i<33;i++) { guidepos[i] = XSIMath.CreateVector3(); } i=0; //0 to 3 guidepos[i].Set(0,18,-0.5); guidename[i++] = "SpineBase"; guidepos[i].Set(0,20,-0.5); guidename[i++] = "SpineBaseDepth"; guidepos[i].Set(0,22,-0.5); guidename[i++] = "SpineEndDepth"; guidepos[i].Set(0,24,-0.5); guidename[i++] = "SpineEnd"; //4 to 6 guidepos[i].Set(1.75,16,0); guidename[i++] = "LeftLegStart"; guidepos[i].Set(2,24,0); guidename[i++] = "LeftShoulderStart"; guidepos[i].Set(4,24,0); guidename[i++] = "LeftShoulderEnd"; //7 to 9 guidepos[i].Set(-1.75,16,0); guidename[i++] = "RightLegStart"; guidepos[i].Set(-2,24,0); guidename[i++] = "RightShoulderStart"; guidepos[i].Set(-4,24,0); guidename[i++] = "RightShoulderEnd"; //10 to 11 guidepos[i].Set(8,24,-1); guidename[i++] = "LeftElbow"; guidepos[i].Set(12,24,0); guidename[i++] = "LeftHand"; //12 to 13 guidepos[i].Set(-8,24,1); guidename[i++] = "RightElbow"; guidepos[i].Set(-12,24,0); guidename[i++] = "RightHand"; //14 to 16 guidepos[i].Set(0,24,-0.5); guidename[i++] = "NeckBase"; guidepos[i].Set(0,25,-0.5); guidename[i++] = "Neck"; guidepos[i].Set(0,26,-0.5); guidename[i++] = "Head"; //17 to 18 guidepos[i].Set(1.75,9,0.5); guidename[i++] = "LeftKnee"; guidepos[i].Set(1.75,2,0); guidename[i++] = "LeftAnkle"; //19 to 20 guidepos[i].Set(-1.75,9,0.5); guidename[i++] = "RightKnee"; guidepos[i].Set(-1.75,2,0); guidename[i++] = "RightAnkle"; //21 to 26 guidepos[i].Set(1.75,0,0); guidename[i++] = "LMiddlePivot"; guidepos[i].Set(1.65,0,0); guidename[i++] = "LRightPivot"; guidepos[i].Set(1.85,0,0); guidename[i++] = "LLeftPivot"; guidepos[i].Set(1.75,1,1); guidename[i++] = "LLeftFoot"; guidepos[i].Set(1.75,0.5,2); guidename[i++] = "LLeftToe"; guidepos[i].Set(1.75,0.5,3); guidename[i++] = "LLeftToe2"; //27 to 32 guidepos[i].Set(-1.75,0,0); guidename[i++] = "RMiddlePivot"; guidepos[i].Set(-1.85,0,0); guidename[i++] = "RRightPivot"; guidepos[i].Set(-1.65,0,0); guidename[i++] = "RLeftPivot"; guidepos[i].Set(-1.75,1,1); guidename[i++] = "RLeftFoot"; guidepos[i].Set(-1.75,0.5,2); guidename[i++] = "RLeftToe"; guidepos[i].Set(-1.75,0.5,3); guidename[i++] = "RLeftToe2"; } //------------------------------------------------------- // From array of positions and names created in BuildGuideArrays(), // create a collection of guide nulls //------------------------------------------------------- function CreateGuideColl( in_aGuidePositions, in_aGuideNames, in_Indices) { var lXfm = XSIMath.CreateTransform(); var guidecoll = new ActiveXObject("XSI.Collection"); var idx; for(idx=0; idx<in_Indices.length; idx++) { // logmessage(in_Indices[idx] + " " + in_aGuideNames[in_Indices[idx]]); guidecoll.Add( GetPrim("Null", in_aGuideNames[in_Indices[idx]]) ); lXfm.SetTranslation(in_aGuidePositions[in_Indices[idx]]); guidecoll(idx).Kinematics.Global.Transform = lXfm; } return guidecoll; }
Except where otherwise noted, this work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License