Nodes API

The Nodes API consists of multiple frameworks that includes the public declarations of interfaces and other usable classes, structures and functions that will allow for the manipulation and creation of graph nodes.

Introduction

'What is a node system?'

A nodes system makes algorithmic functionalities available as separable entities. These entities are called nodes and they carry properties called ports, which can either be input or output ports. With its input ports, a node does receive data to carry out its functionalities and with its output ports it does make the results of these functionalities accessible to other nodes.

Nodes are displayed as graphical elements that can be connected to other nodes to exchange specific information. Such connection of multiple nodes, a node system, can be used to execute their combined functionalities. This bears the advantage that custom assets can be created for recurring tasks, custom functions or tools. Nodes also make it possible to access functions that are not or not fully accessible via the common command and object interface of Cinema 4D. Such a node system of connected nodes must have a singular root node. The root node and any other node may have an arbitrary number of child nodes. Within a node system, nodes can be grouped, forming a sub-hierarchy where the group can be viewed as a new root.

The node framework currently provides two major approaches, scene nodes and material nodes. Scene nodes allow for the creation of geometry, deformers, distributions and other scene related entities, while material nodes provide material definitions with the node system. Such nodes of different functionality will live in different node spaces; which can be chosen in the top-right corner of Cinema 4D and are areas of operation for a set of implemented node types. If one has created for example a node material for an external renderer, then this node material will not be a part of the node space of node materials for the Physical Renderer. The Node Editor will then simply remain empty for such a mismatch of node spaces. Cinema 4D's asset browser respects such node spaces, as it will only display nodes to the user that match the currently active node space.

'What is and what is not possible?'

  • Can I create a tag and attach my own node base system? That is currently not possible.
  • Can I create a new node for scene nodes or the material nodes space? Yes, you can define your node to be compatible with both systems or restrict it to a node system or a node space.
  • Can I share my nodes? Yes, just like a plugin, you can share the nodes you create to third party uses. See also Plugin Development .

Frameworks

The Node API comes with multiple frameworks, the cinema.framework, graph.framework, assets.framework, nodespace.framework, nodes.framework, and the exchange.framework. See MAXON API Frameworks for more information. They can be used to implement a node as either a material or scene node. Third party users can use this to create assets for a node space with custom node types to support their own render engine.



Glossary

Node Space A node space represents a container for a purpose bound node system. Each node material provides a container which can be populated under a specific space identifier. Entries in this container store node graphs and provide connections to visible functionalities of Cinema 4D.
Node System A node system stores a hierarchy of objects - nodes and ports - and connections. This is the fundamental data structure which the user edits through the maxon::GraphModelInterface from graph.framework.
GraphNode A GraphNode represents a general node in the hierarchy of a GraphModelInterface. There are five GraphNode types: true node, input port list, output port list, singular input port and singular output port. A node may have attributes, and if it is a port, it may be connected to other ports.
True Node A type of GraphNode, which represents a tangible node as it can be seen in the node editor by the user. It contains one input list and one output list with one or more children on each.
Port A type of GraphNode, it can be a singular port or a port list.
Bundle Port A port that have sub-ports. This port allows to add several connections at once.
Variadic Port A VariadicPort manages ports with a dynamic number of instances.
Port Forwarding User nodes support port forwarding; which means that they may pass-through values unchanged from their inputs to their outputs.
Wire Represents a connection between two ports. A port connection consists of up to eight independent wires.
Node Editor Allows users to create nodes and connect them into complex setups.
Resource Editor Allows developers and users to create custom user nodes, customize the user interface and define or translate strings.