- 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
Substance graph key concepts
This page lists the important concepts to understand for working with Substance graphs in Substance 3D Designer.
Sub-graphs/Publishing
Publishing a graph or creating a sub-graph are two very similar, abstract concepts. It means that any graph or network of nodes can be "packaged" together and turned into a re-useable, standalone resource. Creating sub-graphs is mostly done inside the application to make certain content re-useable in an efficient, smart workflow, as this avoids duplicating a set of nodes over and over. Publishing involves an additional step to export to Substance 3D asset (SBSAR) format, making your node network graph useable outside of the application, such as when you create a material for Unreal Engine.
Inputs, Outputs and Exposed Parameters are extremely important for this concept, as they are the only ways to still interact with the graph once it is used as a sub-graph or as a published Substance 3D asset. The reasons are the following:
- No outputs would mean your graph generates nothing, no data at all.
- No exposed Parameters means your graph can not be customized in any way. You would not be able to set things such as the intensity of an effect, the opacity of an image being blended, the color of a specific area, etc...
- No Inputs means that in some cases, you wouldn't be able to customize a graph's result with your own image data, such as baked mesh maps to generate effects from, an input image to perform a blur on, or a custom mask to isolate certain areas of an image.
Inputs & outputs
An Output is a Node that generates a single 2D result. It's an endpoint, a terminus for your graph, a finished result. Only data connected to an output can be exported outside of Designer, or even used in other graphs.
Here are a few things you should know about Outputs:
- You can have as many outputs as you want, but you must have at least one output.
- An output can be any resolution up to 8192px wide or tall, it can be color or grayscale and can be exported to any filetype supported.
- Outputs can and should be named uniquely to identify them, it helps when exporting.
- Every connector on the right side of any Node is actually an Output (see "Sub-graphs for more info)
An Input is similar to an Output, it's an empty, open slot for you or another user to connect your own data to. It allows for the creation of graph that in external, user-defined image data, such as a Filter that modifies an input image (a Blur, or a Contrast adjustment for example).
Here are a few things you should know about Inputs:
- Inputs are completely optional, you should only add them if needed. There is no minimum or maximum amount.
- Inputs have a set resolution (linked to the graph generally) that you define, as well as if they are grayscale or color. Anything connected to it will be converted to match this.
- Inputs can be bitmap files from your harddrive, other graphs, Layers from Painter or Alchemist, etc..
- Every connector on the left side of any Node is an Input (see "Sub-graphs for more info)
Inheritance
As images and values are passed from nodes to others, some attributes of these images – i.e. their Base Parameters – are propagated across the graph as well, such as resolution, precision (i.e., bitdepth), tiling and random seed.
This propagation is defined by the inheritance methods each nodes apply for these attributes. Indeed, nodes can inherit attributes from other nodes or the graph they exist in.
The inheritance methods can be:
- Relative to parent
- Relative to input
- Absolute – i.e., no inheritance
Inheritance can be abstract and tricky to manage, therefore we strongly recommend you take a look at the dedicated page discussing it in detail.
Exposing parameters
Exposing parameters is a concept that can go very deep, but it can be summarized as picking certain properties of nodes in your graph, and creating a dedicated UI control element for them, that is easily available once the graph is used as a Sub-graph or if it is Published as an Archive. Because you can no longer quickly or easily select Nodes and tweak their properties, the goal is to create another primary control panel that groups any and all properties relevant for this specific graph.
here are some things you should know about Exposed Parameters:
- Exposed Parameters move a control from the Node, to the graph, essentially up a level in the hierarchy.
- Exposed Parameters can thus not be changed on the node anymore, only on the graph.
- Exposed Parameters can be fully customized with names, labels, values, UI editor type and even be hidden and shown for certain conditions.
Exposing Parameters is an abstract and difficult concept for beginners, there is more dedicated documentation on this topic, but it is recommended to fully familiarize yourself with other basic aspects of the software before diving into Exposing Parameters.