Project & Goals
It all started small, I wanted to practice creating tiled textures using the ZBrush + Substance Designer approach.
I made a tiled brick texture using ZBrush and I really like the result. Immediately I wanted to go ahead and turn it into something more.
After consulting with our Team Leader, we decided that we could try to make a small diorama of a destroyed house or part of it. Having received the approval, I started looking for references and ideas.
References & Ideas
Having picked up suitable references, I began to form an idea of the scope of the task and the approximate pipeline.
Since I had no experience in creating such assets before, I started looking for inspiration from the already implemented works.
I saw Ben Wilson’s Ruins of the Reich talk at GDC 2018 Substance Days. I was very impressed by what I saw.usedThe result and the way the Machinegames studio team created these props was amazing.
After watching, I immediately started planning, as Ben answered many of my questions in his report.
I sketched a small plan, but of course, I moved away from it closer to the final.
Initially, the plan included creating more materials, but with limited time, I settled on four: a brick wall, broken brick, paving slabs and plaster.
Also, I needed to make some unique elements of the broken wall that would be combined with the tiled texture of the bricks and the pile of construction debris.
For reference, I took all the same works from Wolfenstein.
Creating a Tiled Brick Wall Texture in ZBrush
I started the brick wall by modeling a simple blockout. To do this quickly, I used the Debris Maker 2.0 plugin for 3Ds Max.
With its help, in just a few clicks, I created a brick wall with the masonry I needed. I didn’t want to make the wall too big so I decided it would be 1m by 1m.
Texel Density I decided to use 1024 pixels by 1m.
Then I exported it all to ZBrush.
1. I applied the DynaMesh tool to make the mesh more dense and uniform.
2. Then I worked in more detail on the edges of the bricks. For this, I used the aj_polis brush which I found on polycount.
3. Using the Transform tool, I placed the bricks in such a way as to give the masonry a more natural look. I twisted the bricks a little so as to give a broken silhouette.
4. This is necessary for a more voluminous and picturesque normal map.
5. From the height map downloaded from Megascans, I made unique alphas for working with bricks. They gave the bricks a more worn look.
6. Using the TrimSmoothBorder brush, I worked on the edges, making the bumps. For this brush, it is better to use a square alpha and a Focal Shift of at least 80.
Next, I added some cement between the bricks.
7. Using the same TrimSmoothBorder brush, I showed the effect of the spatula marks.
8. The Morph brush served as an eraser, bringing back the original shape.
9. With the ClayBuildup brush set to Spray I made a noise effect on the cement.
10. Well, I sketched the very shape of the cement with the same ClayBuildup brush, but with standard settings.
11. After painting the bricks and cement in different colors, this is done to create a color id. Using the Color tab and selecting the desired Subtool, I selected a color and clicked on the FillObject button.
12. The selected Subtool has become colored in the desired color.
13. After the highpoly brick wall was done, I needed a heightmap for texturing. I made it inside ZBrush, but first I need the canvas to be the size of the future texture. Using the Document tab, I set the desired size and clicked the Resize button.
14. Clicked Ok and the canvas became 2048×2048. This texture size was enough for me to work with. The final texture will have a size of 1k.
15. After resizing, put the canvas in a comfortable position.
16. Don’t forget to disable Perspective.
17. To align the bricks with respect to the texture, you need to add plates that exactly match the size of the baked area. Selecting the play n and pressing the F key aligned the bricks with the canvas.
18. By clicking the GrabDoc button in the BrushAlpha window, I got a beautiful height map.
19. In the same way, I checked what the future normal map would look like (finally I got it in SubstanceDesigner). You need to select the NormalRGBMat material and click the GrabDoc button in the
20. I got the Material Id in the same way as the normal map, only I chose the FlatColor material.
Creating unique Broken Wall elements
To reuse future assets, it was important that the brick pattern matched all elements. I used a primitive blockout with a brick texture assigned and sliced the silhouette I needed on top. I thought in advance about which elements I need.
Having chosen the necessary elements of the future destroyed wall, I laid out the destroyed wall from the previously prepared bricks. I carefully checked that on all elements the pattern of bricks was joined by a tiled texture. It is important.
After, having a clear understanding of all parts of the future constructor, I started sculpting.
I used all the same brushes as for the tiled brick wall.
For the cement, I mainly used the ClayBuildup brush with different settings.
I made the rest of the walls in a similar way.
Low Poly, UV Mapping & Bake
I didn’t have a polycount limit, so I didn’t worry about the number of triangles. But I still tried to keep the density of the topology within reasonable limits. Lighter geometry is easier to work with.
I made a tile texture of a brick wall with a size of 1×1 meter, a pixel density of 1024.
I packed all the unique elements of the broken wall into a general atlas sized 4096×2048. It is very important that the pattern of the brick of the tile texture coincides with the pattern of the unique parts in the SE. This made it easier for me to build modules.
I baked all the cards in Marmoset Toolbag 3. I will not stay here for a long time, since you can find all the necessary information on baking on the official website.
Texturing (Brick tile, unique bricks)
The texture for the bricks was made in Substance Designer, at that time I didn’t know much about it and it was a good reason to practice.
From ZBrush, I got a base height map and the result was fine, but I needed to add additional detail, such as small cracks, noise and texture.
I also had to work on the cement mortar, making it looser and noisier.
Having received the desired result, I moved on to working with color. The GIF image looks simple, but I had to tinker to get the desired result. I experimented with basic nodes for a long time and some things had to be redone.
Below is an example of the first version of the texture and after feedback and improvements.
Then, having the brick wall material ready in Substance Designer, I created a smart material for Substance Painter, in which I had to load the necessary incoming maps to work.
I overdid it a little and added a lot of settings to it, in the end, I only needed a few. But then it seemed to me that it was cool.
The very hierarchy of layers in Substance Painter was not very complicated.
Making Broken Brick
I saw the workflow of creating a broken brick material in the same report by Ben Wilson “Ruins of the Reichs”, which he delivered at GDC 2018 Substance Days. Ben explained the process of creating such assets step by step.
The essence of this approach was to achieve maximum realism.
If you create such material completely procedurally using Substance Designer, then it is hard to avoid procedurality and intersections.
#Also one of the features was that the objects used in the tile material should be used as separate props to create a pile of broken bricks and wall pieces.
Therefore, pre-created 3d objects were used in the approach. Using ZBrush I made several variations of broken bricks, broken boards and metal parts.
I did not do low poly, I optimized the mesh through decimation master in ZBrush. After auto UV and coloring in Substance Painter with base materials.
Using the ReyFire for 3Ds Max, I made a simulation of falling bricks on a plane. The first time I did not get the desired result, but after several attempts I got the desired result.
After that, I duplicated each of the sides to create a seamless texture and manually corrected the areas that I did not like.
When the shape I needed was ready, I made all the necessary maps in ZBrush using GrabDoc (described above).
Since the bricks and planks already had an Albedo base texture and ID this helped me when texturing in Substance Designer. All other maps, such as Normal, AO and Curvature, I got from the Height map.
In the process of texturing in Substance Designer, I added weathering, dirt, dust and small stones.
Creating a pile of broken bricks
To create a pile, I took the already finished pieces that I used for the broken brick tile.
I also had to make some larger and more unique pieces of walls and wooden broken boards. I downloaded the rest of the construction debris from Megascans.
The heap creation process itself was simple but quite painstaking. This time I did not use third-party fall simulation plugins but laid everything out manually. It took some time.
I started by sketching out the basic shape in ZBrush.
Through the Displacement Map tool, I extruded a height map of the tile texture of the broken brick crumb downloaded from Megascans. I repeated this operation again but with a different texture to achieve a blending effect.
Then I just laid out all the bricks, boards and wall pieces in the shape I wanted. Broken glass, small debris and plastic garbage bags I downloaded from Megascans and squeezed onto the plain through the mask.
As a result, it turned out not bad.
I baked all the maps in Marmoset Toolbag 3. Since some of the elements already had a high poly texture,
I baked it on albedo.
In Substance Painter, I used the same smart material that I used for the brick wall, added weathering and some dirt & dust.
I also added transparency around the edges for the transition.
I used this pile of construction debris as a unique asset to dilute the broken brick tile and add silhouette and detail.
Creation of sidewalk slab
For paving slabs, I used the same pipeline as with bricks. I made a sculpture in unique slabs (whole, broken) and a manhole. And I planned to use it both for tile texture and for unique elements.
Through GrabDoc in ZBrush, I took a height map of each tile in order to assemble a tile from them using the Tile Sampler in Substance Designer. Since I had options for a whole tile and a broken one, I could make different variations.
To give the texture a more interesting look, I decided to add grass and weeds. I made the plants a separate graph, and then distributed them between the tiles using the Tile Sampler.
After finishing texturing in Substance Designer, I exported the smart concrete surface material to use when texturing unique tiles in Substance Painter.
I didn’t bother much with Low Poly, making it using the Decimation Master in ZBrush and modifying the mesh a little with my hands. SE unwrapped uniquely into a rectangular texture 2048×1024.
Construction of Wall Elements
Having created the basic elements of the constructor, I collected several options for the destroyed walls to see how the destroyed wall might look and if everything is in order. How unique elements fit into tiles, etc.
Afterwards, I have already collected more options for destroyed walls, columns and arches.
For props, I used the standard High Poly pipeline, made in ZBrush or Maya, baked maps in Marmoset, textured in Substance Painter.
Creation of a diorama of a destroyed house
Having everything I needed to start, I started to assemble my diorama. First of all, I tried to recreate what the house would be like if it were whole. Then, moving from larger to smaller, from whole to destroyed, I gradually found the right shape for the future diorama.
Plaster and Decals Material
Material, bullet hole decals and patches I completely made according to Daniel Thige’s tutorial – Plaster Wall with Parameter-driven Bullet Holes.
Daniel described the whole process in detail, especially the creation of the bullet holes. Based on this approach, I made patch decals, these are the same bullet holes only inverted.
Since I was compiling the final scene in Marmoset Toolbag 3, I did not use a material blend, I knew that it was possible with custom shaders, but at that time I did not have them and I did not have free time to solve this issue. Therefore, I put all the different materials on top of each other like decals, like a layer cake. Below is an example.
The final render was made in Marmoset Toolbag 3. Before the screenshot, post-processing, sun angle, sky angel, shadows and depth of field were adjusted for the best view.
After that, the screenshots were transferred to Photoshop for post-processing, exposure alignment and post-effects.
Unfortunately, I did not manage to finish the work due to leaving the studio, and it was published unfinished.
The plans were to make a lot of props, broken doors and window frames and add elements of destroyed furniture and water pipes. It is possible to dilute the tile of bricks with more worn and dirty ones and add drips.
Now there is no desire to return to the old work because after a while many things cease to be relevant and now I would do a lot differently. But Regardless, I’m happy with how it turned out.
After all, the main task was to gain skills and I learned a lot during this task.
I would like to thank the guys who at that time helped me with good advice and reviews, these are Maks Makovskyi and Dmitry Koval.
I hope this breakdown has been helpful to someone in creating a similar environment. I want to thank the GamesArtist team for the opportunity. You can expect to see my latest work on Artstation so keep an eye on me!