Blender V4.3
Execution model

In order to get to an efficient model for execution, several steps are being done. these steps are explained below.

Step 1: translating blender node system to the new compositor system

Blenders node structure is based on C structs (DNA). These structs are not efficient in the new architecture. We want to use classes in order to simplify the system. during this step the blender node_tree is evaluated and converted to a CPP node system.

See also
ExecutionSystem
Converter.convert
Node

Step2: translating nodes to operations

Ungrouping the GroupNodes. Group nodes are node_tree's in node_tree's. The new system only supports a single level of node_tree. We will 'flatten' the system in a single level.

See also
GroupNode
ExecutionSystemHelper.ungroup

Every node has the ability to convert itself to operations. The node itself is responsible to create a correct NodeOperation setup based on its internal settings. Most Node only need to convert it to its NodeOperation. Like a ColorToBWNode doesn't check anything, but replaces itself with a ConvertColorToBWOperation. More complex nodes can use different NodeOperation based on settings; like MixNode. based on the selected Mixtype a different operation will be used. for more information see the page about creating new Nodes. [newnode]

See also
ExecutionSystem.convert_to_operations
Node.convert_to_operations
NodeOperation base class for all operations in the system

Step3: add additional conversions to the operation system

  • Data type conversions: the system has 3 data types DataType::Value, DataType::Vector, DataType::Color. The user can connect a Value socket to a color socket. As values are ordered differently than colors a conversion happens.
  • Image size conversions: the system can automatically convert when resolutions do not match. An NodeInput has a resize mode. This can be any of the following settings.
    • [InputSocketResizeMode.ResizeMode::Center]: The center of both images are aligned
    • [InputSocketResizeMode.ResizeMode::FitWidth]: The width of both images are aligned
    • [InputSocketResizeMode.ResizeMode::FitHeight]: The height of both images are aligned
    • [InputSocketResizeMode.ResizeMode::FitAny]: The width, or the height of both images are aligned to make sure that it fits.
    • [InputSocketResizeMode.ResizeMode::Stretch]: The width and the height of both images are aligned.
    • [InputSocketResizeMode.ResizeMode::None]: Bottom left of the images are aligned.
See also
COM_convert_data_type Datatype conversions
Converter.convert_resolution Image size conversions