Rigging in XSI
Contents
Rigging a character model - the easy way
Anatomy of the Valve character rig
Characters in Half-Life 2 are enveloped (skinned) to a skeletal rig. The skeletal rig is then animated to deform the envelope. These animations are then stored in the XSI Mixer and later exported to individual SMD files.
The character used as a base in this tutorial is a Counter-Strike character included in the source SDK.
- Start XSI Mod Tool
- Select File->Open
- Select the Source SDK sample scene called urban_reference.scn
\sourcesdk_content\cstrike\modelsrc\urban\xsi\urban_reference.scn
Once loaded, the character is seen in what is called the reference pose (neutral pose). The colored spheres and boxes are animation controllers (implicit geometry). They are simple helpers attached to the underlying skeletal rig (which is currently hidden). They make it simple to animate a complex rig without seeing the entire skeleton on screen.
Next, open up the XSI Scene Explorer by either selecting it from the Application menu (Application->Views->Explorer) or hitting the 8 key.
This image shows How the Scene is setup.
The rig is located under the model called urban_mdl. This model is simply a "container" object. The actual IK rig is located under the node called Bip01. At the bottom of the model, there are three groups. Groups are also container objects that point to other objects in the scene. They can be used for grouping similar objects together.
Envelope Deformers is a group that contains the objects (bones) that actually deform the mesh. That is, each deformer influences at least 1 vertex in the mesh.
hidden_distractions is simply a group that contains all the objects that are not immediately useful to the animator and should be hidden (e.g., parent nulls, IK chain roots and effectors).
Plotted is a group that contains all bones that should be considered when creating an animation clip. More about this group is discussed below.
Understanding XSI envelopes and weights
Another part of the scene will be examined, the part that will be replaced with a custom mesh. Before replacing it, the different parts should be understood.
When the urban_mesh polygonal mesh object is expanded in the Explorer window, a property called "Polygonal Mesh" can be seen. This is where all operators that affect the mesh in any way can be found. In the accompanying image, note that this mesh has an Envelope Operator under it's animation set. A little lower in the listing, there a list of clusters containing two clusters. One cluster is the WeightMap; the other is the UV coordinates. XSI uses clusters to store per-vertex attributes. For the weight map cluster, these are the weights or ratios for each bone that are applied to the vertices that the bone deforms. The Texture_Coordinate_AUTO group contains UV coordinates for each vertex.
The cluster that is of interest for now is the WeightMap. This weightmap will be applied to the new character mesh instead of re-enveloping the character mesh manually. This automatic assignment of weights will save hours of tedious mesh weighting.
Included in the Valve Source addon for XSI is an export plugin called WeightMap Export. See below:
Export the urban mesh weight map as follows:
- Select the mesh that has the weight map to be exported. I.e., select the urban_mesh object.
- From the ValveSource menu, select WeightMap Export.
- Enter a meaningful filename for the weight map and save the map.
Importing a custom character mesh
The XSI Mod Tool comes built in with several importers available under the File->Import menu.
- dotXSI - Softimage Open File Format
- .3ds - Autodesk legacy format
- .obj - Alias Scene (non-functional at this time)
- .x - Microsoft DirectX file.
The following is the mesh that will used for the custom character in this tutorial.
Of course, a character meshed can be created from scratch directly in the Mod Tool using it's powerful modeling toolset. Here is a small list of modeling tutorials for XSI.
- http://www.xsibase.com/tutorials/modeling.php
- http://www.mindspring.com/%7Ebblakesley/Tutorial1/main.html
- http://www.chnl1.tv/tutorial_1.htm
- http://www.chnl1.tv/tutorial_2.htm
- http://www.anikoleez.com/tuto/tuto02.htm
- http://www.onionboy.co.uk/tutorials_eye.html
- http://www.joncrow.com/tutorials/xsi_tuts/rotoscope_technique/rotoscoping_technique.htm
- http://www.joncrow.com/tutorials/xsi_tuts/Symmetrical%20Shape%20Anim/sym_shape_anim_compressed.avi
- http://www.thejaco.com/tutorials/3_tire.avi
- http://www.anotherhell.com/tutorials.htm
- http://veazie.org/Tutorials/hl2%20tutorials.html
The following steps involve moving and scaling the new character mesh (and possibly moving some points as well) to match the position of the original urban model mesh as closely as possible. The new mesh does not have to fit perfectly on top on the original mesh, but the better the fit, the better will be the resulting envelope. However, it is important that the joints (like elbows, knees, ankles, etc.) be at the same position. If they aren't, the arms and legs will bend in the wrong position.
Once the new character mesh has been placed on top of the urban model mesh, the urban model mesh can be deleted as it is used only to provide a guide for positioning. Delete the urban model mesh by branch-selecting
the urban_mesh object and hitting the delete key. Branch-selection
selects the mesh and everything under it as well. An object can be branch-selected
by middle-clicking on the object's name in the Explorer window, or by left-clicking the object's name and using the Select->Branch from the Select menu.
Next, the saved weight map will be imported to apply the weights to our new mesh.
- Select the mesh to which the weights are to be applied, i.e., the new character mesh.
- Use the ValveSource->WeightMap Import menu.
- Select the weightmap file saved earlier and click OK.
The WeightMap Import plugin will transfer the weightmap by averaging the weights according to vertex positions. The results are not perfect, but again, it will save hours of envelope tweaking. The following image shows the results after the weights have been imported.
The weightmap can be tested by moving the rig around. As seen in the image below, some weights might need some tweaking.
Rigging a character model - from scratch
The biped guide
The first part of this tutorial demonstrated how to automatically envelope a custom character mesh using the weightmap of an existing character. While this method saves time, it might not be suitable for every character in the game. If a new character has very different topology (e.g., a child character or an adult male), the previously-described method is less than ideal.
The solution is use the Valve Biped Guide.
First import the character mesh to be rigged and weight-mapped. The Ninja mesh used above will also be used for this portion of the tutorial. However, for this demonstration, his arms are not in the neutral pose commonly used in the SDK examples. In this example, the arms are closer to the "Da Vinci pose". This would have been difficult to envelope using the method described above.
After the new mesh has been imported, get a Biped Guide Rig from the Valve Source Menu.
The Biped Guide is a dummy rig that is used to guide the creation of a functional rig. The Biped guide is used by positioning the cubes at the end of each chain are positioned to match the new character mesh position.
This is what the scene looks like before the guide is positioned in the mesh.
Use the guide to position the bones in the mesh. Here is the result.
{{note|Before the cubes are positioned inside the mesh, turn off the "selectability" property of the Ninja mesh. This will prevent the Ninja mesh from being accidentally selected when Guide cubes are being selected. This is done by un-checking the "Selectability" property under the mesh's Visibility Property Page.
Creating the rig from the guide
Once the guide has been positioned in the proper place, a fully functional Valve Biped rig can be created from it.
Select the menu Create Rig From Guide from the ValveSource menu to start the process.
During the creation of the rig, there may be multiple warning messages stating that a cycle has been created. Click OK and ignore these warnings.
Following the creation of the rig, multiple property and expression editor windows may appear. They may be safely closed.
Enveloping
Now that the rig has been created, the Biped Guide can be safely deleted by branch-selecting it in the Explorer window and hitting 'delete.' This will also un-clutter the scene a bit.
Next, the mesh will be enveloped to the rig. As described earlier in this tutorial, the ValveBiped object contains a group called Envelope_Deformers. These are all the objects that deform the mesh and are used to create the envelope.
To create an envelope in XSI:
- Select the mesh for which the envelope is to be set.
- Press '2' to switch to the Animate Toolbar.
- In the Context menu (normally in the lower left-hand corner of the XSI window), select Animation from the Construction Mode dropdown list.
- In the Animation toolbar, select Deform->Envelope->Set Envelope.
- Hit '8' to open up an explorer or, in the Applications menu, select Views->XSI Explorer.
- Expand the ValveBiped object in the Explorer window and select the Envelope_Deformer group.
- Right-click anywhere to end the pick-session.
The mesh is now enveloped to the rig. If the mesh does not appear to be weight-mapped:
- Ensure the mesh is selected.
- Click on the "eye" icon dropdown menu at the top of the XSI view and ensure Weight Maps is selected.
- Click on the Display Mode dropdown at the top right of the XSI view and select Constant.
The assignment of weights using this technique in XSI is not perfect. It does a pretty good job, but clean-up of certain areas of the weightmap may still be necessary, such as under the arms and legs. The weightmap tools (like smoothing, etc.) can be used to properly weight the mesh to the bones.
For editing the weight map, see Weight Map Editing.