Author Topic: Node bypass  (Read 7363 times)

Would be nice if there was an option on each node to allow the node to be bypassed easily.

I see this is the #1 request since February of last year...

https://allegorithmic.uservoice.com/forums/257908-substance-designer/suggestions/7149441-disable-a-node

Such a popular, simple request. Seems strange that it hasn't been implemented yet.


It's not that easy to do it in a way that would be useful. The problem is that it could only work with nodes which have exactly the same number of outputs as they have inputs, and for which the output types match the inputs one to one (a grayscale texture for a greyscale texture, a color texture for a color texture). Otherwise when bypassing the node you would end up with an invalid graph. And a large number of nodes (if not the majority) don't have corresponding inputs and outputs .
Last Edit: May 11, 2016, 12:11:18 pm

I see, thanks for the explanation. I do hope you guys can come up with some kind of solution eventually though because it would be such a productivity booster!

Do it just for each output  individually, a kind of red X inside the output circle 

Gotta admit I do miss this as well. But the grayscale vs rgb conflicts are a conundrum.
Maybe the 'Output' of the Node internal Output could be made dynamic ?
Correct me if I am wrong but the system already seems to exists for Inputs - there are some that can take both datatypes.
If the Output-Variable of the node could dynamically accept Floats and vec4s (so a dynamic struct depending on input) depending on what is fed in then the bypass is as simple as
OUTPUT = INPUTA
OUTPUT = INPUTB

etc.

I recognize that this is not an easy coding thing but in an ideal situation the way Outputs are defined are global variables in substance (so just called as 'Output = blala;' at the end of the fragment instead of explicitly saying 'float Ouput = Blala; )
As soon as the Output Vars can dynamically be constructed to accept both datatypes due to a change in the global variable no node would be broken as the result of the code change. Maybe I am thinking incorrect but I don't see a reason why the Output-Struct can't change and needs to be hardcoded.
Last Edit: June 15, 2016, 09:37:55 pm

Or even simpler, just dynamically copy the channels --- so if it is a Grayscale Output feeding into a RGB Input shuffle the Grayscale into RGB Channels internally then map it to the existing RGB Output on the Node that is bypassed.
Vice Versa on an RGB2FLOAT just use the Red Channel.
The bypass would need to artifically smarten up the bypassed Node's Output Section by inserting a copy channel if necessary before its Output but it seems less invasive to the code base this way. The inserted Node could be tagged with Metadata indicating that it was inserted automatically so it can be easily found and removed again once the bypass is turned off again or it could be a nodetype that only the program is allowed to create.

Where there is a will (or a buget ...) there's a way :)
Last Edit: June 15, 2016, 09:48:12 pm

What if there are 5 inputs and 3 outputs, or the other way round, which one goes where ? Which inputs to drop ? Which output to leave unplugged ? or should we connect some of the inputs to multiple outputs ? if yes which ones ?
I don't think (but I'd like to be proven wrong) that there is a way to solve that in the general case that would make this feature practical. Wouldn't this feature be useless if the users can't understand intuitevely how Designer has decided to reconnect the bypassed node inputs to its outputs ?
Last Edit: June 16, 2016, 12:23:41 pm

For reference I attached a video showing how mari handles bypassing.
Quick Explanation:

- Mari nodes generally don't have multiple Outputs. However when it does, it will pass the active 'noodle'/connection to those outputs
- By pressing CTRL+D you will cycle through the inputs that are passed directly to the Output (Output = InputA, Output = InputB etc.) . The active Input is marked in bold, deactivated inputs are crossed out.

I think it is important to remember where the usage cases for this are. You want to often turn off some sort of layering via a blend mode.
Sure, SD can have rather complex nodes with a lot of outputs but the vast majority of nodes where you want to use this feature have only one output.
So in general I would just make an assumption and pass the currently active Input to all available outputs instead of leaving this feature out completely,

Last Edit: June 16, 2016, 10:09:33 pm

What if instead of having an option in your node to bypass it you had a new "bypasser node" that you would attach to any existing node?

You'd attach it and it would be easy to find as it would be another node hanging there in the graph, attached to a single node. It would make it very easy to erase it or turn it on and off.

It would work like a parasite, sucking the life blood of a node and it could even have a new kind of visuals indicating just that!

What it would do would be very simply to read the inputs from the host node and expose them in the UI.

Then it would also read the outputs of the host node and expose them in the UI.

Finally, it would be a matter of having the user choose wich inputs will bypass directly to wich outputs.

It would be really sweet if you'd find a way to have a mini graph for the Bypasser node shown inside the parameters tray as the mockup below (otherwise I know it could be solved with some dropdowns, but that isn't as cool or intuitive as a node graph.)

Here's the mockup. Please consider that the input/output numbers should be the actual input/output names (Example: "Color", "Curvature", "Mask"...)




To simulate a bypass, you can use a Switch node in which you implement a function driving the flow into one branch or the other depending on a condition (that can be based on input parameters of your graph).

I read all the comments and i still don't get why is not possible to implement a bypass feature, just enable the button when it is applicable. For example, i always press backspace to see the results without a levels node and them do a ctrl+z after to see the results with that levels node again. I do this "Select-BackSpace-CTRLZ all the time, and it is practical in many situations and it would be way easier if there is a button that does just that. Just don't call it "Bypass", call it "Disable and relink" or "Go Around" or whatever makes sense. Why a "delete and relink" command is possible but a "disable and relink" is not? As i said, enable the option when the software detect it won't break the graph. If the node is a 3 input and 5 output and the softwarwe does not know what to do with the connections, simply do not enable the option for that node, but i don't see why can't i bypass a levels node that is connected to a slope blur.
Last Edit: January 27, 2020, 03:45:37 pm

Honestly I don't understand what's the problem  with  "bypass" . We asking it for years and it's always same weird excuse .   
   I had to redo all the nodes by myself to insert switch there but still it's nowhere as convenient as in Blender with M button for example because of visual indication.

Could we just have it in something having one pair of input/output for the start and in material blend nodes.

The long awaited "Disable node" is finaly here ! Thank You !
Right Clic on a node or a selection of nodes and select Disable selection" or Shift + D
Last Edit: February 01, 2021, 07:38:38 pm