Workflow overview

Substance 3D Designer is a Node-Based editor. That means almost every type of project or resource will involve placing nodes (building blocks) and connecting them to create a chain of operations (a Graph).This page explains the concept of Node-Based workflows, and provides a summary of the 3 main types of Graph you can author in Designer.

Node-Based workflow

Working in Designer is different from other 2D image editing software such as Photoshop. Instead of performing an action manually (like adjusting saturation by going to a menu option and changing a slider), you construct the logical steps of editing or creating your image. This happens by building a network of little building blocks, called "Nodes". Image data travels from left to right through the building blocks, connected by Links that determine the path of the information. Every Node, if connected, will contribute to the final results.

The major advantage is that your workflow becomes non-linear. Unlike actions performed manually that go into a history stack, you can always swap out or modify a Node at any point in time. If you decide that your very first Contrast adjustment, affecting the result of your image all the way to the end, was too much, then you can still go back and adjust it or even cut it out completely, without losing all the work you performed afterwards.

Graph Instance Workflow

Instancing Graphs is a key process in Designer. It allows you to build your own nodes by taking any size or type of Graph and packaging it up as new Node building block. These types of Nodes are called "Graph Instances" This allows you to be much more efficient, save time and share work with others. Have you developed a great technique for edge wear for example? Create a Graph Instance out of it and re-use it yourself, share it with the community, or your team!

For more information about Graph Instances in Substance compositing graphs, there is a dedicated section about them in the documentation. 

Graph instances are currently not available in Substance model Graphs.

Custom Parameters

Any node in your chain of operations will have some form of control: buttons, sliders, settings for you to tweak, influencing the final result. If you create a Sub-Graph, or want to export your Substance File to another application, you can build your own "control panel" for your files, allowing anybody using the Graph to tweak and modify it with a fully unique control panel, exposing endless possiblities.

The method for exposing Parameters differs between Graph Types. The general concept is explained on this page, but for Substance compositing graphs, Substance model graphs, functions graphs and MDL graphs there are dedicated pages.

Graph Types

Below you can find a summary of the three types of Graph you can edit in Substance 3D Designer, as well as a link to the relevant section of the documentation.

Substance compositing graphs

Substance compositing graphs are the main type of graph created in Substance 3D Designer. Their purpose is to generate and process 2D image data that is not constrained to a set resolution, color or shape. They are meant as extremely versatile image-processing and generation tools, not just static, pre-set results.

The results can be in the form of a simple black-and-white pattern, a filter that only runs on other images and doesn't generate content by itself, or even a full-fledged procedural material with multiple channels.

Substance compositing graphs are the most widely supported type of graph, and can be exported and used in a plethora of different workflows.


Below you can find some typical examples of common usecases.

Simple shape

A simple mask shape for a decal is created by generating a piece of text and a disc shape, extracting the edge from the disc and the finally blending them together before setting them as final output.

The Text with the number, or the thickness of the edge can be exposed externally to make this a more dynamic graph.

Adjustment filter

A filter graph takes a normal map as input (with a custom preview), converts it to curvature and then adjusts the contrast to create a mask of convex edges as final output.

The contrast values set in the Histogram can be exposed, making this a simple but useful filter in combination with the dynamic Input slot.

Full material

A more complicated graph blends two Base materials. One Base material is kept simple, the other uses some custom inputs to add interest. A mask is used to determine which of the two materials appear where before being set as final outputs.

This example makes use of Link Creation Modes to simplify using multiple links.

Function graphs

Functions process single values (integers, floats, vectors) instead of image data (whole sets of pixels). Functions are also Graphs with node networks, but the Nodes used and the interface is different from regular Substance compositing graphs. The workflow is completely based on mathematical operations and does not show any image preview thumbnails, making it a much more advanced way to work with Substance 3D Designer.

Functions can be used in many different contexts, the main ones being to modify the behaviour of an exposed Parameter, to author the behaviour of Pixel Processors or FX-Maps and to to use Values in a Graph.


Below are some examples from common usecases for Functions.

Simple Function

A simple function in the context of an exposed parameter. It gets an input float value called "Intensity" that is determined to go from 0 to 1 (a range easy to understand) and remaps it to a set range of 0.1 - 0.8. That means if the user sets Intensity ot 0, internally 0.1 will be used, if the Ui is set to 1, 0.8 wil be used, and any value in between will be interpolated linearly. This type of function is something commonly used when exposing parameters, but using custom functions.

This function could also be written as lerp(0.1, 0.8, Intensity) in a pseudocode similar to HLSL or GLSL.

Advanced Function

This advanced Function shows the inner workings of a Pixel Processor meant for adjusting the Hue of a color map input based on the intensity of a second grayscale mask input.

It samples both inputs with the system "$pos" variable, then strips the Alpha, converts the color value to HSL and modifies the Hue component by multiplying it with the sampled grayscale value. Afterwards it re-assembles the vector, converts the HSL back to RGB and adds the Alpha back in for the final output.

in pseudo-code this would be a much more complicated function that would not fit on a single line.

MDL graphs
This page presents MDL graphs in Substance 3D Designer, which let you author MDL materials and preview their behavior in real time.