logo80lv
Articlesclick_arrow
Research
Talentsclick_arrow
Events
Workshops
Aboutclick_arrow
profile_loginLogIn

Gothic Temple Environment Breakdown

Angel Fernandes did a breakdown of his UE4 scene Gothic Temple: modeling workflow in ZBrush and 3ds Max, approach to texturing in Substance Designer, shaders, and rendering in UE4

In case you missed it

you might find these articles interesting

Introduction and Career

My name is Angel Fernandes, and I am from Buenos Aires, Argentina. I have been working in the industry for 4 years, and I am currently working as an Environment Artist at Nimble Giant Entertainment developing games like Drone Strike Force, Hellbound, and Quantum League.

I think you could call me a frustrated Character Artist, I got interested in characters because the human figure always caught my attention. I even took traditional sculpture classes for several years when I was a boy. 

The transition to Environment Art occurred naturally. One day, I was modeling some rocks, the next day it was a landscape, then I was taking a Substance Designer course. Then I  realized I had forgotten about the characters. 

Nowadays, Environment development is a very wide field, I think you can dedicate a whole life to it, and I am sure it would be a life well spent. It is good to know a little about everything, to be a "Jack of all threads", but I think the industry is already aiming to have specialists, and that is what I am trying to do with Substance Designer. I’m in love with Environment Art in general but material creation got me really hooked lately.

Many things inspire me, mostly, other 3D artists and also any artist who dedicates his life to the "seven arts". A Naughty Dog game, a David Lynch movie, a Neil Gaiman novel, a Massive Attack album, a new material by Daniel Thiger or Josh Lynch, etc. 

It’s difficult not to be inspired nowadays with so much content, but it is true that sometimes there are those days when nothing comes out. Those are the days that you have to work the most, it is easy to work while being inspired. Life is too short to work only when the “muse” visits you. "Ars longa vita brevis", right?

About the Project

It started as a project that I used to test new workflows, shaders, and some new features in Unreal. I soon realized that I already had some assets to put together a small scene, and I thought: “why not?”. My goal was to put some workflows into practice, create some dynamic shaders, play around with a trim system, and practice with Substance Designer and ZBrush. When you work in a studio, your tasks depend on the current project, this means that sometimes you can go months without sculpting, or without creating new materials. For this reason, I always consider having a side project that you can advance in your home or in your "free time", so your skills don't get rusty.

Gothic Temple Environment UE4

References 

I was inspired by the architecture of a place called Dryburgh Abbey in Scotland. The set dressing, the mountainous background, the foliage, the snowy weather, the mood, and other things are inspired by God of War. Then add the creepy monk statue, fire, crooked tombs, and more to give it a darker, more abandoned, mysterious tone.

I put all my references into a PureRef board. In addition to searching for images on Google (well, duh!), I also look for many videos. I got the best references of Dryburgh Abbey from a 4K video that a good sir uploaded to his YouTube channel. Then I turned on my PS4, and started playing God of War again to do some screenshots, looking for references is so stressful.

This is how my Reference Board looks like.

Modeling

I modeled very simple modules in 3DS Max for the temple. I measured the modules so that everything’s matched, I used the least amount of triangles possible and made sure that everything shared the same texel density since they were going to use the same textures (TexTools is a great plugin for this). I created a Trim Sheet in Substance Designer for the ornaments and placed them taking into account the connections of the modules and also that they look good and have logic.

For the other assets, like the altar, statue, brick blocks, and rocks, they all went through ZBrush. First, I created a very simple low-poly version in 3DS Max that I import into Unreal to make sure the proportions and shape are correct, once that makes me happy, I take that same geometry to ZBrush and start sculpting. In general, I use conventional brushes, such as Clay Buildup, Trim Dynamic, Mallet Fast, or Dam Standard. I also use Dannie Carlone's brush sets a lot, I am in love with them! Once the high is ready, I use ZRemesher or Decimation Master, it depends on the type of asset. I like the topology of the ZRemesher, but sometimes it smooths the geometry too much. In this case, I wanted to have very sharp shapes and rocks, so I used the Decimation Master. However, this forces me to go back to 3Ds Max to weld vertices, remove orphaned vertices, and correct any holes or anomalies that the Decimation Master might cause. The STL Check modifier is very useful in this case.

This is followed by the Unwrap, setting the texel density and then goes directly to Marmoset Toolbag to do the bake.

When I do set dressing, I always try to keep in mind the large, medium and small shapes. For example with rocks, I first used the Cliff, which is the largest rock structure I have, I rotated it 90 degrees and rest it on the ground. That would be my large shape. Then go the medium shapes, like the medium rocks, and then the small shapes, like the smallest rocks, there are usually more of them, and they are usually more dispersed. I do this in all parts of the scene, and I don't have to be as strict about the type of asset. For example, bushes or grasses could also count as the small shapes in relation to larger rocks. The idea is to create a smooth and gentle visual transition for the eyes. In my mind, I reduced everything to simple shapes, it doesn't matter if it is a rock, a tree, or something else. The important thing is that the primary form is supported by the secondary, and tertiary ones. This is seen in nature, too, which tends to be ordered in the same way, and of course in video games.

Foliage (grass, bushes, leaves, and twigs) was modeled in ZBrush. I bake the Normal, Curvature, AO, and ID Mask into a plane and texturize it in Substance Designer.

I made 2 Atlases, one for the grass and the leaves and the other for the bushes. Then in 3Ds Max, I created the flat planes. I edited the geometry to fit the foliage shape as much as possible, this reduces the overdraw generated by the alpha. I adjust the vertex normals so that the light is better distributed over the geometry in Unreal, if this is not done, and you have curved planes pointing down, that grass will have an extra dark shadow.

I also create a black and white gradient on the vertex color of the geometry, to indicate which parts of the foliage are going to be affected by the wind and which parts are not.

Texture packing: I'm trying a different way to pack my textures for foliage and some other assets. Only 2 textures. The "BCH" contains the Base Color on the RGB channels and Height (or mask in this case) on the Alpha channel. The "NRAO" contains the Normal, the Roughness, and the Ambient Occlusion. With this image, it will be better understood:

In Unreal, I created this material function to be able to use the NRAO maps. This is how the Grass shader looks like. I try to keep it quite simple. Below you can see how the Material Function is made for the NRAO.

Generating the Mountains 

I made 3 different mountains to have variety in terms of shape, materiality, and states of the weather. One is completely covered with snow while the others are at an advanced stage, where some of the snow has already melted, and you can see the rocky surface and grass.

The filters I used the most were Deep Erosion, Ridged, and Sediment. The mountains are on the horizon, a little out of focus, and with some fog sheets, so I decided to export the geometries, Normal Maps, and Splat Maps. Then, I import the geometries to 3Ds Max and use the MultiRes modifier to reduce the number of triangles and preserve UVs. The mountains have around 30,000 - 70,000 triangles. I generate the LODs in Unreal since for "organic" things like landscapes, rocks, or terrains, Unreal's Auto LOD works very well.

The Shader is very simple and allows you to load the Normal map and the Splat map that you export from World Creator. I decided that the 3 mountains were going to be able to vary between grass, rock, and snow, so the Splat Maps of each mountain have assigned the rock in the red channel, the snow in the green channel, and the grass in the blue channel. I only used the roughness and the albedo of the textures (which I did in Substance Designer) since there is so much distance, the normal map did not make the difference. I use the information from the red channel of the albedos to inject some information into the Specular and not leave it in the default flat value (0.5). Power node and Multiply node are great for controlling the contrast and intensity of the masks, and remember to clamp them with a Clamp node or a Saturate node.

Texturing

Every asset was shaded in Unreal with textures I have created in Substance Designer. Only the graves passed through Substance Painter. I made 3 Tree Bark materials for the trees, and a Peeled Bark material for the bare part of the trees, for this last one, I used ZBrush to generate the heightmap.

I didn’t aim to something very real for the trees but use the textures Dan McKin did for God of War as a reference. The materials he made are amazing, I couldn't stop watching them while playing.

The main landscape terrain is made up of 2 snow materials, 1 mud and 1 puddle, and everything is being blended through the Height maps. Snow and mud (and their variations) were created in Substance Designer.

For rocky surfaces, I created 2 different versions (Base Color map and Normal map), one more complex and noisier and the other with larger shapes, more eye-rest, and a little directionality. The first I created entirely in Substance Designer, while the second I sculpted the Height in ZBrush. The shader uses the Baked Normal map of the rocks with one of the other 2 Normal maps, it would fulfill the function of a “normal detail”. I also use the Fuzzy Shading Material Function to give a little more shine and volume to the rocky part. Snow is applied through the WorldAlignedBlend Material Function, which uses the Normal map and also lets you paint snow with Vertex Color. Snow uses SSS, and I added a Sparkles mask to the roughness to generate those little specular glitters from the snow. Here, I also use the red channel of the Albedos to inject information into the Specular. I use the World Position Offset to “inflate” the snow a bit.

When I create a new material in Substance Designer, I try to finish the Heightmap before anything else. If I am not happy with the heightmap, it is very possible that later it will bring me problems in the albedo or in the normal map. Then, I usually continue with the albedo and leave the roughness for last. When I work with the roughness, I put a flat black color in the albedo, it helps me to focus. (Thanks to Josh Lynch, for this and much more)

It is very useful to control the range of our height Map as we go because it is very possible that we will later use that heightmap in the engine to mix our materials. The intensity of the normal map and the roughness can make you perceive the colors of the texture differently than you think it should, so be careful. Then, there are general tips such as maintaining an eye-rest level, not generating very noisy textures, not exaggerate the intensity of normal maps, checking the PBR values ​​of albedo and metalness, etc ...

Working with Shaders

The wall shader allows you to paint/assign 3 different materials: clean bricks, bricks with snow, and bricks with some stucco. It has dirt grunge that is adjusted by TriPlanar (WorldAlignedTexture node). Then, it allows you to add a layer of damage, also adjusted by TriPlanar, and with the possibility of painting it by Vertex Color. Then comes the snow layer that helps me create a smoother transition between the column and the ground snow. It generated a gradient on the Z axis through the Absolute World Position, and I subtract grunge to generate variation and not just be a rigid gradient. Finally, I added another layer of snow in the same way that I did with the rocks, through the WorldAlignedBlend taking into account the Normal Map of the bricks.

The tree shader allows me to paint regular or peeling tree texture and snow on top. For the healthy part of the tree, I made 3 different texture sets for variety and a different set for the peeled part. The Peeled Masking part works with a WorldAlignTexture as the wall shader, but in this case, I am only using X and Y mapping, and I can also paint it by Vertex Color.

Snow is applied in the same way, but it also adds another mask (a moisture noise) and takes into account the information from the Normal Maps of the tree textures.

At the end of the shader, I made a very simple debug system, because, with flat colors, it is easier to see how things are blended.

The branches and leaves use the same shader as the rest of the foliage.

Rendering and Lighting 

The composition, shot, and lighting are things that have changed a lot during the process of setting the scene because I didn't quite like it. I asked some friends for feedback, it is always good to have a fresh pair of eyes, even better if they are people with more experience than you. When you work every day for long periods in the same scene, with the same composition and the same lighting, you run the risk of "getting used to" or locking yourself up in an idea that perhaps does not work or is not the best. So, don’t be afraid to ask for help.

The composition is very simple. I tried to separate the background (mountains), the mid ground (the temple), and the foreground (the trees, the grave, and the ground). I tried to create an eye-movement that goes from the first grave on the left, down the path to the stairs, and from there to the altar with the cross. The roads or paths are always a very good leading line. I use the trees as a frame for the whole scene and the statues as a frame for the temple.

As for the colors, the blue shade of the sky and the orange of the temple worked well. I kept the emphasis on those complementary colors, and with the rest, I tried to bring it to less saturated or gray colors. The mountains point towards the temple on a diagonal inclined towards the center.

I like to use the rule of thirds and also pay attention to what happens within those same thirds, so I mark the rule of thirds again within the same thirds to see what happens.

I like to analyze paintings by traditional artists like Edgar Payne or Robert Watts and try to see why they did what they did.

The lighting is dynamic and uses the traditional workflow: a Directional Light and a SkyLight. I use Spotlights and Point Lights in some parts I wanted to emphasize, and in places where I wanted reflections like in the puddles.

The cold atmosphere is the result of the sum of things like the Exponential Height Fog's cold tone, the fog sheets, the snowfall, and the Light Color of the Directional Light. And, of course, the Color Grading of the Post Process Volume. In the latter, I also modified the section of Film (Slope, Toe, and Shoulder), and Rendering Features (AO, Cubemap, Ray Tracing Reflections, and Misc). In the end, I added a Look-Up Table that I made previously in Photoshop with the final color editions.

I would like to thank Alexis, Chory, Ariel, and Otto for giving me good and useful feedback. Sorry for bothering you guys! 

I hope this is useful for someone out there, and that if you are reading this, you find yourself safe and healthy in these crazy times! If you think I can help you with something, don't hesitate to contact me!

Angel Fernandes, Environment Artist

Interview conducted by Arti Sergeev

Join discussion

Comments 0

    You might also like

    We need your consent

    We use cookies on this website to make your browsing experience better. By using the site you agree to our use of cookies.Learn more