Blender
V3.3
|
In order to get to an efficient model for execution, several steps are being done. these steps are explained below.
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.
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.
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]
ExecutionGroup are groups of operations that are calculated as being one bigger operation. All operations will be part of an ExecutionGroup. Complex nodes will be added to separate groups. Between ExecutionGroup's the data will be stored in MemoryBuffers. ReadBufferOperations and WriteBufferOperations are added where needed.
+------------------------------+ +----------------+ | ExecutionGroup A | |ExecutionGroup B| ExecutionGroup | +----------+ +----------+| |+----------+ | /----->| Operation|---->| Operation|-\ /--->| Operation|-\ | NodeOperation | | | A | | B ||| | || C | | | | | | cFFA | /->| cFFA ||| | || cFFA | | | | | +----------+ | +----------+|| | |+----------+ | | | +---------------|--------------+v | +-------------v--+ +-*----+ +---*--+ +--*-*--+ +--*----+ |inputA| |inputB| |outputA| |outputB| MemoryBuffer |cFAA | |cFAA | |cFAA | |cFAA | +------+ +------+ +-------+ +-------+