[Free addon] RenderNode for blender[WIP]

RenderNode is a node basic workflow for render in blender.
You can use it to dynamic generate path for different setting of rendering.
It is still in developing, but can be use for work right now

Develop Feature

Download Download the latest commit:

Geometry Nodes field style workflow

  • Much easier, faster and cleaner


  • group nodes
  • new switch node for all types sockets (no 'Variants Node’any more, use a direct input socket)
  • input nodes (object/material/float/vector/int/bool/string)
  • utility nodes (math/vector,boolean math/string operate)
  • get / set nodes
  • new render list node and get render list index node

  • Performance (Evaluate system)
    • develop based on rigging_nodes , provide faster speed
  • UI
    • remove old draw outline, draw process time and node name instead instead
    • dynamic enums/sockets for user’ preference (render engine, color manage,etc)
    • power selector for switch active task in render list node

Know Limited

  • When edit inside a render node group, it won’t update the whole tree, you should always set the active task on the base root

what does it do ? can i easily set to render different objects/collections to different render folders ??? that would be amazing

can you please add viewport rendering to it ?


But its not this easy , here i expected that the background and helicopters are rendered to different folders, , the helis rendered fine, but in the second run the background AND the helicopters were hidden , so i got blank frames. i think this might be just a bug though and not intended ?

But when its ready this addon will be great !!!
but yeah we need viewport rendering and offscreen rendering in this addon for fast rendering , to quickly render previews and precomp our aftereffects/nuke/whatever comps.

edit2: another bug … the visibility isnt set back after rendering or escaping rendering. dude this addon will save my life lmao ! its pretty much done already , just a few bugs here and there !

crashes on load with:

Traceback (most recent call last):
  File "C:\Program Files No Install\BLENDER\Builds\daily\blender-3.0.0-beta+daily.22ffd69a91c9\3.0\scripts\modules\addon_utils.py", line 351, in enable
    mod = __import__(module_name)
  File "C:\Users\alexm\AppData\Roaming\Blender Foundation\Blender\3.0\scripts\addons\RenderNode-develop\__init__.py", line 44, in <module>
    globals()[name] = importlib.import_module(name)
  File "C:\Program Files No Install\BLENDER\Builds\daily\blender-3.0.0-beta+daily.22ffd69a91c9\3.0\python\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "C:\Users\alexm\AppData\Roaming\Blender Foundation\Blender\3.0\scripts\addons\RenderNode-develop\nodes\Scene\SetSceneColorManagement.py", line 34, in <module>
    list_display_device = [name for name in search_ocio(rule_display_device)[0].split(', ')]
  File "C:\Users\alexm\AppData\Roaming\Blender Foundation\Blender\3.0\scripts\addons\RenderNode-develop\nodes\Scene\SetSceneColorManagement.py", line 21, in search_ocio
    with open(ocio_path, mode='r') as f:
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\WINDOWS\\system32\\3.0\\datafiles\\colormanagement\\config.ocio'

so somehwere the paths get mixed up there

i changed get_ocio_path() like this, that works fine.

def get_ocio_path():

    """get current blender version cm"""

    bl_data_path = bpy.utils.system_resource("DATAFILES")

    cs_folder = os.path.join(bl_data_path, 'colormanagement')

    return os.path.join(cs_folder, 'config.ocio')

edit: pushed on github

Another good feature would be to have the ability to render each “task” seperately, and not just all at once

thanks! I will fix this later

RenderNode is now currently writting properties to blender data. I havn’t working out a way to store the source atttribute instead of overwritting it (Though geo nodes, set material may be find)
If this was done, It may look like a node style of take system.

just store it in a variable, i dont see the problem …

but another problem i see is that the addon tries to pick all cameras/objects/collections from all scenes and not just the actual one … you could get all the stuff from scene instead of blenderfile (which might contain lots of scenes with entirely different collections etc.)

a scene in blender is not just another camera shot but an entirely new scene with new characters and new location new objects and new collections

Store an attribute is not such a simple thing. What you want to have is not something like a executing
a material nodetree/geo nodetree that generate something new but a take system in houdini or cinema 4d. It need to acess the stack of the current scene and overwrite it to a new take.
With blender’s python way, you need to subscribe everything you want to change, and when you remove node or not execute it, it restore the attribute. (I don’t think it is a perfect and efficient way to make it, so I leave it until now. Maybe you have a better a to achieve it.)
About the second point, I just follow the design of blender itself. A scene allow to use an object from another scene. This due to blender’ library style data structure.

1 Like

ok i thought you replace just every changed value before rendering and set it back to the original value after rendering (either with a backup value or just calling undo(good for undoing collection disable, otherwise all disabled items inside the collection get reactivated too)).

to the second : yeah thats true but the scene also exposes all its children , you could filter them, theres no sense to hide a collection in scene A while scene B is rendering.

both scenes could have a collection with the same name too. like “main_character” or “background”

Yes… Restore value after render is simple and I make one in the previous version. However, rendernode is also set up for those who want to change their settings in look-dev, which means they might change any settings at anytime with mutiple times. You need to get the users’ operation and protect them(Just like the main take in take system, usually use to be the editing one) And blender api’s msgbus seems can not have mutiple subscriber on the same object. Therefore varient setting is not possible
Get your point at the second point: you want a scene switch node right ? It is in then previous version and now I am redesigning it.