Help with Maya VstUtils

Hi, I am rigging a model in Maya for SFM and I am having trouble setting up VstAim constraints, they look and act fine in Maya but when I compile the model they don’t work. Do I need to add anything special to the qc? Did I skip a step?

This is what I put in MEL console:



vstAim -c -n vstAttach_BL_PistonTop -u 1 0 0 BL_Foot BL_PistonTop;
vstAim -c -n vstAttach_BR_PistonTop -u 1 0 0 BR_Foot BR_PistonTop;
vstAim -c -n vstAttach_FL_PistonTop -u 1 0 0 FL_Foot FL_PistonTop;
vstAim -c -n vstAttach_FR_PistonTop -u 1 0 0 FR_Foot FR_PistonTop;
vstAim -c -n vstAttach_BL_PistonEnd -u 1 0 0 BL_Thigh BL_PistonEnd;
vstAim -c -n vstAttach_BR_PistonEnd -u 1 0 0 BR_Thigh BR_PistonEnd;
vstAim -c -n vstAttach_FL_PistonEnd -u 1 0 0 FL_Thigh FL_PistonEnd;
vstAim -c -n vstAttach_FR_PistonEnd -u 1 0 0 FR_Thigh FR_PistonEnd;

The model has pistons on it and I want the pistons to move in and out while still being oriented properly on a joint. I know its possible to hard code these into the model dmxs themselves when compiling a model, the Portal 2 Coop bots use this same system.

Here’s what I am trying to get:

this one was animated with a 3ds max IK rig with LookAt constraints but my friend wants something that can be animated straight from SFM.

All of the documentation I can find on VstUtils usage is from the vstutils help command:



vstutils -h;
//  // 
// Maya Plugin vstUtils Contains The Following: // 
//  // 
// Commands: // 
//  // 
//  * vstAim: Creates and manipulates vstAim nodes // 
//  * vstAttachment: Creates vstAttachment nodes which are nodes that act as attachments in the game // 
//  * vstChecker: Checks Maya scenes for potential problems when converting those scenes to smd or dmx // 
//  * vstConstraint: Creates and manipulates vst<TYPE>Constraint nodes // 
//  * vstEyeball: Creates and manipulates vstEyeball nodes. // 
//  * vstHelperBone: Creates and manipulates vstHelperBone nodes. // 
//  * vstInfo: Creates and manipulates vstInfo nodes // 
//  * vstRebuildBlendShape:  // 
//  SYNOPSIS: vstRebuildBlendShape < mesh > // 
//  // 
//  HELP: // 
//  // 
// Takes an existing mesh with one or more blendShapes in the history and collapses it into a single mesh with one blendShape node.Simply select or specify the mesh to be rebuilt // 
//  // 
//  * vstSelectCoincidentFaces: Selects all coincident faces in the specified meshes. // 
// Simply select the meshes or mesh faces you want to check for coincidence and run the command. // 
// Select as many as required on as many different meshes as required and run the command. // 
// Note that only faces on the same meshes are checked against each other for coincidence. // 
//  // 
//  * vstSendmail: Send an email message from mel // 
//  * vstSetEdgeHardness: Sets the edge hardness & softness of the specified mesh based on the existing normals. // 
// NOTE: This command can be quite slow (30 secs is not unusual) // 
// NOTE: THIS COMMAND IS NOT UNDOABLE! // 
//  // 
//  * vstSplitMorph: Splits the specified blendShape target into <target>_left & <target>_right based on the specified vertex map name or plane // 
//  * vstTwist: Creates and manipulates vstTwist nodes // 
//  * vstUVMesh: Creates and manipulates vstUVMesh nodes.  vstUVMesh nodes are nodes which takes the UV set from a specified mesh and creates a new mesh which is a representation of the texture coordinates of the specified mesh.  The mesh can be manipulated and edits are applied to the texture coordinates of the originally specified mesh. // 
//  * vstUtils: Displays information about and what's inside of the vstUtils plugin. // 
//  * vstWeld: Creates and manipulates vstWeld nodes // 
//  * zprint: Export the specified geometry to a file suitable for printing with ZPrint // 
//  // 
// Dependency Nodes: // 
//  // 
//  * vstAim: An aim constraint node which orients up based on what the user specified up vector is doing in the parent of the node being aimed.  This node is implemented in the Source engine as an <aimconstraint> helper bone. // 
//  * vstAimConstraint: Aim constraint, slave orientation is adjusted to look point toward target position // 
//  * vstEulerFix: Tries to fix Euler flips through various means. // 
//  // 
//  * vstIkConstraint: Inverse kinematics constraint, position and orientation are adjusted to reach a target // 
//  * vstOrientConstraint: Orient constraint, slave orientation matches target orientation // 
//  * vstParentConstraint: Parent constraint, slave position and orientation are updated to behave as children of the target // 
//  * vstPointConstraint: Point constraint, slave position matches target position // 
//  * vstRotateOrder: Changes rotation order // 
//  * vstRotationConstraint: Rotation constraint, slave orientation is set to the orientation generated from a set of rotations // 
//  * vstTwist: TODO: Write some docs for vstTwistNode // 
//  * vstTwistConstraint: Twist constraint, takes a percentage of the rotation around the axis between a child & parent bone // 
//  * vstUVMesh: Converts a UV set on the specified input mesh to geometry // 
//  // 
//  * vstWeld: Constrains a transform to the world space of specific face of a mesh. // 
// Simply select any number of transforms to weld and then select the mesh // 
// as the last thing selected or specified and then run the command // 
//  // 
//  // 
// File Translators: // 
//  // 
//  * vstZPrintIO: Exports data from maay that can be printed with the zprint printer // 
//  // 
// Locator Nodes: // 
//  // 
//  * vstAttachment: Animatable Valve Attachments // 
//  * vstEyeball: Valve Model Eyeball Node // 
//  * vstHelperBone: Valve helper bones // 
//  // 
// Transform Nodes: // 
//  // 
//  * vstInfo: A transform node which is easily identifiable in a Maya scene.  Valve models need this as their root node. // 
//  // 


I feel like this is only part of how to use these dmx features, I think something needs to be in the qc for it to work.

Solved via python and DMEAimConstraints.