question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Feature : 'Spreadsheet' Node

See original GitHub issue

Summary

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:

image

Adjusting render options such as AA samples across shots requires a graph like the following:

image

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.

Spreadsheet Node Editor UI v1

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.

Arwork.zip

Issue Analytics

  • State:closed
  • Created 4 years ago
  • Comments:8 (4 by maintainers)

github_iconTop GitHub Comments

1reaction
johnhaddoncommented, Oct 25, 2019

What should the interaction be to make a cell empty, and then non-empty again? I propose :

  • Newly created cells are non-empty. Non-sparse spreadsheets are easier to understand, and cover a large range of use cases, so should be the default.
  • We don’t show a separate graphical item for “emptying” a cell. It would take up valuable real estate and make the standard case of a non-sparse spreadsheet much harder to read.
  • Instead you can “empty” a cell via the right-click plug context menu for that cell.
  • You can make an “empty” cell non-empty by double clicking in it.
0reactions
johnhaddoncommented, Nov 26, 2019

We’re adding an option to “Show Name” in the GraphEditor, so important spreadsheets can be made more prominent :

image

Read more comments on GitHub >

github_iconTop Results From Across the Web

Node.js quickstart | Google Sheets
Create a Node.js command-line application that makes requests to the Google Sheets API. Objectives. Set up your environment. Install ...
Read more >
How to Use Node.js with Google Sheets | by Tirlochan Arora
In this tutorial, we'll cover how to use Google Sheets API with Node.js for basic reading and writing data in a Google Sheet....
Read more >
Visualize Google Sheets Data in a NodeJS App - Crowdbotics
To read data from this spreadsheet in the Nodejs app, click the button Share from the top right side and click on the...
Read more >
Getting Started with Google Sheets API in Node.js - Section.io
Google Sheets API enables programmers to create applications that can read, write, and update a Google spreadsheet. In advanced stages of ...
Read more >
theoephraim/node-google-spreadsheet - GitHub
Google Sheets API (v4) wrapper for Node.js. Contribute to theoephraim/node-google-spreadsheet development by creating an account on GitHub.
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found