This topic provides a detailed explanation of certain Custom Evaluator settings in the
Evaluation Toolkit. For an in-depth technical look at Parallel Evaluation and background on custom evaluators, see
Using Parallel Maya.
Deformer evaluator
The
deformer evaluator implements the
GPU Override option.
The
deformer evaluator replaces CPU evaluation of deformer nodes chains with GPU evaluation to improve scene performance. Use the deformerEvaluator command to retrieve information about chains of deformer nodes supported in a scene, or to discover why specifics node are not supported. Use the Evaluation
Heads Up Display (HUD) Options to see how many vertices are supported by
GPU Override.
Limitations
- Each deformation chain must end with a mesh node that has no output connections. This means, to be supported, the mesh cannot have pointOnPoly constrains, follicles, or any other output connection.
- Only blendShape, skinCluster, cluster, softMod and tweak nodes are supported and only certain features.
Dynamics Evaluator
The
dynamics evaluator handles the proper evaluation of dynamics-related nodes, which often have complex evaluation requirements. Although it supports a few configuration options, you generally won't interact with it, as the default behavior is normally acceptable.
The dynamics evaluator has three main responsibilities:
- Group together dynamics-related nodes in clusters to be evaluated by the dynamics evaluator.
- Manage the evaluation of such clusters so they respect intricate evaluation rules required by dynamics-related nodes.
- Disable Parallel Evaluation when unsupported setups are detected
Limitations
- Dynamics simulation that uses the Evaluation Manager (and therefore the dynamics evaluator,) sometimes has different results than with DG-based evaluation. However, these results are consistent regardless of whether it occurs in Maya viewport or in Maya Batch.
- Legacy dynamics (legacy particles and fluids, for instance,) are not supported by the dynamics evaluator. If animated unsupported nodes are found in the scene, parallel evaluation is disabled.
For more detail on dynamics evaluation and unsupported features, see
Using Parallel Maya.
Frozen evaluator
The
frozen evaluator lets you exclude subsections of the evaluation graph from evaluation. It works with the
frozen attribute to propagate the frozen state to related nodes using rules set by the evaluator configuration. Use the frozen evaluator only if you comfortable with the concepts of connection and propagation in the DAG and Evaluation Graph. If you are not, use the simpler
invisibility evaluator.
The Evaluation Manager does not evaluate any node that has its
frozen attribute set to True. When the frozen evaluator is enabled, it prevents related nodes from evaluating according to the rules corresponding to the enabled options.
The
frozen evaluator operates in three phases:
- Collects nodes flagged by the
invisible and
displayLayers options marked for freezing.
- Propagates the freezing state outwards through the evaluation graph (according to the values of the
downstream and
upstream options).
- Analyzes the frozen nodes so that if downstream nodes have no other unfrozen inputs they are skipped. This step is referred to as the Runtime operation in the limitations below.
Limitations
- You must set least one
frozen attribute to "True" for the frozen evaluator to shut off evaluation on affected nodes. The most practical use of this would be on a display layer, so that nodes are frozen as a group.
- If the
frozen attribute, or any of the attributes used to define related implicit nodes for freezing (such as
visibility) are animated, the evaluator will not remove them from evaluation. They are still scheduled and only the
runtime option will help in avoiding unnecessary evaluation.
Note: The runtime option does not modify the evaluator operation, it modifies the scheduling of nodes for evaluation. You will not see nodes affected by this option in the evaluator information, such as the output from
cmds.evaluator( query=True, clusters=True, name='frozen' ))
- Cycle members are not frozen by the evaluator unless every input to the cycle is frozen. This is because as cycles evaluate as a unit, it is pointless to freeze individual members of a cycle.
See the
Using Parallel Maya for a more detailed analysis.
Invisibility Evaluator
The
invisibility evaluator prevents the evaluation of any node not upstream from a visible
DAG node by identifying all DAG nodes considered invisible for the purposes of the modeling viewport. To determine which nodes to render invisible, the evaluator takes any of the following states into consideration:
- A node with its "Visibility" attribute set to false.
- A node with its "Draw Override Visibility" attribute set to false and its "Draw Override Enabled' attribute set to true.
- A node in a display layer that causes option #2 (above) to be true.
- A node has its "IsIntermediateObject" attribute set to true.
- Every path from a node upward to the root encounters at least one node for which at least one of the above is true. (Every is important in this case, with regard to instancing - every instance path to a node must be rendered invisible by one of the above.)
Any nodes the only drive invisible nodes are frozen and do not evaluate. (A visible DAG node is considered to drive itself so it will always evaluate.)
In most cases, the net result of enabling the
invisibility evaluator should be no visible change in your scene, and a modest-to-significant increase in playback speed (depending on what is invisible).
When Not To Use This
The
invisibility evaluator takes its definition of visible solely from the node's visibility state, so if your UI or plug-in code requires invisible nodes to evaluate, do not use the
invisibility evaluator.
Limitations
- The
invisibility evaluator only considers static visibility. Any node with animated visibility by the definitions above (that is, any attributes checked are animated) are considered always visible.
- Where cycles exist, everything in the cycle must be invisible or the cycle is not frozen.
- If a node is instanced and has at least one visible path upwards, then all paths upwards are evaluated (that is, making one of two instances invisible has no effect)