Mudra Roy shared a detailed breakdown of the Rusty Stop project, explaining how she maximized efficiency with a mix of modern and traditional workflows and created procedural materials and custom generators in Substance 3D Designer.
Introduction
Hello everyone! My name is Mudra Roy, and I’m an Environment Artist based in India and a graduate of Think Tank Training Centre. In this article, I’ll be giving you a detailed breakdown of my recent environment project, The Rusty Stop, discussing the different workflows I used and sharing some tips and tricks I learned along the way.
Growing up, video games were more than just entertainment – they were a source of inspiration. Like many artists, I was drawn to the creativity behind the characters, environments, and storytelling. I knew I wanted to contribute to the industry that had captivated me for so long. It took a bit of exploring, but eventually, my passion for both technology and the visual arts led me to pursue a career in game design. It’s where I found the perfect blend of creativity and craft.
It was my sister, a concept artist at Sumo Digital, who first encouraged me to enroll in the diploma program at Think Tank Training Centre. With the support of my family, I spent the next two years in Canada, learning a wide range of software and 3D modeling techniques from seasoned industry professionals. Through hard work, countless hours of practice, and the guidance of my mentors, I grew from someone with no understanding of how game environments were built to creating and completing my very first environment piece.
The Rusty Stop
In the sections that follow, I’ll walk you through the key steps I took during the creation of The Rusty Stop in Unreal Engine 5. From early concepting to final polish, each phase played an important role in bringing the environment to life.
Here’s an overview of what I’ll be covering:
- Inspiration, Concepting, and Reference Gathering
- Composition and Greyboxing
- Maximizing Efficiency with Multiple Workflows
- Procedural Texturing with Substance Designer & Painter
- Creating Tileables and Custom Generators in Substance Designer
- Set Dressing and Final Polishing to Add Life and Detail
- Lighting, Rendering, and Post-Processing for Mood and Storytelling
I hope this article will make the environment creation process a little less daunting for any beginners out there.
Inspiration, Concepting & Reference Gathering
The foundation of any successful environment is a strong concept. Texturing has always been one of my favorite aspects of environment creation, so for my demo reel piece, I aimed to craft a scene rich in textures and materials, alongside props and assets that each told their own story and contributed to the overall atmosphere. As a fan of post-apocalyptic environments, I came across an incredible concept by Joker Chen on ArtStation, which became the primary source of my inspiration.
Defining the Scope
This stage is one of the most important parts of environment creation, and it's crucial to take your time to carefully understand and define the scope of your project. Gathering strong reference material to support your ideas also helps keep your vision focused throughout the production process. I used PureRef to organize my reference boards and began by breaking down the original concept into a manageable scope.
Following my mentor's advice, I decided to keep the focus on the towers and main building, removing elements that would be too time-consuming, such as the car, which could have easily turned into a project of its own. I also reimagined the original hillside layout as a wide, open desert landscape to better support the idea of a remote outpost.
Reference Gathering & Research
The next step was gathering references to support the desert environment. I pulled from a mix of realistic photography, other concept art, and portfolio pieces to help shape the overall look. Arizona, USA, served as my primary real-world reference, while games like Red Dead Redemption 2, Borderlands 3, and Rust gave me insights into how desert environments are structured in video game worlds.
During this phase, I also brainstormed props to complement the environment, such as the campfire area, which added a more personal, lived-in touch. Additionally, I researched references to finalize the overall mood and lighting for the project. It's important to avoid getting lost in too many references, so I recommend limiting yourself to just 2-3 key images that will serve as your main inspiration.
Reflection & Key Takeaways
Looking back, one mistake I made at this stage was overestimating the scope and my own abilities, as this was my first time working on an environment. It's essential to be kind to yourself and recognize your limitations so you can balance ambition with a realistic timeline. Careful planning and thoughtful decision-making at this stage are key to laying a solid foundation, ensuring that the project remains manageable and goal-driven throughout its production.
Composition & Greyboxing
Greyboxing for Composition and Scale
One of the most important stages in environment creation is the blocking phase, as it establishes scale and composition before any detailed work begins. For my project, I began by quickly blocking out the major forms in Maya and later importing them into Unreal Engine. To speed up the workflow, I assigned basic materials and colors to the blockout models in Maya, which helped me better visualize the composition early on and saved time during material assignment later in Unreal.
The goal at this stage was to establish strong silhouettes, direct the viewer’s eye through the scene, and ensure the environment supported the narrative.
Using Human Models for Scale
To maintain accurate proportions, I used human reference models in both Maya and Unreal Engine. This allowed me to ensure that all the assets in the scene were properly sized relative to a human figure. Early use of these models also enabled me to make necessary scale adjustments throughout the course of the project.
Landscape Creation in Gaea
To define the landscape for my project, I used Gaea to generate a desert terrain with mountains in the background, based on my reference images. Gaea’s node-based terrain system allowed me to quickly sculpt and refine the landscape, using various procedural techniques to achieve a more natural look. Having been trained in landscape creation at Think Tank and taking the help of tutorials on YouTube, I was able to efficiently utilize Gaea’s advanced features.
Once the terrain was finalized, I exported the heightmap and imported it into Unreal Engine’s Landscape Editor. In Unreal, I used the landscape tools to apply the heightmap, refine the terrain, and create the desired desert landscape. This workflow helped to quickly establish a solid, realistic foundation for the environment.
Setting up Cameras & Initial Lighting
At this stage, it’s essential to establish your main camera shot and a basic lighting setup. To help define the composition early, I also used Megascans' assets as placeholders for rocks, foliage, and other environmental elements.
I initially based my main camera angle on my concept art but made adjustments as the environment evolved. I underestimated the importance of locking down cameras and lighting early on. Delaying these choices led to avoidable revisions and a weaker visual focus. Finalizing them sooner would have provided clearer direction throughout production.
Finalizing Modular Pieces, Props & Materials
After completing the blocking phase, I shifted my focus to organizing the modular pieces, props, and materials required for the environment. One effective technique I used was importing the concept art into Photoshop and breaking it down into individual components.
As shown in the video, I isolated key elements such as distinct wall and roof sections, structural beams, and deconstructed larger features like towers and pipes into smaller, manageable pieces for modeling. This breakdown not only clarified the complete list of assets I needed to create but also provided a clearer understanding of the modular pieces and kits for the project.
I kept a prioritized list of props, materials, and architectural elements, regularly updating it to stay focused and on schedule. As a perfectionist, I often found myself dedicating too much time to individual props or materials, so assigning specific days to each asset helped me stay focused and adhere to the project timeline.
Maximizing Efficiency with Multiple Workflows
Following my mentor’s advice to blend both modern and traditional workflows, I approached this project with adaptability, understanding that the game industry is constantly evolving. With Unreal Engine 5’s advancements, particularly Nanite’s ability to efficiently handle high-poly assets, I was able to experiment freely without the constraints of strict optimization. As this was a personal project, my primary focus was on achieving high visual quality while still maintaining an awareness of performance considerations for learning purposes.
Vertical Slice
My mentor also emphasized the importance of starting with a Vertical Slice in production – an approach I adopted to establish a benchmark for quality, scope, and consistency across the environment.
The vertical slice approach involves selecting a small, self-contained section of your environment – often a square taken from the concept art – and developing it to near-final quality over a span of 3–5 weeks. This includes full modeling, texturing, material setup, and lighting. The goal is to establish a clear quality benchmark early in the project.
One of the key benefits of this approach is the ability to define your material library and solidify your production pipeline from the outset. By focusing on a specific section of the environment, I was able to define shader setups, test material blending, and refine the workflow that would guide the remainder of the project.
As shown in the picture, I further broke down my vertical slice into distinct parts to gather references and plan how to approach each section. As I progressed through additional vertical slices, the iterative process allowed me to polish asset quality, streamline production, and maintain consistency across the entire scene.
Modularity Using Nanite
Modularity involves creating reusable, interchangeable assets that can be easily combined to construct diverse environments. For my project, I focused on making modular pieces for my main building, wooden deck, and roofs, which not only saved time but also allowed me to easily create variations. This approach is similar to using LEGO pieces – by reusing a few core elements, I was able to build large structures.
For example, my wooden deck is constructed from just two modular pieces, which I flipped and rotated to give the illusion of the entire deck having a unique, varied design. It also allowed me to quickly build a second small building by only creating a unique roof piece, saving time towards the end of my project.
To achieve high visual quality within a short timeframe, I utilized the Nanite workflow for my modular kits. Nanite allows for the import of high-poly assets without the traditional polycount limitations. It automatically manages Level of Detail (LOD), reducing polygon counts for distant objects while maintaining high detail up close. This results in fewer draw calls, simplifying asset creation and rendering, ultimately improving performance.
For my buildings and roofs, which were primarily made of corrugated metal sheets, it made sense to opt for high-poly meshes instead of baking down detail. This allowed me to preserve subtle geometry, which enhanced light interaction, as well as the play of shadows and highlights.
Here's a breakdown of the workflow I followed:
- Create a simple base mesh in Maya.
- Sculpt the high-poly version in ZBrush to add intricate details.
- Decimate the sculpted mesh to create both low-poly and detailed high-poly meshes.
- UV unwrap the low-poly mesh for efficient texturing and importing into the game.
- Bake the high-poly details onto the low-poly mesh in Substance 3D Painter.
This process allowed me to maintain a reasonable polycount for my Nanite mesh by baking the normal details from the high-poly version. The decimated low-poly mesh then became my Nanite game asset. UVing decimated meshes can be difficult, so I used RizomUV to simplify the process. RizomUV’s tools automatically detect edge loops, making it easier to place seams along the natural flow of the geometry.
Layered Materials Using RGB Masks
For texturing certain assets, I implemented Unreal Engine’s Material Layer system for its flexibility and non-destructive workflow. Rather than relying on uniquely baked textures, I created tileable materials in Substance 3D Designer and generated custom RGB masks in Substance 3D Painter to define material placement. Each mask texture packed up to four material IDs (R, G, B, and A), allowing me to layer materials, such as dirt, metal, paint, and rust, over a base layer with precise control.
To build the shader, I followed Ryan Manning’s tutorial as a foundation, then customized it by exposing key parameters for real-time adjustments within the engine. This workflow reduced the need to return to Substance 3D Painter for edits, improved material reusability, and optimized performance by lowering texture memory usage and draw calls, while still preserving a high level of visual detail.
Exposing additional controls in the material shader gave me the flexibility to create unique surface variations without the need for new tileable textures. For example, I reused my rust material for the leaks layer by adjusting its albedo and roughness values directly in the shader to simulate a different surface. By exposing parameters for material tint, roughness, and mask intensity and contrast, I was able to iterate quickly and experiment freely within Unreal Engine, enhancing both creative flexibility and workflow efficiency.
A key recommendation for this workflow is to use Smart Masks when creating your RGB masks in Substance 3D Painter to save time. It offers a solid built-in library, but customizing or creating your own masks is crucial to avoid repetition and adds a unique artistic touch. I also drew inspiration from Javad Rajabzade, whose impressive collection of smart masks and materials can be a great resource.
Early in the project, I created a set of smart masks while texturing my first modular piece. These became a reusable foundation for other assets, requiring only minor tweaks to maintain consistency and save time throughout production. Building a personal smart mask library like this is a simple yet effective way to speed up your workflow and preserve quality across the board.
To support this, I’ve included a video demonstrating the use of smart masks and how to set up your RGB-packed material mask for export. The final step involves using a custom export template in Substance 3D Painter to ensure all textures and masks are exported correctly, an example of which is shown in the image below.
Pipe Kit Using Hybrid Trim Sheet Workflow
For my pipe kit, I focused on optimization without compromising visual fidelity. Building on insights from my earlier breakdown, it presented an ideal opportunity to explore trim sheets within a modular workflow. After studying similar kits on ArtStation, I adopted a production-standard setup – multiple pipe sizes supported by a single trim sheet and one unique texture set.
Hamish Ames’ tutorial on hybrid trim sheets was particularly helpful in shaping my UV layout and overall workflow. This setup allowed me to combine tileable trims and uniquely unwrapped elements efficiently within a single UV space. The final kit consists of 9 large pipes, 2 furnace vents, 15 medium, and 10 small pieces, utilizing one hybrid trim sheet and one unique texture set.
Workflow Breakdown
1. Blockout & Proxy Testing
I started by creating proxy meshes to test scale, shape, and modularity in Unreal Engine. This helped define three primary size categories – large, medium, and small – and finalize the necessary piece types for a cohesive, reusable kit.
2. Sculpting & Trim Creation
For the main pipe structure featured in the vertical slice, I sculpted high-frequency details in ZBrush and baked them to create the initial trim sheet. The hybrid trim workflow allowed me to allocate UV space for both tileable elements and uniquely detailed sections that required custom mapping.
3. UV Mapping & Optimization
Once the trim sheet was established, I proceeded to unwrap the unique pieces of the kit using a combination of UV mirroring and stacking while maintaining texel density. Mirroring was especially useful for symmetrical components, as it effectively reduced texture memory usage and simplified texturing. UV alignment, seam placement, and correct flipping were critical for clean results.
Challenges & Key Takeaways
1. Getting the hang of the hybrid trim workflow was a bit of a learning curve. While there are plenty of tutorials out there, it really started to click after going through some trial and error myself. For anyone starting out, I highly recommend Dekogon’s Environment Production in UE5 course on ArtStation Learning – it’s a solid introduction to working with trim sheets.
2. One thing I learned the hard way was jumping into the full kit before testing the shader setup. That caused some issues later on, and I had to go back and tweak the UVs. In hindsight, building a small test kit first to validate the trim sheet and shader workflow together would’ve saved a lot of time.
Procedural Texturing with Substance 3D Designer & Painter
For most props in this project, I followed a traditional 0–1 low poly baking workflow. One example is the chair asset, where I combined high-poly baking with procedural texturing using both Substance 3D Designer and Substance 3D Painter.
Gathering References
I always begin with a clear set of references – some focused on modeling accuracy, others aimed at texture storytelling. For this chair, I had the advantage of referencing a real-world object (my dad’s office chair), capturing photos to better understand wear, material variation, and surface response.
Baking & Sculpting
As a hero asset, the chair required a bit more detail. I sculpted subtle elements like wood breakup and metal weld seams to enhance realism. Clean bakes depend heavily on low poly prep – smoothing normals and thoughtful geometry placement ensured that high-frequency details transferred well in the bake.
Procedural Weave Material in Substance 3D Designer
For optimization purposes, I created a weave material for the chair mesh in Substance 3D Designer. This was my first time building a patterned material from scratch without relying on tutorials. While challenging, the hands-on approach proved to be the most effective way to learn.
With any material in Designer, I always start by creating the Height and Opacity Mask maps first. The Weave Generator node was essential, automatically separating the strands into usable masks. Using Transform 2D and Blend nodes, I layered and offset strands to form a natural weave, then fed it into the Tile Sampler to generate the base weave structure.
Noticing the border of the chair had a different weave structure, I created a secondary pattern and used masking to blend it with the central section, adding realism and material variation. To break up the uniformity and remove the overly clean procedural look, I used Warp and Slope Blur to break up uniformity and introduce bulging and edge damage.
For albedo, I used a Grunge Map passed through a Gradient Map, keeping the color samples minimal for better control. Using Blend, HSL, and noise-based masks, I layered color variation and added light/dark transitions based on the underlying height map. Histogram Scan was particularly useful for refining mask inputs, and I finalized the base with a global HSL tweak for saturation and value correction.
The roughness workflow I followed was similar to the base color, using grayscale maps instead of gradients. Working from broad to fine details, I used layered noise masks to control micro surface variations. The Levels node ensured a full roughness range for optimal material definition.
For additional surface depth, such as large-scale dents or creases, I used Normal Combine to overlay a secondary normal on top of the height-derived one, giving more control over detail intensity.
Once the tileable material was complete, I exported the .sbsar file for use in Substance 3D Painter, enabling seamless integration with the rest of my asset texturing pipeline.
Key Texturing Practices in Substance 3D Painter
There are countless excellent tutorials available for learning texturing workflows in Substance 3D Painter. Two artists I found particularly helpful are Wes McDermott and Louise Melin – both offer clear, practical insights into Painter’s capabilities and are well worth checking out.
Custom Smart Materials & Masks
Maintaining a personal library of Smart Materials and Masks significantly improved efficiency. Whenever I created a successful material (wood, metal, etc.), I saved it for reuse across other assets. This not only sped up the workflow but also ensured visual consistency.
Designer-to-Painter Integration
While Substance 3D Painter’s default library is robust, I exported the tileable materials (wood, metal, rust) I had created in Designer for material layering and used them as base layers in Substance 3D Painter. This ensured consistency and saved time across both workflows.
Use Generators for Effective Smart Masking
My Painter workflow is divided into distinct passes: base material, color/roughness breakup, and damage/stains. Within each pass, I utilize Painter’s built-in generators, such as AO, Dirt, and Metal Edge Wear, to create detailed, procedural mask variations that enhance realism. These generators are powerful tools for introducing surface variation and wear without hand-painting every detail.
Anchor Points for Layer Referencing
Anchor points let you reference masks or height data across layers, making them essential for effects like dirt buildup and edge wear. While initially a bit complex to grasp, anchor points enable non-destructive workflows and are a critical part of advanced Substance 3D Painter setups. A tutorial by ProductionCrate provides an excellent breakdown of how to use them effectively.
Final Validation
Always check individual material maps (Base Color, Roughness, etc.) in Substance 3D Painter for clarity. More importantly, test your textures early in Unreal Engine, as materials can appear different between Painter’s viewport and the engine. Early validation avoids wasted effort and ensures in-engine accuracy.
Creating Tileables and Custom Generators in Substance 3D Designer
Throughout the project, Substance 3D Designer proved invaluable – not just for building tileable materials, but also for experimenting with custom procedural workflows.
Tilable Materials
Since much of my environment was built from metal structures, metal and rust were the first tileable materials I focused on. I created these materials in Substance 3D Designer to be used both in material layering within Unreal Engine and as base inputs in Substance 3D Painter.
One of Substance 3D Designer’s greatest strengths is its non-destructive workflow. Once I built a solid base for my metal and rust materials, I could easily tweak node parameters to generate multiple variations, allowing for flexible iteration without rebuilding from scratch.
Reference & Workflow
Having strong reference images was key. Apart from real-life references, I studied Megascans materials closely – especially their albedo and roughness maps – to understand surface detail and material properties. I also referred to other artists' portfolio breakdowns to align my output with production standards.
As I had mentioned before, my typical material workflow began with building the height and normal maps first, as these serve as the foundation for color and roughness definition later. However, when working with metal, I found that the roughness map played a more crucial role in capturing realistic surface response, making it a priority to refine.
Tips for Procedural Detailing
- Always block out large shapes first, then layer in smaller details for a natural progression.
- For my rust material, I relied heavily on Designer’s built-in grunge and noise maps, fine-tuning them to match my references.
- One of my go-to nodes was Non-Uniform Blur Grayscale, which helped create soft transitions and added depth to the rust cavities.
- Don’t hesitate to experiment; even small decimal changes in node parameters can have a big visual impact.
Creating Custom Generators
One of the powerful features of Substance 3D Designer is the ability to build custom generators or sub-graphs – small, reusable tools that automate complex node setups and speed up your material creation workflow.
Atlas Texture for Yucca
For my Yucca plant, I created a leaf atlas texture in Substance 3D Designer to serve as the foundation for building 3D foliage using alpha cutouts and opacity masking.
To generate multiple leaf variations efficiently, I built a custom leaf generator within Designer. The setup used nodes like Vector Warp, Curve, Spline Flow Mapper, and Highpass Grayscale to control vein lines and distortion as well as edge breakup. I also used a Multiswitch to switch between leaf shapes, which I extracted from an Image. I then exposed parameters such as leaf lines, stem selection, and brown levels, allowing for quick generation of new variations with minimal adjustments.
Creating a generator is as simple as:
- Right-clicking your node network and choosing “Create Graph from Selection.”
- Defining input and output nodes (e.g., grayscale or shape inputs and final leaf mask or leaf material output).
- Exposing the parameters you want control over (right-click a parameter → "Expose").
Once saved, the generator can be dragged into any other graph like a normal node, making your workflow more modular and efficient. In my Atlas graph, I was easily able to create different leaf variations using the exposed parameters of the generator.
Another powerful node I utilized was Splatter Circular, which played a key role in arranging the individual leaf textures into radial formations typical of Yucca plants. By inputting the outputs from my custom leaf generator, I could fine-tune parameters such as instance count, radius, rotation offset, and scale randomization to quickly generate a range of natural-looking plant layouts.
Label Aging Tool – Workflow Integration
To speed up the process of creating torn and aged paper labels across my assets, I built a custom Label Aging Tool in Substance 3D Designer.
Key Techniques
- Base Forming:
The core label shape is generated using a custom image input, with the alpha extracted via the Color to Mask node. The generator then combines Perlin Noise and Directional Noise with Slope Blur and Directional Warp to create randomized, organic edge tearing.
- Surface Variation:
The surface is broken up using Grunge Maps, Non-Uniform Blur, and Directional Noise to simulate bubbles, air pockets, and subtle surface wear.
- Color Fade:
Utilizing the custom image input and the final distorted shape, I blend it with Gradient Maps and HSL adjustments to create faded color distortion and a dirty, aged look.
- Parameterization:
Key parameters such as Tear Amount, Edge Distortion, Air Bubble Intensity, and Body Discoloration are exposed, allowing for quick, non-destructive variations without needing to rebuild the node network.
Once the generator was complete, I exported it as an .sbsar file and used it in Substance 3D Painter as a mask input. This allowed me to apply the aged label effect directly onto meshes with full control over placement, aging, and blending using anchor points and paint layers.
I also used this generator to create a Decal Atlas for posters and newspapers – an atlas texture being a single image that packs multiple smaller textures into one sheet. This setup simplified the final polish phase by letting me quickly add storytelling details and enhance the lived-in feel of the environment.
Shout-out to my friend Jim McCormick, who is an exceptional artist and introduced me to the concept of this generator. Definitely check out his work.
Learning Resources
If you're looking to improve your skills in Substance 3D Designer, I recommend checking out Adobe’s official YouTube tutorials and content from Johnny Malcom, one of my instructors at Think Tank. Both provide excellent insights into procedural workflows and best practices.
Set Dressing & Final Polishing
In the final stages of the project, I focused on breaking uniformity and introducing imperfections to breathe life into the scene. This was also the stage where I reviewed the full scene to refine set dressing, fix texture issues, and ensure overall consistency.
Breaking Up Shapes
I revisited older assets and manually tweaked geometry, pushing and pulling vertices to break up clean shapes. For more complex meshes, I used Lattice deformers to quickly add subtle bends or warping, which made props feel worn and naturally aged.
When comparing the two images, the top one feels static and overly uniform. The terrain appears flat and lacks surface variation, while the roof edges are unnaturally straight, giving the whole scene a rigid, artificial feel.
In contrast, the final version (bottom) introduces subtle unevenness and better shape distribution across the composition. These adjustments not only add a natural, organic quality to the environment but also help guide the viewer’s eye toward the central building. The improved balance of visual weight and breakup makes the scene feel more grounded and visually engaging.
Surface Integration with Decals
To integrate assets more effectively and convey environmental storytelling, I utilized a custom Decal Atlas, created using Substance 3D Designer. This allowed me to scatter dirt, stains, scratches, and damage decals across surfaces, blending objects into their surroundings and enhancing realism.
If you compare the two images, the first one feels too clean and untouched, while the final shot, with decals applied, feels much more cohesive and lived-in.
I created a decal material shader in Unreal Engine that allowed easy control over texture selection from the atlas. The shader also included parameters for mask opacity and contrast, tint, and roughness variation, making it fast and flexible for efficient set dressing.
Camera-Led Prioritization
Before diving into polish, I finalized my camera compositions. This allowed me to identify focal areas and direct detail work where it would have the most impact in the final shots.
Narrative Set Dressing
Set dressing was approached with storytelling in mind. I envisioned the scene as a remote outpost inhabited by a lone owner. To reinforce this, I carefully placed clutter and wear in a way that suggested history and personality. Real-world references, game environments, and even my daily surroundings helped guide layout choices and bring a "lived-in" authenticity to the scene.
A big shoutout to Giovanna Barcelos, who mentored me through this stage of the project. Her guidance was invaluable in refining the composition and presentation. She's an incredibly talented environment artist – be sure to check out her work!
Lighting, Rendering & Post-Processing for Mood and Storytelling
Lighting was one of the most challenging yet rewarding parts of this project. It took multiple iterations and a lot of trial and error to achieve the final look.
In the beginning, I struggled to grasp both the technical side of lighting and how to achieve a cinematic visual feel. What helped me move past that hurdle was Tilmann Milde’s Ultimate Lighting Course, which offers a deep dive into Unreal Engine 5’s Lumen system. His clear explanations on shaping light, balancing exposure, and using atmospheric elements like fog gave me the foundational understanding I needed to push the visual quality of my scene.
Lighting isn’t just about visibility – it’s about guiding the viewer’s eye, emphasizing focal points, and reinforcing the atmosphere of your scene. A well-lit environment makes your materials and geometry shine, and without it, even the best assets can fall flat.
Once the lighting was finalized, I moved on to setting up cinematic cameras in Unreal, framing each shot with clear storytelling intent. I approached each composition like a film still, carefully applying the foreground–midground–background principle to guide the viewer’s eye and create depth.
For anyone looking to improve their cinematic presentation, I highly recommend checking out William Faucher’s tutorials on Making Unreal Cinematic and Using Movie Render Queue, they’re incredibly helpful for learning how to properly set up cameras and render high-quality visuals in Unreal Engine 5.
When it came to post-processing, getting the exposure right made a huge difference. I used Auto Exposure Metering Mode and adjusted the Min and Max EV100 values, along with exposure compensation, to match the lighting from my directional and skylights. On top of that, I used touches of volumetric fog, film grain, and bloom – just enough to add atmosphere and depth without overwhelming the scene.
Spending the time to understand lighting fundamentals and cinematic rendering was essential – it’s what brought all the work together and gave the project its final emotional tone.
Conclusion
Working on 'The Rusty Stop' was a huge learning experience, and it helped me grow both technically and creatively as an artist. There's still so much to learn, and I’m excited to continue growing and evolving in my craft.
Lessons Learned Along the Way
- Feedback is invaluable. Whether it’s from mentors, peers, or even friends and family, a fresh perspective can help spot issues you’ve grown blind to. But too much feedback can sometimes be overwhelming. Environment art offers many valid workflows, so when opinions clash, trust your gut – it’s your project, and not every choice has to be technically perfect. Growth comes from making decisions and learning from them.
- Burnout is real – balance is key. There were times when I felt drained and couldn’t touch the project for days. That’s why having a structured weekly or monthly plan helped me stay on track without overworking. A sustainable pace leads to better results over time.
- Perfectionism can hold you back. It’s important to remember that every project is just one step in a longer journey. If something didn’t make it into this one, there’s always the next. It’s better to finish and share your work than to endlessly chase a perfect result.
- Work in stages: follow the 30–70 rule. Early in the project, aim to get 70% of the look with just 30% of the effort. This means blocking out forms, getting proxy meshes in place, and doing simple base textures first. Don’t wait to polish one asset at a time. Build the full picture early, then refine it toward the end.
Every project presents its own challenges, but with careful planning, patience, and a willingness to adapt, you can create environments that feel alive and believable.
I’m incredibly grateful to my mentor, Aleksandar Danilovac, whose guidance went far beyond technical advice. His patience, encouragement, and belief in me helped me grow not just as an artist but also in confidence. I’m also grateful to the global mentors at Think Tank and to my family and friends for their unwavering support throughout this project.
A big thanks to 80 Level for reaching out and giving me the opportunity to share this breakdown – I hope it provided some useful insights into my workflow and helped clarify parts of the environment creation process. Thank you for taking the time to read through this breakdown. I wish you the best of luck with your future projects and creative endeavors!