Awesome
Sorcar
Procedural modeling in Blender using Node Editor
<!-- [![sc_](http://img.youtube.com/vi/VIDEO_ID/0.jpg)](http://www.youtube.com/watch?v=VIDEO_ID "Sorcar v3") --></br>BlenderArtist Thread: https://blenderartists.org/t/sorcar-procedural-modeling-in-blender-using-node-editor/1156769 </br>Intro & Tutorials: https://www.youtube.com/playlist?list=PLZiIC3gdS_O7nCm1-xpWbZmTQWeL5c6KV </br>Trello (Project Tracker): https://trello.com/b/aKIFRoTh/sorcar </br>Documentation: https://github.com/aachman98/Sorcar/wiki
About
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.
Release & Instructions
Latest Release (v3.2.1) </br>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.
Features
<p style="text-align: left; padding-left: 16px;"><strong>VISUAL PROGRAMMING</strong><br /><em>Don't like programming?</em></p> <hr style="padding-left: 16px;" /> <p style="text-align: left; padding-left: 16px;">Construct geometries using custom algorithms, maths or generate patterns without writing a single line of code!</p> | |
<p style="text-align: right; padding-right: 16px;"><strong>NON-DESTRUCTIVE WORKFLOW</strong><br /><em>Want to change cylinder vertices after bevel?</em></p> <hr style="padding-right: 16px;" /> <p style="text-align: right; padding-right: 16px;">Edit node parameters at any point without the fear of losing mesh data. Also apply same procedural operations to different objects easily.</p> | |
<p style="text-align: left; padding-left: 16px;"><strong>REAL-TIME UPDATES</strong><br /><em>Quick as the wind...</em></p> <hr style="padding-left: 16px;" /> <p style="text-align: left; padding-left: 16px;">Drive a parameter using current frame value (or manually change it) and see the mesh update in viewport.</p> | |
<p style="text-align: right; padding-right: 16px;"><strong>ITERATE & RANDOMIZE</strong><br /><em>Need multiple extrusions of random amount?</em></p> <hr style="padding-right: 16px;" /> <p style="text-align: right; padding-right: 16px;">Generate variations in mesh by using seed-controlled pseudorandom numbers. Use loops to handle repeatitive operations with same level of randomness.</p> | |
<p style="text-align: left; padding-left: 16px;"><strong>AUTOMATION</strong><br /><em>Modify, Save, Repeat...</em></p> <hr style="padding-left: 16px;" /> <p style="text-align: left; padding-left: 16px;">Use frame number to drive seed value and batch export the meshes in different files.</p> | |
<p style="text-align: right; padding-right: 16px;"><strong>250+ NODES</strong><br /><em>At your service!</em></p> <hr style="padding-right: 16px;" /> <p style="text-align: right; padding-right: 16px;">A growing list of functions available as nodes (operators & scene settings) including custom inputs, curve/mesh conversion, selection & transform tools, modifiers and component level operators.</p> |
- 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...!
Nodes
Inputs </br> Primitive Meshes (Cube, Cylinder, Sphere, ...), Empty Object, Import FBX, Custom Object from the scene, Create Object using arrays of Vertices, Edges & Faces | |
Curves </br> Custom Curve from the scene, Text, Import SVG, Geometry/Shape/Spline Properties, Mesh-Curve or Curve-Mesh Conversion | |
Transform </br> Set/Add/Randomize transform (Edit/Object mode), Apply/Copy transform in world/local axes, Create custom orientation | |
Selection </br> Manual, invert/toggle, loops, random, similar components or by their property (location, index, normal, material, ...) | |
Deletion </br> Delete/Dissolve selected components (or loops) | |
Component Operators </br> Bevel, Decimate, Extrude, Fill, Inset, Loop Cut, Merge, Offset Loop, Poke, Screw, Spin, Subdivide, UV Map, Assign material or vertex groups | |
Object Operators </br> Duplicate, Raycast/Overlap, Merge, Scatter, Set/Clear Parent, Voxel/QuadriFlow Remesh, Shading, Viewport Draw Mode | |
Modifiers </br> Array, Bevel, Boolean, Build, Cast, Curve, Decimate, Remesh, Shrinkwrap, Skin, Solidify, Subsurf, Wave, Weighted Normal, Wireframe | |
Constants </br> Number (Float/Int/Angle/Random), Bool, Vector, String, Selection Type (Face/Vert/Edge) | |
Arrays </br> Create/Append Arrays, Add/Remove elements, Reverse, Search, Clear, Count, Get | |
Noise </br> Cell (Vector/Float), Fractal, Multi-Fractal, Hetero-Terrain, Ridged, Turbulence (Vector/Float), Variable Lacunarity, Voronoi | |
Utilities </br> String/Bool/Vector ops, Maths, Clamp, Map, Trigonometry, Get/Set Variables, Node-Groups, Scene/Component/Object Info, Custom Python Script | |
Flow Control </br> For loop, For-Each loop (Array/Components), If-Else Branch | |
Settings </br> Cursor Transform, Edit Mode, Pivot Point, Snapping, Proportional Editing, Transform Orientation |
Upcoming Feature
- Export nodes as python code
- Send to UE4/Unity (live-link)
- Point scatter & voronoi fracture nodes
- Debugging tools: Watch/track values of node parameters
Future
- 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
Showcase
Changelog
v3.2.1
- 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
v3.2.0
- 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
v3.1.6
- 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
v3.1.5
- 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
v3.1.4
- 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
v3.1.3
- 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
v3.1.2
- 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)
v3.1.1
- 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
v3.1.0
- Support for Blender 2.8
- New architecture for data flow node executions
- Improved socket types and node hierarchy
- Internal data conversions
Contributors
- @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!