Static Training Process

ZCPʙᴇᴛᴀ docs | 

Real-Time Plugin

Inputs: Character bakes, joint hierarchy with the same animation used to generate the character bakes, character mesh with skinning weights, neutral character mesh

(n.b. All character representations must share the same topology. Character bakes are ideally quasi-static or if dynamic, should be solved at 3 fps or less or remove most of the dynamics)

Output: Interactive character that closely resembles the bake, and can be articulated with the skeleton.

Step 1: Import your Range of Motion character bake, your skinned character with animation applied to the skeleton and the neutral character model.  All meshes should all share the same start pose.

Step 2: Set your timeline to match the length of the bake and animation.

Step 3: Execute the following MEL:

fz -m 128 -t -w <skinClustered mesh> <character bake> <root joint>;

Here are the meanings of the arguments:

-m = maximum number of training poses - for clarity, these are not literal poses as they appear in the training bake, but instead represent a best fit from a statistical standpoint (this can be conceptualized as something akin to spherical harmonics applied to shape reproduction)  - in practise, you can likely reduce this to a much smaller number. We typically use 16, 32 or 64. The higher this number, the better the shape reproduction, but the slower the performance.

-w = specifies the mesh that holds the skinCluster whose weights you would like to copy.

If this flag is not specified, the weights will be automatically computed based on the correlation of skeletal poses to bakes. In practice, better results are currently produced with a nicely painted skinCluster.

After executing the training process, a zFastSolverFactory node will be generated. You will need to toggle off Outliner->Display->DAG objects only to see this node in your outliner. If the training process has only been executed once, the node will be named: zFastSolverFactory1

Step 4: After the training has finished, execute the following MEL:

fz -d <zFastSolverFactory node> <the target mesh to deform> <root joint>;

Here are the meanings of arguments:

-d = the flag used to apply the training to a specified target mesh using a combination of the specified zFastSolverFactory node and joint hierarchy.

Step 5: Delete the zFastSolverFactory node