Stylized Smoke Texture (Substance Designer Breakdown)

(“Born from Ash”)
This week I wanted to explore something softer, quieter — the moment when noise begins to breathe, stretch, and slowly turn into smoke.

Below is a breakdown of how I approached building a stylized smoke texture in Substance Designer, starting from a simple whispy noise and ending with soft, drifting shapes ready for real-time use.

StylziedSmokeTexture_256

1. Building the Whispy Noise Base

The entire texture lives or dies in its noise. I wanted something airy but directional — something that felt like smoke wanting to rise.

  • I start with a low-scale Cells noise, invert it, and push the contrast using Levels.

  • Then I Multi-Directional Warp it using a blurred Gaussian Noise.

    (Playing with warp intensity here defines how soft or sharp the whisps will be.)

  • I warp it again, this time using a self-blurred version of the noise to introduce internal flow.

  • One more warp pass, but now with a basic Warp and Cells 4 (blurred) to add sharper turbulence.

  • Multiply with Perlin Noise to break up the shape and introduce darker pockets.

  • Bring everything together with Auto Levels.

At this point, the whispy base is ready — airy, broken, irregular.


Now we can give it form.

2. Creating the Smoke Shapes

To build the main body, I treat the smoke as a tiny flipbook.

  • I use the Shape node (Paraboloid) with Tile = 2, which gives me four soft circles — perfect for a 2×2 flipbook.

  • Multi-Directional Warp with low-scale Perlin Noise.

    (This single step already creates a smoke-like silhouette — half of the magic happens here.)

  • Slope Blur using a scaled version of the original soft glow to introduce transparency around the edges.

  • Multiply with a low-scale Gaussian to sprinkle some darker spots inside the body.

Now we have four soft smoke variants that can be picked at runtime.

3. First Combination Pass

Time to merge the structure with the whisps.

  • Multiply the slope-blurred shape with the noise from step 1.

    (Levels between them help control contrast and thickness.)

  • Add a blurred version of this result using Blend (Add) to bring a soft glow back into the brightest parts.

  • Warp it with low-scale Perlin Noise again + Levels.

This creates a smoke element that already feels alive — layered, directional, and with a subtle glow.

4. Refining the Body (Whisps, Softness, Depth)

This stage is all about giving the smoke internal depth.

  • Add the earlier shape (with dark spots) using Blend → Max mode.

    (This keeps the body grayscale, but soft, with natural transitions.)

  • Multiply with low-scale, strongly leveled Perlin Noise to emphasize darker pockets.

  • Non-Uniform Blur using the noise itself — softens everything in a smoke-like way.

  • Multi-Directional Warp with a blurred previous pass (Min Mode, 4 directions) to create beautiful thin whisps.

  • Another Levels adjustment.

  • Non-Uniform Directional Warp with two noise inputs:

    • Gaussian Noise for intensity
    • Perlin Noise for warp angle
  • Multiply again with a low-scale Gaussian for extra depth.

At this point the texture flows, breathes, and has that drifting quality smoke needs.

5. Adding Highlights

Smoke needs subtle brightness variation — not just white, but shimmering gray shifts.

  • Use Histogram Scan to isolate the brightest regions.
  • Blur them and restore contrast with Auto Levels.
  • Warp them slightly with Perlin to keep the movement organic.
  • Add this highlight pass behind the main texture, so its intensity can be controlled separately.

This gives us the final touch that makes the smoke feel soft and volumetric.

Final Thoughts

This is the base setup — and with a few parameter tweaks, you can generate dozens of unique smoke variants for different moods and effects.

Soft, heavy, stylized, magical — everything grows from the same core structure.

You can watch the full breakdown + see how I implemented it inside Unity.

If you create your own variation based on this setup, feel free to share it — I’m always curious to see different interpretations. :dash::sparkles:

StylziedSmokeTexture_Unity_256