- 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
Main MDL graph concepts
This page presents the main concepts which are specific to MDL graphs and should be well understood for making the most of this graph type in Substance 3D Designer.
When creating or loading an MDL graph, the first unpinned 3D view panel found by Designer will automatically switch to the Iray renderer. If no 3D view is available, a new 3D view panel will be created and switched to the Iray renderer to host the rendering of the MDL material being edited.
When the Iray renderer is selected in a 3D view panel, that panel’s Materials menu lets you switch between available MDL materials, which include materials loaded in the Explorer panel and materials in Designer’s MDL library. Learn more about working with MDL materials in Iray in the Iray section of this documentation.
Root node
The result of an MDL graph is defined by the Root node. Any node of the graph can be set as root as long as its outputs data of type material, i.e., a material definition. An MDL graph may have only one Root node.
Generally, a node which can be set as Root can be self-sufficient, as it already contains a material definition which may be customized by passing data to its inputs.
For instance, if you want to work on a glass-like material, you may want to use a Glass material definition as Root node as a starting point, but that is not mandatory. Many material nodes are templated which can be turned into any complex material using the extensive list of MDL nodes.
The Root node includes a thumbnail displaying a preview of its current output.
Root node in an MDL graph and its properties displayed in the Properties panel
Connectors and types
As there are far more data types in MDL graphs than other graphs in Designer, you may witness unique appearances of node connectors. The important concepts to understand are list below.
Connector shape
The shape of the connector indicates whether the data type is uniform (circle) or varying (square).
"A variable of a uniform type can only be set to a uniform value. A variable of a varying type can be set to a varying value as well as to a uniform value. The resulting value in the variable is then always considered varying." (Source: Section 6.3 of the MDL Specification)
Here are some examples:
- a Texture sample is varying as values are impacted by the sampled pixel
- a Color value is uniform as it is passed equally regardless of the context
- a BRDF is varying as values are impacted by the angle of incidence
- a Float or Boolean value is uniform as it is passed equally regardless of the context
Connector color
The type of data going from an output connector or expected by an input connector is color-coded and displayed between parentheses after the identifier/label when hovering the connector with the mouse.
Aspect of connectors vary according to I/O value type, which is displayed in parentheses after I/O identifier
Filtered node creation
You can add any node available in the mdl category of the Library in the graph by dragging the node from the Library view into the Graph view, or by pressing Spacebar to open the Node menu in the Graph view when nothing is selected. In this case, an unfiltered list of nodes is displayed.
However, there are cases where the list of nodes in the Node menu is filtered to only display nodes of matching data type for the target input or output:
- if a node is selected in the Graph view and Spacebar is pressed
- if clicking LMB, holding and dragging a link out of a node connector
You may want to keep in mind the rules applied for filtering:
- if the Node menu is displayed by pressing Spacebar when a single node is selected, the list includes nodes where the data type of the first input matches the selected node’s output data type
- if the Node menu is displayed by pressing Spacebar when multiple nodes are selected, the list includes nodes where the data type of the first input matches the last selected node’s output data type
- if the Node menu is displayed by dragging a link out of an output connector, the list includes nodes where the data type of the first input matches the selected output data type
- if the Node menu is displayed by dragging a link out of an input connector, the list includes nodes where the data type of the output matches the selected input data type
Filtered node creation in MDL graph, note the list changes according to the value type for the connector
Graph inputs and textures
MDL materials can receive data from external sources, in the form of values and textures for instance. This is achieved by exposing a node, contrary to the Substance graph where dedicated input nodes exist for this purpose.
Data can be passed to the exposed node depending on its type. For instance, Float values can be passed to an exposed float node, and a texture can be passed to an exposed color node (in this case, the sampled pixel’s RGBA values are passed as a color value).
Exposed nodes create graph inputs which are both raw value inputs and samplers for textures