获取以前的变换 Maya
有没有办法通过节点来获取之前的变换,或者说在我的情况下,是获取之前的位移,基于时间?我写了一个简单的表达式可以做到这一点,但我真的想用节点来实现。
$transx = getattr 'objname.tx' -frame time -1;
或者类似的东西,我记不太清楚了,但确实是用表达式中的getattr。
有什么想法吗?
1 个回答
0
表达式节点就是一种节点,不过在表达式节点里使用 getAttr 会打乱节点的正常流程。不过,你可以用一个 frameCache 节点来存储上一次运行的值。或者,你也可以直接把值存储在表达式里的一个属性中。
node.tx = node.cacheTx;
node.cacheTx = objname.tx;
这样做会更快,因为它不会打断属性的计算流程。不过这两种方法都有一个缺点,就是如果在帧切换之间时间上下文发生了变化,它们就无法正确计算。这种情况在Maya用户中很常见,导致用户体验不佳。实际上,想要实现这种复杂的自定义节点,你能做的事情非常有限。
之所以这么难,是因为Maya用户通过实际操作成功打破了Maya的时间机制。开发者在用户的压力下妥协了,允许了这种情况,但这也破坏了Maya的时间计算周期,导致并不是所有的内容都能在时间上下文变化时被查询。这让在Maya中制作差分方程求解器变得困难。当然,在这个特定的情况下,制作这个节点并不特别难,但要制作一个在大多数情况下都能正常工作的节点就很难了。