Jaikumar Gurubaran did a detailed breakdown of his UE4 Mafia-inspired game environment, The Cantina Incident, talked about his modular approach to modeling the scene, discussed his workflow on textures in Substance Designer and Substance Painter, and shared his lighting setup for day and night lighting.
My name is Jaikumar Gurubaran and I am a self-taught artist currently living in Prague, Czech Republic. I’m currently working as an IT Infra engineer, however, limitless passion and love for video games art couldn't restrict my urge to create game environments that inspire, feel, and can be lived in. I realized that my work has to be my passion and since then I'm working towards my goal of acquiring skills with which I could create beautiful environments for games that players could feel the world, because the only way to do great work is to love what you do.
“The Cantina Incident” game environment is my first personal project fully created from scratch which is inspired by the game environments from Mafia 3 in which artists brought the fictional city of New Bordeaux loosely based on New Orleans.
As I want to continue improving my skills and to learn new techniques, I’m currently focusing on creating my next personal project with a Sci-Fi based game environment that incorporates foliage and I hope, I will publish it soon.
I have acquired a Bachelor’s in Computer application from Annamalai University in my hometown Chennai, that brought me into the IT industry. However, in order to put together my art creativity using industry-standard tools, I mostly used Tutorials from Youtube, Gumroad & Udemy. It was a great learning experience for me to learn how 3D art tools and game engines that are being used in the industry for the purpose of environment art from those tutorials. I really recommend the Game environment creation courses from Udemy by Emiel Sleegers and Michael Gerard for anyone who wants to begin their journey to learn the workflow for game environment art. In addition to that, fantastic articles by 80 Level from top artists give me more insight into workflow and inspiration for building my own game environment.
Learning those techniques really helped me to create this personal Project in terms of Modularity, reusability, time efficiency, storytelling, etc.
Working with References
While I was playing Mafia 3 recently, I was inspired by how the team recreated some of the iconic places from New Orleans in their imaginary city of New Bordeaux, and I decided that I want to challenge my skills that I acquired by watching all those countless tutorials to create a game environment that is more or less matching the art style and mood from Mafia 3 with a bit of storytelling that gives the impression that some sort of shootout happened and someone hurt with blood spills. I was also going over the concept arts created for this game from Fandom to understand the feel and mood that I want to go for.
I started to do more research on New Orleans and iconic places to incorporate in my project and, after a few hours of research, I decided to keep the main focus of my scene that represents the buildings located in the French Quarter, with that I also wanted to give some variation to the scene by adding Industrial buildings. I gathered key references for real-life French quarter buildings, streets, industrial buildings, furnaces, shops, props, and trees located around New Orleans (like Red Mapple & Willow Oak). Pureref is a fantastic software which I definitely recommend for building the reference board for your art or scene.
Below is what my reference board looks like after I put all the necessary images together.
I wanted to build this environment with modular pieces because of the advantage of reusability of assets with minimal variation with textures for different buildings. So I started creating the block out of modular pieces in 3ds Max based on the reference images I collected from real-life french quarter buildings.
Once I have the key block out modular pieces, I created a basic block out of the scene with the required composition that I was planning to go for within 3Ds max.
As you can see in the above block out I used big planes for the ground keeping in mind I can control the tiling later within the UE4 shader.
Then I imported the blackout scene into UE4 to make sure that the scale fits well in the engine if I play with UE4 third-person mannequin. After I was satisfied with the block out, I started creating the actual modular pieces with the necessary details. For all the modular assets, I used Box UV Mapping with reasonable texel density keeping in mind that I will be using tileable textures for these pieces.
For the scene props, I did some research on the most common objects lying around the area of the French Quarter. For example, the iconic horse head poles, street lamps, trash bin, neon lights, etc. As I also wanted to incorporate a mini water fountain park with benches, I did gather the reference images of that during the reference collection phase.
With the references in place, I modeled any low poly assets in 3ds Max and imported it into ZBrush for sculpting the details and used Zplugin decimation master to reduce the poly count which is reasonable for the scene and UV master to unwrap it within ZBrush. I used the decimation master plugin from ZBrush to reduce the polycount since it is a time-efficient workflow for any non-animated mesh. Below is how the work is done for props that need sculpting.
For the horse pole, I do not want to compromise more reduction in polygon as I wanted to take closer high-resolution screenshots of this in the engine with high details.
For the ornate trims that flow over the border of the bar building, I followed a similar approach but this time I baked it on the flat plane to use it as trims on balcony rails and roof borders.
However, keep in mind that the decimation master doesn’t always do the perfect job of polygon reduction, based on the complexity of the mesh it might leave some open vertices and/or faces. So It is necessary to clean up any open vertices, which I did in 3Ds Max.
The same goes with UV Master in ZBrush. Depending on the complexity of the mesh, it is necessary to do proper UV layout as needed manually in 3Ds Max in that way that it will not bother you during the texturing process.
In order to create tileable materials, I wanted to use Substance Designer which I feel is fully procedural and any details can be tweaked at any time without much effort like doing it all over again from scratch. So before I begin, I made the list of tileable textures like Plaster, Grungy brick wall, Plain concrete, Painted wood, Non-painted wood, Painted Metal, Rusty metal, Asphalt, Stone pavement and RedMapple & Willow Oak Tree Bark (Yes, I also wanted to create tree trunk textures to challenge my skills learned so far with Substance designer).
The rule of thumb for creating any realistic materials would be to have the proper and detailed references for each surface that you are going for. Without it, you might miss details along the way. With proper references in place, you can easily break the details of the surfaces as Large detail, Medium detail and micro details. So I collected as much as detailed references and added it to my pPureref workspace.
As I had to create quite a few tileable materials for my scene, let me go over a couple of important materials that might be beneficial for you. In any case for all materials, I started the Substance Designer graph from height details which is key for all other details like Base color, Roughness, AO, Metallic, and Normal.
Let’s take an example of Exposed brick, where I started with Brick generator and added warp and slop blur to make the lines uneven with that added few grunge maps for surface details and added cracks for damages and so on. For cement filling between the bricks, I used the mask generated from tiles and edge detect node with the addition of a few grunge maps. Remember, variation is the key for your material, at the same time make sure not to overload the details as that might make the larger details lose along the way.
For the base color, as I mentioned earlier I used height information and plugged it into the Flood fill node with RGBA split where you can have 4 different masks to give 4 different colors for the bricks. On top of that, I added the dirt to make it look older. Curvature from Normal map can also be used on top of the base color to enhance the details a little bit, however, in this case, I haven’t used it as it was not really necessary.
For the Red maple trunk texture, I followed the same approach of going from Larger detail to micro details but this time I played a lot with different nodes to achieve what I want.
For the organic cracks, I used crystal 2 nodes with levels, directional blur, and some wrap to make it uneven and can be blended on top of the base large surface details. Below you can see how the nodes are connected. It is always recommended to play with the values of each node and blend types until you get what you want to achieve.
With Asphalt material, I started with small rock shapes, using ‘Paraboloid’ from Shape node, then warped, slope blurred, and blended it with Polygon node. Then I used, ‘Crop Grayscale’ node to crop the different rock shapes into separate nodes. Below is how it was done.
Once I had basic rock shaped, I used a shape splatter node to spread the rocks across space with a variety of scale, position, and rotation. Shape splatter node is one of the powerful nodes where you can really do a lot of customizations with your input shape.
Once again for the base color masks, I used the Flood fill node along with a Histogram select to create different masks for different rock colors.
In general, it's all about practice when it comes to Substance Designer. Try to experiment with all the nodes to see what it does and play with the values. Once I did all the tileable materials, I did a quick render in Marmoset to have an idea of how it looks in different lighting. Below is the quick showcase of all the materials done for this project.
Substance Painter is my favorite texturing tool that always comes in handy when I need to texture individual props. In this case, I used it to texture all the props that I used for this scene. However, in some cases, I used Marmoset Toolbag to bake Normal, AO & Curvature Map for specific props like “Horse pole”, “Water fountain” & “Shutter Door ventilation” from High Poly as Marmoset gives you better control over cage offset and you can also paint the offset distance, whereas in Substance Painter sometimes you need to play with “Max Frontal distance” & “Max Rear distance” values to achieve proper baking without artifact.
In a few cases, I used the tileable material created using Substance Designer to use as a base material for my props and added layers on top of it. For instance, Door shutters for the bar use Painted wood base material as a base layer and more details and variations on top of it.
Props like Glass Door, Shutter door, Roof pillars, Car, Neon Signs, Horse Pole, Water fountain, Bullet Shell, Factory gate, Lamppost, Park Bench, Concrete Planter, Gate barrier, Tableset, Trash bin are all considered as individual props for this environment and textured using Substance Painter.
Apart from individual props, I used a substance painter to create Mask for AO & dirt of the Modular pieces which you can use inside UE4 Shader to give enhanced details to your modular pieces. I achieved this by creating a second UV set for every modular piece and flatten the UVs using an inbuilt function within 3ds Max Unwrap UVW modifier. I learned this technique from one of the courses from Emiel Sleeger (Thanks to him J). Below is how the Mask looks, inside the painter.
Working with Megascans Assets
For an EPIC user, Quixel gives full access to the Megascans library to choose a wide range of assets, textures, decals for our projects to be used within UE4. However, as I wanted to reduce using the premade assets for this project the only Megascans asset used for this scene is the Elephant Ear plant, apart from that textures for Leaf atlas and Decals.
For the Elephant ear plant model, I used a LOD2 model with 4K resolution textures which gives me sufficient details. In order to give a basic wind effect for this plant, I used a simple grass wind function within UE4 with a Wind Intensity of 0.1 and Weight of 1.
Apart from that, I took the privilege of using Decals throughout my scene where ever possible to break up the uniform feel. Sometimes using a lot of decals might overkill the FPS. However, at the end of the day, it was not affected in my scenario. Again, in this case, other elements of my scene managed performance very well thus giving enough memory for Decals.
Some of the important decals used are manhole, rust leaks, cracks, damages, dirt, garbage piles, asphalt patches, Road surface markings (STOP, Arrows), leafs cluster & bloodstains.
Below is how the material has been set up in Unreal for the Decals. I added basic adjustment of intensity for Ambient Occlusion, Roughness & Specular.
Working on a Big Amount of Details
When it comes to Props for my scene, I decided to make all the assets myself considering that it will give me more experience in using different tools and functions within 3Ds Max. Except for the Car model which was downloaded online and textured using Substance painter and waterfall material for the water fountain which was downloaded from the marketplace store.
Using Textools for UV unwrapping saved me a lot of effort and time. Again for each prop, I collected as much as references possible with the matching style of your environment. For example, I gathered reference pictures for my props taken only from New Orleans or its surrounding region.
As the scene is going to be quite big, I needed to make quite a few assets keeping in mind that not to overspend the time by adding micro details on the assets that are least noticeable by Player or from high-resolution screenshots. This way, I managed to texture the assets in a timely fashion.
To create red maple trees, I used Speedtree with leaf atlas texture from Megascans and created 3 variations of the tree with basic LOD applied. One of the advantages of using trees created from Speedtree is it already has wind data when you export and in UE4 you can simply drag and drop “Wind Directional Source” to your scene and tune the wind intensity.
Below is a quick look at the props I made and used for this scene. With these available assets, I made variations in textures for a few assets like Table, Chair, Doors which enabled flexibility of using the same model throughout the scene as needed.
Once again, I used reference images of the french quarter area to make sure that I am not placing any props in a place where it is not required at all. You need to think of the reason why they placed prop there and whether it will be appropriate. By this method, you will not overwhelm your scene full of assets.
For the lighting, I decided to use dynamic lighting mainly considering this is going to be an exterior scene that contains movable objects like trees.
With the day scene, I wanted to achieve the feel and look of Mafia 3 as much as possible. Though I’m not good at lighting, I tried my best to fine-tune the parameters to achieve a similar result.
I started with basic lighting by adding Directional light set to Movable and Light color to FFC070FF (to achieve the orangy afternoon mood) with Skylight set to stationary. Setting skylight to stationary really changed the look and feel of the scene as it also allows partial baking of the scene. So, when your lighting is built, shadowing and light bounces will only be captured from static geometry. All other lightings will be dynamic for example trees.
It is worth mentioning that adjusting the direction of the directional light is key to achieve interesting shadows to your scene. In my case, I finalized the direction of the light coming from the back of the building that also gives shadows for the tree.
I also used the Sky Atmosphere component in order to achieve the color tone of the sky and light scattering for the scene. It is one of the most powerful features recently added to UE4 starting from 4.24. You can learn about it at the Unreal Engine channel on Youtube. Below are my settings for Sky Atmosphere.
I would say Sphere reflection captures are one of the key elements to any scene that has reflective surfaces. In my case, it has a window, car, a lamp that contains reflective material.
Apart from the above, the day scene consists of 2 Spotlights. One is to highlight the interior of the car in which the door is open. Another one is on top of the bullet sheels on the street to highlight it.1
In addition to that, to give sharpness to the scene, I added “Sharpen Postprocess Material” to my post process volume with the intensity of 1. The blueprint of this post process material can be downloaded from blueprintue.com. (https://blueprintue.com/blueprint/43z8wrum/).
Another trick to give more sharpness to your scene for your Video render/High-resolution screenshot is to increase the r.Tonemapper.Sharpen value to 1-4. You can run this in the console command window. In my case, I set the value to 2.
For LUT, I used a pre-made LUT that I had from one of the courses in Udemy with a value of 0.2.
Below is how the daylight scene turned out after all the tweakings.
For the Night scene, I duplicated my daylight UE4 Level file and removed all light sources from the scene except for Directional Light and SkyAtmosphere.
This time I changed the direction of the directional light in such a way it creates a sunset effect with the pinkish color of the Sky that I liked the most as it gives an interesting feel to the scene.
After this, I started adding lights one by one as needed. Started with Point lights for Lamp posts and Wall Lamps. Then Rectlangular lights for Neon light props, to highlight the road, rooftop, or any surfaces where it was dark. Spotlights are used only for car headlights. Below is how the placement of rectangular light improved the scene.
But I always made sure not to keep the intensity way higher than needed as it will either make your details less visible or distract the viewer/player eye.
Below is how the final detail of the lighting turned out for the scene.
The biggest challenge I faced with this project is with the snapping of modular pieces as I have not taken that seriously to set up it properly in 3Ds Max, it gave me hard time later to properly snap it inside UE4. Apart from that, the composition of the overall scene has consumed some time to gather ideas and took a lot of iterations. However, every now and then I asked for feedback from Discord communities like “The Dinusty Empire'' & “The Design Den” where people are kind enough to provide feedback on your work. I really recommend to anyone to join those fantastic communities.
The big take for me from this project is to properly plan the modular assets well ahead with scales and grids to make your life easier later and the composition of the scene. Any art can always be improved, even for this project when I have some time in the future I would like to add more props to give more sense of meaning to the overall scene.
My 2 cents for anyone who wanted to make such a big scene is to plan your modular assets and props in such a way that it can be reused in your scene again and again only with minimal variations in texture and trims that way you will not spend your eternity to create one big scene yourself. I hope this article helps someone to learn something out of it! Stay safe & healthy!