如何连接节点以同时获取和设置有关它们的信息?

时间:2018-06-29 08:53:30

标签: maya maya-api

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

这创建了Maya不喜欢的循环。

如果要在同一节点中查询和设置信息,该怎么办?

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

1 个答案:

答案 0 :(得分:0)

您真的不想创建一个循环。 Maya不仅对仇恨周期持任意态度-并非在架构上针对双向数据流进行设置- DAG 中的 A 是“非循环的”。对于Maya,没有自然的方法来避免在输入发生变化然后弄脏自己时连续重新更新DAG图-这将使您的场景变得非常缓慢,或者迫使它成为历史依赖项(就像衣服或物理模拟一样)。如果您查看图流中的常规约束,您会发现它始终是单向的。可能会创建形式上周期性但无害的情况-例如,消息连接有时使Maya误以为您已经创建了一个周期,但由于它们实际上没有传递更改的数据,因此它们是无害的。但通常应避免循环。

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

另一种方法是完全绕开dag。您可以使用scriptJob(或api消息挂钩)在每次更新帧时强制使用所需的效果。这在Maya UI中将不会非常有效,并且将取决于历史记录(如果执行类似的操作,则需要缓存场景的初始状态,并在用户回溯到零时间时将其重置为初始状态)。 。这种设置有时对于非常复杂的行为是不可避免的,但使用起来也很无聊,而且容易崩溃。仅在其他方法无效时使用。

通常,Maya只是讨厌双向关系。您可能想要查看ExoSwitch插件,该插件声称是“双向约束”-可能正在进行大量会话时间缓存,但可能会让您了解可能的行为。