我遇到一个奇怪的问题,即我的节点的计算功能以相反的顺序打印出调试信息。
我正在尝试创建一个自定义同步节点,它允许我同步两个输入节点的属性而不锁定这些属性。我的节点有四个通用输入属性,它们将两个属性的原始输入同步,以及每个属性的转换版本,以允许同步不同类型的属性(rawInputA,rawInputB,convertedInputA,convertedInputB)。该节点有两个输出受每个相应输入的影响:
outputA受以下因素影响:rawInputA,convertedInputA outputB受以下因素影响:rawInputB,convertedInputB
输出连接到虚拟定位器,因为它们实际上仅用于触发节点的计算功能,然后设置输入节点本身的正确属性值(这样做是为了避免循环依赖和属性被锁定)
如果inputA属性被更改,这会导致同步节点计算并设置另一个inputB节点的属性值,这会导致同步节点再次计算(尽管这次它不会设置任何值,因为它们已经正确)。我已经在开始和结束时以及在中间向计算功能添加了调试打印语句。在第一次计算调用时,它们以正确的顺序打印,但在第二次调用时,它们以相反的顺序打印,这真的很奇怪......
我认为可能与之相关的一个问题是,在同步节点计算完之后,其中一个rawInput属性插件会变脏(不是每次都有,并且它似乎与哪个输入属性A或B,改变了。)
我应该注意,属性已正确更新,因此节点似乎正在按预期工作,但我正在尝试通过更新视口预览和同步属性的属性编辑器来解决其他一些错误,这就是我的方法遇到了这个奇怪的问题。
更新 - 以下是连接渐变节点颜色条目和几何体的位置的节点设置示例。
通过在属性编辑器中设置值来更改颜色条目位置会在脚本编辑器中生成以下输出:
setAttr "ramp1.colorEntryList[0].position" 0.5;
SyncNode compute called!
Plug = aOutputA
Value changed
set source plug with 3 double
SyncNode compute finished!
SyncNode compute finished!
Plug = aOutputB
SyncNode compute called!
TL; DR - 是否有任何会导致依赖节点的计算函数中的调试语句在脚本编辑器输出中以相反的顺序打印?