To update files created with previous versions of this addon:
Make a backup of the original file.
Make sure all the “Custom reroute” nodes removed in the previous version (0.2.0) have already been deleted or replaced with actual reroute nodes.
Update the addon
Execute the operator “Create correct tree types” found in the node editor’s side panel, under “Rigging Nodes Tree Settings”.
Added
Ability to correctly execute nodes inside groups, making working with groups much easier
“Only update selected nodes” option for speeding up the interface redraw in trees with too many nodes (ideally for splitting it into more manageable sub-groups)
New Nodes:
Armature:
Get armature property
Set armature property
Set armature layers
Set variable node has a button to select all the “Get” nodes using that variable
Fixed
Node group creation errors (links getting disconnected, missplaced nodes and sockets changing their types)
Changed
Only main node trees will be able to be selected in the node editor
Only node trees marked as groups will be selectable in the group node
Only node trees marked as loops will be selectable in the loop node
The order of the input sockets when creating a group is now based on the y position of the input nodes
It could take some work, but if performance gets good enough (likely through highly modularized node trees) this could even be usable for “ephemeral rigging” (or something similar)!
I gotta try using this… this could be so fun!
Hi, this addon does not replace the way rigs work inside blender in any way, It lets you modularize the rig building process instead. You will be able to create the same kind of rigs, but with a different approach and with an added reusable component to it.
Basically, the adaptation would be that all keyframes are pushed to the deform rig (possibly baked onto ones), and the meta-rig can be rebuilt/reconfigured at the press of a button or with a pie menu.
Optionally, the addition of an ‘interpolation’ layer could be used, where all keyframes are identical (or as close as possible) between FK and IK, and it only affects interpolation (and not how you interact with the rig).
Old node trees must be upgraded to this version with the “Update Nodes” operator in the side panel (n)
Added
Added buttons in the bone properties panel and bone constraints panel for selecting the nodes that edited those bones or constraints in the node tree
When a node fails to execute, the entire chain of nodes will show an error
Clicking on the error message of a node will send you to the node that made it fail
Some nodes now accept some inputs to be passed as arrays
Input sockets now have the option to output objects as references or as editable objects
Some nodes now have optional inputs that can be added through a dropdown menu
New Nodes:
Get bones
Get bone chain
Duplicate chain
Remove bone
Set bone roll
Extend array
Split array
Symmetrize
Create Bone Name
Boolean and Float array sockets can have their default values changed directly in the node
Nodes will fail to execute if their version is old. To upgrade them the “Upgrade Nodes” operator can be executed
Option in Input nodes to add the output object to a collection
Changed
Nodes that required sockets to be hidden to be ignored now have those sockets as optional, will always be taken into account and can be added with a dropdown menu
String and Enum sockets are now compatible with each other
Update Nodes operator now updates every node in every node group in the file
Merged get/set curve and armature nodes into the object get/set properties nodes
Fixed
Issues with input nodes
Updating sockets in node group
Crashes related to enum properties
Execution speed improvement by caching socket connections in dictionaries
Slow UI due to a large ammount of links (solved by caching connections aswell)
very cool that you start developing a rigging node system.
Do you have a precise goal in mind how does your system will work, or is this more a wip experiment.
I would love to have some string list option to create many bones at once.
Also relationchips between a set of bones would be very cool where i could use the string lists.
Do you have a documentation about the custom script so i can test some mockups?
Do you have some information about pynodes to implement a system like yours ?
Right now I’m just implementing the nodes I feel I need for the rigs I’m building at the moment.
You can create a list with the “Make Array” node. There are string arrays and you can loop through an array with the loop node. You can also create an array of vectors that you can feed into the loop node.
Some nodes have a dropdown that lets you select between modifing only one bone or multiple at the same time (by giving it a list/array). If some specific node does not have this, you can still go with a loop node again, or just suggest a change for it in this thread
I gave some info about this in this post. Nothing has changed since then as I don’t personally use this right now
You can read the documentation for NodeTree and Node classes and inspect the code for my addon or Sverchok.
Set property nodes can now recognize actions (useful for action constraint)
Pressing control while activating the “Edit Datablock” operator on the input nodes won’t remove from scene the objects created by the current tree.
“Bool” sockets are now compatible with strings, bones, enums, integers, floats and objects
“Bone” sockets now show the possible bones if the node has another socket named “Armature”
Fixed
Executing the node tree from inside a node group sometimes failed
Changed
Set property nodes now respect the order in which the sockets are ordered (useful when changing the connect and parent properties of a bone at the same time)
Removed
“Reference Object” Node has been removed as it is now possible to pick the object directly from an object reference socket
Hey! I’ve been following the addon and think it’s amazing! Not sure if this is the place to post this but I noticed you left one little thing behind, the super simple yet awesome space-switcher addon. There’s nothing like it out there and it just lacks the tiniest bit of functionality to make it perfect for simple rigs. You can do IK/FK switches but it would be awesome if you could add functionality for something like a parent switch for multiple bones to be possible.
I understand that you’re focused on the Rigging Nodes addon, it just would be nice if somewhere down the line you could add that for the addon.
Hi,
Could you explain in more detail how you’d like the addon to behave?
I’ve been able to setup a parent switch with it (this is the addon for anyone else reading this). It might be a bit tedious to setup but it could be automated with rigging nodes.
The option to create the “hide” drivers doesn’t work that well in this case, I might take a look at it to improve it.
and here is the .blend file: example.blend (772.1 KB)
The ability to add a custom amount of bones in one condition (including a one button snap), maybe even some list UI like Rigify has if that’s not too much hassle.
Your workaround is nice, I found my own too, but if it looked something like this
One more thing, just as a bonus thought: It would be nice if the space switcher would show up on specific bones, kind of like properties but with the ability to show up on multiple bones at once.
In the image you show the rig should behave quite differently, you’d have to map the drivers of the constraints to different ranges between 0 to 1
So parent 1 would be 0->0.3, parent 2 would be 0.3->0.6 and parent 3 would be 0.6->1
To switch between the spaces, I could add an enumerator instead of the two buttons.
I’ll divide the addon into two kinds of switches then, the current one, and a new one where you don’t setup the copy directions, and just has a list of different bones.
If you set up 8 bones. Selecting the third one will copy the transforms of the current active bone in the list and would set the property to: 1/8*(3-1)+1/8*2
Did I understand it correctly?
I’m not sure what you mean. You want the panel to show only the spaces for the selected bones?
That’s pretty much the idea, but instead of a float you’d use an integer with a max value of 2. (parent 1 = 0, parent 2 = 1 etc.)
“+1/8*2” I don’t know what this part means lmao
I believe so!
I have 4 IK/FK switches and 7 World/Local rotation space switches so that’s 11 switches total, and having them all shown at once is something that bothers me personally.
What I was saying is:
I select the left arm bones, and the “Left Arm IK/FK switch” pops up.
when I select the right arm bones, the “Right Arm IK/FK swtich” pops up, and the other switch hides.
it would be really nice to create from a list of strings bones.
The Add Bone node have no option for multiple and i need to create for each bone a node.
Also a option to create a string list and join other strings to it would be great…to avoid creating many different names for bones by typing each one into a list.
In the loop node its not clear for me how to do something inside the loop, and how can i get different Inputs with the same type in the script node If i want a start value (int) and a end value (int).
I’ll be sure to add the “Multiple” option in the next update.
You can modify a list of strings with the “Extend” (joins two lists toguether) or “Append” nodes.
You can also split a list with the “Split” node.
For the loop node to work, you need to connect sockets to the node and they will show inside the loop tree (open it up by selecting the loop node and pressing “TAB”)
Any socket that is connected to the “loop end” node will be updated for the next loop iteration, so if you’re updating an array in the loop, make sure you connect it to the loop end.
My bad, in previous versions you were able to rename the input sockets to you liking. I’ve fixed it on my end.
In the meantime, you can rename it with some code, make sure you have the script node selected and active:
I’ve updated the gitlab repository for the Space Switcher addon.
It now has the option to show only the switches for the selected bones and I’ve added the new type of space switching intended to be used with the Child of constraint.
I’ve also reorganized the code to support the changes so old configurations are not compatible with this version.
Here’s a test I’ve done: parent_switch_example.blend (754.3 KB)
Let me know if you have any problems
Some big changes have happened in this update. Sockets have been completely reworked and Arrays behave very differently. Old trees have to be updated to fix old array sockets with the update operator but most removed nodes will have to be manually replaced.
Added
New array sockets. One type of array socket for each socket type, instead of one used for all types.
Arrays now support matrix, quaterions, objects, actions, pointers and collections
New sockets:
Pointer (Points to an object + datapath, for editing nested properties)
Quaterion
New Nodes:
Pop (Array)
Insert (Array)
Math:
6 operators for integers
6 operators for floats
26 operatos for vectors
20 operators for matrix
23 operators for quaternions
Create Matrix
identity
translation
rotation
scale
diagonal
ortho_projection
shear
Logic
And
Or
Not
String Operator:
+
*
[ ]
[ : ]
in
not_in
replace
Edit Collection:
Append
Get
Remove
Append Multiple (Returns an array of pointers)
Flip Bone
Cache (Experimental)
Fixed
Crashes when grouping nodes
Improved execution times in heavy scenes (Having heavy meshes referencing the created armature in the scene was exponentially slowing down the creation of the rigs)
Get children option in the get bone property node now correctly returns an array of strings
Changed
Values are no longer stored in the sockets, and their values are cleared when re-executing the tree.
Linking groups from other .blend files will no longer link unnecessary armatures.
Math nodes have been merged into a single node
Logic nodes have been merged into a single node
Sockets are no longer unlinked when changing a node’s behaviour
More nodes now support array inputs
Set/Get property group nodes now require a pointer socket to be linked to them and be executed/valid for inputs or outputs to be selectable
Matrix socket no longer has a default value, if nothing is linked to it, the default value will be an identity matrix
Add to collection renamed to Edit Collection and added more opetions to it
Sockets now keep their default values when crating new inputs in a node group
Objects created in the node tree are relinked to the scene after the entire tree is executed (to avoid renaming vertex groups when renaming bones inside the tree)
Boolean sockets are now compatible with other sockets and their values will be automatically converted to True or False
Join Armature now removes the 2nd armature from the scene
Removed
Old Logic nodes
Old math nodes
Break vector
Replace String
To String node (different sockets can be directly connected to a string sockets now and their values will be automatically converted to string)