Rigging nodes

New release:

0.3.0

Update requirements

  • To update files created with previous versions of this addon:
    1. Make a backup of the original file.
    2. 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.
    3. Update the addon
    4. 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).

New release

0.4.0

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)

Removed

  • Nodes:
    • “Is Subtree”
    • “Get Armature Property”
    • “Set Armature Property”
    • “Get Curve Property”
    • “set Curve Property”
2 Likes

0.5.0

Old node groups must be upgraded to this version with the “Create Correct Groups” operator in the side panel (n)

Added

  • It is now possible to pick an object directly from an object ref socket

Changed

  • Node groups now work with the default blender group input and group output nodes
  • Multiple input and output nodes are now supported in the same node group
  • Improved UI

Fixed

  • Error inspection operator when executed from inside a node group
  • Node reconnection between not compatible sockets
2 Likes

Hi,

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.

0.6.0

Added

  • New “Action” socket

  • New nodes:

    • Rotate bone
    • Join Armature
    • Apply Action
    • Geometry Functions (2D vector functions have been ignored)
  • 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
2 Likes

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.
test
and here is the .blend file:
example.blend (772.1 KB)

2 Likes

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


would be more intuitive in my opinion.

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.

Thanks for the response,

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).

This is really a awesome node rigging tool.

Of course! :man_facepalming:

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:

bpy.data.node_groups['your_node_group_name'].nodes.active.inputs[1].name = 'new_name'

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

1 Like

You’re crazy! Thanks man! Appreciate it!

1 Like

0.7.0

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)
5 Likes