Procedural modeling in Blender using Node Editor
BlenderArtist Thread: https://blenderartists.org/t/sorcar-procedural-modeling-in-blender-using-node-editor/1156769
Intro & Tutorials: https://www.youtube.com/playlist?list=PLZiIC3gdS_O7nCm1-xpWbZmTQWeL5c6KV
Trello (Project Tracker): https://trello.com/b/aKIFRoTh/sorcar
Documentation: https://github.com/aachman98/Sorcar/wiki
Sorcar is a procedural modeling node-based system which utilises Blender and its Python API to create a visual programming environment for artists and developers. Heavily inspired by Side-FX Houdini, it presents a node editor with a variety of modular nodes to make the modelling workflow easier and fast. Most of the nodes are blender internal operations (bpy.ops.mesh/object) which also makes it easier for frequent blender users to manipulate geometry. It helps the users to quickly create 3D models and control node parameters to generate limitless variations in a non-destructive manner. It also provides the users to view and edit mesh on any stage of the node network independently, with realtime updates.
Latest Release (v3.2.1)
Requirement: Blender 2.81 or later
- Download the zip file and install it as a Blender addon (Edit -> Preferences... -> Add-ons -> Install...)
- Open Sorcar Node Editor (Do not remove the 3D viewport as it is required by some operations like extrude, transform, ...)
- Click on the + button to create a new tree
- Press Shift+A to open the nodes menu. Alternatively, navigate through tabs on the Right panel in the node editor
- Select the desired node and press "Set Preview"
Open blender using a command prompt to view logs and errors, if encountered.
- Node-Groups to collapse big node networks into a single node with custom inputs & outputs
- Simplified node sockets with internal data conversion for the convenience of users.
- Colour-coded nodes (preview, error, invalid inputs etc.) for easier debugging.
- Multi-level heirarchy & auto-registration of classes for easy development of custom nodes in any category (existing or new).
and more...!
- Export nodes as python code
- Send to UE4/Unity (live-link)
- Point scatter & voronoi fracture nodes
- Debugging tools: Watch/track values of node parameters
- Complete integration with Blender's internal dependency graph
- Node-Viewport link: Create nodes automatically in editor based on actions in 3D viewport
- Landscape (noise/masking/erosion) and Foliage (grass/bush/trees) nodes
- Added support for object registration & unregistration on each evaluation (handled by nodetree instead of individual nodes)
- Added custom variables in "Custom Python Script" node: _C (bpy context), _D (bpy data), _O (bpy ops), _S (context scene), _N (self node), _NT (self nodetree), _VAR (nodetree variables), _IN (input socket data)
- Added "Select by Index Array" selection node
- Added "Default" input socket in "Get Variable" node to set value if variable not initialised
- Added "Hide Original" bool input prop in "Scatter" node
- Added "Clear Variables" nodetree property in "Properties" UI panel to clear data on re-evaluation
- Added "Clear Preview" operator (shortcut: Alt+E) to clear current preview node
- Added "Execute Node" & "Clear Preview" ops to "Utilities" UI panel
- Improved "Send to Sverchok" node to include selection mask with mesh data sent
- Improved "Receive from Sverchok" node to set selection mask to mesh data received
- Improved "Get/Set Variable" nodes to initialise empty variable in nodetree before accessing property
- Improved "Execute Node" operator: removed redundant tree type check
- Improved "apply_all_modifiers" & "remove_object" helper methods
- Fixed "Separate" node: object array output instead of single object
- Fixed socket interface classes for node-groups
- Fixed "Select Vertices by Connection": switch to vertex mode before selection
- Renamed "Merge" & "Delete" nodes: added "Component" suffix
- Renamed "Cursor" node to "Cursor Transform"
- Renamed "File" input socket to "Directory" in "Export FBX" node
- Added "Node Group" utility node
- Added "Group Nodes" and "Edit Group" operators to create/modify node groups
- Added new keymaps for creating and editing node groups (Ctrl+G, Tab)
- Added UI panel base class and 3 new panels: "Properties", "Utilities" and "Node Groups"
- Added "Send to Sverchok" utility node to pass mesh data (verts/edges/faces) to Sverchok node (Requires "Receive From Sorcar" node in Sverchok nodetree; awaiting PR #3281)
- Added "Receive from Sverchok" input node to fetch mesh data (verts/edges/faces) from Sverchok node (Requires "Send To Sorcar" node in Sverchok nodetree; W.I.P.)
- Added "Text Block" constant node to output multi-line string from Text Editor
- Added node interface base class and sub-classes for all sockets to support node-groups (with custom properties)
- Added Wiki and Bug Reporter links in add-ons manager (#127)
- Improved object input nodes to clean up geometry when removed
- Improved socket base class to show error icon when execution fails
- Improved "Custom Object" input node: inherit from input base class, apply all modifiers before execution
- Improved Import/Export nodes to select directory path using file picker UI
- Improved "Material Parameter" node to show all available nodes & sockets as a drop-down (search)
- Improved "Scene Info" node: added new outputs for world unit scale length, active/selected/all objects from the scene; removed "Realtime" tree property
- Improved "Duplicate Object" node: added "Linked" input socket
- Improved "get_override" and "sc_poll_op" helper methods
- Improved all operators: show tooltips, new category (prefix)
- Improved all socket base classes to support node-groups
- Fixed socket base class to avoid executing node-group input nodes
- Fixed "Dissolve" node
- Fixed nodetree execution
- Fixed "Array" socket label (length of the evaluated array)
- Fixed "Instancing" node
- Added "Set Dimensions" & "Set Object Name" object operator nodes
- Added "Add ..." input nodes to append primitive object geometry to current object
- Added "set_preview" method in nodetree class
- Added curve ops base class & "Curve Shape/Geometry/Spline Properties" nodes
- Improved "Object Info" node to output object's name, dimensions and bounding box vertices
- Improved "Component Info" node to output face area
- Renamed input nodes to "Create ..." (added prefix)
- Renamed "update_ext" nodetree method to "set_value"
- Fixed "remove_object" helper function
- Fixed vertex group selection & component operator nodes
- Fixed "get_override" helper method to search for correct window/area/region
- Added keymap support to quickly execute selected node (Key: 'E')
- Added new "Curve" category & socket to handle objects with curve data
- Added method for modifying node parameter externally (automatically re-evaluates nodetree)
- Added "Import SVG" & "Text" curve input nodes
- Added "Convert to Mesh" & "Convert to Curve" nodes
- Added "Create Object" input node
- Added "QuadriFlow Remesh" object operator node
- Added "Warp" & "Randomize Vertices" transform nodes
- Added Weld, Lattice, Shrinkwrap & Weighted Normal modifier nodes
- Added "Proportional Editing" & "Snap" settings node
- Added "Clear Parent", "Get Parent", & "Get Children" object operator nodes
- Improved "Scatter" node to support instanced scattering
- Improved "Maths Operation" node to include more operations & better menu layout
- Improved "Parent" node to include option to set the inverse parent correction
- Improved "Skin Modifier" node to allow skin resize for selected vertices
- Renamed transform nodes to "World/Local Transform"
- Fixed issue with Crease, Edge-Slide, Skin-Resize local transform
- Fixed custom object/curve nodes to hide original object
- Fixed issue with rerouting socket connections
- Fixed transform nodes to use snapping & proportional editing settings
- Fixed object deletion helper method to remove orphaned data
- Fixed "Select Nth" node parameter minimum value
- Added "Voxel Remesh" object operator node
- Added "Raycast (Scene)" utility node (renamed "Raycast" to "Raycast (Object)")
- Added "Instancing" & "Parent" object operator nodes
- Added "Empty" and "Single Vertex" input nodes
- Added "Hide/Unhide Component" and "Mark Component" nodes
- Fixed "Element" output pin type of "Begin For-Each Loop" node
- Fixed issue with addon activation
- Fixed int conversion in "Shortest Path" selection nodes
- Added "For-Each Component Loop" nodes
- Added "Get/Set Variable" nodes
- Added "To Sphere" transform node
- Added "Select Vertices by Connections" selection node
- Fixed issue with reset() attribute
- Improved "For" & "For-Each" loop nodes
- Improved "Select Manually" node
- Added noise nodes (cell, fractal, voronoi, ...) in a new category "Noise"
- Added array operation nodes (add, remove, search, ...) in a new category "Arrays"
- Added "Material Parameter" node
- Renamed "Edit Mode" node to "Set Selection Mode"
- Moved "Get Element" & "Make Array" node to "Arrays" category
- Added selection type input socket in "Set Selection Mode" node
- Added custom overridable method for socket layout drawing
- Removed redundant sorcar_updater folder (also added in gitignore)
- Added addon updator by CGCookie
- Fixed issue with realtime update checkbox in "Scene Info" node
- New socket type: Selection Type
- Ability to change selection type directly though selection nodes
- Added issue templates for bug report & feature request
- Support for Blender 2.8
- New architecture for data flow node executions
- Improved socket types and node hierarchy
- Internal data conversions
- @tomoaki-e33 (Tomoaki Nakano) - Active Developer (#107, #110, #111)
- @devilvalley (袁腾鹏) - Bug fix in "Select Nth" selection node (#106)
- @CORPSE-SYS - Active Developer (#83, #96)
- @zebus3d - Active Developer (#88, #90, #104)
- @CGCookie (CG Cookie) - Addon updater (Github)
- @8176135 - Individual edit mode type in selection nodes using a new socket (#80)
- @BrentARitchie - Documentation Maintainer
- @huiyao8761380 (TangHui) - Documentation Maintainer
- @Megalomaniak (Felix Kütt) - Documentation Structuring
- @kichristensen (Kim Christensen) - Port Sorcar (v2) to Blender 2.80 (#54)
- @SevenNeumann (Mark) - Icons for Sorcar & layout design for main menu (#46)
And the amazing BlenderArtists community!