PeelSolve: Solving

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:

IterationsThe 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 ModeSpecify a time range to solve or use the time slider when solving a range
ReverseSolve 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 KeysRemove keys prior to solving; none, all keys or the keys in the solve frame range
MethodChoose 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 SamplesThe 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.
DebugOutput debug data to console.
StatisticsShow solver statistics after every frame, and create animation curves with statistical data.
Read DirectRead 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 TypeChanges the method of calibrating a joint center while doing a calibration solve.  This parameter will not affect regular solves.
ScaleScale the translations during the solve
BothwaysSolve Forwards, then backwards
RefineOnce 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.
RootfirstThis feature is currently disabled
Root NodesSpecifies the root nodes to solve
QuaternionsThis 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.