Power of 2
- Substance 3D home
- User guide
- Glossary
- Getting started
- Interface
- Interface
- Customizing your workspace
- Home screen
- Main toolbar
- Preferences
- Explorer
- Graph view
- Library
- Properties
- 2D view
- 3D view
- Dependency manager
- Resources
- Resources
- Importing, linking and new resources
- Bitmap resource
- Vector graphics (SVG) resource
- 3D scene resource
- AxF (Appearance eXchange Format)
- Font resource
- Warnings from dependencies
- Substance graphs
- Substance graphs
- Substance graph key concepts
- Creating a Substance graph
- Exposing a parameter
- Graph parameters
- Inheritance in Substance graphs
- Output size
- Values in Substance graphs
- Publishing Substance 3D asset files (SBSAR)
- Exporting bitmaps
- Exporting PSD files
- Sample Substance graphs
- Warnings in Substance graphs
- Nodes reference for Substance graphs
- Nodes reference for Substance graphs
- Atomic nodes
- Node library
- Node library
- Texture generators
- Texture generators
- Noises
- Noises
- 3D Perlin noise
- 3D Perlin noise fractal
- 3D Ridged noise fractal
- 3D Simplex noise
- 3D Voronoi
- 3D Voronoi fractal
- 3D Worley noise
- Anisotropic noise
- Blue noise fast
- BnW spots 1
- BnW spots 2
- BnW spots 3
- Cells 1
- Cells 2
- Cells 3
- Cells 4
- Clouds 1
- Clouds 2
- Clouds 3
- Creased
- Crystal 1
- Crystal 2
- Directional noise 1
- Directional noise 2
- Directional noise 3
- Directional noise 4
- Directional scratches
- Dirt 1
- Dirt 2
- Dirt 3
- Dirt 4
- Dirt 5
- Dirt gradient
- Fluid
- Fractal sum 1
- Fractal sum 2
- Fractal sum 3
- Fractal sum 4
- Fractal sum base
- Fur 1
- Fur 2
- Fur 3
- Gaussian noise
- Gaussian spots 1
- Gaussian spots 2
- Grunge concrete
- Grunge Damas
- Grunge galvanic large
- Grunge galvanic small
- Grunge leaks
- Grunge leaky paint
- Grunge map 001
- Grunge map 002
- Grunge map 003
- Grunge map 004
- Grunge map 005
- Grunge map 006
- Grunge map 007
- Grunge map 008
- Grunge map 009
- Grunge map 010
- Grunge map 011
- Grunge map 012
- Grunge map 013
- Grunge map 014
- Grunge map 015
- Grunge rough dirty
- Grunge rust fine
- Grunge scratches dirty
- Grunge scratches fine
- Grunge scratches rough
- Grunge shavings
- Grunge splashes dusty
- Grunge spots
- Grunge spots dirty
- Liquid
- Messy fibers 1
- Messy fibers 2
- Messy fibers 3
- Microscope view
- Moisture noise
- Perlin noise
- Plasma
- Caustics
- Voronoi
- Voronoi fractal
- Waveform 1
- White noise
- White noise fast
- Patterns
- Patterns
- 3D linear gradient
- 3D volume mask
- Alveolus
- Arc pavement
- Brick 1
- Brick 2
- Brick generator
- Checker 1
- Cube 3D
- Cube 3D GBuffers
- Fibers 1
- Fibers 2
- Gaussian 1
- Gaussian 2
- Gradient axial
- Gradient axial reflected
- Gradient circular
- Gradient linear 1
- Gradient linear 2
- Gradient linear 3
- Gradient radial
- Height extrude
- Mesh 1
- Mesh 2
- Panorama shape
- Polygon 1
- Polygon 2
- Scratches generator
- Shape
- Shape extrude
- Shape mapper
- Shape splatter
- Shape splatter blend
- Shape splatter data extract
- Shape splatter to mask
- Splatter
- Splatter circular
- Star
- Starburst
- Stripes
- Tile generator
- Tile random
- Tile random 2
- Tile sampler
- Triangle grid
- Weave 1
- Weave 2
- Weave generator
- Filters
- Filters
- Adjustments
- Adjustments
- Apply color palette
- Auto levels
- Channel mixer
- Chrominance extract
- Clamp
- Color match
- Color to mask
- Contrast/Luminosity
- Convert to linear
- Convert to sRGB
- Create color palette (16)
- Grayscale conversion advanced
- Hald CLUT
- HDR range viewer
- Height map frequencies mapper
- Highpass
- Histogram compute
- Histogram equalize
- Histogram range
- Histogram render
- Histogram scan
- Non-uniform histogram scan
- Histogram select
- Histogram shift
- ID to mask grayscale
- Invert
- Lighting cancel high frequencies
- Lighting cancel low frequencies
- Luminance highpass
- Min max
- Modify color palette
- Pow
- Quantize color (Simple)
- Quantize color
- Quantize grayscale
- Replace color
- Replace color range
- Threshold
- View color palette
- Blending
- Blurs
- Channels
- Effects
- Effects
- 3D texture position
- 3D texture SDF
- 3D texture surface render
- 3D texture volume render
- Ambient occlusion (HBAO)
- Ambient occlusion (RTAO)
- Anisotropic Kuwahara color
- Anisotropic Kuwahara grayscale
- Bevel
- Bevel smooth
- Cross section
- Curvature
- Curvature smooth
- Curvature sobel
- Diffusion color
- Diffusion grayscale
- Diffusion UV
- Directional distance
- Edge detect
- Emboss with gloss
- Extend shape
- Flood fill
- Flood fill mapper
- Flood fill to Bbox size
- Flood Fill to gradient
- Flood Fill to grayscale/color
- Flood Fill to index
- Flood Fill to position
- Flood Fill to random color
- Flood Fill to random grayscale
- FXAA
- Glow
- Mosaic
- Multi directional warp
- Non-uniform directional warp
- Reaction diffusion fast
- RT irradiance
- RT shadow
- Shadows
- Shape drop shadow
- Shape glow
- Shape stroke
- Summed area table
- Swirl
- Uber emboss
- Vector morph
- Vector warp
- Normal map
- Tiling
- Transforms
- Material filters
- Material filters
- 1-click
- Effects (Material)
- Transforms (Material)
- Blending (Material)
- PBR utilities
- Scan processing
- Mesh-based generators
- Mesh-based generators
- Mask generators
- Weathering
- Utilities (Mesh-based generators)
- Spline & Path tools
- Spline & Path tools
- Working with Path & Spline tools
- Path tools
- Spline tools
- Spline tools
- Paths to Spline
- Point list
- Scatter on Spline color
- Scatter on Spline grayscale
- Spline 2D transform
- Spline (Cubic)
- Spline (Poly quadratic)
- Spline append
- Spline bridge (2 Splines)
- Spline bridge (List)
- Spline bridge mapper color
- Spline bridge mapper grayscale
- Spline circle
- Spline fill
- Spline flow mapper
- Spline mapper color
- Spline mapper grayscale
- Spline merge list
- Spline render
- Spline sample height
- Spline sample thickness
- Spline select
- Spline warp
- UV mapper color
- UV mapper grayscale
- 3D view (Library)
- 3D view (Library)
- HDRI tools
- Node library
- Substance function graphs
- Substance function graphs
- What is a Substance function graph?
- Create and edit a Substance function graph
- The Substance function graph
- Variables
- FX-maps
- FX-Maps
- How it works
- The Iterate node
- The Quadrant node
- Using Substance function graphs in FX-Maps
- Warnings in Substance function graphs
- Sample Substance function graphs
- Nodes reference for Substance function graphs
- MDL graphs
- Bakers
- Best practices
- Pipeline and project configuration
- Color management
- Package metadata
- Scripting
- Scripting
- Plugin basics
- Plugin search paths
- Plugins packages
- Plugin manager
- Python editor
- Accessing graphs and selections
- Nodes and properties
- Undo and redo
- Application callbacks
- Creating user interface elements
- Adding actions to the Explorer toolbar
- Using color management
- Using spot colors
- Logging
- Using threads
- Debugging plugins using Visual Studio Code
- Porting previous plugins
- Packaging plugins
- Scripting API reference
- Technical issues
- Release notes
Output size
It's the first of a graph's Base parameters and, along with the Output Format (or bitdepth), is critical to understand well since it has a large impact on a graph's output, both within Designer and in other applications as a published Substance 3D asset (SBSAR) file.
We strongly recommend acquiring a good understanding of inheritance in Substance graphs as a foundation for using the Output Size property efficiently.
Use the lock button to have the Height value match the Width value.
In this page
Power of 2 values
The Output size parameter determines the resolution of the texture output by a graph or node.
A texture which is an object in graphics computing bound by some restrictions imposed by the way graphics processing hardware performs its computations. One of these restrictions is the texture should represent an image which pixel count in X and Y is a power of two.
|
Pixels |
---|---|
7 |
128 |
8 |
256 |
9 |
512 |
10 |
1024 |
11 |
2048 |
12 |
4096 |
13 |
8192 |
The Output size property uses logarithmic steps to easily map increases of powers of two (e.g., 256, 512, 1024, ...) to a linear scale (e.g. 8, 9, 10, ...). This means increasing or decreasing the Output Size value in X or Y by 1 is akin to multiplying or dividing the current resolution by 2.
This also applies when the Output Size value is controlled by a function, where the function should output the target logarithmic values (relative or absolute) instead of the target resolution.
Increasing or decreasing resolution in both X and Y multiplies or divides the pixel count by 4, which has a significant impact on a graph's performance and memory footprint.
As such, we strongly recommend using the lowest resolution actually needed to get a desired result. Keeping resolutions under control is one of many of our performance optimization guidelines.
In Function graphs, the $size
and $sizelog2
system variables return a Float2 value matching the current resolution of the node or graph as a raw pixel count or power of two respectively.
E.g., for a 1024*512 image, $size
returns (1024,512)
while $sizelog2
returns (10,9)
.
Relative size
When the Output Size property uses a Relative to... inheritance method, its value is expressed as a modifier relatively to the inherited logarithmic value.
Modifiers relative to the inherited resolution range from -12 to +12 on a logarithmic scale, with the default being 0. This means each step above or below results in doubling or halving of resolution. The table on the right gives an example of how relative resolution changes in one dimension for an inherited value of 9 (i.e., 512 = 2^9) and 11 (i.e., 2048 = 2^11):
Notice how above 8196, the size is capped. This cap is controlled by the Cooking Size Limit setting in the General section of the Preferences. Please note working with very large resolutions comes with a proportional performance cost and exponential memory footprint. Also, limits in graphics processing puts a hard limit on the maximum size of a texture.
-5 | -4 | -3 | -2 | -1 | 0 | +1 | +2 | +3 | +4 | +5 |
---|---|---|---|---|---|---|---|---|---|---|
16 | 32 | 64 | 128 | 256 | 512 | 1024 | 2048 | 4096 | 8196 | 8196 |
64 | 128 | 256 | 512 | 1024 | 2048 | 4096 | 8196 | 8196 | 8196 | 8196 |
Below 16 the resolution is not capped but it is not recommended to go lower, as there are no performance gains below that threshold. To the contrary, performance actually drops because of the specific implementation of the Substance engine. Therefore, use 16x16 as a general minimum resolution in Substance graphs.
Changing the inheritance method
In most cases, the default inheritance method for the Output Size property is the following depending on the item:
- Graph: Relative to parent
- Node: Relative to input – the values inherited by the node's Primary input are used in this case
- Bitmap node: Absolute – see the Bitmap resource page and performance optimization guidelines to know why that is
Display the properties of a node or graph by clicking that item, then in the Properties panel find the Output Size property in the Base parameters section. Click the inheritance method drop down menu select the desired inheritance method.
Example problems
If you are a new Adobe Substance 3D Designer user, you might run into some common problems. We'll list some examples below, along with solutions.
Problem
The Parent Size setting is grayed out, and the graph uses in an undesired 256*256 resolution.
In the graph's properties, the inheritance method of the Output Size property was set to Absolute, which stops inheritance in favour of an arbitrary value.
Solution
Set the inheritance method for the graph's Output size to Relative to parent.
Problem
Above you see a case where the output of a graph results in a different resolution (512*512) than set in the parent (1024*1024), despite the graph being set to Relative to parent.
The problem stems from the Bitmap node. It defaults to the Absolute inheritance method, and picked 512*512 as a resolution based on the Bitmap resource. The node connected to it are set to Relative to input, thus inherit their Output Size from the Bitmap node.
Solution
Set the Output Size's inheritance method 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 modifier of 3 on the Transformation 2D node, making the output 8 times larger.
Solution
Set the relative modifiers for Width and Height to 0, leading to no upscaling.