Terracota Tiled Floor

G-scaled
5-1

Adrien Lemoine

Environment Artist

Introduction

Hello everyone, I'm Adrien Lemoine, I'm an Environment Artist at Dontnod Entertainment currently working on an announced project.

F-scaled
E-scaled
D-scaled
C-scaled
B-scaled
A-scaled
weeds

Project Goal

Through this project, I wanted to try myself with realistic material that carries specific details and little stories in it. I was inspired a lot by Gustav Engman, Vincent Derozier and Geoffrey Rosin Piperaud on this one.

The focus here was to gather a few strong references with clear details to reproduce and mixed them into an adaptable material.

I also tried new techniques that I was eager for some time, like the flood-filled-based cracks. This graph wasn’t made to be super optimized, but more about learning micro storytelling and practicing details.

References

If references are the key, sometimes too many of them overwhelmed me. When I have a clear idea of what I want to do, I try to gather just a few of them, but with strong details, nice colors, and enough resolution.

Since my focus was details and story, I chose old-aged terracotta tiles and some little plants.

Material

I started with a simple pattern as I didn’t want to spend too much time on it, but I quickly tested others that have more shape variations.

01_BasePattern
02_BasePattern_Var01
03_BasePattern_Var02

After that, I created some volumes for the height map with a flood fill gradient and random grayscale.

04_FloodfillBase

Edge Damages and Mortar

The first step of detailing the material was to add edge damage, with a mix of the different edge detect values and a bevel to have different sizes of the intersection. I then added some slope blur based on blurred Perlin and cloud 02 noises.

To recreate some details I liked on the references, I worked on basic shapes, splatter them and slope blur with it then multiply them on top of the other slope blur.

To have more control, I blend each slope blur in multiply or min darken to have access to the opacity slider and choose the intensity of the effect. Or just use a mask for selected areas.

05_EdgeDamages01
06_EdgeDamages02

For the mortar base, I inverted the edge detect, beveled it and add damages and details with noise blending and slope blur, just like the edges.

When blended with the tiles, I used a histogram range to find a value for the height map to fit the references.

07_Mortar01
08_Mortar02
09_Mortar_Result

Small Cracks

Time to add details on the tiles: With a tile sample, a distance and an edge detect, I build a simple cracks generator and I deformed the result with the directional warp to make it more natural.

One of the more important steps here at the end of the cracks details process is to have a nonuniform directional warp with your grayscale pattern (the first flood fill random grayscale) in the intensity and warp input with a big value to break the continuity of the cracks.

011_SmallCracks_Result

For the mortar cracks, I just reused the small crack parts, with different random seeds and multiply them on top.

012_MortarCracks
013_MortarCracks_Resumt

Surface Details

I split the surface details of the terracotta tiles by their size and their importance. The main goal here was to really look at the references, find interesting details and try to reproduce some of them.

To make the noise process easier, I shared them across the graph. I did the same with the masks I created with a histogram shift and a histogram scan to bring different details to each tile.

018_SharedMasks

The first pass of details is made with a bunch of noises, warps and vector morph to deform them and blend them with the tiles. I tweaked a lot the values to find the one I liked the most. This part is a lot of back and forth.

I tried various recipes with slope blur, inverted noises with subtracting blending mode, and different noises to see what effect I can achieve. The key here is experimentation.

015_SurfaceDamages01
016_SurfaceDamages02
017_SurfaceDamages03

One of the detail I really wanted to try was big cracks with a different orientation for each island and easy procedural control over them. For that, I get back to the start of my graph and created a new flood fill with two different random gradients and a random grayscale.

I used a histogram scan to have a nice black and white mask. With the position slider of those nodes, I controlled the spread of my big cracks and the age of my tiles.

019_BigCracks01

Then, I use two cell nodes of different sizes with another flood fill and blend them with a mask. I edged detect the result, put it in another flood fill and us the random gradient to drive the orientation of the islands.

With a histogram range to balance the value and a mask, I blended it with my base tiles.

020_BigCracks02
021_BigCracks03
022_BigCracks04

After that, I moved to more specific details:

The scratches, the little holes, and some foot damage over time. With a custom shape, the splatter circular and the tile sampler I was able to reproduce these specific details and add them randomly on some tiles with my previously made masks.

023_SurfaceDetails01
024_SurfaceDetails02
025_SurfaceDetails03
026_SurfaceDetails_Result

Then, I spend some time tweaking the value to find the right balance between all these details. I wanted it realistic, but not too noisy.

I used a height blend node for blending the tiles with the mortar and tweak the values to have a good height map.

Grass and pebbles

For the small grass, plants and pebbles, I created simple shapes in different graphs and scatter them in Tile Samplers. For more details, I doubled them to have size and color variations.

At the end of each tile sampler, I used a histogram scan to create a mask to guide the scattering of the next one. I used a shadow node on the cracks to drive the pebbles around them in a specific direction.

For blending the grass and pebbles with the tiles and mortar, I used a Non Uniform blur grayscale with the previous histogram scan to remove the details of the heightmap beneath.

023_SurfaceDetails01
024_SurfaceDetails02
025_SurfaceDetails03
026_SurfaceDetails_Result

Base Color

The BaseColor was one of the trickiest parts of this material, as I didn’t want it to be too noisy and over-detailed, but still rich with good variations.

I started with a simple gradient to have the main colors of the tiles, and a grunge map to bring subtle variation.

033_BaseColor01

I used another grunge and a dirt generator to bring the first pass of weathering and a second one, driven by a deformed Ambient Occlusion.

034_BaseColor02
035_BaseColor03

I moved to the Mortar color, keeping it fairly simple to create contrast and readability. With the different tile samples and masks for the grass, plant and pebbles, I created different layers of colors for the plants.

037_BaseColor04
038_BaseColor05

The dust is great to create harmony and uniformity among the previous steps of base color.

For the last part, I used a Curvature smooth with a really low overlay opacity on top of the base color, to have a little sharpness at the end.

039_BaseColor06
040_BaseColor07

Roughness, AO and Normal

I kept the roughness quite simple, with a mix of curvature, levels, and a bit of grunge on top of it. I tried to bring variation and readability to the tiles and plants, but not to bring another layer of visual noise on top.

041_Roughness
042_Normal
043_AO

For sale for the normal map, I used a pretty strong value with some tweaking,  and a simple AO to add contrast.

Lighting & Rendering

I wanted the lighting as simple as possible, and focus more on clear composition, strong values and interesting colors. I used Marmoset Toolbag 4, with a simple neutral HDRI, one light and some Photoshop adjustments (contrast, saturation, etc).

This material was really fun to make, it is good sometimes to really focus on details and small things. I like to alternate between the macro storytelling of a big environment scene where all the models and textures need to work together, and a more micro storytelling material, that just focuses on his own history.

Conclusion

Thank you for taking the time to read this I hope you learned one thing or two.

Thanks a lot to GameArtist! If you have any questions, feel free to ask!