【问题标题】:How to connect nodes to get and set info on them at the same time?如何连接节点以同时获取和设置它们的信息?
【发布时间】:2018-06-29 08:53:30
【问题描述】:

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

这会造成 Maya 不喜欢的循环。

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

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

【问题讨论】:

  • 通常你不会在同一个节点上设置它。而是将其设置为具有相同变换的兄弟姐妹以避免循环。
  • @GreenCell 对不起,我不明白你的回答。节点本身获取转换输入,在 SAME 节点中的这些坐标发生更改后设置转换。我已经看到从兄弟节点获取转换然后再次设置它的节点。这不是 Autodesk 建议的。获取的值应该始终是输入。 (如果你想回答,我想最好在回答部分,所以我可以将它标记为已回答,以防它起作用!)

标签: maya maya-api


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多