Assembling Abandoned Middle Eastern Courtyard in 3D Using Pass-Based Workflow
Irmak Çavun talks about how the culture she grew up in inspired the Abandoned Middle Eastern Courtyard project, how she switched up her workflow in favor of a pass-based approach to save time, and how she created an efficient, quick-to-use material system.
Introduction
Hello everyone, I'm Irmak, or Max, and I'm a generalist artist and producer originally from Turkey. I currently reside in the USA, working in AAA art production. I got into 3D while I was studying game development at USC Games. Since then, I've completed the game environment track at Think Tank Training Centre and a mentorship from Sierra Division. While I've been working on AAA titles, for my art endeavors, I have been focusing on independent, smaller-scale projects such as the one I'll break down in this article (and yes, I do produce myself).
Abandoned Middle Eastern Courtyard was a challenge I set for myself to build a fully modular environment using only tiling textures and in-engine material blending techniques without relying on a concept. This is how it turned out.
I used production methodologies here, with the guidance of my mentor, Jon Arellano. They are easy to apply to any personal project.
Abandoned Middle Eastern Courtyard
Before starting this project, I had been passively gathering inspiring Middle Eastern environment concepts since 2023. However, after years of gathering, all I could see in my gallery were shades of brown. I'm sure you would believe me when I tell you that environment concepts in these settings are very rare, especially if you want to diverge from deserts or mosques. I was fooled more times than I'd like to admit by AI-generated images, so I decided to just do it without a concept and go for something with green, blue, and other colors.
Reference Hunting
I started by documenting real-life locations I was inspired by; most of them happened to be in Iran. I then used those to build a bird's-eye rough plan for the layout. With the layout mapped out, I gathered images for composition and color.
Only after I had the high-level overview did I divide the reference board further into materials, assets, destruction, and cultural elements (patterns and architecture).
Growing up in Turkey, I always wished to see Middle Eastern environments that were set outside of deserts, so I made sure to add elements from my hometown, particularly by using tulips and carnations in my cloth and trim patterns.
Blocking Out & Composition
Before setting up my composition, I blocked out the environment in Maya based on the layout plan. I used real-life proportions for the blockout, and then imported it into Unreal Engine to get a sense of scale and feel out the navigation. This would then help me with camera placement.
At this stage, I went back and forth with various ideas, iterating on the overall environment as a location first, and composition second.
After I got a sense of space, I turned my attention to composition while iterating on my blockout. I developed my composition by combining the two key composition references I had identified in concept gathering. I used the pillar/interior view placement of the first concept and the foreground, midground, and background flow of the second piece.
Working in Passes
Up until this point, my workflow was very close to that of a classic waterfall environment pipeline (concept > reference > blockout > workup > polish). However, after talking with my mentor and evaluating the timeline, we went with a pass-based workflow rather than the usual one. This is where most of the time savings came from, as well as focusing on dynamic materials with exposed aging parameters early on in the process.
The pass order went like this:
- Blockout
- Pass 1 (Alpha: includes first-pass modeling and textures)
- Pass 2 (Beta: includes second-pass modeling and textures)
- Polish (blending, skirting, decals, etc.)
I separate these passes here rather than just calling them Alpha and Beta because it was not a linear workflow where you work on everything at the same time. It focuses on getting the scene to a representative level first, making changes based on how the pieces fit together (outside the gray viewports of Maya, Substance 3D Designer, ZBrush, etc.), and working only on what is necessary.
Pass 1
For pass 1, I focused on modularizing my blockout and getting first-pass textures and models to a representative state. The key is representative, not final.
I used an iterative cycle to convert my blockout into modular kit pieces through ideating, prototyping, distilling, and iterating. During blockout, I was mostly ideating; I kept physical sizes in mind but did not restrict myself to a model kit sizing format. Only once I was happy with the overall space direction did I go back to my Maya file and prototype various ways I could cut up the architecture into modular pieces.
Middle Eastern architecture was quite challenging to fit into a 2x4 or 4x4 format (in meters). This size range is a typical format to achieve a desired texel density and tiling materials.
After prototyping a few options, I decided to shift my focus toward a few core 2x4 and 4x4 pieces, and many more smaller snapping pieces to layer on top of the 4x4 ones. Then I separated my prototyped idea into final mod kits I would use to build up the scene.
Here are the core 4x4 and 2x4 pieces. They utilize RGB masking, texture paint, and 1 modular decal that is used for wall edge damage.
Then I moved on to working on materials. I did a quick pass on all core materials and exported them to the engine.
My goal was to feel out the color, balance, and busyness of the scene (how materials, shapes, and composition interacted with each other) before pouring too much time into completing them. Only after you see materials in context (as opposed to the isolated gray viewport in Substance 3D Designer) can you make the necessary art direction choices and iterate quickly. Here is an example of what that iteration looked like for me:
Once I put the garden tiles into the scene, I realized that the vision I had for the courtyard body of water was not coming through at all. But because I had not created anything beyond partially complete height and color maps, I could course-correct fast and iterate. In the end, because of this workflow, I got to keep that body of water as a core element of the scene.
For my materials, I used a few extra tricks to help make the process more efficient. First, knowing that I'd be using tiles no matter which direction I picked, I built a tile damage generator function in Substance 3D Designer to be able to plug in any pattern for iteration and testing purposes.
I also set up my materials early on for dynamic aging with exposed parameters. While I was creating height and partial color maps for the first-pass exports, I built them on the foundation, keeping aging in mind.
Towards the end of pass 1, I updated my basic master material to support basic material layering. These videos turned out to be super helpful and allowed me to build a very comprehensive master material covering more than what these videos have combined. It will come up more in pass 2.
After I was done with my quick iteration cycles, I relit the scene based on my lighting references. Again, only to a representative degree. Then I moved to the second pass. Here is what my scene looked like at that point.
Pass 2
Moving on to the second pass, this is where the material systems and pass strategy really start to shine. At this stage, I focused on second-pass materials, as well as second-pass pass models, vegetation, and material blending.
The texturing workflow was the biggest time-saver for quick iteration and application. In my workflow, I relied on two different things: a library of dynamic/aging materials mentioned earlier and layered materials in Unreal Engine 5.
I built a master material that could accommodate RGB masking, vertex painting, texture painting, and combinations of other material layering functions. This gave me the ability to paint 6 different channels if needed (3 in vertex and 3 in texture paint). By this time, it was very apparent that I would not need any unique textures for this scene.
Coming from previous projects with a very prop-heavy workflow, it was very surprising to me how few materials were actually needed for a scene of this size. The core materials utilized aging to varying degrees, thus creating several distinct versions of the same material.
For example, for all the assets here, I am using only one dynamic material, shifting between its different aged/damaged instances using RGB masking.
While it did not start that way initially, I noticed I could insert subsurface, opacity, and other foliage-related functionality into my master material. And as I went from blockout to polish, I kept building on the material to cover a wider range of assets. In the end, everything in this scene ended up using a single master material, except the water, the sky in the background, and decals.
Here are a few examples of me using it in practice.
Here I'm painting in water puddles with Texture Painting, and then adjusting the opacity, density/height, as well as sharpness via material layering.
Similarly, I'm able to use the same workflow on cloth with custom subsurface scattering inputs and opacity.
Having fallen in love with the modular dynamic aspects of Substance 3D Designer, I used it again to create my foliage atlases. I set up leaf and lily pad materials and made sure they had dynamic properties for quick iteration and variety.
For the cloth, I used Marvelous Designer and drew inspiration from Turkish and Ottoman patterns featuring tulips and carnations.
By the end of pass 2, this is how my environment looked.
Polishing
From this moment on, I focused heavily on improving what was there and finishing up any leftovers from pass 2 that were sticking out. During polishing, it was all about material blending, skirting, and final touches like cameras, cloth and wind simulation, and keeping feedback in mind.
I kept playing around with lighting and background almost weekly. You can see how every iteration was breaking up the environment even further, blending the destruction into the scene and making the environment look more cohesive.
Just adding the same set of 3 modular decals could make a huge difference, I learned. For example, I crafted a tiling edge damage decal using an image of damaged concrete, and then used the same decal material across all my edge damages (minus any that were covered using RGB masking).
After I was done placing clutter, decals, and blending the assets via skirts, I did one final lighting pass.
Lighting
Lighting was definitely a big challenge! However, thanks to my mentor Jon, I had great direction and tips and tricks for lighting this scene to resemble my references.
One trick that I especially appreciated was isolating the light sources one by one and modifying them first with every other light source turned off to fully see their effects on the environment. And then tweaking them one more time with other lights turned on.
For this breakdown, I split up my lighting into 6 core areas:
- Directional
- Sky/Atmos/Unreal Engine's basic fixtures
- Bounce lighting
- Highights
- Sky
- Fog cards
I started working on my lighting by identifying the directional light position that felt the most dynamic.
I then added the Sky Atmosphere, sky light, and volumetric cloud, and tweaked them to my taste.
I wanted highly curated and slightly stylized lighting. Defining my own bounce lights was what helped me accomplish that. This method is the one I learned from Jon: you identify areas that act as big mirrors (such as the lit-up pathway in the middle of the courtyard) and place light actors to simulate lighting bouncing off those. Instead of Unreal Engine deciding the values, you tweak them for more precise art direction.
Then, for a little bit more juice, I added some highlights to really push it to the next level. Creating highlights felt like painting a concept; it helped separate elements from their background, giving the scene more depth and definition.
Then I added my modified HDRI and a fake sun.
For the last bit, I made my own fog/sky cards and used a modified version of the default fog cards from EasyFog (thank you, William!)
I did not need to spend too much time on post-processing. It was set to manual exposure with a little touch of blue/purple in the shadows, and that's it.
Here is the scene in detailed lighting.
Finally, as I let the cloth and wind simulation run wild, my scene was ready.
Thank you so much if you have come this far!
Conclusion
As artists, we tend to perfect our assets all the way through. But often, by working in passes, you may come to realize that not everything needs a second pass or polish. Aiming to get everything to a representative state and evaluating it in the engine before moving into polishing was an immense time-saver for me in everything I've worked on before. It also allows you to iterate faster and avoid falling into the traps you would end up in if you were to see the asset in isolation in a gray window.
Also, RGB masking and material layering are very powerful. To the point where you can build your own Substance 3D Painter inside Unreal Engine. Moving forward, I don't think I'll ever go back to 1:1 textures except if I want to build a look dev portfolio piece or create a very unique vignette within a larger environment.