求值器参考

本主题详细说明了求值工具包中的一些自定义求值器设置。若要从技术层面深入了解并行求值以及有关自定义求值器的背景信息,请参见使用并行 Maya

变形器求值器

变形器求值器实现了“GPU 覆盖”(GPU Override)选项。

为了提高场景性能,变形器求值器将变形器节点链的 CPU 求值替换为 GPU 求值。使用 deformerEvaluator 命令可检索有关场景中支持的变形器节点的节点链信息,或者了解特定节点不受支持的原因。使用求值平视显示仪 (HUD) 选项可查看“GPU 覆盖”(GPU Override)支持的顶点数。

限制

  • 每个变形链均必须以没有输出连接的网格节点结尾。这意味着,若要受支持,网格不能具有 pointOnPoly 约束、毛囊或其他任何输出连接。
  • 仅支持 blendShape、skinCluster、簇、softMod 和调整节点以及特定功能。

动力学求值器

动力学求值器用于对动力学相关节点(通常具有复杂的求值要求)正确求值。尽管该求值器支持一些配置选项,但您往往不会与其进行交互,因为默认行为通常是可接受的。

动力学求值器承担以下三项主要职责:
  1. 将簇中要由动力学求值器进行求值的动力学相关节点分组在一起。
  2. 管理此类簇的求值,使其遵循动力学相关节点所需的复杂求值规则。
  3. 在检测到不受支持的设置时禁用并行求值

限制

  • 在某些情况下,使用求值管理器(进而使用动力学求值器)的动力学模拟生成的结果与基于 DG 的求值不同。但是,无论动力学模拟发生在 Maya 视口中还是发生在 Maya 批处理中,这些结果均一致。
  • 动力学求值器不支持旧版动力学(例如,旧版粒子和流体)。如果在场景中找到不受支持的动画节点,则会禁用并行求值。

有关动力学求值和不受支持的功能的详细信息,请参见使用并行 Maya

冻结求值器

冻结求值器可用于从求值中排除求值图的子区域。它适用于冻结属性,允许使用由求值器配置设置的规则将冻结状态传播到相关节点。仅当您熟悉 DAG 和求值图中的连接和传播概念时才使用冻结求值器。否则,请使用更简单的不可见性求值器。

求值管理器不对已将冻结属性设置为 True 的任何节点进行求值。如果启用了冻结求值器,则会根据与已启用选项对应的规则阻止对相关节点求值。

冻结求值器的运行过程分为三个阶段:

  1. 收集标记为不可见的节点和标记要冻结的 displayLayers 选项。
  2. 通过求值图向外传播冻结状态(根据下游和上游选项的值)。
  3. 分析冻结节点,以便跳过没有其他解冻输入的下游节点。在下文介绍的限制中,该步骤称为运行时操作。

限制

  • 若要冻结求值器对受影响的节点禁用求值,必须至少将一个冻结属性设置为“True”。实际上,这主要用于显示层,以便将节点作为一个整体冻结。
  • 如果冻结属性或任何用于定义相关隐式节点以便冻结(例如,不可见性)的属性已设置动画,则该求值器不会将其从求值中移除。这些属性仍会进行调度,但是只有运行时选项才有助于避免进行不必要的求值。
    注: 运行时选项不会修改求值器操作,而是修改节点的求值调度。您在求值器信息中将看不到受此选项影响的节点,例如,cmds.evaluator( query=True, clusters=True, name='frozen' ) 的输出。
  • 除非循环的所有输入均已冻结,否则该求值器不会冻结循环成员。这是因为循环作为一个整体进行求值,冻结循环的单个成员毫无意义。

有关更详细的分析,请参见使用并行 Maya

不可见性求值器

不可见性求值器通过标识所有为了对视口进行建模而被视为不可见的 DAG 节点,防止对不来自可见 DAG 节点上游的任何节点进行求值。若要确定要渲染的节点中有哪些不可见,该求值器将考虑以下任意情况:
  1. 一个节点的“可见性”(Visibility)属性设置为 false。
  2. 一个节点的“绘制覆盖可见性”(Draw Override Visibility)属性设置为 false,“启用绘制覆盖”(Draw Override Enabled)属性设置为 true。
  3. 显示层中有一个节点导致选项 2(参见上文)为 true。
  4. 一个节点的“IsIntermediateObject”属性设置为 true。
  5. 一个节点中每条上升到根的路径至少遇到一个至少符合上述一种情况的节点。(在这种情况下,就实例化而言,每条路径都很重要。必须渲染节点的每条实例路径,使其对上方的节点之一不可见。)

任何仅驱动不可见节点的节点均已冻结,不会进行求值。(可见的 DAG 节点被视为驱动本身,因此始终会进行求值。)

在大多数情况下,启用不可见性求值器最终将导致更改在场景中不可见,并适度或显著提高播放速度(具体取决于不可见的对象)。

不可见性求值器不适用的情况

不可见性求值器仅仅根据节点的可见性状态定义“可见”,因此如果 UI 或插件代码要求对不可见节点求值,请勿使用不可见性求值器。

限制

  • 不可见性求值器仅考虑静态可见性。按照上述定义,设置了可见性动画(即,选中的所有属性均已设置动画)的任何节点都视为始终可见。
  • 如果存在循环,则循环中的一切均必须处于不可见状态,否则循环不会冻结。
  • 如果节点已实例化且至少有一条可见路径向上,则将对所有向上的路径求值(即,使两个实例之一不可见无效果)。