Martin Martschenko walked us through the Retro Futuristic Apartment project and detailed planning, modeling, texturing, and lighting pipelines, sharing how this environment was created in Unreal Engine.
Hi, my name is Martin Martschenko, and I'm a self-taught 3D Environment Artist specializing in games. I got into gaming at a young age and always was fascinated by how you could explore and experience adventures and stories in a digital world. The part which fascinated me the most about games was the world and how it was created, so I got interested in 3D art. With my love for 3D modeling and creating stories through images, I already knew in the beginning that I wanted to be part of creating environments. So, I decided to specialize in that for the last 5 years.
Over these years, I have created a lot of personal projects. The one I am the proudest of is the Abandoned Garage, which I have worked on for 12 weeks.
The Retro Futuristic Apartment Project
Today, I am going to talk about my latest scene: the Retro Futuristic Apartment. Originally, that project was supposed to be a single prop, it was just to be that robot that you can see in the environment on the workbench and standing on the left-hand side of the room. But what started as a prop ended as a month's month-long environment project.
The main inspiration for that environment came from old electronic workshops, which I found many pictures of on Pinterest. I loved the complexity and the retro vibe of these images, so I wanted to create something similar but in a more futuristic setting.
References are one of the most important factors in a project, which is why I spend a lot of time searching for them and studying what I am modeling and how these objects function. The best way to model and texture a prop is by understanding how it's built up and what its use is.
Because I had no real concept art that I could orient on, I was just working with simple meshes in Unreal Engine and placed a camera to try out various sensor sizes, focal lengths, and overall composition. This forms a base on which I could further work. The hardest part about art is starting with a blank scene. The most important part is just starting and seeing where your imagination takes you. It doesn't have to look great initially; a blockout just has to give you a good starting point that you can further elaborate on.
I used various references from Pinterest to place the main elements I wanted in my scene. In this case, the kitchen, workbench, robot, and cat. From there, I experimented with placing them in various positions to see what worked best compositionally and in terms of lighting.
My modeling workflow remains consistent for every project. I've created a brief illustration below to provide a visual overview of my typical workflow for the asset creation.
Usually, I start by searching for references and importing them into PureRef. Depending on the specific prop, I use a variety of sources, including Google, eBay, Amazon, and auction websites. Especially eBay is great because the pictures are, most of the time, high-res and show every imperfection, which is great for the texturing process. I then decide if the asset is complex enough to start with the high poly or the low poly. For this project, I most of the time started with the low poly and then created the high poly directly in Blender or ZBrush. For assets that are more organic or have a complex surface, I normally start with a blockout in Blender and then transfer that to ZBrush to create the high poly, which I then again import back in Blender to create the low poly. I used this workflow for the ceiling wooden beams and some elements of the Robot, as this personally saves me a lot of time. I also use various add-ons in Blender to further save time. For example, ZenUV is an amazing plugin that massively enhances the Blender UV Mapping Tools, which I find quite limited without any add-ons.
For my texturing workflow, I use a variety of software:
- Substance 3D Painter (Texturing)
- Substance 3D Sampler (Material creation)
- Photoshop (Adjustments)
- Marmoset Toolbag 4 (Baking)
The baking in Marmoset Toolbag 4 is straightforward and gives really good results, which is why it's my favorite baking software. After baking, I create base materials from real-world images. For example, for the radiator, I found real images of the surface from a radiator, which I then imported into Substance 3D Sampler to create a tileable material that I would use in Substance 3D Painter. Alternatively, you could also use the Quixel Library.
I then use generators for dust and various types of dirt, along with custom masks. Since generators can look generic, I always use them as a base and add a paint layer to the mask. This allows me to erase parts where the dust wouldn't make sense or add more dust in areas where the generator didn't generate. This saves a lot of time because I don't have to manually paint all the dust.
After that, I move on to the damage/rust pass. Here, I use anchor points and stencils from my personal library to paint the rust/damage. This process should be done manually, and I wouldn't rely on generators alone, as the difference in realism between painting them manually and relying on generators is huge. Reference is key here.
For bigger objects that would require a high amount of UV sets to achieve the desired texel density, I use tileable materials and RGB masks. For this workflow, I created my own RGB Mask Shader in Unreal Engine. This shader allowed me to use tileable materials or trim sheets along with masks to introduce variation in color and roughness, thereby breaking repetition. This approach can make a significant difference and enhance the appearance of any asset compared to using just a tileable material.
I create my RGB masks in Substance 3D Painter, and the typical build-up is as follows:
- R = Ambient Occlusion
- G = Dirt
- B = Damage
I used this workflow for the ceiling and the walls. It's a little complex, but this tutorial explains it pretty well:
The Final Scene
This scene went through many different iterations and phases, most of which made a drastic change in the scene and made it look much better. While I already had a vision of how the scene should look from the beginning, I can't stress enough how important critique and feedback are and how much they can improve the scene. Especially after working on a scene for a long time, your eyes tend to ignore mistakes. So, having other people look at your work and tell you what you could improve makes any artwork better.
I have been a part of The DiNusty Empire for years now, and it's an amazing art community where you can talk to other artists, meet amazing people, and post your work if you want to get feedback on it. For this scene, I got a lot of feedback from Jeremy Estrellado during his Twitch streams, and it improved my scene a lot.
The lighting was straightforward in Unreal Engine. I used a lot of pointlights and spotlights to enhance darker areas. As an inspiration, I took many references from Stray, which had lighting that I loved. However, I decided to go for a desaturated look.
Because I had a lot of reflections, I decided to use raytracing for my reflections and Lumen for my GI, which gave me the best results with a slight performance cost.
An issue I faced when working with the lighting was that I didn't have enough contrast, as I had to rely on emissive, spot, and point lights to illuminate my scene. To address this, I decided to use SSAO, which is achievable with just two commands in Unreal Engine.
This made a huge difference in this scene, not only lighting-wise but also compositionally because my focal point was much more visible. It overall made the scene look much more grounded.
Commands for adding SSAO to the scene:
- First: r.Lumen.ScreenProbeGather.ScreenSpaceBentNormal 0
- Second: r.Lumen.DiffuseIndirect.SSAO 1
You must execute both commands for SSAO to work.
Final Words and Pieces of Advice
As in every project, I realized that starting a project is the easiest part, finishing it is the hardest. Working on a project, especially for a longer time, will always have its ups and downs. I think it's important to say that it's okay to not finish a project or continue working on it if it doesn't work out.
I can't even describe how big my project graveyard is, but in every single one of these projects, I learned something new that I could then use for my next project. I used to blame myself after abandoning a project, feeling like I wasted my time. However, over the last couple of years, I realized that as long as you learned something from that project, even if it was just one thing or something small like finding a new button in your 3D software that saves you time, it was worth it. The most important part about the 3D journey is to not give up and continue working towards your dream.
Martin Martschenko, 3D Environment Artist
Interview conducted by Theodore McKenzie
You may find these articles interesting