When I was last full indie, I kept extensive notes on the tools I used. I stored these in private Google Docs, and still maintain them in archives. Going ahead with this new venture, I'll be keeping notes on this site and making them public. I hope I help you learn something. This series details Substance Designer and Painter.
The only time the Launcher needs to be open is when using the Source to Substance functionality. Otherwise it seems to do something in the background and has a bad memory footprint.
- Scene and Material: Scene → Plane (hi-res), Materials → Default → physically_metallic_roughness [Default] → Tesselation → Material Properties → Height → Scale 20.
- Node Setup: Base Material Node → Normal (True) and Height (True), Normal Node → Specific Parameters → Intensity 20.
- Node Setup V2: Base Material Node →Normal, Height, Ambient Occlusion (True) → Height to Normal Node, Ambient Occlusion Node (GPU Optimization True).
- Workflow: Build height map in greyscale → work from large to small details, lowest to highest levels → add color.
- Spacing: Leave 2 major (6 minor) grid squares between nodes.
- Height Range: By default, Designer limits the range to 0.5 on output. Always change this to 1.0.
- Layering Shapes (Basic): Shape → Levels → Blend (Max Lighten). The amount of Level Out High controls the final height of the shape.
- Spacebar in GRAPH shows Node picker. Use with Node selected for smart filtering and auto-connection.
- Spacebar in 2D VIEW shows tiling.
- Backspace with Node selected deletes the notes while maintaining connection to pre- and post-nodes.
- Make It Tile: fixes tiling seams after non-uniform scaling.
- Levels: changes contrast and brightness of images. Top arrow sliders control Levels In, bottom Levels Out
- Levels In: expand the range of values by redefining lowest black and highest white points. Increases contrast.
- Auto Levels: finds lowest black and highest white and clamps values within this range.
- Levels Out: limits and shrinks range of values. Establishes minimum and maximum output values. Reduces contrast, useful for setting absolute height of components.
- Invert: cheaper than using an Invert Grayscale node.
- Histogram Scan: Levels function use to shrink/grow masks by simplifying controls.
- Position: compresses Levels In uniformly.
- Contrast: slides compressed Levels In uniformly.
- Histogram Shift: offsets entire range of values. Easy re-randomization of noise maps.
- Histogram Range: squashes height map with Range and move it up or down with Position.
- Histogram Select: selects band in image with Position and slopes out in two directions from there with Range. Useful for selecting low or high areas in height maps for adding dirt/erosion.
- Use Blur HQ Grayscale on Shape Nodes to soften form edges and remove artifacting.
- Use Levels to raise or lower overall height on forms.
The following content is extrapolated from the Substance Academy series "Mastering Blending Modes".
- Commutative: the order of the layers is irrelevant.
- Noncommutative: the order of the layers changes the output.
- Add increases (brightens) values.
- Masks: adds the white (visible) areas of the input nodes together.
- Height: acts as an outward extrusion. The higher the white value, the taller the sculpted result.
- Use: build layers of detail.
- Substract decreases (darkens) values.
- Masks: removes (subtracts) areas from the mask, making them black (invisible).
- Height: acts as an inward extrusion. The higher the white value, the flatter the sculpted result.
- Use: flatten areas while preserving detail.
- Multiply decreases (darkens) values.
- Masks: acts as a union (and) operation, combines overlapping white values from input nodes and discards the rest. Gray values darken.
- Height: simliar to subtract, but smoothly scales pixels down rather than flattening them out.
- Use: combining masks and smooth scaling of height detail.
- Rarely used, edge-case use.
- Use: combining noises with slight differences, highlighting those differences (offset, disorder).
- Picks the lowest value from top or bottom input.
- Masks: harsher than multiply, gray will obliterate white.
- Height: like a boolean intersection operation, only keeps volume in both inputs.
- Use: mask combine with smooth transition and height cutting with hard edges.
- Picks the highest value from top or bottom input.
- Masks: softer than add, keeps bright areas when combining.
- Height: like a boolean union operation, combines volumes from both inputs.
- Use: smoothly combined masks and to add layers of height detail.
- If the top input is higher or lower than 0.5, it will respectively lighten or darken the result. At 0.5 makes no change.
- Masks: only affects transitions. Top input needs blurry transition, bottom needs detail values.
- Height: better to use seperate Add and Substract operations for greater control.
- Use: to break up edges of transitions in masks, mixing grunge maps.
- Combination of Multiply and Screen, smoother fading bright areas and smooth dark areas.
- Masks: adds bright and dark areas to base mask.
- Use: smoothly brighten and darken masks in 1 step, combine top small detail input with bottom large detail input.
I purchased a few packs of annotated Substances from JRO. Once you understand the basics of how a Substance graph works, one of the best ways to learn more is to unpack an existing graph and see how the results were produced. These particular graphs are reasonably well organized and have plenty of additional notes.
This graph collected all the noises into a single Frame to avoid re-use. Clever, but makes for a lot of stretched connections. At the time of writing, I still don't fully understand the implications of the render time.
Low intensity (0.01-0.001) Slope Blur Grayscale with the same top and bottom inputs can be used to "expand" noises.
- Ctrl+Middle Mouse click auto-sets focal distance for camera Post Effect.
- iRay rendering produces better results.
- Set Tiling and Height Scale in Edit Materials.
- JRO Sign Decals: Sign Weathering (Artstation)
JRO Hardsurface Height & Alpha: Bake Mesh to Alpha (Gumroad)
- JRO Hardsurface Height & Alpha: Customize Alpha (Gumroad)
JRO Shield Tutorial: Height Alpha to Smart Material (Gumroad)
JRO Shield Tutorial: Smart Material Editing (Gumroad)
- Texture Set: material ID. Painter creates sets for each material imported from a model.
- Remaps: Camera Translate: MMB. Camera Rotate: Alt+MMB. Rotate Environment: Ctrl+Shift+RMB.
- Shadows: Enabled in Display Settings.
- A high quality Curvature map can be quickly baked from an existing Normals map inside Painter.
- Many Smart Materials rely on Curvature information to really pop.
- Ambient Occlusion (AO) maps take longer to bake, but can also be done inside Painter.
- Right-click a Mask to add a Paint Layer.
- After painting Height detail, export the Normal Map from Painter, slot it in as the new project Normal Map, then turn off the painted layers. Bake a new Curvature map, re-slot, and Smart Materials will recognize the new detail.
- Compute tangent space per fragment: Enable this at the start of a new project for Unreal Engine support.
- Select Texture Set from Viewport: Ctrl+Alt+RMB.
- Modify Shader: Select texture set → Texture Set Settings → Shader Instance → New shader instance → Add Channel → Shader Settings → set Instance name. Example usage: allow transparency.
- Quickview: RMB in viewport to open context-sensitive controls.
- Cycle Maps: Shift+B.
- Material Mode: M.
- Cycle Channels: C.
- View Mask: Alt+LMB.
- Add Fill Layer
- Add Black Mask to Fill
- Add Effect to Mask
- Mesh Explosion: to eliminate raycasting errors, use Common parameters → Match → By Mesh Name. Ensure that the model object name suffixes match the settings.
- Use Triplanar: eliminates visible seams in map.
- Light: simulate light falling on model from set angle, attenuation.
Right-click a Layer → Instatiate across texture sets... (Ctrl+Shift+D) → Select Texture Sets.
Now any updates made to parent Layer will be reflected in other Texture Sets.
From the overview in the Academy video series, Alchemist is used to preview and export visual collections of materials. There's an Inspire function that extracts color palettes from images and uses them to generate material variations. Furthermore, it uses a generative layering technique that simplifies what happens in Designer, allowing a less technically-inclined artist to simply layer Substance materials on top of each other and use exposed parameters to non-destructively achieve variations.
Alchemist supports full blend masking, with an internal mask drawing tool that can generate new ambient occlusion and leverage height data.
As of 14.11.2020 the Image to Material (AI) node is trained for ground surfaces, and will give best results with such inputs.
- Add Node: spacebar inside working window opens context-sensitive search.
- 2D View (pan): Alt+middle mouse click and drag.
- Atlas Scatter: Shift + Drag and Drop.
- Brush Size: [ or ].
- Invert Brush (Toggle Draw/Erase): X.
Bitmap to Material
- Preparation: drag-and-drop target bitmap and pre-process with Use as bitmap.
- Non-Square Input Image: in 2D view, select Layer inputs from top-right dropdown. Add Crop layer and set Input Size parameters to match image size.
- Manual Tiling: Add Transform layer → manually offset image → Material Content Aware Fill layer → manually brush out seams.
- Manual Tiling (Substance-favored): Use multiple Clone Patch layers, at least 1 each for X and Y, and brush out seams. Then save the material, create new, and use the saved material as the base. Transform layer and rotate, then add a second copy of the base material set to Custom Mask Blend. Select the mask to paint, and manually brush in/out details. Adjust parameters to tweak.