ID 438904 - Node names driven by an expression parameter are re-evaluated for every node graph parameter change (outside of a node graph parsing context)

Follow

Problem summary:

Node names that are driven by an expression parameter are re-evaluated for every node graph parameter change (outside of a node graph parsing context). Where the number of such nodes is significant, performance can be significantly degraded, particularly in batch (scripted) operations, as well as when loading nodes whose name is synchronised back to their 'name' parameter, such as Shading Nodes (since the synchronisation parameter change event is handled after exiting the node graph parsing context).

Steps to reproduce:

Reproduction A (all Katana versions):

Run Katana with the attached script ('time_creation_of_nodes_with_parameter_driven_names.py') which creates a variable number of Render nodes with an expressioned 'passName' parameter. Observe that execution time scales quadratically with the number of nodes created. In Katana 3.6, creating 200 nodes takes around 5 seconds (around 3 seconds in Katana 3.1).

Reproduction B (Katana 3.5v2+):

  1. Create a Group of default (node assigned shader) shading nodes, half of which have a 'name' parameter that is a [Python] expression (for example, referencing a parameter on another node). The contents can be many copies (say 64) of the same two nodes. An example using 3Delight Shading Nodes is attached ('half_expressioned_blank_shading_node_names.katana').
  2. Copy the top level Group node.
  3. Paste (and anchor/drop/place) repeatedly.

It doesn't take many copies before a single paste operation takes an unreasonable amount of time (several seconds).

Workaround:

No known workaround.

Tested versions/platforms:

  • All versions - Affected

    We're sorry to hear that

    Please tell us why