Café De La Habana

Environment Breakdown

Nikita Grigoryev

nikita-grigoryev-1-scaled
104

Nikita Grigoryev

Environment Artist

Introduction

My name is Nikita Grigoryev, 26 years old and I’m self-taught 3D Artist. Currently working as 3D Environment Artist at Obelisk Studio since February 2021. Participated in the development of “Sons of the Forest” game for 1 year as Prop Artist, and 1 year as Lead Environment Artist. For now I live in Moscow.

I started to learn 3D graphics for games almost 3 years ago, in summer 2020. All the time as I remember myself I very loved computer games as a player, and as a potential game developer.

It was my dream – to make such inspired interactive worlds, no matter in which role – as artist, as designer, as programmer, etc. I've watched a lot of developer interviews and tried initiatives in many areas of gamedev.

At first everything didn't go very well, but after I came across an interview with Nikita Hrushevskyi, I realized for sure - I want to become a 3D Artist and create visual storytelling through an interactive game environments. Seven months after the start of my studies, I found my first job, which I work on to this day.

Project

I recently created my first big artwork for a personal portfolio without any tutorials, Los Nardos – Havana Cafe. In this article, I want to share with you my process of creating this environment. You will learn about how I created the modular system, materials, trim sheet and master material in the engine, what mistakes I made and how I solved them, and much more.

Software

  • PureRef
  • Blender
  • ZBrush
  • Marmoset Toolbag
  • Photoshop
  • Marvelous Designer
  • Substance Designer
  • Substance Painter
  • Quixel Megascans
  • Unreal Engine 5

Goals

  1. Significantly improve my artistic skills in creating environments.
  2. Get to know Unreal Engine 5 better.
  3. Learn more principles about creating a modular system.
  4. To practice creating trim sheets in the Substance Designer.
  5. Improve the quality of my portfolio.
  6. Enjoy the process.

References

As I said I love video games, they really inspire me to do something. One of the recent games that won my heart was Far Cry 6. The art team of Ubisoft did an amazing job with the visuals and reproduced the Cuban mood in a very atmospheric way. I was very much inspired by the architecture of Havana and realized for myself that I wanted to reproduce some buildings in a similar style.

I decided on a specific building pretty quickly. If you type the word “Havana” into Google, you will see similar photos in the first lines

1-2

It was a good choice because these buildings convey the feeling of comfort in Cuba to the maximum extent possible. Furthermore, they bear a resemblance to certain buildings in Far Cry 6.

After spending a few days searching for references, I restarted the game to reach the city of “Esperanza” and find something similar. I discovered almost identical houses and proceeded to examine them from all angles.

2-2

It’s very cool when you have the opportunity to see how another artist coped with the task. Here’s my first recommendation: feel free to use other people’s work as references.

The experience of other people is valuable. This does not mean that you have to replicate the work exactly; just try to find out how another person embodied the idea, observe how they altered the shape of the object, how much they deviated from your references, what new elements they added, and so on.

A thorough analysis of references to other people’s work can provide you with certain conclusions that will help you grow as an artist, and it will also give you an understanding of the technically correct use of resources—such as closely monitoring the number of polygons, texture resolution, and so on.

And, of course, I don’t forget about references from real life. This stage might be a bit boring for some, but trust me, searching for references of the main objects in your scene is the most important aspect of environment creation.

Here is my reference board. I mostly used Google and Artstation to search for these photos and renders.

3-1

Planning Modular Systems and Trim Sheets

After conducting thorough research, I began planning the appearance of my modular system and trim sheet. With an ample supply of good references, this task became relatively straightforward. I began by sketching the outlines of various shapes and contemplating which repeating shapes I could employ to construct these buildings.

The provided example demonstrates my typical workflow in Photoshop. On the left side, you will find the primary reference, while on the right side, you can see my concept of how the modules will appear.

4-3

The next step could be modeling the blocking and modules based on our Photoshop breakdown (it would be more logical to start with this) or planning and creating a trim sheet. I started by working through the material because, at that moment, I already had a clear image in my mind of how my modules would look.

Just like last time, it all begins with the analysis of references. I found a fantastic close-up of the main entrance to the building, exported it to Photoshop, and began analyzing it. It became evident that I could fit almost the entire facade into one trim sheet (and use another texture set with a tile texture to add indirect lines). This is because the entire wall primarily consists of straight lines, which are convenient to map onto the lines. Here is my trim planning scheme:

5-3

I have also created several additional segments on the trim sheet that are not present in the references. I devised them myself to achieve a unique appearance for my modules, incorporating my own details.

Creating the Modular System and Trim Sheet

In the process of creating the modular system and trim sheet, I utilize the trim scheme from Photoshop. Subsequently, I turn to my trusty companion, Substance Designer, to generate a height map. I primarily employ nodes such as “Shape,” “Transform 2D,” “Bevel,” “Blur,” and “Blend.”

After creating a normal map, ambient occlusion (AO), roughness, and base color, I made the decision to manually modify certain aspects of the material in Substance Painter and export the final maps from there. And here is the outcome:

ReadyTrim_UE

After completing this step, I finally proceed to modelling, and here I would like to emphasize the importance of this stage, as the performance of the entire modular system will depend on it. Usually, the pipeline is constructed as follows:

  1. First, I block out the entire environment without considering how the modules will come together. This is necessary in order to capture the correct proportions and the desired silhouette.
  2. Then, I export the blocking to the game engine and switch to game mode to verify if everything is satisfactory in terms of scale, silhouette, and proportions. If something appears unnatural (which usually happens), I return to my 3D software (I use Blender) to refine the blocking, and then repeat step number 2. Once my blocking starts looking satisfactory without materials and textures, I proceed to the next step.
  3. I return to the 3D software once again and begin working on the modules based on the blocking.

Here are a few iterations of my blocking. You may notice that I made changes to the right wall, the upper railings, the beams under the balconies, and the inside of the entrance in the second screenshot because I was not pleased with how they appeared in the engine in the first-person game mode.

BlockingIterations_UE

When modeling modules, I recommend snapping them to a grid of 5 or 10 centimeters. For example, if your wall measures 362 centimeters in width, it would be better to round its module size to 360 centimeters. The same principle applies to the height and length as well.

Therefore, creating a modular system is a somewhat time-consuming process. However, I consider this process as one of the most effective ways to express my artistic vision. I start by dividing my blocking into elements (modules) with the snapping function enabled, ensuring that all the parts are in the same proportions and are multiples of 5 or 10 centimeters. Consequently, the dimensions of almost all my modules are 360×550 cm.

DimensionsOfModules_UE

UV Mapping

Then I create the material in Blender, give it the name “Trim Sheet,” and connect the necessary maps to the BSDF as follows:

111

1. The base color map is multiplied by a certain color, then multiplied by Ambient Occlusion, and connected to the “Base color” input.

2. The ARM (AO, Roughness, Metallic) map is separated into three grayscale channels. The red channel (X, AO) is multiplied with the base color map. The green channel (Y, Roughness) is connected to the “Roughness” input. The blue channel (Z, Metallic) is connected to the “Metallic” input.

3. The normal map can be directly connected to the “Normal map” node and then to the “Normal” input, but first, I had to flip the green channel. Note that maps like ARM and Normal should change their “Color space” from sRGB to Non-Color mode.

At this stage, I am gradually starting to map my modules onto the trim. Often, I notice that my modules are too plain, so during the mapping process, I add additional details such as bevels, booleans, extrudes, and so on. At the same time, I always make sure to look at my references and gather information from them. Please do not forget about references; they are crucial, and many inexperienced professionals tend to overlook them when working on their projects. You can come up with your own details and incorporate them into the modules, but always refer to and expand your knowledge base by analyzing real-life objects.

Here, you can see how my UV arch looks and how it functions:

You can see that in the video I made a mistake, leaving the so-called “butterfly effect”. Try to avoid such situations, especially in those places where it is most noticeable:

ButterflyEffect

For a better understanding of the process here are some more examples of my modules with UV:

I often updated the scene in the engine to see how the building looked with the materials applied. My good mentor, Sergey Panin from Housemarque Studio, said, “It may seem to you that your location looks bad after the blocking stage. Just keep working on it, and you will see how it gradually improves.”

That’s how it works for me – I tend to get stuck at the visual stage of scene mapping. In the engine, I start to notice that some UV shells are unwrapped incorrectly, or the trim texture is too repetitive. Often, I go back to Blender or Substance Designer/Painter to make some adjustments. And indeed, after a few attempts, everything gradually gets better.

Here are some screenshots highlighting the areas I corrected. Please pay attention to the changes I made.

The main trim has been changed, several modules have been replaced, and some details have been added. In the last screenshot, a new texture can be seen on the side walls, which I obtained from textures.com.
I did not create it from scratch myself, as the primary goal of my work was not only to develop materials but also to focus on enhancing my skills in other aspects.

Unreal Engine, Megascans, materials, instances & decals

When all the basic modules of the central building are ready, I export them into the engine after previously creating a scene template with a first-person game mode. My main goal at this stage is to capture the mood of the house. Thus, I create a master material and connect my textures in the simplest way, then link the material to the modules.

Here is the result:

In order to capture the atmosphere of the scene, I made the decision to duplicate my modules and create pink and yellow houses. Additionally, I added a few more modules to the scene. To accomplish this, I included a couple of extra nodes in my master material to alter the color of the trim and tile textures.

Furthermore, I incorporated several nodes to modify the contrast, lighting, and roughness. I can effortlessly adjust these parameters in the instance material. This is what I ended up with:

It seems to be getting better, but my materials lack life – unique chips, dust, and leaks. I can’t add them to trim or tile textures, as it will look unnatural. After all, dust mainly accumulates at the joints of geometry, and chips primarily appear at the corners.

I have decided to use a mask approach to create unique details. What is it, what are the pros and cons, and how do I use it? Here are the steps:

1. The mask approach involves using a grayscale three-channel mask. Each of these channels (R, G, B) will contain unique low-resolution masks, which I will use to apply dust, chips, and leaks to the entire house.

2. The undeniable advantage of this approach is that it will give my scene a more lively look and add diversity. The disadvantage is that I am using an additional new texture, and in a real-time gaming environment, we need to save texture space. However, another advantage is that I only load one RGB texture into the engine and use it as three separate masks. This is a good optimization technique.

3. First and foremost, I need to create a SECOND UV CHANNEL with unique UV coordinates for each module that I have. After that, I can construct the entire house (or just a part of it) and export it to Substance Painter. There, I will create three unique masks using generators and brushes. Afterward, I’ll export each mask to Photoshop and merge them into one RGB texture that is ready for Unreal.

In order for this method to work, I need to improve my mastery of the subject. In the video below, you can see exactly what I did.
Please pay attention to the specific location where I placed the mask:

Here are some screenshots from the master material:

I also used the Vertex paint node so that I could erase or paint dust, chips and leaks in the places where I want. Here is my instance material:

MI_UE

At first, this scheme may seem complicated and incomprehensible. However, if you try to understand each function step by step, everything becomes clear.

To be honest, I don’t really enjoy the process of creating master materials as it doesn’t provide me with any artistic knowledge or skills. If I had a pre-made master material with all the necessary functions from the beginning, I wouldn’t have had to create my own.

Compare how the modules on the left look with the default material, and on the right with additional functions (Mask pipeline + vertex paint, gradient, tints, decals – I will explain them in more detail later):

DemonstrationMM_UE

In my opinion, these details greatly enhance the overall appearance of the scene. In this video, I demonstrate how my Mesh Paint mod works with a mask pipeline.

A little bit about decals. These are images projected from above onto your model. Decals are not a costly resource, so they can be safely used in large quantities on the scene. That’s exactly what I did. There is really a huge amount of detail in my scene – without them, the houses will lose most of their authenticity. Most of them I took from the Megascans library.

Take a look at the demo and compare the result of the scene with and without decals.

Here’s some information about decals. These are images projected onto your model from above. Decals are not expensive, so they can be used in large quantities on the scene without any issues. That’s exactly what I did.

There is a tremendous amount of detail in my scene thanks to the decals. Without them, the houses would lose most of their authenticity. I obtained most of the decals from the Megascans library.
Take a look at the demo and compare the scene’s results with and without decals.

At this stage, most of my modular system is ready. I am starting to populate the scene with props such as chairs, flowers, pots, and so on. I have utilized plants from the Megascan library, as well as various final props. Some of the props were created by me, while others were created by my friends.

I am very grateful to them for their help as they have saved me a significant amount of time, allowing me to concentrate on the environment. I have also requested them to provide an analysis of a few models that they made for me.

Here is a breakdown of the “Menu stand” prop created by my friend, Maxim Kozlovskiy:

To create the menu stand, he first made a mid-poly model in Blender with all the compartments:

Menu_2

After that, I imported this model into Zbrush.

There, I applied Dynamesh with a resolution of 1024. Following that, I used the TrimSmoothBorder brush to remove all the bevels. To sculpt the stripes, I utilized the Same Standard brush, and for the wood, I employed a set of cracks and knots.

Menu_4

For the low-poly model, I removed all modifiers from the mid-poly version, eliminated any unnecessary details that could be baked, and merged all the edges.

Menu_1

To unfold, I increased the texel density for the loops because there was enough space, and I unfolded half of the object.

Menu_3

For texturing, I used a 1k resolution.

The texturing process itself was not that complicated; I only had to draw masks for the vertical and horizontal pieces of wood. Furthermore, it was necessary to adjust the smart materials and apply adjustment layers to them. It took me 4 hours to create the model.

Menu_5

Breakdown of the “Hydrant” prop from my friend, Dmitriy Apostol:

The first thing to consider is that we tried to create the props quickly enough. The fact is that these are objects of the second or third plan, so it is not rational to spend a lot of time on them. Many elements from the references were simplified, and much was exaggerated. On average, it took 1-3 days for each object.

For the hydrant, it was necessary to find 3-4 references, each of which was expressive in its own way. Some emphasized musty leaks, others focused on the texture of paint that had endured decades of scorching sun and various weather conditions, and some highlighted the rust formed after prolonged contact with moisture. All these elements were subsequently combined to create the most pleasing picture.

In the process of creation, a standard pipeline was used via Blender-Zbrush. Here are the blocking, the low-poly model, and UV all at the same time:

Hydrant_LP

I have decided to send the model to ZBrush and create unique chamfers with chips that will be noticeable from an average distance. Additionally, by utilizing TrimDynamic and Elastic brushes, I have fragmented numerous edges and incorporated welding in certain areas.

Hydrant_ZBR

After that, I baked all the textures that I needed for Substance Painter and started texturing. I applied a basic smart material that contained the most suitable base for further work. After making minor edits to the base layer, I proceeded with the higher layers.

These included the structure of the peeling paint and different types of dirt, mainly located at the bottom of the model. Additionally, I added the AO scattered on the map, the remains of bird droppings, the aforementioned streaks caused by stencils, and several types of rust.

All of these elements were skillfully combined, taking into account the fact that the prop would be small. Therefore, it was necessary to increase the overall appearance to make it look less monotonous and ensure that the small details would look organic in realistic conditions.

Sidewalk Scene Expansion

The remaining props were created using the same principles, nothing extraordinary. We worked together to swiftly create several dozen props that align with the Cuban theme, and I arranged them in advance within the scene.

Additionally, I incorporated a couple of updated modules, refining them with masks and vertex paint. I also came across a fantastic pack featuring ornamental textures on textures.com, which I used to enhance my modules with arches.

At this point, the scene started to resemble something like this.

12-3

I decided that I wanted to place these houses on some kind of surfaces. The white floor did not suit me, and it wasn’t very pleasant to leave the buildings in mid-air. So I started looking at the references again to determine the surface.

The most obvious option for me was the sidewalk. In fact, there’s nothing particularly special about it, but I had to go back to Substance Designer and create the tile material. I could have taken the ready-made material from Megascans or textures.com, but the sidewalk is a significant part of the environment, so I took the responsibility of creating the material myself.

It’s possible that this isn’t the best choice, but I wanted to make a typical tile that is used everywhere in our Russian cities:

There are many in-depth tutorials on how to create materials in the Designer. This is an extensive topic with a vast number of aspects that should be mentioned.

If I were to start listing even a part of it, the article could easily turn into a full-fledged book. Therefore, I will simply display a graph of my nodes. For those who are interested in this topic, I will provide links to some tutorials at the end, which helped me during my time studying this program.

Thanks to Jonathan Benainous’ breakdowns of The Last of Us Part 1, I learned that I can create two variations of a single material: a new version and an old one with cracks and chips. These variations can then be mixed in the engine by utilizing vertex points.

SideWall_VP_UE

I have also decided to add curb blocks around the perimeter of the sidewalk. These are all unique props, following the same pipeline: Blender – ZBrush – Marmoset – Painter – Unreal.

Setting up & polishing

By this point, almost all of the elements that I had observed in the main references had been included.
The only thing left was to fill the stage with numerous props, which my friends were occupied with. In the meantime, I selected a few props from the Megascans library. The scene had a resemblance to this:

13-2

I have created three different blocks, which I have packed into one UV.

Then I duplicated them all around the sidewalk. However, there is a particular moment that I would like to showcase with a bit more detail. If you take a closer look, you will notice several inclined curbs positioned near the rise to the sidewalk in my scene.

MainandAddCurbs

The fact that I made them AFTER I prepared three unique curbs, whichs means that the entire uv space was already filled, and i could not add two additonal unique blocks to this UV set. so i took one block and made two additional variations out of it, leaving the UV in the same place. this caused the stretch on the texture wehich doesnt look good.

But I did’nt want to focus too much on the curbs, rather, the bigger picture, so I decided to leave it as it is.

It would be possible to pack two new blocks into a new UV set, but I didn’t want to use three additional textures in the engine for them (Base color, ARM, Normal). I recommend that you avoid such issues by planning in advance which blocks of curbs (or other models) you intend to use in the scene.

I made this mistake simply due to inadequate planning of the location from the very beginning. On the one hand, it was a mistake, but on the other hand, it provided valuable experience.
Now, I will plan my next scenes in more detail to prevent such situations.

Additional trims, small props, grass, and set dressing

For small parts such as props, baseboards, antennas, wires, etc.
I have decided to create a new trim that provides spaces for attaching models made of plastic, metal, and rubber.

This is very convenient when I decide to add some simple models to the scene during the workflow, which I can create in a couple of hours and quickly apply to the available assets.
I don’t need to spend several days creating high-poly models or texturing, and I also don’t need to increase the texture memory usage of the scene once again.

Additionally, the resulting models look very good in the overall design.

As I mentioned before, all the vegetation, including the grass, was sourced from the Megascans library.
I tried to place it at the junctions of the columns and the ground to conceal the unnatural contact between the surfaces, as well as in the cracks between the tiles.

Some clusters can be observed on the road near the curbs:

(Note: The content of the text has not been altered, only the grammar has been corrected.)

Grass1

A pack of garbage and dry foliage made by my friend, Max Eno, also helped me diversify the sidewalk.
These assets also helped me hide a lot of unnatural joints:

 

As we approach the final, I am starting to appreciate the scene. Additionally, I have included a small outdoor café on the sidewalk, where passers-by can stop and order something from Cuban cuisine. This addition provides the location’s main focus (the blue house) with more history and vitality.

To enhance the overall visual appeal, I incorporated a road (represented by a simple cube) and applied materials from Megascans. I also used decals to simulate tire tracks, scattered foliage and debris, drew markings, and all of these elements combined to make the scene even more captivating.

Furthermore, I created lampposts myself based on feedback from my mom. It’s amusing, but she possesses a keen sense of how to cultivate comfort within a scene, and she offered me numerous tips in this regard.

14-2

This rendering differs greatly in terms of quality compared to the previous one, not only in terms of the number of props, decals, and a multitude of plants but also in terms of the most crucial element of any environment, which has undergone radical changes here.

Lighting, post-processor, VFX, renders

I believe that good lighting can create real magic. Even if the location consists of white cubes, light has the ability to transform it into something delightful. The rendering and lighting of my location work in real-time using Lumen mode.

In this scene, I didn’t use traditional methods to illuminate it. Instead, I decided to try the rather famous plugin called “Ultra Dynamic Sky” for Unreal Engine. This tool works wonders as soon as you add it from the content browser to the viewport.

It’s important for me to focus on the artistic aspects rather than getting lost in the technical intricacies of the engine and spending days trying to achieve the desired result. This plugin has given me that opportunity. I can simply adjust the sun’s intensity, the density of the volumetric fog, the daytime (and optionally nighttime), the size and type of clouds, their height and intensity, and many other parameters, all controlled by just one slider. I strongly recommend everyone to get this plugin as it offers extensive features and is easy to adjust.

In the postprocessor, I made slight changes to only a few parameters:

PostProcessor

I made changes to the standard bloom, added a dirt mask, and slightly reduced the lens flare. Nothing special. I didn’t want to alter the gamma colors, contrast, and saturation settings; I was satisfied with the initial appearance of the scene and the color of the materials.

It’s good practice to play around with post-processing parameters, and I recommend everyone to try adjusting the color parameters in the aforementioned settings. It might give you a new feeling for the scene. However, in this case, everything suited me perfectly, and I didn’t even need to use Photoshop to post-process the renders.

One more thing I did outside of the post-processor was enter the command “r.Tonemapper.Sharpen 8” in the console line just before rendering.
The viewport became too sharp, but the renders themselves look great.

Towards the end, I wanted to add a couple of animation effects to make the video more interesting, incorporating some movement. However, I didn’t want to overdo them and divert attention away from the main focus. It was sufficient for me to include the effects of flying dust and steam from the “Soul: Cave” and “Soul: City” scenes.

Renders – the final stage. I have decided that 3-5 angles with overall scene shots, a couple of angles of the inner corridor, and a couple of wide shots with a slightly blurred object in the foreground would be sufficient for my needs. I did not utilize pre-set camera configurations; instead, I manually adjusted the Field of View and Focus Distance parameters.

This is a purely creative process, and it is challenging for me to provide specific recommendations. I simply explored the scene from different perspectives and identified the angles that appealed to me the most. And here is the final main frame:

15-2

It looks good enough. Congratulations to everyone! On my page on ArtStation, there are a couple of videos that Max Eno, my friend, edited for me. Once again, thank him very much for his help!

Feedback from the community

I received significant assistance in this work from my senior comrades, who are 3D artists. They guided me in the right direction and prevented me from slowing down. I would like to extend my heartfelt gratitude to the participants of the Leoluch Discord server – a community dedicated to game content development.

Those who are interested can join us and get to know us better at https://discord.gg/GP8CZmeE.

Seeking feedback is an essential aspect of working on personal projects for me. It enables me to identify mistakes that I may not notice on my own.

Conclusions

This artwork has provided me with the opportunity to acquire a wealth of new knowledge and enhance my existing foundation. While it’s possible that not all of my methods are modern or optimal, I hope that you will find something useful for yourself that can help you improve your future projects.

Feel free to reach out to me via Artstation or Discord if you have any additional questions—I will do my best to provide answers.

Many thanks to Games Artist for giving me the chance to share my knowledge with others! I hold immense respect for this platform, and it is a great honor for me to create a breakdown for this site.

Links to Useful Resources

Designer

  • A great playlist about Substance Designer helped me learn how the basic nodes work.
  • Useful breakdown of the material by Peter Sekula.
  • Joshua Lynch is a great author of many tutorials about creating materials.
  • Jonathan Benainous is an artist from Naughty Dog who has a series of artworks about materials from The Last of Us. Very useful.

Modular System

Additionally, there are a huge number of articles on GamesArtist. To this day, I periodically review fresh material on the environment from this site and find new useful features for myself.