How to Model and Texture an Environment of a Ruined Tower Using Blender and ZBrush
Rafael Arcari talked about the pipeline behind the Ruined Tower project, discussing the tools he used to model each piece and explaining how he set up the lighting and wind effects to make the scene more appealing.
Introduction
Hi everyone, I'm Rafael Arcari, and I'm a self-taught Environment Artist from Brazil. I've been in the industry for almost 4 years now. Worked at Big Moxi Games on projects like Wardens Rising and Reaper Actual.
Ruined Tower
The Ruined Tower project started as a suggestion of my friend Felipe Carvalho "Squiers". We talked about what the project could be and found some interesting ideas for style, among them the "Bird House" project from Jasmin Habezai-Fekri, which was a big inspiration for the style and presentation. When looking for concept art, I came across the "Tower 1" project from Killian Prevost.
I knew I wanted to make an outdoor scene, rely more on tileable materials, and make some foliage, so that concept was perfect for that. Also, the lighting and composition were just phenomenal, and I liked the fantasy vibe it has.
At this point, I just wanted to get the scene in the engine and the basic composition going. So I just quickly iterated a composition and blockout of the scene. Then, proceed to get some reference and plan out the environment more with images and links for the techniques I planned to use.
Composition
All assets in the blockout were made in the quickest way that I could, either imported from a pack, Quixel, or the template asset from SpeedTree or Gaea. I used lattice in Blender to roughly shape some assets, but that was it. The workflow went like this for most of the assets and the scene:
Composition > Blockout > Proxy > Refinement > Polishing
Once I had a blockout that roughly matched the concept, I exported the scene from Unreal Engine into Blender, where I would model a proxy following the blockout's proportions. The idea for these proxies is that they represent all final models I'm going to need in the end, even though some of those don't look anything like their final version. They are there to kind of hold the object's place.
Also, it is a good moment to figure out problems like the shape of the tower, but it is not a final commit yet, and it helps me visualize the scene's final look, so we are kind of inching towards there now.
To model these assets, I've used Weighted Normals and Booleans for the most part. The broken parts were made using Cell Fracture and Booleans. To make the final debris, I simulated them into a square box and baked the transforms to hold them in place, then tweaked the shape.
The idea for the tower was always to be an assembly. First, I assembled it in Blender since I was not sure how it would look in the scene, and I could make changes to the model on the fly. Then, for the final version, I assembled it in Unreal Engine.
I knew that I would need some way to break the tilling on the tower and to give a bit more depth to the ivies. So blending the materials in the asset with vertex color just works really nicely for that.
The rocks are a decimated model from ZBrush. The trick in them is just the way the materials blend. They use a triplanar rock material, an RVT blending, and the moss material is blended with the distance field AO and the green vertex color.
For the grass, a friend of mine, Aldemir Schervinski, showed me this workflow. You start by creating a couple of individual blades of grass in Substance 3D Designer. Then you use that grass blade atlas in SpeedTree to bake a grass atlas, then you assemble them into grass clumps and individual grass assets, and scatter those in the engine.
For the scattering, I used landscape grass. Also in SpeedTree, I modeled them facing up and used the parent curl to fake the "gravity bend" on the blades. The trees were created similarly. I've started with a basic leaf atlas, then created the twigs and branch atlas in SpeedTree, and then created the tree using that atlas.
Creating the bushes was a simpler workflow. I created a leaf bunch texture in Substance 3D Designer, then spawned them as particles in Blender on a sphere, then just shaped the sphere to look how I wanted. At the end, you need to transfer the normal from a sphere to the bush so they don't look janky.
The background mountains were first created in Gaea, it's the Mountain node, with some Erosion, Denoise, and a Sharpen, then export the mesh out with the mesher export node. Then you go in ZBrush and apply a clay polish a couple of times, we are trying to get rid of the high frequency noise a bit and make it look sharper. Export that as a high-poly, decimate and make a low-poly, project the UV from the top, bake it, and then we just need a simple material for that.
I used some position gradient to darken the bottom and a lighter one for top-down lighting, and tried to emulate other environmental effects like erosion, cliffs, sun direction, and occlusion.
The clouds were made using some photobashing and matte painting in Photoshop. They are broken into color and alpha, which is important to get a nice fade in Unreal Engine. That technique is based on Tyler Smith's course. In Unreal Engine, you can use Depth Fade to improve the blend of these assets with the background elements.
Retopology and Texture
I used Blender for retopo and unwrapping all the UVs. On the unwrapping side, there is really not much. The towers are basically 2 tilling textures, a tilling stone brick texture, and a wood texture for the doors, windows, frames, and other assets.
I used Substance 3D Designer to create the tileable textures. The style is a bit inspired by Immortals Fenyx Rising. I also used some of the things I've learned in hand-painted textures and tried to use a bit of light information in the base color, as I thought it looked nicer.
I've followed a pattern, sculpt, detail approach for the Height map in all materials. All materials also start with a brushstroke generator I created to have a more interesting starting color to work with. I then use the variation mask to warp the brushstrokes to the pattern, so that they match the shape of my texture.
That painterly pattern is processed by a color generator. I've created that generator to quicken the process of coloring these textures and also to standardize their look. In the generator, I blend a main color with the pattern, AO, cavity, stains, top-down lighting, shadows (generated with the normal), and highlights. All textures have these features, but with different colors and blending amounts.
Assembling the Final Scene
The final assets were assembled in Unreal Engine. I've created a level instance for the tower, and the things around it were placed manually. I made some prefabs using blueprints, so it was a bit quicker to place more repetitive things. The vegetation (aside from the vines) was placed using either the foliage system in Unreal or PCG (That was the case for the background forest), and the grass is using Unreal's landscape grass.
Lighting and Wind Setup
My lighting setup was a directional light, Exponential Height fog, Sky Atmosphere, and a skylight. The directional light is using a panning cloud light mask so that you have those nice shadows around. I also excluded the light mask from the distant background, as I thought the pattern was too glaring at a distance, so the light is flat there, which is done using a distance blend mask in the shader. I have some other spots in places where I want to give more interest, but that is the lighting.
On the wind, I'm using an upside-down hanging vertex animation, which you can find in Ryan Dowling Soka's blog. It looks so good, I've used it forever, really. I don't use a vertex color mask for it as he does. I've used a distance from the origin point for the gradient mask, as I think it is somewhat easier to control, and I free up the vertex color for other stuff if I want to use it. I'm also using a material parameter collection so I can have global control of the wind strength.
Conclusion
This project took me about 2 weeks to finish. The main challenge was really learning how to speed up my Substance 3D Designer workflow, as I knew from the start it would be a bit of a bottleneck for me. Also, learning how to use SpeedTree was a good challenge to take. I learned that a good process will give you a lot of confidence for visualizing the final environment. Also, you can do a pretty nice environment with some very simple parts, as long as they match well together, which actually saves you a lot of time.
It is common for a bigger project to focus too much on detail way too early or way too much, so it is better to evaluate your work on the scene, in the angles that are going to be seen, and how it matches with the rest of the scene, instead of evaluating it isolated from everything else. Also, if things are not working, you can spot them early and fix them, so you minimize the frustration of spending a lot of time on something that didn't work. That's why proxies and a nice process will help you judge your work in context. I think that is great.