Working on some custom nodes, I ran into something I’ve not considered before.
Here are my nodes in the graph -
A Plate node takes position inputs, marks a “tick” attribute dirty to indicate to a central Solver node that it has changed.
This triggers the Solver to compute, updating the output matrix plugs.
Except, by default, using only the
attributeAffects() function and with an empty
compute() method on the Solver, the Solver does not actually recompute when the Plate changes.
Here is (test case) compute code for the Plate -
And here for the Solver -
The two commented lines in the solver query the datablock
inputArrayValue() for the tick plug attributes - with these lines commented, as in the image, the solver does not compute when the input transform changes.
With these lines active though, the solver does compute and triggers the compute of the previous Plate node, within the same scope. This seems wild to me - is this actually how Maya works? With the datablock of one node responsible for micromanaging the computes of all its inputs?
If it is, then what’s the point of
attributeAffects() at all? Or is this just an artefact of the python implementation?
I’ve verified that
attributeAffects() is run correctly for both nodes, on both the outer compound attributes and the leaf attributes themselves.
If anyone has any experience with this I’d love your insight.