Feature : 'Spreadsheet' Node
See original GitHub issueSummary
The Spreadsheet node greatly reduces node graph complexity in a variety of production scenarios by allowing a single node (or set of nodes) to vary their plug values based on the current context. For example, it could be used to vary ShaderTweaks per-location or ArnoldOptions per-shot.
NOTE: This is a general-purpose building block node, that is a precursor to a light editor, or other specific lighting-oriented tools.
User story
As a user
What
As a user, I’d like to more easily author and understand repeated node actions. For example I’d like to be able to move and adjust individual lights from a locked publish, or adjust renderer options per-shot.
Why
As a User I regularly have to manage duplicate nodes in order to affect multiple locations, or vary changes across shots or render layers. For example:
Adjusting the position and exposure of lights in a light rig requires a graph like the following:
Adjusting render options such as AA samples across shots requires a graph like the following:
In both scenarios, there is no way to easily visualise the values set in all scenarios. I have to manually navigate to multiple nodes and observe them in the Node Editor.
As a developer
What
As a developer, I’d like to be able to create more ‘immediate mode’ UIs, that allow users to quickly affect their desired changes to a scene without having to manage multiple nodes manually. Ideally I’d like to be able to:
- Programatically create and manage some kind of ‘multi-action’ nodes with minimal construction boilerplate.
- Easily query applicable plug value sets for a given location.
- Provide a ‘single-node’ experience to less technical users.
Why
In order to provide a tool that allows users to interactively transform arbitrary scene locations, Gaffer requires a Transform node with a Path filter for each object. Maintaining these ever-growing node networks is cumbersome and produces an unwieldily graph. The problem is exacerbated as the number of nodes required to affect an action increase.
Feature proposal
The Spreadsheet node allows plugs from connected nodes to be promoted as columns in the sheet. Individual rows then provide a set of values for the connected plugs.
The spreadsheet UI will support promotion, allowing it to be added to a Box UI.
Rows and value selection
A single row is matched by a selector that determines the final values for the plugs for any given compute. The first matching row encountered when reading top to bottom is always used.
A persistent ‘default’ row provides fallback values for when no row matches a specific selector.
The selector is a simple StringPlug that supports context/environment variable expansion.
Rows can be individually disabled by an accompanying switch.
Columns
Each column represents an output plug. These output plugs can then be connected to another plug within the graph. This allows one spreadsheet to control multiple nodes at once. These nodes may be part of the nodes internal network if it is required to hide the actual nodes performing the work for aesthetic reasons (TBC whether you could should build convenience tool as derived classes with internal node networks, or simply box and promote the spreadsheet UI)
If a column’s plug is a NameValuePlug then combines the value and enabled plug into a single column with a decorating switch widget as per the standard Node Editor.
Example usage
Light editing
- Promote plugs from a Transform and a ShaderTweak node in a shot branch to columns
- Set the selector to
${scene:path}
You can now add shot tweaks to adjust the position and properties of lights in one place, and have an overview of all edits.
Render options
- Promote plugs from as ArnoldOptions node to columns
- Set the selector to
${shot}
You can now easily vary render settings per-shot without needing to create any branches, and view all your overrides in one place.
Issue Analytics
- State:
- Created 4 years ago
- Comments:8 (4 by maintainers)
What should the interaction be to make a cell empty, and then non-empty again? I propose :
We’re adding an option to “Show Name” in the GraphEditor, so important spreadsheets can be made more prominent :