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