Clara Tan has shared an enormous breakdown of her Abandoned Bar project, explaining the creation of modular assets, the texturing process in Substance, and assembling the scene in UE4.
Hi, my name is Clara Tan and I'm an Environment Artist from London, UK. I originally graduated with an Architecture degree but later on, grew interested in making game environments. My first job was 3D visualizer in an architectural studio, where I was mostly using Maya and V-Ray to produce rendered images.
However, my role was slowly shifting more towards other directions rather than CGI so I chose to leave the job and focus on art creation. I've always been interested in game environments so I decided to pursue the game industry and bring my art to a more professional level. At first, I taught myself most software like Substance 3D Painter & Designer, Unreal Engine, then I joined CGMA's Modular Environment Course to get myself familiar with the standard industry workflow and get professional feedback.
The Abandoned Bar Scene
I'm always fascinated by the story behind those abandoned places, especially the mood they present to the visitors: everything remains untouched with its old-style furniture and belongings, the walls and ceilings starting to decay from the damp, dusty seats and cracking floor tiles, almost like a time capsule.
After looking through many photo references of abandoned environments and youtube videos of urban exploration, I started to have a clear image of the environment I wanted to make so I decided to go with an original concept so that I can give a lot more personality and story to the scene.
My background in architecture really helped me generate the layout and arrangement of this environment. I did lots of research on interior layouts and the main structure of old pubs in England and then designed an environment that is not only interesting enough to deliver a story but also sufficient for modular workflow. For instance, instead of making the room into a regular square/rectangular shape, I used the L shape design to add more depth and interest points into the scene, this allowed me to create a variety of modular meshes so each side of the walls would have different architectural style.
First I did a very preliminary 3D plan of the room layout based on my references in Maya using basic planes, then on top of those planes, I did a quick sketch in Photoshop to divide the space into various modular elements. The goal is to have an efficient amount of modular pieces to be able to build up the space and at the same time not look too repetitive.
After that, I started creating a block out of all the modular meshes using 50x50cm as a unit according to my sketch, and I made sure they all have a good pivot point on the grid and every modular piece nicely snaps to other when you assemble them. For example, all my wall pieces have their pivot point on the lower left, and if I have any attached pieces like doors or shelves, it's also nice to have the same pivot point as their joined pieces.
This is an overview in Maya that shows the blockout of all the assets that I'm planning to import into Unreal, they're all properly named according to their sizes and functions.
This is the first draft of my environment constructed with those modular pieces. I'd like to plan as many details as I can at the blockout stage, so I even blockout all the small assets for set dressing like glasses, ashtray, cigarettes, papers..., using very simple geometries. This helps me have a general idea of the story and atmosphere I want to achieve.
After that, I import all the meshes into Unreal and I enable the Snapping function to every 50 units and start assembling them. Starting from the basic structural mesh, then the large and medium-size furniture, and finally scattering all the small props around the room.
At this stage, the position of those blockouts in Unreal is already very close to my final composition and this will be the skeleton of my whole project.
After the blockout, I divided all my assets into three categories. Modular assets that will be using trim sheets or tile-able textures; large/medium size assets that could use trim sheets to speed up the texturing process; and small/medium assets that can only be made with unique textures. Then I started working on my trim sheet as I will be using it on 80% of my scene.
The trim sheet uses a different workflow compared to regular high poly to low poly modeling workflow, it usually takes more time to plan it at first but it's definitely worth it. The first thing I did is to analyze my scene and decide where I wanted to use the trim texture and mark them up with different colors.
It was a brainstorming process and I had to think further ahead. I asked myself how often will this part of the texture appears in my scene that it would be worth being included in the trim? How would I arrange my UV to fit my trim and is it going to be easy to do so? Is it going to speed up the texturing process of this asset by using trim texture? Most architectural elements like cornice, moldings, skirting, door frames can be textured using trim as they appeared throughout my environment. Other obvious ones were the wooden panels for all those long bar counters, and to get more creative, I decided to also use it on most of the wooden furniture such as the fit-in shelf and cupboard, and those free-standing cabinets.
I created the mesh for the trim sheet in Maya. I modeled each trim separately based on the draft sketch I've created in Photoshop. I used very basic geometries for those patterns, and by offsetting/scaling/duplicating them you get different more interesting patterns.
Next, I bring all those trim meshes in Marmoset Toolbag and bake them all down on a squared plane, and import the baked maps in Substance 3D Painter to detail texture it. It's useful to bake the ID Map as well because I'll be using different PBR materials on one sheet and by using 'select from color id' functions in Substance 3D Painter, you can mask and divide your plane into different texture groups and texture each trim individually.
Applying Trim Texture
Almost all the large wooden furniture is textured with just one sheet. The wooden panel trim was originally designed to be used on the facade of the bar counter, but later on, I found out it is also sufficient to be used on other wooden cupboards. By playing with different UV arrangements like mirroring and cutting, you can get many interesting results.
I also made another set with different wood material, just to add some variation to the scene.
The wall elements are textured with two/three materials set: trim texture and tile-able texture.
To avoid the seam between each joining mesh, I move and snap their UVs right next to each other. And I also mirrored the UV shell for the modular piece that needs to be joined with themselves.
All my tiling textures are created with Substance 3D Designer. I didn't want to use the ready ones from Megascans because I want to take this project as an opportunity to practice my skills in creating procedural materials, plus I originally found this photo of floor tile online and immediately liked it, so I decided to create my own version of it by giving it more stories and personalities.
Starting from creating the pattern for each individual tile with basic geometries, I then designed a border around every four tiles and blend it with the tile patterns. And to make it more interesting, the border tiles are slightly shorter than the square patterned tiles, and each tile is slightly angled in random directions, this will produce a more realistic reflection when the lighting hits the tile. To achieve this I added some variations to the basic Height Map.
I mostly followed this YouTube tutorial to create the cracking effect then I blend the outputs with my patterned tiles.
Final showcase in Marmoset:
Other procedural materials were much easier to construct, as long as they all have a good roughness value.
There are more than 80 unique assets that I created for my scene. For most of the medium size furniture like sofa, tables, and chairs I used the common high poly to low poly workflow. I created the high and low poly meshes inside Maya, baked the Normal, AO, ID Maps with Marmoset, and textured them inside Substance Painter.
The references I used come from antiques that I could find on shops like Etsy or eBay, you can get many good photos from the sellers and they provide detailed dimensions.
The trick I used to create those different lamps is to only model and texture the unique parts first and later assemble the repeated parts together. For example, I can see from the reference that the ceiling light is just three of those wall lights but upside down, and the table light also has the same lampshade and all I need to do is to model the metal post. This workflow helps to save time modeling unnecessary components also you can get a more optimized UV space.
Because I have many paintings in my scene, and to work more efficiently, I decided to use my metal trim for all the photo frames, then I gathered many art images online and created an atlas in Photoshop, and later added some dust/edge dirt to it in Painter. This method saved me so much time compared to modeling high poly and UV unwrap so many of them and bake it down to low poly, also I only need to create the atlas texture since my trim is already looking good enough on the frame mesh.
I also didn't use the 'high to low poly' bake method for all my bottles because of their shapes and sizes, I went straight to model a 'mid poly version for them. Each of them ranges from 200-400 tris, which is acceptable considering that I was planning to show some close-ups of those bottles, and the lower poly will show obvious facets which wouldn't look nice.
To make my bar environment more convincing, I decided to create bottles for a range of different types of alcohol so I gathered a bunch of photos of old bottles like champagne, wine, vodka, gin, and other liquor. I also paid attention to the package details such as production year in order to fit in my 1960s settings.
It didn't take long to do the modeling since they all have similar shapes, once I finish one I just duplicate it and amend that mesh into a different shape. I spent more time on UV unwrapping to straighten the UVs and make the checker map distribute evenly, this will make it easier to texture later on when I will be putting labels details on them.
The textures are created in Substance 3D Painter. The materials I used for the glass bottle are very simple, it's basically a color layer with some variations and roughness grunge.
The trick is to add a little bit of metalness value to 'fake' the glass effect while not using a transparency channel. This even applies to non-colored glass, I just used an off-white color and with the heavy dirt on top of that.
I don't want to take credit for creating the actual label design. I searched online for those logo images that look good enough and edit them in Photoshop by adjusting the color value and blending with some paper texture to make them fit my color palette.
To make the labels have some paper thickness, I use Substance 3D Designer to generate an AO Map that can be imported into Painter for texturing. To do so I first made a simple mask in Photoshop by color overlaying the logo image, then throwing them in Designer, using a slop blur pass to add some tearing on the edge of the mask, and exporting the new mask and AO Map.
After that I import all the maps to Painter, create an empty layer with Brush tool selected, then assign the Albedo and AO Maps to the brush, increase the height, use the mask as the brush alpha and change alignment to UV (that is why I straighten my UVs earlier) then just 'stamp' the label on the bottle.
I wanted to challenge myself to create more complex assets, so I put more effort into creating the cash register and gramophone assets.
I used an antique cash register I found on eBay as my main reference, and by studying the photos on how each wooden piece was joined with each other, I modeled the high poly mesh in Maya just like the joinery.
In reality, each wooden component is usually cut separately and then assembled together. The directions of the wood grain also need to make sense, which is usually along the longer side of the cutting. Therefore by creating the high poly mesh in separate pieces, you can get good texture details like the subtle gaps between each wooden piece.
After I created my high poly mesh using Smooth Preview, I convert the preview mesh to polygon and import it into ZBrush to add damage and edge wear, mostly between the edges where two wooden components join each other using the TrimDynamic brush.
Then I brought the new mesh back to Maya and assign Color ID on the new high poly mesh.
Different than the high poly mesh, my low poly model is created as one complete mesh, which means there're no hidden/overlapping faces and the whole mesh has been optimized to make the most use of UV spaces. It's also important to arrange the UVs according to the directions of wood grain at this stage.
It took me a lot of time to complete this asset, about two weeks. I'm pretty happy with the result considering this is my first time creating a complex machinery asset like this. My modeling and texturing skills improved a lot after this challenge and I now have a better understanding of hard surface modeling techniques, such as Maya to ZBrush workflow, utilizing live boolean in ZBrush, and making the most of high poly mesh to bake down more Normal Map information with Marmoset Skew Painting.
I used the same workflow to create my gramophone assets. I've found pretty good references on this one so I pretty much modeled the one with the exact same look, except for the color of the wood, which I decided to use the same wood as the cash register.
Vinyl covers are made with Maya, Photoshop, and Substance 3D Designer. I only modeled the low poly meshes for all the covers, they're just simple planes divided by some random edges that move into different directions to create the folding paper effect.
I assembled the relevant images I found online inside Photoshop based on my UV layouts, and to make the paper have some 'thickness', I filled out the UV outline in Photoshop to create a simple mask, and import that into Substance 3D Designer. I used the Slope Blur node to add some tearing on the edge of papers and generate Normal Maps, AO Maps, and a new mask.
After that, I textured the covers together with the wooden shelf in Substance 3D Painter. I imported all the maps I created in Substance 3D Designer and started adding more details into the texture like dust, dirt, edge wear, etc.
Assembling the Scene
After finishing my texturing, my environment still does not look "abandoned" enough. So to better control the damaging and wearing level of the assets, I create various master materials with different shaders that allow me to add dust and wear to my original meshes.
The main master material I created is for the modular assets that use tiling textures such as walls, ceilings, floors.
To get the effect of the damaged plaster wall, I blend two materials using make material attribute and use vertex paint on the meshes. It's tricky to get the right amount of that damaged grungy look, I used a good Grunge Map as a mask to connect to my height lerp, and by changing the parameters like the scale of the map and blend contrast, eventually, you'll get a good damaged looking result.
I also added some depth details at the transition between the top material and the blending material. It makes it look like the plaster has a certain thickness when the under layer is exposed. To do so I offset the blending area just a little and blend a Normal Map along the borderline to 'fake' that depth.
The trick I use to create the dusty effect is to create a material function that allows the dust to start accumulating from the top of the geometries, just like in real life. I followed this tutorial on how to make the dust shader. I created this as a material function and then by connecting it to the rest of the material nodes, I can now have full control of how dusty I want every asset to look like just by changing the parameters like dust contrast, scale, etc. I implement this function on all my master materials to allow full control of the overall-wearing look.
I also create some dust masks with different Photoshop brushes to use as decal textures in Unreal.
Those glass jugs and small wine glasses are completely textured in Unreal with the glass material shader. Similar to other master materials, I create a basic material structure for glass with opacity and refraction controls and on top of that I added dust function, I also added roughness control to allow me to import different roughness maps, and by changing the scale and contrast of the maps I can get a more realistic looking glass with roughness variations.
I modeled a variety of glass jugs and small wine/cocktail glass in Maya, then I did a quick UV unwrap, the UV layout doesn't have to be perfect since I'm not texturing them in Painter, as long as the seams are cut in the correct places and there're no overlapping UV shells, everything else is fully adjustable with the material instance.
I also modeled the inner layer of some of the glass to give them some thickness and turn on two-sided in a material property setting.
Lighting and Rendering
I didn't start diving into my lighting until the later stage of the project as I know this will take me lots of time. So after I've finished all the assets for the environment, I deleted all the default lighting and start putting my light source one by one. I have gathered my reference at the very beginning of the project so I already know what kind of mood I'm going for.
My main lighting source is an indirect light from outside the window. I put a large plane right outside the window openings (and hide the mesh later on), and a rectangular light pointing towards the plane, and turn up the indirect lighting level. That way I get some nice realistic soft light into my scene. I learned this technique from a on the Unreal Engine forum and I would like to thank those artists who explain this method in the posts.
Lighting an interior environment can be a bit tricky, because the light usually only come from the window openings, and when the room is larger, the engine will have an issue dealing with the indirect light bounce inside the room, especially when my room is in an L-shape and there're certain corners that become really dark where the indirect light can't get through.
So I had to play with the lighting world setting such as turning up the number of indirect light bounces and indirect light quality. This will increase the building time but can give you a better result if you want to prioritize the visual look. The position and angle of the plane and light source also matter. It is an iterative process for me and it can take a number of tests to finally achieve the result I want.
One thing I've learned is to use lights to draw the viewer's attention. To do that I placed a few smaller light sources near the area I want to have more focus on, such as the shelving area, the gramophone area... as long as it follows the direction of the main light source it won't create a weird shadow. Also by increasing the light source angle I'll get a more realistic softer shadow edge.
I also used Rectangular light to light up the ceiling above the bar area. Usually, you can just change the lower hemisphere color in the SkyLight setting, but in my case, that will brighten up the entire ceiling and it usually washes out some normal details and makes the scene look flat.
Another technique is the use of reflection capture, because I have lots of metal and glass throughout my scene, without those reflections captured, the metal would look dark and flat. Therefore to better showcase my materials, I used a few reflections captured in different places. I first put a big one that covers my whole scene, then I spread a few medium-sized sphere capture throughout the room, and for those areas, I want to show more closed up shots, I put a small one right next to it, this will showcase my roughness and reflection details more accurately and realistically.
Since it's my first time setting up proper lighting in Unreal, I decided to go to the old-school light baking workflows. The main issue that occurred was the modular meshes, where each modular piece would have a different brightness level. To fix this I re-create all their Light Maps in Maya using a tool made by Malcolm, make sure the UV shells all have enough paddings, and the edges that will be connected to other modular meshes are covering a complete pixel size. After that, I re-import the meshes back in unreal and use the second UV set as the Light Maps. This article from the Unreal forum has very detailed explanations on why it happens and how to resolve it if anyone is interested.
The last thing I did after the lighting is to add a LUT to the environment. Post-processing is something that's up to personal taste and preference and it depends on the atmosphere and mood you want to deliver to the players.
In my case, I want to achieve a vintage environment that can tell a moody story while still having a peaceful and cozy feel that welcomes the explorer.
Since I used lots of yellow color in my scene, the lamps, metals, wood, and dust all have a yellow-ish feel that all of them together make the environment looks flat, so to balance that out I added a little bit of the blue in the hue, it makes the scene has more layer and gives that moody feel. And by adjusting the curve I increase the contrast between the light and shadow to help enhance the focus points and add some depth into the scene.
The first challenge I came across is designing the trim sheet and modularity for my environment. The goal was to create trim and modular systems that can be reused as much as possible. It requires planning and critical thinking skills and a clear understanding of the scale and complexity of your scene. I quite enjoy this process since this is something I used to do as an Architect, where I was working on many building conversion projects in central London that required us to re-adapt the existing structure and maximize the functionality of each new build to match the budgets and local planning permissions.
It was also tricky to get the right amount of the dusty effect for my scene. It needs to fit in the abandoned setting but at the same time not look so damaged that the dust affects me showcasing my assets. I applied various techniques to balance the result such as using vertex blend to get smaller subtle patches on the wall with the help of a good Grunge Map, setting up my dust material function with more controllable parameters, and creating customized dust decal in Photoshop to add more variations.
Lighting itself is also a complicated topic and there are many amazing lighting artists who have more experience than me in handling interior lightings. However I received many compliments on my lightings and atmosphere, so to achieve that there were no shortcuts, it took a lot of researching and testing, and you'll also learn faster by studying other artists' lighting set up.
Since I'm not a senior myself yet, I would give some suggestions for those who are looking to get into environment art or a self-taught artist that transferred from other industries like me. Don't be afraid to step out of your comfort zone and always challenge yourself with new skills and knowledge, you'll never know your true potentials if you don't push yourself to do the hard work. Make sure to draw from your previous experience even if from a different industry as any experience can be valuable to have a unique viewpoint and express that in your scenes.
The power of this community also really impresses me, there're many talented artists sharing works and supporting each other on various platforms like experience points Discord group, the DiNusty Empire, and of course the CGMA group, where I get lots of feedback and advice. I would like to thank those artists who shared their opinions on my project and helped me progress it in the right direction.
Finally, thanks to 80 Level for giving me this opportunity to write this article and share my journey with the rest of the community. I hope whoever read through this found it helpful and if you have any questions feel free to contact me on my or connect through my .