0

我需要获取变换节点的位置。使用其他输入进行一些计算。并在同一个变换节点上再次设置。

这会产生一个 Maya 不喜欢的循环。

如果我想在同一个节点查询和设置信息怎么办?

我希望它像一个约束。您将一个对象与一组对象相关联,并根据第一个对象移动它们。

4

1 回答 1

0

你真的不想创建一个循环。Maya 不只是对讨厌循环的任意性——它不是在架构上为这样的双向数据流设置的——DAG中A是“无环”。Maya 没有自然的方法来避免在输入发生变化时不断地重新更新 DAG 图,然后再弄脏自己 - 这会使您的场景变得非常缓慢或迫使它变得依赖于历史(就像布料或物理模拟一样)。如果您查看常规约束的图形流,您会发现它始终是单向的。可以创建形式上周期性但无害的情况——例如,消息连接有时会使 Maya 误以为您已经创建了一个循环,但因为它们实际上并没有传递不断变化的数据,所以它们是无害的。但总的来说,应该避免循环。

您可以通过缓存原始关系来避免循环,但将其保留为缓存 - 也就是说,通过设计它,您不能使用传入连接驱动缓存的内容。然后,您的节点可以对缓存的数据执行任何操作,而不会激怒 Maya。如果您使用自定义节点插件执行此操作,您只需确保缓存数据属性不可写,以防止任何作弊。这里的限制是缓存的数据不会是动态的——它会反映你建立关系时的状态——但在那之后它是被动数据,DAG图中没有上游连接的“叶子” . 您可以添加工具来编辑该缓存——但是如果您尝试使用输入连接来驱动缓存,那么您只是复制了问题。这大致就是动态系统的工作方式——有一个初始状态,然后该状态可以前进或倒回。然而,初始状态本身不能被动画化。

另一种方法是完全绕过 dag。您可以使用 scriptJob(或 api 消息挂钩)在每次帧更新时强制实现您想要的效果。这在 Maya UI 中不会非常高效,并且将依赖于历史(如果您执行此类操作,则需要缓存场景的初始状态并在用户回到零时重置为它) . 对于非常复杂的行为,这种设置有时是不可避免的,但使用起来也没有乐趣,而且容易发生故障。仅在其他方法无效时使用。

一般来说,Maya 只是讨厌双向关系。您可能想查看ExoSwitch插件,该插件声称是“双向约束”——它可能会进行大量会话时间缓存,但它可能会让您了解可能的行为。

于 2018-07-04T00:54:00.153 回答