River Pebbles

Material Breakdown

Alexey Kirsanov


Alexey Kirsanov

Material Artist


Hi, I'm Alexey Kirsanov - I am currently a Material Artist at DPS Games.

References & Concepts

It is advisable to include 5-6 photos from which you intend to derive your material.

Explain each layer and detail you observe to yourself. You need to comprehend the composition of your material, fathom why concrete is being poured, and why the stones close to the water appear smooth; everything possesses a unique narrative.

Everything you derive from the material should be accompanied by a readiness to substantiate and elucidate.

Upon reviewing my references, I outlined the work stages and material layers for my understanding.

  • Lower Layer
  • Water Middle Layer
  • Sand/Mud Upper Layer
  • Stones: (Stones + Moss + Foliage)

Basic Shapes

Now, we can proceed to Substance Designer. On my references, I observe smooth, rounded stones. To initiate, I used a disk-shaped form. To adapt the shape more closely to the reference, I integrated a combination of multi-directional warp and Perlin noise.

This simulates stones rubbing against each other from various angles, resulting in varied levels of abrasion. A subtle noise range, transitioning from white to black, suits this purpose well.

Adjusting the blur intensity affects the sharpness and detail level; I opted for Perlin noise for this reason.


Reducing the texture size in the Base Parameters graph under Output Size will induce texture blurring. Experiment with diverse filters/effects.

For instance, try applying the “Clouds 2” filter to slope blur, at a resolution of 32 by 512.


Stones that have rubbed against each other over extended periods tend to exhibit smooth contours due to water-induced abrasion. This effect pairs effectively with non-uniform blurring.

It’s essential to acknowledge that these stones were once sharp and not smooth at all. To simulate this, I employed a technique: I utilized three gradients via flood fill, randomized them, and blended them using the “min darken” mode. This introduced distinct sharp edges, which I subtly layered onto my primary smooth stones.

And that concludes the foundational shapes!


Scattering and Blending of Stones

I have previously demonstrated on a couple of Discord servers how I blend such shapes. Here, I employed six tile samplers ranging from large stones to the smallest ones. In essence, you could configure one tile sampler and then duplicate it six times, adjusting random seed and x/y amounts.


I find the moisture noise particularly effective due to its inclusion of small, medium, and large details. I integrated it into the scale map input and color map input, yielding a subtle yet appealing effect.


To prevent stone overlap within the tile samplers, I masked the previously blended stones, added a slight bevel, and linked it to the mask map input. This created a small separation between the stones. Consequently, my new tile samplers featured stones in areas distinct from the previous ones. I blended the new stones using height blend nodes.

It’s worth noting that this isn’t a flawless approach; minor intersections might persist. However, for game materials, this method is nearly optimal in terms of the balance between time invested and the quality achieved.


The approach is straightforward here—I dissected the details into large, medium, and small shapes, just as with everything else. For large shapes, I combined crystals with clouds and clouds alone, adjusting the intensity slightly.

As for medium and small forms, I utilized two variants of “dirt_01” grunges, altering them via random seed, and then blending them using copy/subtract blend modes.


I obtained photos of my river moss type: actual images and structural depictions. I endeavored to replicate the shape as closely as possible in the designer.

I employed multiple warps, gradients, and blurs on a paraboloid to achieve the desired shape. Maintaining a balance of detail is crucial to avoid complications when the shape is downsized on the texture.


I then fashioned a branch from the leaf through the tile sampler. Here, employing the vector map in the tile sampler is essential, ensuring that all leaves radiate from the center according to my vector.


I created two tile sampler variants for the branches, and further diversified the options using 2D transform nodes and blends. As branches are damp and thus more elastic, I integrated warps with Perlin noise towards the end.

In the final moss tile sampler, I solely introduced the upper parts of the stones in the mask map input. According to my reference, moss exclusively grows atop the stones.


An important consideration is that foliage cannot be directly appended to the height map. Doing so would lead to sharpness or exceeding the range limits.

Thus, I connected the moss mask to the input of a non-uniform blur, preserving some grayscale range before integrating the moss. Subsequently, I added it using the screen mode.



Without delving into excessive detail, I amalgamated several key grunge elements. This provided the requisite range of large, medium, and small details, which I incorporated through the height blend.


Base Color

The approach to creating the base color consistently follows a pattern for me. Initially, I blended curvature smooth with ambient occlusion to accentuate the joints.

Subsequently, I incorporate gradient maps, drawing inspiration from reference photos for colors. Here, masks from my height blends prove useful, allowing me to create a flood fill.

This, in turn, generates a random grayscale for each stone, giving individual stones unique colors and shades in the base color.

While not entirely PBR accurate, I favor the addition of curvature through overlay at a low intensity. This method accentuates concave and convex surfaces, enhancing the artistic appeal. I implement such adjustments in about 80% of my materials.


Subsequently, I integrated grunge maps 01 and 07. Through direct warping on the stone surface, I combined them, creating effects that closely resemble the references—small lines running along the stones’ contours.

I prefer to introduce additional ambient occlusion and edge highlights to enable viewers or players to perceive the material’s form and shape more accurately. Caution must be exercised not to overly intensify these effects.

Moreover, I recommend introducing subtle color variations to your textures and materials. Even 3-4 passes with minimal intensity can contribute to a more realistic appearance.



My approach to roughness is pragmatic. I convert grayscale values from the base color and incorporate a few grunges and pre-existing masks from colors. Toward the end, I employ levels to fine-tune the values for the rendering.

I consistently use sharpening for roughness at the conclusion, as it yields improved results in the final images.



For water, I utilized a dedicated water node, encompassing nearly all necessary parameters. Additionally, I introduced a touch of green color and simulated transparency.

To achieve this, I tinted my previous base color in the areas corresponding to water, adjusted brightness, and added a green hue. This step contributes to the desired appearance of water, and I also applied blurring.


For the presentation, I used Marmoset Toolbag 4. The most time I’ve spent was on the HDRI. I tried over twenty variants from Poly Haven, but all of them appeared flat or worked poorly with water.

However, I found one in the basic Marmoset library that worked well for me. The main thing I look for when choosing an HDRI is to have different shapes and colors in the sky. This approach leads to more realistic and engaging results.


In terms of lighting, apart from the HDRI, I employed a single spotlight that creates a V-shape in my final image. This arrangement casts shadows from the edges of my image, providing contrast with illuminated areas. You can also experiment with adding shadows through gels or other meshes. I learned about this rendering technique and trick from Stan Brown (https://www.artstation.com/stanbrown).

For my main camera, I utilized the following settings:


Thank you for reading, hopefully, I have added something to your workflow!