我需要获取转换节点的位置。使用其他输入进行一些计算。并在同一转换节点上再次设置它。
这就产生了玛雅不喜欢的循环。
如果我想在同一节点中查询和设置信息,该怎么办?
我希望它像约束一样。将一个对象与一组对象相关联,并根据第一个对象移动它们。
你真的不想创建一个循环。 Maya 不仅对讨厌周期很武断 - 它不是为这样的双向数据流在体系结构上设置的 -DAG中的A是"非循环的"。 Maya 没有自然的方法可以避免在输入更改时不断重新更新 DAG 图,然后弄脏自己 - 这会使您的场景变得非常迟钝或迫使它变得依赖于历史记录(就像布或物理模拟一样(。如果您查看常规约束的图形流,您会发现它始终是单向的。 可以创建形式上循环但无害的情况 - 例如,消息连接有时会欺骗Maya,使其认为您已经创建了一个循环,但由于它们实际上没有传递更改的数据,因此它们是无害的。 但总的来说,应该避免循环。
您可以通过缓存原始关系来避免循环,但将其保留为缓存 - 也就是说,通过设计它,以便您不能使用传入连接驱动缓存的内容。然后,您的节点可以对缓存的数据执行任何它喜欢的操作,而不会激怒 Maya。如果您使用自定义节点插件执行此操作,您只需确保缓存数据属性不可写,从而防止任何作弊。这里的限制是缓存的数据不是动态的 - 它将反映您设置关系时的状态 - 但之后它是被动数据,DAG 图中没有上游连接的"叶子"。 您可以添加工具来编辑该缓存 - 但是如果您尝试使用输入连接驱动缓存,那么您只是复制了问题。 这大致就是动力学系统的工作方式——有一个初始状态,然后状态可以前进或倒带。 但是,初始状态本身不能进行动画处理。
执行此操作的另一种方法是完全绕过 dag。您可以使用脚本作业(或 api 消息挂钩(在每次帧更新时强制实现所需的效果。这在Maya UI中不会非常高性能,并且它将取决于历史记录(如果执行此类操作,则需要缓存场景的初始状态,并在用户擦洗回时间零时重置为该状态(。 对于非常复杂的行为,这种设置有时是不可避免的,但使用起来也没有乐趣,并且容易爆炸。 仅在其他方法均无效时使用。
总的来说,玛雅人只是讨厌双向关系。 你可能想看看ExoSwitch插件,它声称是一个"双向约束" - 它可能正在做一堆会话时间缓存,但它可能会让你了解行为是可能的。