Output Size


Output Size is a property present on every Substance Graph and every node within a Substance Graph. It's the first property under Base Parameters. It affects the resolution (in pixels) of all nodes in a graph, and the final outputs created by a Graph. The concept of Output Size, or Resolution is very important in Substance Designer and when using SBSAR files in other applications. This page explains the different modes, what they do, where you can find them and how to change them.

Relative to Input

In this mode the resolution of a node is determined by the resolution of the node plugged into it.

Only available on nodes with inputs. With multiple inputs, the first, main input drives the resolution.

Displayed in relative logarithmic scale.

Reasonably safe choice, but pay attention with Bitmap nodes starting a chain.

Relative to Parent

In this mode the resolution of a node or graph is determined by a parent. The parent is either the graph for a node, or the application for a graph.

Available for nodes and Graphs.

Displayed in relative logarithmic scale.

Safest choice, ensures full control over resolution in all scenarios.

Absolute

In this mode resolution is set to an absolute value, not influenced by anything else.

Available for nodes and Graphs.

Displayed in absolute, linear pixel scale.

Usually not a good choice, unless in very rare, specific cases.

Modes on other parameters

These 3 modes are not exclusive to Output Size, they apply to most Base parameters like Pixel Size or Tiling. They're just less frequently used there.


Changing Output Size Mode

Changing the mode is simple. Select a Node, or the Graph properties (doubleclick empty area, or select Graph in explorer). Then find the Base Parameters rollout, and find the Size Mode. Click the Inheritance dropdown, and select an available mode to change it.


Size Scale

Output sizes and resolutions within the Substance Ecosystem are always consistent with limits imposed by graphics hardware. That means any Resource, node or output needs to fit within sizes that are a power of 2. These sizes can be noted in two ways: as absolute pixels, stating the exact resolution, or as logarithmic steps, where each increment represents the amount of times 2 is multiplied with itself. 

You don't have to aware of this all the time, but when working with relative scales it's good to be aware of what an increment exactly is, or when dealing with size in functions it's good to know you can use both methods, as they each have advantages.

Keep in mind, because texture are two-dimensional, each step up in resolution is exponential, meaning there are four times as many pixels in each step up. For example 128x128 textures have 16.348 pixels, 256x256 have 65.536 pixels. This affects performance!

Logarithmic / Power of 2absolute pixel
7128
8256
9512
101024
112048
124096
138192

Relative Size

Two Output Size modes are relative. That means they take their size from somewhere else as a starting point, and then optionally scale it up or down. 

Modifications on that starting resolution are in logarithmic scale, ranging from -12 to +12, with default being 0. You have separate control of width and height of resolution, each with their own parameter. Every step means a doubling or halving of resolution. The below table gives an example of how relative resolution changes (in one dimension):

-5-4-3-2-10+1+2+3+4+5
16326412825651210242048409681968196
641282565121024204840968196819681968196


Notice how above 8196, the size is capped. Substance Designer and other applications generally don't support resolutions over 8196, and even 8196 requires strong, recent hardware to guarantee stability. It's generally recommended to use 4096 as a safe, upper limit.

Below 32 the resolution is not capped, but it is not recommended to go smaller than 32, as there are no performance gains, and efficiency actually drops again with such small resolutions.

When to use scaling for relative modes?

It's not very common to use scaling options on Relative modes, usually this is something for advanced users. Reasons to do relative scaling can be:

  • Cheap blurring (scale down then scale up).
  • Performance optimisation on heavy filters and nodes. No need to run full res, or tiling can work just as well.
  • Cheap stretching or squashing using non-square sizes. 

Parent For Nodes and Graphs

When nodes are set to use Relative to Parent Output Size, their size is driven by the size of the Graph they are a part of. When Graphs are set to Relative to Parent, their size is driven by the application's default size.

This means all nodes in a Graph can be set to Relative, but the Graph can still be absolute, meaning no control is possible once Published. Similarly, if a Graph is Relative to parent, with it's resolution being dynamic, you can still have no control if nodes are set to a combination of Absolute and Relative to Input.

The Parent Size is set through the Parent Size Toolbar  in the Graph View. Enable the toolbar, then change the size with the dropdown.


Example Problems

If you are a new Substance Designer user, you might run into some common problems. We'll list some examples below, along with solutions

Problem

Above you can see an issue where the Parent Size control is grayed out, and the Graph being in an unwanted 256 resolution.

The problem is that the the Graph properties Output Size mode was (accidentally) set to Absolute mode, disabling any reliance on parent size.

The solution is to just set the Graph's Output Size mode to Relative to Parent.

Problem

Above you see a case where the output of a Graph results in a different resolution (512) than set in the Parent (1024), despite the Graph being set to Relative to Parent.

The problem stems from the Bitmap node. It defaults to Absolute Size mode, and picked 512 as a resolution based on the bitmap file. The node connected to it are Relative to Input, and thus inherit their Size from the bitmap node.

The solution is simple: set the Output Size mode of the Bitmap node to Relative to Parent, resolving the issue further down the chain.

Problem

Above you see an issue where the resolution jumps much higher halfway through the chain, resulting to much higher output resolution than defined by the parent.

The problem is caused by a relative multiplier of 3 on the Transformation 2D node, making the output 8 times bigger.

The solution is to set the relative multipliers for Width and Height to 0, leading to no upscaling.