Creating Custom Dynamic Strokes
Last update: Thu Feb 26 2026 00:00:00 GMT+0000 (Coordinated Universal Time)
In order to create custom Dynamic Strokes, two options are available:
- Using an existing Substance resource to create a new brush/tool preset
- Create a new Substance resource from scratch (requires Substance 3D Designer ).
It is also recommended to read the Dynamic Stroke Performances before creating custom Substance files to avoid any culprits.
Reusing existing resource
Creating new Dynamic Strokes from scratch can be difficult. Using existing resources, tweaking them, and then saving them as new presets can be a good enough starting point.
Find compatible resources in the Shelf that may fit your needs, then check out our page about Presets.
Creating custom Substance files for Dynamic Strokes
Below is a list of the supported parameters for Dynamic Strokes in Substance graphs.
Variable Identifier
Description
Random Seed
If a Substance file is cooked with the Random Seed exposed, it will be controllable with the Dynamic Stroke feature.
stampIndex
Integer1 Will be fed by Substance 3D Painter when painting the brush stroke. The min and max value have no effect, Substance 3D Painter will ignore them.
stampCycleCount
Integer1 Painter will read the parameter default, min and max value to expose the Stamp Cycle Count parameter. This parameter controls how many unique Substance variations will be created.
$time
Float1 Will be fed by Substance 3D Painter when painting the brush stroke based on the elapsed painting time (per stroke). This property can generate a lot of Substance variations and can therefor impact performance.
strokeSpacing
float1 The current spacing value for the whole stroke painted.
strokeSize
float1 The current size value for the whole stroke painted.
stampStrokePosition
integer1 Used to specify the begin/start of a stroke. End value is only available on path stroke, not via manual painting. Possible value:
- 0 = middle
- 1 = start
- 2 = end
Can be disabled using isstrokepositionactive user tag.
distanceAlongCurve
float1 The current distance at the given stamp along a Path. This property can generate a lot of Substance variations and can therefor impact performance. Can be disabled with the iscurvedistanceactive user tag.
distanceMaxCurve
float1 The total length of a Path made with the path tool. Can be disabled with the iscurvedistanceactive user tag.
pathCorner
integer1 Indicate which type of corner a Ribbon is using. Possible value:
- 0 = No corner
- 1 = Left corner
- 2 = Right corner
pathCornerAngle
float Angle (in radian) of the corner on a Ribbon path. Can be used to compensate or adjust the look of a corner based on a precise angle value.
patchLengthOnCurve
float Size of a section (patch) on a Ribbon path. Combined with distanceAlongCurve and distanceMaxCurve it can be used to normalize the size of a patch for example.