6.0 Details of the New Node-based Modifier System
6.1 Advantages of the system
Having node-based modifiers would be a new and exciting paradigm for Blender.
Node systems have the advantage of allowing multiple roots in the execution
graph, and for the execution branches to grow back together (unlike a stack
or a tree form).
Practically, this results in a more flexible system. One single mesh input
could drive multiple modifiers. Modifiers could be blended together in
a configurable way with special blend nodes.
The priority for the SoC period is to port all current modifiers to the new
system, as well as implement the nodes listed in 6.2. In addition, the
following nodes will be created if time permits:
* UV Unwrap node
A UV Unwrap node, supporting all UV unwrap modes.
* Spherical effectors (e.g. a "bulge" modifier that bulges meshes at where an object is)
Riggers use these as part of rough muscle simulator setups.
6.2 List of Nodes
The following is a rough list of what would be desired in a complete node
modifier system. The nodes in this list will be completed within the SoC period.
The list will change to take user feedback into account.
The following node socket types will be defined: Color, Value, Vector3, Vector4
and Matrix.
6.2.1 Input nodes
* Mesh input - Inputs: None; Outputs: Mesh
Inputs a mesh into the node tree
* Object input - Inputs: None; Outputs: Mesh, Matrix
Inputs from an object and output a mesh (if needed
by the graph) and a matrix representing the object's
transform.
* Color input
* Vector input - Outputs: Vector
A four-component vector
* Matrix - Inputs: Vector, Vector, Vector, Vector; Outputs: Matrix
A generic matrix input node, that takes either three or four vectors
(depending on whether the user desires a 3x3 or 4x4 matrix) as inputs.
The vectors represent rows in the final matrix.
6.2.2 Math Nodes
* Matrix Math (multiply, invert, transpose) - Inputs: Matrix, Matrix; Outputs: Matrix
* Vector-Matrix Math (multiply, multiply with inverse) - Inputs: Matrix, Vector; Outputs: Vector
* Vector Math (multiply, subtract, add, divide, cross product)
Inputs: Vector, Vector; Outputs: Vector, Value (dot product result)
6.2.3 Transform Nodes
* Matrix Transform - Inputs: Matrix, Mesh; Outputs: Mesh
* Generic Transform (rotate/translate/scale/shear/warp)
Inputs: Vector(rotate), Vector(scale), Vector(translate); Outputs: Mesh
* Mesh Blend node
A simple blending node to blend between two deformed meshes. Note that
both meshes would have to have to have identical vertex ordering, and also
an identical number of verts.
6.2.4 Modifiers
* Triangulation node - Inputs: Mesh; Outputs: Mesh
* Mesh Concatenation - Inputs: Mesh, Matrix, Mesh, Matrix; Outputs: Mesh
This node would concatenate two meshes together. Each mesh would be transformed
by the matrix input following its input.
* All the currently implemented modifiers
6.3 Additional Node Ideas
The following is a list of additional node ideas that would most likely
be impractical to implement during the SoC period, but are nonetheless
usefull.
* Pynodes
Pynodes would be used to implement python-driven modifiers
* Cut
This node would cut a mesh with a plane and remove all geometry on one side
* Boolean
A generic CSG node
* An improved hook modifier with weight control and control
over the falloff curve.