Page MenuHome

Node Group Inputs
Open, NormalPublic

Description

Node groups serve the purpose of combining multiple nodes into reusable components. To make them more useful, node groups can have a set of inputs that the "caller" has to provide. Currently, node groups have one Group Input and one Group Output node. This works well for many cases. However, I'd argue that there is a better way to do it (both approaches are used in multiple other pieces of software).

Some motivation for implementing a new approach:

  • When a node group needs more inputs, there is usually a large node on the left side of a node tree that has links to many other nodes. I'd argue that these links add more confusion than they actually provide information to the user. At some point it becomes quite hard to follow these links through the entire node tree.
  • In the current implementation, there is no mechanism that supports grouping of inputs.
  • Important information like the min/max/default values is hidden in a panel in the sidebar.

Personally, I think it would be good to allow multiple Input Parameter nodes in a node group. Something like this:

Some notes on this approach:

  • For different data types, a different set of settings can be shown. Of course the node can also be collapsed when not all information is necessary.
  • The node can be placed exactly where the value is needed, providing better information when actually working on the node tree.
  • All the settings can still be shown in a side bar to have all information accessible in a single place.
  • We could also allow multiple inputs per Function Parameter node for better grouping of related settings.

Implementation wise, this approach might actually be simpler than the old solution.
At the same it scales better when node trees get larger and when we want groups to become more powerful.

Details

Type
Design

Related Objects

Event Timeline

Jacques Lucke (JacquesLucke) triaged this task as Normal priority.

Another variable about inputs that is very not easy to change is the way in which they are displayed. Floats and Vectors can be displayed in different ways, and maybe other things too.

Float can be displayed as a slider that "fills up", or one that does not.

Vector can be displayed as just a single vector pin, or a vector pin that shows 3 number sliders until something is plugged into it, or as a circle that the user can click and drag to set the vector's value (This is currently broken though), or as a dropdown button that will display the 3 numbers when clicked. (This doesn't seem to work with nodegroup inputs though)

I think it would be nice to be able to choose how these things are displayed on the nodegroup input. It could apply to new types a well, for example booleans could be a checkbox or a toggle button.

Another idea I'd like to throw out there is splitting and recombining pins that may have sub-components. Although I guess this is not strictly related to node group inputs, but maybe the most relevant to them. Here is how this works in UE4:


(Note: "Recombine" option becomes grayed out if something is plugged into one of the pins. "Split" option doesn't even show up if something is plugged into the pin.)

But this is a "nice to have" priority at best, since it doesn't add actual functionality, since the same thing can be achieved with converter nodes. But it looks kinda cool tho doesn't it? :)

We definitely want to give users control over how node group inputs are displayed later on. However, that topic is orthogonal to the one presented in the original post. Maybe, the topic name should have been more precise.

I'll probably create a separate design task for this in the future.

It's not directly related to your proposal, but if we rethink the way we provide group inputs as nodes, we might just as well think about the ability to expose every possible node input type, like for example a dropdown, a color picker, a toggle checkbox, you get it.