There are a number of ways to invoke the solver, and a number of parameters that will affect how the solving is done.
Solve current frame. This will read current values, and set translations and rotations without saving any keys. | |
Solves a frame range with the following solver options overridden: Method: Matrix/Quick, Iterations: 50. This will solve quickly but may not give an optimal result. | |
Run a full solve for the frame range using the current solve parameters. | |
Solves a frame range using the “Descent/Slow” solver and “Refine” turned on. All other solve options are retained. This should be used to re-solve a completed solution and will try to improve the result. This may be slow, but should improve the result. | |
Turn on a script job. This will run the “solve current frame” any time a transform or marker weighting is changed. | |
Turn off the script job. |
The “Test” solve can be used prior to solving a full frame range. Scrub to a key pose in the performance and hit the “test” button to see how well the skeleton fits in to that pose.
It is a good idea to do a “Test” solve before solving a frame range, as this will ensure that the solve starts off with a good initial pose to work from. If the skeleton is far away from the marker data, the solver may have trouble finding the initial pose, particularly if the number of iterations is set to a low value.
Only turn on the script job when tuning or testing a solve on a given frame. It is mostly provided to avoid continual clicking on the “Test” button when tweaking marker positions or weighting. Always turn it off when finished, and avoid scrubbing the time when it is on.
Solving Parameters
There are a number of global parameters that affect how the solve is run. These parameters are stored in a node that is saved with the scene.
To modify the parameters, click this icon:
This will bring up the attribute editor with the solver options node selected.
The following solver parameters can be set:
Iterations | The maximum number of steps the solver should take when working on a solve. Using a smaller value for this will make the process faster, at the cost of some quality. (see note below) |
Time Mode | Specify a time range to solve or use the time slider when solving a range |
Reverse | Solve backwards, useful when the data at the start of a take is messy, for instance if the capture subject enters the volume at the start of the move |
Delete Keys | Remove keys prior to solving; none, all keys or the keys in the solve frame range |
Method | Choose a the mathematical method of finding the result; Matrix(Quick) – fastest method but least stable, Secant (Faster) – A good general purpose method, Descent (Slow/Accurate) – The slowest but most stable result. |
Gradient Samples | The number of samples to use for gradient estimation. Increasing this value will increase the accuracy of the search method, but will slow down the amount of time for each iteration. |
Debug | Output debug data to console. |
Statistics | Show solver statistics after every frame, and create animation curves with statistical data. |
Read Direct | Read fcurve data directly rather than evaluating the scene graph. This will speed up the solver, but will not work if you are using constraints or other connections. |
Calibration Type | Changes the method of calibrating a joint center while doing a calibration solve. This parameter will not affect regular solves. |
Scale | Scale the translations during the solve |
Bothways | Solve Forwards, then backwards |
Refine | Once a solve has completed and there are keys on the target skeleton, use “Refine” to attempt to resolve and improve the solution. The starting point for each frame is taken from the skeleton, rather than the previous result. |
Rootfirst | This feature is currently disabled |
Root Nodes | Specifies the root nodes to solve |
Quaternions | This attribute is listed in the options under “Extra Attributes”. It will cause the solver to use quaternions for joints that have three degrees of freedom for rotations. |
The solver will stop solving when it thinks it has found a solution (either by minimum variation in the error or by reaching the maximum number of iterations). By turning down the iterations it will set a limit for the number of calculations. To get an idea of how many iterations are used for a solve, turn “statistics” on and solve a frame. The “number of steps” reported in the statistics is the number of iterations used to obtain the result.