$definebone

From Valve Developer Community
Jump to: navigation, search

Defines a bone outside of any .smd source. This is useful when building animation only mdl's that would otherwise optimize out all the bones since none of them are connected to any geometry or attachment points. You can get studiomdl to dump this out using the "-definebones" command line option.

The (fixup) fields specify how the IK solver has rotated any of the bones to match the single X axis as the long axis requirement for all bones in an IK chain. All the source animations are resolved to match this new orientation.

$definebone can also be used to change the bone order of a model (for example, bone merging purposes), by specifying it before any model references and changing around the $definebone list order.

This command is run before any $hierarchy commands.

Syntax

$definebone (name) (parent) (X) (Y) (Z) (xr) (yr) (zr) (fixup XR) (fixup YR) (fixup ZR)

How To

How to generate $definebone data from an existing model:

Note:Before you start, do not separate out the shared animations. You need to leave them all in the same .QC file before you start since studiomdl will optimize out all the bones that it doesn't think are animating.
  1. Decompile the mdl file containing bone data (not the animation mdl)
  2. Place the resultant qc file in ...\USERNAME\sourcesdk\bin\orangebox\bin\
  3. Using which ever method you prefer, run studiomdl with the following parameters -definebones mdldecompile.qc > sharedbones.qci. sharedbones.qci will be created in the same folder as studiomdl
  4. Open sharedbones.qci and remove all lines that do not begin with $definebone

GUIStudioMDL can also be used to generate the $definebone data, but placing the data into the file has to be done manually. To do this simply load the qc file and tick the "Define Bones" check box at the bottom. Warning: Errors can occur in the resulting text, but they are easily noticeable and fixed.