求值工具包

打开求值工具包

通过求值工具包,可分析和了解如何以最佳方式使用并行求值模式,从而加速动画运行。此窗口包含许多功能,支持您操纵求值管理器的所有各个方面,其中包括启用调试模式和输出。

注: 此处提供的信息仅供参考。如需了解有关这些流程的技术背景信息,请参见使用并行 Maya

配置

包含许多设置,支持您配置求值工具包所提供的工具的行为。

Graphviz 选项
使用 Graphviz 系统安装(Use Graphviz system installation)
激活此选项后,将使用系统的 Graphviz 安装,而不是 Maya 随附提供的安装。
注: 为了让 Maya 找到 Graphviz 安装,请确保包含 Graphviz 可执行文件的 Graphviz 文件夹位于 PATH 环境变量中。请参见标准路径
显示 Graphviz 版本(Show Graphviz Version)

显示 dot -v 命令的输出,该命令用于报告 dot 命令软件版本。

模式

“求值模式”(Evaluation Mode)菜单中选择适当的求值模式。

求值模式(Evaluation Mode)菜单
DG
对您的场景使用基于依存关系图的求值模式。(另请参见依存关系图。)在 Maya 2016 之前,这是默认的求值模式。
串行(Serial)
使用求值管理器,但是将求值限制到单个核心(串行求值)。使用“串行”(Serial)可排除场景故障,因为它使场景保真度优先于性能,以便您可以找出求值错误。
注:“DG”模式相比,有时场景在“串行”(Serial)模式下运行得更慢。这是因为与“DG”模式相比,“串行”(Serial)模式对更多的节点求值。由于此详细求值,如果场景在“串行”(Serial)模式下看起来不正确,则它不大可能在“平行”(Parallel)模式下正常工作。

有时“串行”(Serial)模式下的不正确求值是由自定义插件导致的。

串行(未缓存)(Serial (uncached))
与“串行”(Serial)(如上所述)类似,但未缓存,将重新确定每个帧中的求值顺序。不建议使用。
并行(Parallel)
并行求值并使用所有可用的核心对场景求值。如果此模式导致场景问题,则禁用它并返回到上一标准:DG 求值模式。

请参见分析场景以提高性能

此模式在默认情况下处于活动状态。
GPU 覆盖(GPU Override)
与求值管理器一起在“串行”(Serial)“平行”(Parallel)求值模式下加速变形。如果场景具有标准 Maya 变形器并且网格几何体是密集的,则这可以提高性能。结果将基于场景中的变形器和网格密度而变化。
注: “GPU 覆盖”(GPU override)仅适用于 Viewport 2.0,对 OSX 上的 Quadro 4000 显卡不起作用。
您可以在使用并行 Maya 中找到有关 GPU 覆盖的技术说明。
在求值图中包括控制器(Include Controllers in Evaluation Graph)
构建时在求值管理器中激活/禁用预填充控制器机制。
操纵(Manipulation)
切换求值管理器用于操纵。仅在“串行”(Serial)和“平行”(Parallel)模式下有效。

平视显示仪(Heads Up Display)

可使用以下平视显示仪 (HUD) 选项在视图面板中显示求值和帧速率信息。有关更多“平视显示仪”(Heads Up Display)选项,请参见平视显示仪 (HUD) 选项在视图面板中显示场景信息 (HUD)

求值(Evaluation)
指示当前的求值模式。请参见“首选项 > 动画”(Preferences > Animation)中的“求值”(Evaluation)以更改求值节点。
  • 如果处于 DG 模式,则显示“求值: DG”(Evaluation: DG)。“EM 状态”(EM State)显示“禁用”(Off),而“GPU 覆盖”(GPU Override)显示“N/A”。
  • 如果处于串行平行模式,则显示“求值: 串行”(Evaluation: Serial) “求值: 平行”(Evaluation: Parallel)以及“EM 状态”(EM State)。“EM 状态”(EM State)指示求值管理器是否具有最新的求值图,或者下次由播放触发求值时它是否需要重建图表。例如,在 DG 中进行某些更改(如删除节点连接)时,求值管理器将不再与 DG 同步,因此平视显示仪显示“需要重建”(Rebuild required)。

    触发求值时,求值管理器重建 EM 图表且 HUD 显示 “就绪”(Ready)。

  • 如果“GPU 覆盖”(GPU Override)选项处于活动状态(仅当使用“串行”(Serial)或“平行”(Parallel)模式时才会出现此情况),则“GPU 覆盖”(GPU Override)将显示,它对 GPU(而不是 CPU)求值的网格顶点数(数千个)进行计数。例如,如果 HUD 显示“GPU 覆盖: 已启用(94k)”(GPU Override: Enabled (94k)),则这指示 GPU 正在对 94,000 个顶点求值。
帧速率(Frame Rate)

在右下角显示当前视图的帧速率(单位:每秒帧数 (FPS))。默认设置为禁用。

调试

使用此区域中的这些选项,可以确定场景的问题区域。

验证
切换用于跟踪无效求值图路径的跟踪对象。它将记录违反求值图中所示依存关系的数据访问。这些意外访问可能会导致求值出错且不稳定,如崩溃。
输出文件包含在每个播放帧期间检测到的缺少的依存关系。这仅适用于“串行”(Serial)模式。
默认情况下,跟踪结果将保存在 Maya Temp 目录下的 _MayaEvaluationGraphValidation.txt 文件中,但您可以指定其他位置。使用 getenv("TEMP") mel 命令查找计算机上的临时目录。
计算的节点(Computed Nodes)
通过切换输出所计算节点的跟踪对象,对计算路径执行高级跟踪。这仅适用于“DG”和“串行”(Serial)模式。
跟踪结果将保存在 Maya 运行时目录下的 _Trace_Compute.txt 文件中。使用 getenv ("MAYA_LOCATION") mel 命令查找该运行时目录。
图形检查(Graph Inspection)
选择要包含在报告中的内容,然后单击“打印”(Print)可打印以下各项的报告:
要包括的内容(What to Include)
选择“全部”(All)可获得完整的报告,或者选择“选定”(Selected)可过滤报告以获得下面指定的元素:
求值节点和脏栓(Evaluation nodes and dirty plugs)
打印求值管理器将在求值和计算之前设置为脏的栓列表。
结果将显示在脚本编辑器中。
求值节点和连接(Evaluation nodes and connections)
打印选定节点或整个场景(如果未选中任何对象)上的求值节点和连接的列表。
结果将显示在脚本编辑器中。
调度信息(Scheduling Information)
打印“求值管理器”(Evaluation Manager)用于运行其求值的调度节点的列表。如果启用了“展开簇”(Expand Clusters),还会显示簇节点的所有成员。如果“展开簇”(Expand Clusters)处于禁用状态,则仅显示簇节点。
结果将显示在脚本编辑器中。如果设置了“输出 PDF”(Output PDF),则会在 .pdf 文件中绘制调度图。
展开簇(Expand Clusters)
包括簇节点的所有成员以及“调度信息”(Scheduling Information)
输出 PDF
创建报告的 Adobe .pdf 文件。
注: 此选项仅打印当前版本的调度信息。
动态属性(Dynamic Attributes)
连接的动态属性有时会创建虚拟依存关系,从而阻止并行操作,这将抵消通过并行求值实现的任何性能增益。使用这些工具可以显示这些动态属性类型之间的连接。
打印附加连接(Print extra connections)
单击“打印”(Print)可显示在动态属性之间发现的连接的列表。结果将显示在脚本编辑器中。
移除附加连接(Remove extra connections)
此选项仅用于调试目的,因为它旨在帮助您了解移除附加依存关系后可能实现的性能增益。由于此选项是一种具有攻击性的工具,可能会改变求值输出,因此请慎用。
重要: 数据丢失!切勿在激活此选项后意外保存该版本的场景,因为数据将会丢失。
场景简化(Scene simplification)
检索选定对象的最小依存关系。
选择最小场景(Select minimal scene)
使用此选项可确定对选定对象进行求值所需的一切。
移除最小场景以外的所有对象(Remove all except minimal scene)
删除上述最小场景选择选项视为非重要的所有对象。
重要: 数据丢失!切勿在激活此选项后意外保存该版本的场景。
启动分析器(Launch Profiler)
打开分析器。这一工具通过记录和描述每个重要事件(例如,求值任务)消耗的时间量,有助于找出场景中的性能瓶颈。

自定义求值器

使用 按钮可查看相关自定义求值器支持的配置选项。请参见求值器命令参考中的 -c / -configuration 标志。

有关不可见性冻结动力学变形器求值器的背景信息,请参见求值器参考使用并行 Maya 文档中提供了更多技术详细信息。

重要: 更改默认的启用/禁用状态时,可能会导致不稳定或性能降低。请谨慎操作。
有关此处列出的动力学求值器的信息,请参见下文的“动力学”部分。
自定义求值器 用途
invisibility 从求值中移除不可见的节点(及其所有驱动者)。有关不可见性求值器的详细信息,请参见求值器参考
注: 无论是否已启用该求值器,场景看起来都相同。
有关不可见性求值器的详细信息,请参见求值器参考
frozen 处理旨在控制对/不对场景的哪个部分进行求值的“冻结”工作流。

有关冻结求值器的详细信息,请参见求值器参考

timeEditorCurveEvaluator 处理时间编辑器的自定义曲线求值要求
dynamics 用于对求值要求不正规的动力学节点正确求值。

有关动力学求值器的详细信息,请参见求值器参考

ikSystem 管理由多控制柄 IK 系统引起的复杂求值。
disabling 禁用求值管理器(用于调试目的)。
reference 改进已加载/卸载引用的场景的性能。
deformer 支持对受支持的变形器执行 GPU。变形器求值器实现了“GPU 覆盖”(GPU Override)选项。

有关变形器求值器的详细信息,请参见求值器参考

transformFlattening 改进长变换层次的性能。
pruneRoots 通过一起调度各个小任务以降低调度开销,改进性能

动力学

配置动力学求值器。动力学求值器用于对求值要求不正规的动力学节点正确求值。
注: 有关动力学求值器的深入技术讨论,请参见使用并行 Maya
模式(Mode)
从以下五个选项中进行选择:
名称 功能
已禁用(Disabled) 只要场景中存在活动的动力学节点,便禁用并行求值/求值管理器。
旧版 2016(Legacy 2016) 重现 2016 版本的默认设置,方法是:只要已列入黑名单的节点显示在场景中,便禁用求值。

以下节点类型已列入黑名单:

  • Nucleus
  • pointEmitter
  • rigidSolver
  • rigidBody
  • particle
  • geoConnector
  • field
  • fluidShape
  • 从其中派生的任何类型也是如此。

受支持(Supported) 对受支持的动力学节点实现复杂求值,只要已列入黑名单的节点显示在场景中,便禁用并行求值/求值管理器。

以下节点类型已列入黑名单:

  • rigidSolver
  • rigidNode
  • particle(除非也是 nBase)
  • fluidShape
  • fluidEmitter
  • dynHolder
  • collisionModel
  • dynController
  • dynGlobals
  • spring
  • membrane
  • 从其中派生的任何类型也是如此。

全部(不支持)(Everything (NOT SUPPORTED)) 使用所有节点,甚至是有问题的节点,因为此模式不使用黑名单。
自定义(不支持)(Custom (NOT SUPPORTED)) 此模式允许您尝试以下选项的不受支持组合。
高级(Advanced)
禁用的节点(Disabling Nodes)
导致并行求值/求值管理器被禁用的节点集。
已处理的节点(Handled Nodes)
由用于处理求值的动力学求值器读取的节点集。
操作(Action)
选择动力学求值器对已处理的节点执行的操作。
名称 功能
无(None) 忽略节点。
求值(Evaluate) 一旦需要满足特殊求值要求,便实现求值。
冻结(Freeze) 导致动力学求值器以当前状态冻结其处理的所有节点。不执行求值,节点不受影响;这是运行最快的方法。

GPU 覆盖

脚本编辑器中显示以下报告。有关此求值器的描述,请参见求值器参考;有关“GPU 覆盖”(GPU Override)的技术信息,请参见使用并行 Maya

活动变形链(Active deformation chains)
编译由 GPU 求值器处理的变形链(是一种网格,至少有一个变形器)的列表。
网格信息(Mesh information)
打印每个网格当前的 GPU 变形支持信息。如果该网格当前由 GPU 变形器处理,则其变形链将显示在列表中。反之,列表会显示将其排除在外的原因。
选定节点状态(Selected nodes status)
打印选定节点当前的 GPU 变形支持信息。如果该节点当前由 GPU 变形器处理,则其变形链将显示在列表中。反之,列表会显示将其排除在外的原因。
簇(Clusters)
打印由变形器求值器处理的每个簇的节点列表。每个变形器链都有各自的簇。

选择

选择以下选项:

受求值管理器控制的节点(Nodes under evaluation manager control)
将当前选择更改为仅限于受求值管理器控制的节点。未直接或间接设置动画的节点不包含在该集中。
上游节点(Upstream nodes)
从当前选择中选择目前受求值管理器控制的、位于上游的所有节点。在该操作之前选择的节点取决于在该操作之后选择的上游节点。
下游节点(Downstream nodes)
从当前选择中选择目前受求值管理器控制的、位于下游的所有节点。在该操作之后选择的下游节点取决于在该操作之前选择的节点。

上游节点与下游节点

连接到求值图中的所有节点被视为“上游”或“下游”。

在下图中,您可以看到上游节点与下游节点如何交互。

在以下情况下,需要“上游”:
  • nurbsCone1_translateX => nurbsCone1
  • nurbsCone1_translateX 是 nurbsCone1 的上游
  • nurbsCone1 需要 nurbsCone1_translateX
“下游”取决于:
  • nurbsCone1_translateZ => nurbsCone1
  • nurbsCone1 是 nurbsCone1_translateZ 的下游
  • nurbsCone1 取决于 nurbsCone1_translateZ

循环

有关循环的详细解释及其在求值过程中所起的作用,请参见使用并行 Maya

完整图形(Full Graph)
创建 .PDF 和 .DOT 文件以显示场景的当前求值图。
输出文件夹(Output Folder)
键入保存循环簇列表的文件夹对应的路径。单击“生成”(Generate)可创建该列表。单击文件夹图标 可打开文件浏览器,您可从中导航到相应的文件夹。
输出基础文件名(Output base file name)
显示基础文件名。默认值为 _EvaluationGraph_
生成的文件会将 .DOT 和 .PDF 添加到所选的基础文件名。
生成(Generate)
使用当前求值图创建 Graphviz .DOT 文件。如果执行传递归约(Perform transitive reduction)选项处于活动状态,将额外创建一个包含传递归约(由 Graphviz tred 命令执行)输出的 .DOT (.tr.dot) 文件。然后,该 .DOT 文件将转化为 PDF 文件(使用 Graphviz dot 命令),并使用系统的默认 PDF 阅读器应用程序打开。
打开(Open)
打开新创建的 PDF 文件。
执行传递归约(Perform transitive reduction)
激活该选项可对输出图形执行传递归约,从而移除多余的依存关系,以清理输出图形的混乱状况。
在完整图形中标记簇(Mark clusters in full graph)
激活该选项可在输出图形中亮显求值簇。
循环图(Cycle Graph)
循环簇(Cycle clusters)字段
单击“生成”(Generate)可在此字段中显示当前场景内的循环簇的列表,并按簇中的节点数排序(数量最多的排在最前面)。所含节点少于选定阈值的簇不会包括在列表中。
将打印每个簇的节点数和第一个节点。可以使用 evaluationManager 命令查询完整的簇。
单击“刷新”(Refresh) 可更新该列表。
循环大小阈值(Cycle Size Threshold)
定义循环簇的最小大小。默认值为 100。
注: 小循环可能与性能分析相关。
最短路径(Shortest Path)

如果在当前选定的簇中同时指定了源节点和目标节点,这两个节点将在输出图形中亮显为绿色。从源节点到目标节点的路径为蓝色,反之为红色。

注: 使用此设置时取消激活传递归约,因为它可从这些路径中移除连接。
亮显的路径对于调查大循环十分有用,因为它可断开这些循环,从而提高并行性。这能够说明为什么在当前设置中只应具有单向依存关系的两个节点实际上具有双向依存关系。
输出文件夹(Output Folder)
键入保存循环簇列表的文件夹对应的路径。单击“生成”(Generate)可创建该列表。单击文件夹图标 可打开文件浏览器,您可从中导航到相应的文件夹。

结果保存在 Maya 的临时目录中。使用 getenv("TEMP") mel 命令查找计算机上的临时目录。

输出基础文件名(Output Base File Name)
显示基础文件名。默认值为 _CycleCluster_
执行传递归约(Perform transitive reduction)
激活该选项可对输出图形执行传递归约,从而移除多余的依存关系,以清理输出图形的混乱状况。
相关性(Dependencies)
此区域支持您生成图形以显示两组节点之间的依存关系。这有助于说明为什么不应相互依赖的两组节点实际上彼此具有依存关系。
上游/下游节点(Upstream/Downstream nodes)
选择要用作“上游/下游节点”(Upstream/Downstream nodes)列表的节点,然后单击“选择选定对象”(Choose Selected)以使用这组节点。
输出文件夹(Output Folder)/输出基础文件名(Output Base File Name)
键入保存该图形的文件夹对应的路径。单击“生成”(Generate)可创建该图形。单击文件夹图标 可打开文件浏览器,您可从中导航到相应的文件夹。
执行传递归约(Perform transitive reduction)
激活该选项可对输出图形执行传递归约,从而移除多余的依存关系,以清理输出图形的混乱状况。

验证

运行性能测试(Run performance test)
在“DG”、“串行”(Serial)和“平行”(Parallel)模式下,对当前场景运行 emPerformanceTest。结果将显示在脚本编辑器中。此测试可用于通过不同的求值模式获取场景的基准。
运行正确性测试(Run Correctness test)
对当前场景运行 emCorrectnessTest。正确性测试在“串行”(Serial)模式(不含 GPU 变形器求值)和“平行”(Parallel)模式(含和不含 GPU 变形器求值)下运行动画,并对求值输出进行比较以验证正确性。结果将显示在脚本编辑器中。

报告

此区域包含您可为场景生成的报告。目前,只有一个关于表达式的报告。结果将显示在脚本编辑器中。

表达式(Expressions)
如果处于活动状态,则报告表达式节点的总数以及安全和不安全的表达式节点数。
安全的表达式可以拥有多个输出,但这些输出必须是其输入的函数。
安全的表达式仅输出其输入(正在通过 DG 连接读取的输入)的函数,且不调用数学函数除外的命令。这些节点不能产生任何副作用,以便与其他节点同时求值。无法将不安全的表达式与其他任何节点并行求值。不安全的表达式无法与其他任何节点并行求值
此报告将检查可能影响场景性能的不同表达式类型。
单击“生成”(Generate)可创建该报告。

冻结

使用以下选项可激活或禁用部分 DAG(有向非循环图),从而提高性能。激活“显示传播”(Explicit Propagation)后,不会调度设置为冻结状态(直接或间接)的所有对象进行求值,这将提高播放性能。如果改为选择“运行时传播”(Runtime Propagation),则部分图形仍将进行调度,但在运行时会跳过。

仍将调度已设置动画的冻结状态,因为必须先对其进行求值,然后才能确定它们是否为必需。

冻结传播(Frozen Propagation)
激活该选项后,可将所有已冻结的引用节点设置为强制其所引用的节点也处于冻结状态,而不考虑对这些节点应用的任何编辑。
运行时(Runtime)
此设置仅在运行时启用下游删减。仍将调度冻结节点,但在发现这些节点处于冻结状态之后,会跳过所有下游求值。
显式(Explicit)
激活该选项等效于启用冻结求值器。它使用冻结选项防止通过直接或间接冻结对未求值的节点进行任何调度。此设置可以最大程度地加快播放速度。
下游/上游冻结模式(Downstream/Upstream freeze mode)
用于指定“冻结”(Freeze)模式的严格性。选择“上游”(Upstream)“下游”(Downstream)
无(None) 无下游/上游传播。
当所有父对象冻结时(When All Parents are Frozen) 仅当下游/上游节点的所有上游/下游节点处于冻结状态时,才会冻结该下游/上游节点。
始终(Always) 冻结节点中的所有下游/上游节点也处于冻结状态,即使它们具有其他非冻结输入也如此。
冻结不可见(Freeze Invisible)
沿 DAG(有向非循环图)层次将冻结状态向下传播到所有不可见的子对象。这样可以冻结根节点(使其不可见)及其整个 DAG 层次。如果不使用此选项,则必须分别冻结每个节点。
节点(Nodes)
显示层(Display Layers)
使属于不可见冻结显示层的节点也处于冻结状态。
直接冻结的节点(Directly Frozen nodes)
单击“选择”(Select)可选择哪些节点已冻结。
单击“打印”(Print)可打印已冻结节点的列表。
单击“全部解冻”(Unfreeze All)可取消选择已冻结的每个节点。

明细表

调度类型覆盖
通过该选项,我可以使用下面列出的工具,选择要应用于给定类型的所有节点的调度类型覆盖。以下是每种覆盖类型的描述:
调度类型覆盖 描述(Description)
无(None) 无调度类型覆盖。这是默认设置。
平行(Parallel) 断言该节点及其使用的所有第三方库是线程安全的。调度器可同时计算此节点的实例与其他节点的实例,不受任何限制。
序列化(Serialize) 断言可以安全地运行此节点以及其他节点的实例。但是,应在同一求值链中按顺序执行此调度类型的所有节点。
全局序列化(Globally serialize) 断言可以安全地运行此节点以及其他节点的实例,但每次仅运行此节点的单个实例。如果该节点依赖于静态状态(如果同时对多个节点实例求值,这可能会产生不可预料的结果),请使用此设置。如果第三方库存储状态,同样的限制可能适用。
不受信任(Untrusted) 断言此节点不是线程安全的,并且在对此节点的实例求值时不应对其他任何节点进行求值。不受信任的节点将延缓到求值计划结束时,并且可能会引入成本高昂的同步操作。
注册的节点类型(Registered Node Types)

“注册的节点类型”(Registered Node Types)列表中选择节点类型,然后选择要应用的调度类型覆盖,以指定调度器计划对节点并行求值的时间。单击“刷新”(Refresh) 可更新节点类型(Node Types)列表。

选定类型覆盖(Override for selected type(s))
打印
单击“打印”(Print),可显示您在“注册的节点类型”(Registered Node Types)列表中选择的节点类型上已激活的调度覆盖。
设定(Set)
单击“设置”(Set),可为“注册的节点类型”(Registered Node Types)列表中的所有选定节点类型指定在“调度类型覆盖”(Scheduling type override)选项中设置的相同调度类型。
选定节点(Selected Nodes)
从场景中选择一个节点,然后选择要应用的调度类型覆盖,以指定调度器计划对节点并行求值的时间。
选定节点类型覆盖(Override for type(s) of selected node(s))
打印 显示当前对场景中每个选定节点的类型激活的调度覆盖。
设定(Set) 为场景中每个选定节点的类型指定在“调度类型覆盖”(Scheduling type override)选项中设置的相同调度类型。
用于选定节点的类型(Type used for selected node(s))
用于选定节点的类型(Type used for selected node(s))
打印 显示调度器对场景中每个选定节点使用的实际调度类型,将覆盖考虑在内;或者,如果不存在覆盖,则显示未修改的调度类型。