In case you missed it
You might find these articles interesting
Hey, I’m Joe Burt, an aspiring 3D Environment/Prop Artist based in Nottingham who wants one day to work in the games industry. I am a 23-year-old postgraduate in Game Art, which I studied at De Montfort University in Leicester. Since graduating in July last year, I have taken up a part-time bar job in order to give myself more time to continue to work on my portfolio and develop my skills. I also helped Black Cat Entertainment, a small remote indie game company currently working on a new game.
My passion for games and art has always been there as far as I can remember. I was growing up with either a PlayStation controller or a pencil in my hand but it was only later in my life that I came to realize I could combine those two things. I think the fact that I have Dyslexia ruled out any possibility of me wanting to do anything more “academic”. So, with that in mind, after finishing school I decided to enroll in a small creative technology college called Confetti. There, I studied game design and never looked back!
NYC Apartment Block: Start of the Project
My NYC Apartment Block project actually started thanks to my friend Chris Riley, an Environment Artist from Firesprite Games. Chris, I suppose, has been like an online mentor for me since leaving university and has helped develop my portfolio greatly with his professional feedback.
After I made a few single props, Chris suggested that I move onto a manageable scene made using modular 3D assets. After emphasizing why the modular workflow is a great thing to show in my portfolio, he sold the idea. He also sent a link to a project by Edgars Soiko for reference.
After seeing how simple and manageable it was to make the base modular blocks for the building and comparing them to the impressive final result once put together and rendered in Unreal, I was very eager to try something similar. For the rest of the project from here on out, I would refer back to Edgars' work.
With the knowledge that I was going to make a New York City building scene, I jumped into reference gathering. I first looked at the general NYC buildings that interested me. In particular, I gravitated towards the tall narrow apartment buildings with their frequent ornate and interesting trimmings and entrances.
With a good starting point, I decided to narrow down my search by defining a particular district in New York I wanted my building to exist in. After quite a bit of searching around, I landed on Greenwich Village which is a neighborhood that can be found in Lower Manhattan. From there, I mostly used Google maps in order to navigate around Greenwich and find particular details that I wished to incorporate.
With a fairly solid idea of what I wanted to create came the challenge of deciding how to make it with modular pieces. As with all my 3D work, I use 3ds Max for modeling because it's just my preferred tool. From the start, I knew I wanted to keep the modular assets as easy to use and snap together as possible. For this reason, I kept it very simple by effectively working on one individual apartment wall. I decided to make the apartment wall 400 cm by 400 cm and set up my grid spacing to 50 cm and used my snap tool to easily snap each wall to any location.
After making the 400x400 plain as the base wall for a single apartment, I made various versions of windows, details, and horizontal/vertical trims. I made sure to keep referring back to my real-life reference when making those building details. As you can see in the screen grabs, those were very simple but effective objects to model.
All of the objects were then positioned on the wall and had their pivot point centered to the bottom middle of the 400x400 plain.
With the main set of modular pieces modeled, I moved onto more unique assets like the entrance, fire escape, fences, and street assets. The entrance was probably the most complex to make but again, it was still very simple overall.
The unwrapping step was probably the most difficult for me for a few different reasons. Firstly, I personally just find this the hardest stage usually as I feel it requires a lot of planning in order to organize UVs efficiently. I also find that 3ds Max’s unwrapping capabilities are probably the slowest and worst when compared to other 3D packages like Maya. This process is the most time-consuming for me personally.
As a starting point, I decided to set a Texel Density target. This was pretty straightforward for this particular project, as I knew I wanted the base apartment wall (400x400) to cover a 4096-pixel texture space. With this in mind, I applied a 4k Modo texture to the wall to get a visible scale. I then applied the same texture to all of my other models and started unwrapping and scaling UVs accordingly to get the result closest to the base wall.
Setting my texel density to 400cm = 4096 pixels in texture space was a pretty ambitious target considering the fact that I would have a few unique texture sets that I had to fit in the 0 to 1 space. However, you can see that I managed to pull it off pretty consistently in the end. A very useful script that helped me achieve this was TexTools which can rescale UVs based on a set number.
Moving back to the UV organization, I ended up deciding to make only 4 unique texture sets. These mostly contained all the street models and parts of the building, like the entrance or where I wanted to add some elaborate details. The rest, including the majority of the building, would be covered using tillable textures.
Here you can see that I have colour-coded each model in their texture group. Altogether there are 4 unique texture sets and 3 tiling materials used for these models (Later, I made a 4th tiling material for the ground level concrete bricks and a 5th tiling material for the pavement floor).
- Red = Unique texture set 1 (half of the Street models)
- Dark Blue = Unique texture set 2 (the other half of the Street models)
- Yellow= Unique texture set 3 (half of the Building models)
- Pink = Unique texture set 4 (another half of the Building models)
- Light Blue = Tiling texture 1 (Brick Wall material)
- Green = Tiling texture 2 (Concrete material)
- Orange = Tiling texture 3 (Trim Sheet Concrete material with ornate details)
I started the texturing stage first in Substance Designer before moving onto Painter. In Designer, I first made the tiling textures. I started off by making a pretty standard brick wall material and added lots of wear to the bricks to show weather corrosion and indicate the age of the run-down building. A solid in-depth tutorial for this material can be found here:
As this material was going to be exported at the 4096-pixel resolution, this meant it would be covering a 400 cm by 400 cm space (1 apartment wall) according to my texel density target. This determined how many bricks would be in the input of the brick generator node.
Next, I made the base concrete material. As you can notice from the graph, this was a pretty simple and straightforward task. I think the key to this material was the minor details, like the cracks and an interesting roughness with good variation.
I wanted to make a trim sheet over the top of this solid concrete material so that I could add more ornate details and a line of leaking dirt that tiled from left to right. With the base concrete already made, this was as simple as making ornate detail shapes in Photoshop and adding them on top.
Using the same method, I then made the large concrete brick material that would be used for the ground level of the building.
The final material I made was the pavement. Again, I kept it super simple just making sure to add cracks and wear.
For the 4 unique texture sets, I used Substance Painter. The only model that required a high poly bake was the rubbish bags, which I really quickly sculpted some creases on in ZBrush. Everything else was baked without high poly meshes. Here are some WIP shots of the models being textured in Painter.
For all the concrete areas of the building parts, I just imported the textures of my concrete material made in Designer and then added dirt and ornate details on top. In hindsight, I wish I left a lot of these concrete areas out of the unique texture sets as there was very little left to be added in Painter. This meant a lot of UV space was wasted where the concrete tiling material could have been of use.
With most of the other materials, I started by using a pre-made smart material and then tweaking the colours and values along with adding further details like layers of dirt. I tend to always use a non-destructive workflow in Painter utilizing a lot of masks and layer blends in order to combine various layers of dirt and grime on top of each other. An example of this can be seen in the Painted Metal folder which contains all the layers for that material on the models.
Finally, I think it’s worth mentioning the key to selling the models as real, - and it was making sure to put in the effort to add all the extra little details like the signs and information stickers which added to the narrative and believability of the scene.
With my models textured and ready with their correct pivot points set to snap easily along the 50 cm grid, I started to export them out of Max. To make this quick and easy, I used the Batch Export tool which exported multiple models all centered to 0,0,0 on their pivot points.
After creating a new project in Unreal, the first thing I did was toggle the snap tool on and set the grid to 50 so that I could easily start constructing my building in the same way I did in Max. However, instead of just placing each modular asset one by one, I made a lot of blueprints. Blueprints are great tools that should be utilized to combine different elements together. Blueprints not only saved me a lot of time but also helped maintain the strict consistency of an apartment building. It also helped keep my project very tidy.
I started by making one apartment Blueprint, which then could be duplicated and used to make the rest. In this apartment Blueprint, I began with the base wall. I then just dropped the rest of the details in, and as their pivot points were set to the bottom center of the wall, they were instantly in place. This meant I was quickly able to make an apartment with a window, trimmings, and other details with little effort.
Once the blueprints were placed in the scene, I could easily select and switch meshes, edit mesh transformation values, or change their assigned material by just dragging and dropping.
Although the Blueprint apartments looked great once stacked together, I knew the issue of repetitiveness would occur very quickly. To combat this issue throughout the project, I amended a few things. First of all, I added a couple of things to the apartment Blueprint. Firstly, I created a point light inside the apartment that would shine through the apartment window. This, like everything else in my Blueprint, could then be edited and toggled on or off once placed in the scene.
Secondly, to support the previous effect, I added a plain inside the window with different interior details as its texture. In the material of that plain, I added an emissive intensity which could be edited as a parameter input. I then made a couple of instances of this interior detail material, one with its emissive on (for when the apartment light is on) and one with its emissive value set to 0 (for when the apartment light is off).
A couple of other tricks used to break repetitiveness took place in the material editor, in the tiling materials in particular. Firstly, I used a few differently sized noisy textures as overlayed dirt/colour variation on top of the base colour of the tiling material. Once blended in, this worked great for adding variation to the areas with repetitive tiling such as the brick walls.
Secondly, I used the standard vertex paint workflow which is pretty common for breaking up the tiling areas. A pretty simple tutorial on how to achieve this can be found here:
The main repetitiveness was still occurring with the brick walls, so I made another variation of the brick material which was put on top contributing to the rough look and narrative of the building. To make this, instead of going back to Substance Designer, I decided to try a different approach and used Quixel Mixer to simply blend the plastered material on top of my original brick material. It was really easy and provided good results.
To really bring this scene together, I relied heavily on dressing the project up with several little details and objects such as plants, rubbish, and decals. To get these smaller elements, I used the Quixel library and their Unreal Bridge tool to easily bring in photo-scanned assets including meshes, decals, textures, and more. I think that with Quixel’s massive library of easy-to-use recourses, Bridge is going to be huge in the realistic game development pipeline in the future. So, I would suggest getting to know and utilize these resources as soon as possible (just make sure to always make it clear what is created by you and what isn’t, and always give credit).
Creating the Wet and Rainy Look
A big part of the NYC Apartment Block project was its cold and warm colour combination and subsequent effects that followed this. I will look more into it in the lighting part but first I want to talk about the wet and rainy effects which I think helped greatly to achieve the overall mood of the final renders.
The rain was probably the easiest element to incorporate here. It is simply a single particle system that I took along with the textures from the free-to-use Cave project on the Epic Marketplace. This is a great asset for getting a good starting point for most particle effects. Once brought into the project, I just edited its values in the particle editor and increased its volume and area of effect.
Next, I went back to the parent material of all of my tiling material instances and started to add the wet roughness as a parameter that could be toggled on and off. I didn’t do anything clever here, just basically multiplied the original roughness to make it reflect more and to look wet.
With the floor now wet, it looked very weird having the rain falling on it without any physical effect. So, I followed a great tutorial that explained how to add an animated rain splash effect to the material's normal input. This tutorial also explained how to make animated puddles with small waves caused by the wind which I could vertex paint in. Here's the tutorial:
With a few of my own tweaks, I was able to incorporate this animated rain splash effect and vertex paint puddles on my floor, each with their own parameter so that I could easily toggle the effects on and off.
Lighting was one of the main tools used to achieve the final mood of the scene. By this point, I was sure that I wanted to make a nighttime scene to reinforce this overarching feeling I was aiming for. I also wanted to complement it by adding some foggy/gloomy effects. To do this, I added an exponential height fog alongside my atmospheric fog. Combined with lighting assets, this fog allowed me to gain a nice control over the atmosphere in the project.
For my main directional light, which in this particular project acted as natural moonlight, I almost completely got rid of the volumetric scattering as I didn’t want it to have much effect on my fog. If I used a greater intensity, it would light up the fog in the entire scene with its global area of effect. This in turn washed out all the details in the scene. An extreme comparison of this can be seen here:
Instead, I increased the volumetric scattering intensity on all of the other smaller lights in my scene, which gave me control over specific areas of lit fog. This increased the contrast and gave the scene a lot more depth. You can see this effect in my exterior street lights and coloured traffic lights.
To really push this effect to its full potential, I wanted to use it to impact the scene's "temperature". Up to this point, the scene was feeling very cold, with a lot of cool colors like blues and purples. This was great in terms of the dark, gritty, and cold theme I was aiming for, however, I wanted to create contrast by adding heated areas of interest such as the apartments with lights on. I wanted to make these apartments really stand out compared to the vacant or dormant ones and the rest of the scene in general.
To make these inhabited apartments feel like their own little safe havens protected from the cold and rain of the outside, I went back to the Blueprints and increased the Volumetric scattering intensity of their interior light. Along with the orange/yellow warm colours already present, this created a very attractive cozy glow that radiated from the apartments into the cold night.
Having gone over the key steps and areas that I feel led to the completion of this project, I hope you've have gained better insight into the production of realistic environments and the modular workflow I used and maybe learned something new.
However, technical stuff aside, I mostly hope you've seen the implication and potential influence of these techniques on the emotional impact and mood of the scene. In this New York Apartment Block project, I tried to achieve this through the stark contrast between warmth and cold and the connotations that follow this battle. Despite the fact that this run-down building looks like it came straight out of Batman’s Gotham and is surrounded by the overwhelming cold night, there’s is still a strange presence of warmth which in ignites hope and comfort.
I feel this is an important skill to have because as digital creatives we must go beyond making something that just looks "cool" and strive to evoke emotions in our audience. This sentiment goes back many centuries and encompasses all kinds of techniques from the oldest traditional art theory to the most up to date software workflows.
Thank you for reading my article, please check out the final project on my ArtStation.