Creating Resident Evil 2-Inspired Darkroom in Unreal Engine 5

Sahaar Chhabra talked about the workflow behind the Darkroom project, explained how the surface variation was achieved, and shared the details of the lighting setup and color grading.


Hello! My name’s Sahaar Chhabra and I’m a 3D Artist based in Canada currently working at PlayStation Studios as an Outsource Review Environment Artist. I’ve always had a very deep passion for games since I was a child. I spent countless hours on my PlayStation 2 in an attempt to beat games without a memory stick. I was less than successful in that endeavor but I’m very fortunate to say that I managed to materialize this passion for the games industry into a career pathway and pursue my dreams with 3D art.

The first steps to achieving this dream were when I took a 3-year 3D Animation program at a college in Toronto. By my final term, I was absolutely certain that I wanted to specialize in Environment Art, so I took it upon myself to find a more specialized program/course after I graduated from college; that could help me sharpen my skills to industry standards and help elevate my work.

From there on out, it’s been a long journey of training and learning to get to where I currently am, and here’s the funny thing: it never stops! I’ve worked on a series of projects and developed various workflows that ultimately led to my most recent Darkroom environment project.

I’ve been a big fan of the 80 Level platform and I've learned so much from some of the blogs here. It's really helped in the elevation of my work and it feels like I’ve reached a milestone in my learning journey with being published here. I’m really fortunate and grateful to have 80 Level give me a platform to break down my work.

The Darkroom Project

I went on a horror gaming binge last summer with games like Resident Evil: Village, Dead Space, and Alan Wake. I always find that when I’m in a slump in regard to my work, I get my motivation and inspiration for the next project from visual mediums that I either play or watch. Shows like Twin Peaks also definitely played a role in influencing an environment like this.

I started creating a mood board of the atmosphere and tones that I wanted to establish with my artwork and remembered the darkroom save room from Resident Evil 2. I then looked all over ArtStation for a darkroom environment and found that no one really took the initiative to create a full environment out of the idea. That was a win in my book because my environment could stick out and be unique. I consider it a very important factor to make something that no one has seen before. I feel like it garners more intrigue and interest compared to something like a generic bedroom or a sci-fi hallway which we’ll check out for a couple of minutes and then move on with the rest of our day since ArtStation is saturated with projects like that already.

I took a lot of inspiration from multiple environments on ArtStation that emulated a similar tone and started filling my mood board with references to what I wanted to mimic during the production of this scene.


After a little more research, I started taking notes of all the assets that l had to model in the scene and started creating the most rudimentary blockout with primitive shapes and meshes in 3ds Max just so that I could get an idea of scale, width, density, and perspective.

I can’t emphasize how crucial it is to really get a good understanding of this stage in your production pipeline. You want to absolutely ensure that every model is the correct scale to an average human and real-world reference. If you’re attempting to create a realistic environment, having an abnormally large or microscopically small asset will stick out like a sore thumb and bring an uncanny feeling to your entire art piece. Please get real-life/world dimensions to every asset that you make, no matter how small or insignificant they seem. It will not only make your work better but this practice will make you a better artist. I thought about what I’d like to showcase and work on during the early stages of development.

With a rough blockout started, I could start to visualize the focal point of my composition with the sink in the corner. I set up my main wide angle with the help of a camera in 3ds Max and started to build my scene with all my camera angles in mind. Once I filled the scene with my primary and secondary props, I thought that I could start putting together a scene in Unreal Engine for grey boxing and setting up first-pass lighting.

Once I completed my proxy models, I spent some time using my camera angles to define the focal point of the composition and use the theory of directional spacing to lead the viewer’s eyes to that focal point. Your scene density (the number of props and busyness on either side of the scene), spacing, and colors play a huge role in defining this point. Here, you can see that the ventilation unit takes up a major portion of the ceiling space and it directly leads to the sink in the corner. My main source of light in the scene is placed on my focal point and the assets on either side of the room are hidden in shadow.


Setting manageable goals is a skill I’ve forced myself to work on when it comes to projects of this scope. For environment projects, I like to make sure that all my tasks are laid out and organized in a precise and efficient manner. I achieve this by creating lists for myself. Lists on Notepad or my phone’s note app on the tasks that I’ve got left or assets that I still need to model. I think implementing a step like this in your projects is absolutely crucial to avoiding burnout and fatigue. Since you’re creating a scene bit by bit, there’s so much work to do. Creating a specific task for the day with set deadlines ensures that you can work at manageable pacing and accomplish something at the end of the day no matter how insignificant it might seem in the grander scope of things. It genuinely feels good to scratch something off your to-do list at the end of the day because it means that you’re making fruitful progress.

Once I managed to block my scene out, I started remodeling all the props to create the final pass iterations for each asset. I use 3ds Max so my pipeline is fairly traditional to that of a game production pipeline. I’d start with all the big and prominent assets of the scene. I’ll classify these as the primary assets. Things like the table, steel chairs, sink, heavy shelf, lockers, etc., were the priority before I could move on and work on additional props. Most of these assets were created using a mid-poly FWN workflow so that I could save time and pump out satisfactory models without bouncing from one software package to another regularly although there were certain props where I had to go about the traditional method of generating a high poly mesh and baking the details down to a low poly iteration.

For things like screws in certain fixtures or grooves and paneling in a couple of pieces, I’d create a high poly asset with all these surface details, then generate a low poly mesh with 3ds Max’s modifier stack, and then go on to UV unwrap each component. I would take my models into Marmoset Toolbag 3 for baking as I had more control over several parameters of the process compared to doing it in Substance 3D Painter or 3ds Max itself.

Then I’d generate my baked maps and transfer over all my files into Substance 3D Painter for texturing. I took 3 days on each asset where each day would consist of a specific stage in my workflow. I handled my assets this way to ensure that I could keep pace and do something different each day to avoid getting fatigued. Day 1 would consist of creating high poly and low poly assets, I would tackle unwrapping and baking on the second day and then leave the third day for texturing, revision, and engine integration.

It’s a tedious process because of how slow this step is in the entire process of creating an environment. You are responsible for almost everything here and you want to take your time with it so that you can ensure a level of quality and high fidelity with each aspect of your project. I slowly chipped away at each prop and followed the three-day workflow mentioned above with all the primary assets.

After finishing all the primary assets, I moved on to the secondary props that would be scattered and seen in the scene. These include Hero assets that were specifically made for the Darkroom environment. Things like the CRT monitor, photo enlarger, computer, file boxes, photo development equipment, desk fan, etc.

I followed references that I had gathered in my PureRef file and started by blocking out the primary shapes of each object. I personally feel that the best way to create highly detailed props is to follow and get your primary shapes in first. Take this photo enlarger for example.

I started with a primitive blockout on my first pass. The body solely consists of modified boxes and cylinders and one spline for the handle-like fixture on the right. Once I get all my shapes in, I start to further adjust and refine the model. This step is where I added my support loops and bevels/chamfers and modified the topology for things like the holes and fixture plates. I then moved on to add the fine detail with the screws and subdivide the mesh to generate a high poly asset.

When I was satisfied with the result, all I had to do was duplicate the mesh and remove the turbo smooth modifier and any other topology dense modifier to start optimizing the mesh for a low poly iteration. I reduced the tri count significantly from an estimated 260,878 to 6,519 triangles.

I applied the same principle to several assets like the CRT monitor and computer so that I could have less burden-heavy assets in the environment.


Texturing is one of my favorite parts of a work pipeline. You are the master of your narrative and have the power to bring life to a computer-generated object through texturing. You can make a TV look like it’s seen better days or you could go the extra mile and really thrash/grunge it up to show its decrepit and dilapidated condition in a fictional setting like a post-apocalyptic world.

It is important to think about the attributes of your environment before delving into texturing your props. What type of environment are you creating? What’s the temperature in that area? How does the environment affect the assets? Is there moisture buildup? Is your environment set in a musty old basement? Or is it set in a sanitary office? Keeping these notes in mind is critical to creating props and assets which look like they belong in your environment and homogenize well with the foreground to create a balanced composition.

With my Darkroom environment, I wanted to establish a specific type of atmosphere. There are puddles of water on the floor and sink, a couple of wet floor signs, and a mop next to the sink. These elements indicate that this place requires a regular wipe-down. There’s water damage, leaky pipes, and cracks in the ceiling indicating that this room hasn’t been well maintained for some time. With peeling paint and moisture, you get heavy grime on the walls. Some of these elements are grounded in reality, but you can also just push them to fit the narrative, atmosphere, and tone of your environment and take your work up a notch.

So keeping all these things in mind, I went on to create and texture all my props. I start with applying all my base fills and materials before adding any actual details. Two things that I believe increase the level of detail and add realism to your props are accurate grunge passes and surface variation.

Take your time with it, look at your references, and see where the dirt spots start. Where the dust is most visible, where would you most likely see fingerprints? Build up each level of detail with multiple grunge/detail passes and several layers.

These are a couple of tips that my friend Dylan Abernethy taught and mentored me on when I was a student at Game Arts Academy. They’ve been mainstays in my texturing workflow ever since!

Adding surface variation to your models is an essential step in the texturing process and mastering this will bring an elevated level of detail, polish, and realism to your assets. This variation can come from tweaking and adding additional colors to flat bases and this additional detail is classified as color variation. This type of detail really brings out some weight and believability in an asset's albedo values. Nothing is a pure color in real life. If you use the color sampler/eyedropper tool on your reference, none of the colors you see will have absolute values like 0,0,1 or something similar to this case. These subtle differences in hues will bring about more depth of profile in your assets.

The way I accomplish this effect is by adding a fill layer to my layer stack and disabling every option/preset channel aside from color. I then choose a color that I think is complementary to the most dominant colors in my model. Next, add a black mask and add a fill layer to said black mask. Add a procedural map that is fairly subtle in overlaying the layer. My go-to is usually the cloud maps or some of the numbered grunge maps. I tweak the values to my liking and then set the layer settings to overlay.

Surface variance can also be added through roughness alteration. This process entails painting over details that would usually stick out under light and then tweaking your roughness parameters. This could be dust, smudges, a build-up of grime, dirt, scratches, etc. Nothing is really in pristine condition except for the moment it’s fresh out of a box. Look around your surroundings, pick up something on your table and hold it up against some light. Now, these surface details stick out more prominently.

My workflow consists of adding a fill layer and enabling nothing but the roughness channel set in a range between 0.85-1.

I then create a black mask and paint over all these details manually with procedural maps and the stencil set. I’m sure there’s a more efficient way that automates this process a little more, but I’ve yet to find something that fits my needs exactly. On the positive side, I do enjoy hand-painting these details myself, something about the manual labor put into your work makes the end result more validating in my eyes.

I encourage all the artists out there to start buying or creating custom alpha maps for processes like these. With an extensive library, you have more control over how to present the layers of textures that are applied to your asset. If you don’t have the financial strength to do so, Substance 3D Painter’s library is robust enough to get you by as long as you know what you’re doing. I didn’t use any custom stencils in building the surface variation of these props.

Height Details and Stamps

This tip comes from a very talented friend of mine, Eric Correia. I’ve carried this tip with me throughout my texturing work and I thought that it was worth sharing with all of you.

One thing recommended when adding stamped normal/height details onto your mesh, whether it be engravings, embossing, indents, or any other related details, is to use the Blur filter on that layer. Your stamps look much more natural and part of the mesh when this filter is applied as it softens the transition from two different heights of surfaces.

Simply add your stamped details in a fill layer, right-click on the said layer, and add a filter. Select the blur filter and reduce the value until you’re satisfied with the look and feel of the added effect.

Materials, Decals & Detail Pass

Back to the environment, this process is relatively straightforward. I sourced my tileable materials like the tiled floor and concrete walls from Quixel Bridge/Megascans. I then changed some of the values like the tiling, albedo, roughness, and specular and normal parameters for the instanced materials to fit my needs.

The one additional modification that I did make myself was adding surface imperfections to the master material of these materials. This idea hearkens back to what I said above, about surface variation. Some contrast values on your materials go a long way in adding much-needed depth, personality, and realism. Especially when tileable materials for walls and floors are so basic and clean in appearance. Decals and Roughness Variation help in breaking up that procedural look.

For the spilt water on the floor, I used the Blood Spatter decals from Quixel Bridge. To make it look more like water, I changed the albedo values to a more neutral colour and lowered the roughness and opacity values to match the appearance of water.

As per details with set dressing, I simply did a lot of research as to what devices, tools, and objects are used often in a darkroom. I compiled all my research and references in my PureRef board and chipped away at all the small props and tertiary details.

I went above and beyond with some of the tertiary details in the scene as well. Things like the garbage bits on the floor by the sink, posters, and photos hung over the wire. Something that motivated me to keep going ahead with this project was inserting my own passion and creative juices into this environment. I feel that people tend to be more productive towards a project/endeavour that they’re personally invested in. I did the same with this darkroom where I tried to emulate the vibe and atmosphere of some of my favourite games and passions and create a scene with them. This came from multiple easter eggs, nods, and shoutouts to other games and shows that inspired the creation of this scene and lots of other elements, like the lighting and mood established in the final scene. Shoutouts to Racoon City, S.T.A.R.S, Alan Wake, Remedy, Sam Lake, Twin Peaks, etc.


My lighting setup was fairly basic with the setup scene. Interiors with one primarily light are relatively easy to set up and Lumen does a lot of the heavy lifting with the new global illumination settings. Since a fluorescent tube light in the corner of my scene was my primary light source, I decided to use a Rect Light, which could replicate the accurate shape, length, and spread of a tube light without blowing up the scene in overwhelming brightness.

My values were set to minimal so that the lighting was subtle and helped illuminate the contrast and details around the scene.

To get the emissive boost that highlighted the back wall, I actually applied a separate material to the tube light mesh. When I took the tube light into Substance 3D Painter, I made an emissive texture to showcase the light. From looking at real-world references, I noticed that the light wouldn’t illuminate the entire tube, it would actually fade out closer to the edges. It’s details like this that an artist should take note of if they attempt to make realistic environments.

I achieved this light falloff by adding a gradient filter and then painting over the emissive material with a soft brush.

When I integrated the Fluorescent Tube Light into the scene, I also made sure that I’d go into my details panel and enable the emissive boost setting to a value of 2.0 so that the emissive texture could be highlighted and stand out prominently in the scene. I then added a Point Light right below the tube light to enhance the falloff and create some effectively cast shadows for the surrounding components of the scene. This gave a nice highlight to the back wall and gave the illusion of higher intensity to the Rect Light without blowing out all the subtle details, reflections, and light bounces.

This is where Unreal Engine 5’s Lumen system shines as the real-time global illumination system takes your scene’s information into account and spreads the light naturally across the scene. Falloffs, light bounces, and reflections all look so natural and realistic.

I learned this next trick a couple of years ago from an amazing lighting artist, Zach Hewett. Adding an Exponential Height Fog next to your main source of lighting with really subtle values helps give it a really good sense of depth, weight, and profile. The fog takes your lighting information into account and creates real volumetric lighting. We refer to these rays of silhouetted light as god rays. The Exponential Height Fog illuminates the spread of the light and this tool can artistically bring out wonders in the mood and various other storytelling aspects of your scene. Enable your Volumetric Shadows and the added weight with the Exponential Height Fog enhances the silhouettes of your shadows and softens the falloff of light dramatically, therefore, pushing your scene through another threshold of realism. The difference speaks for itself and I can’t recommend this trick enough!

With the lamps, I added a Spot Light and widened the inner and outer cones just enough to illuminate and highlight the edges of all the nearby props/assets on the table. The radius of the lamp head plays a big factor in how much the light from the bulb spreads out so keeping that in mind, I tweaked the size of the cones and adjusted the location of the Spot Light appropriately. I then increased the Indirect Lighting Intensity to illuminate the table and make the transition of the light much softer when it touched assets on the surface of the table. I further added an IES Texture to the light so that I could make the falloff much softer and natural. A huge shout out to the Experience Points discord that helped me nail this part of the composition. It is an amazing 3D art community and I highly implore you to join it if you haven’t already.

Post-Processing & Final Renders

I always say that a presentation and final polish will at least amount to 50 percent of your project’s development time. Since this is the final stage of production, you want to absolutely ensure that every single aspect of your project meets your defined criteria of high standards. I carry this process out by making a checklist of settings and processes that I want to work on and enable before taking my final renders.


Let’s start with LUTs. Colour grading is a very important stage during the post-production of your scene. Different Colors/Gamma settings can drastically change the mood, tone, and theme of your scene. The color palette communicates these aspects by influencing the emotional tone within a scene.

I wanted to communicate feelings of isolation, mystery, and coldness through my palette. I noticed that some of my references reinforced the same imagery, which is why I attempted to match my own palette to theirs.

I accomplished this by taking a LUT template into Photoshop alongside a picture of my environment and experimenting with various masks and filters like the Vibrance and Color Balance channels. Here are my settings:

Post-production is one of my absolute favorite stages of development when working in the Unreal Engine. With some slight value tweaking, it has the potential to turn a good scene into an amazing one! I modified my lens settings, reflections, and some of my gamma values to achieve a more cinematic result. These were my revised settings, As you can make out, there’s a stark difference in colors and mood.

Additionally, to sharpen the quality of the renders, I created a simple Sharpening Filter material using Erwin Jesse’s awesome YouTube tutorial and added that to the blendable additives option to bring out a higher resolution in texture quality.



Cinematic Capture & Final Renders

Finally, when the time came to do cinematic renders, there was only one person who came to mind. William Faucher is a superbly talented VFX Artist and I can’t speak any more highly of his work. Nearly every part of my skill set that has to do with post-production, rendering, and cinematics in Unreal Engine has been learned from his YouTube channel.

In order to get my video capture to look as cinematic as possible on a production level, I enabled and tweaked some of the settings that William Faucher heavily recommends:

  • Camera Type – 16:9 DSLR
  • Motion Blur – Enabled at 50 percent
  • Lens Flare and Bloom – The values for these parameters could be customized to your preference.
  • Frames per Second – 24 frames since that is the value used for film and production vs. games.
  • Depth Fade Distance – Though it is heavily recommended to use the sampler tool and select the focal point of your camera shot; the values for these parameters could be customized to your preference.

I also followed one of his tutorials to create a simple Shaky Cam blueprint out of Unreal Engine’s preset templates. I then added this blueprint to my Cinematic Camera and rendered my video. The subtle movements and jitters in the camera add heavily to the realism aspect in my opinion since the camera establishes an element of immersiveness for the viewer.

Additionally, I made minor changes to my render settings when I was ready to render the camera cinematic. Here are my settings:


And we’re done! Thank you for sticking to the end and going over my breakdowns. I’d like to take this chapter to reflect on my production and thank some fellow 3D Artist friends who stuck by my side and motivated me to complete this project when I needed their support. Eanna O’Brien, Ashawn Masahir, and Jansen Thorogood have been incredibly supportive of my endeavors and have been with me for the long haul of this project. Here's to many more art journeys with you.

I couldn’t be happier and more grateful for the reception I’ve received due to this project. It’s inspiring to see so many people validate and appreciate your efforts. The art community is one of the most welcoming, nurturing, and helpful communities that I’ve been a part of. So writing this breakdown feels like I’ve come full circle and I’m getting the opportunity to pay this forward to other artists out there.

There is so much more left to learn! I’d like to make the process of creating environments more efficient and automated. That process would entail much more complex master materials with multiple blending options. Foliage, custom materials, and organic modeling are some skills that I’d like to take up in the coming months so stay tuned for the future!

I think that I got the opportunity to learn and refine my craft in terms of building interior environments. This experience really deepened my understanding of color palettes, focused compositions, and quality in narrative storytelling via environments. We all grow and develop at our own paces and I always say this, “The learning curve in an industry like ours is exponential or rather limitless. You can never reach a ceiling cap or plateau unless you choose to do so for yourself. New software and workflows will arise on a regular basis that will make your work obsolete.”

Take these thoughts as a challenge to better yourself and elevate your artistic being. Learn that software or discipline that you’ve been feeling ambivalent about taking on. Do it at your own pace and terms but do it. Experiment and push yourself to get out of your comfort zone so that you can try new things with your art. Most importantly, have fun with it! We create video games for a living! Enjoy the process like any other thing that you’d do for fun.

Lastly, don’t compare yourself to artists out there who have years of experience under their belts. They’ve been on the same journeys as many of us and with time, established themselves as the professionals that they are today. Instead, compare yourself to the person you were yesterday. The skills, knowledge, awareness, and abilities that you had yesterday. If you see growth, regardless of how minimal it is, it means you’re heading in the right direction!

Thank you once again for making it this far and taking an interest in my work. If you have any further questions or inquiries, please feel free to contact me via my email or on ArtStation!

Sahaar Chhabra, Environment Artist

This content is brought to you by 80 Level in collaboration with Unreal Engine. We strive to highlight the best stories in the gamedev and art industries. You can read more Unreal Engine interviews with developers here.

Join discussion

Comments 1

  • Jasem Yahiya

    great breakdown, thank you!


    Jasem Yahiya

    ·5 months ago·

You might also like

We need your consent

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