Birds in the Cave
Introduction
Hi everyone! I'm Jessica Canales, a 3D artist based in Ottawa, Canada.
Currently, I’m in the advanced term at Think Tank Online, specializing in Environment Art for games.
Project
The project I’m breaking down today was my intermediate-term project at Think Tank Online.
It spanned four weeks, with an additional week dedicated to refining it after receiving feedback.
I hope this breakdown inspires other artists to take on new challenges!
A huge thanks to my supervisor, Giacomo Bonanno, for his guidance throughout this project.
Goals
My main goal was to create a piece that would allow me to learn and practice something new, and that was doable in 4 weeks.
The biggest challenge I faced was implementing the material layer system, which ultimately became my most valuable learning experience.
Tools
- ZBrush for sculpting
- Maya for UV mapping and mesh cleanup
- Marmoset Toolbag for baking
- Substance Painter for mask creation
- Substance Designer for textures and decals
- Unreal Engine as the game engine
In Unreal, I utilized:
- Lumen
- Niagara
- The material layer system
References & Inspiration
The first week was dedicated to finding the right concept and gathering references. I wanted to create a semi-stylized scene, combining stylized shapes with realistic textures.
While looking for inspiration, “Birds in the Cave” by 麦狗子 (ArtStation link) immediately caught my attention.
Influences
- Stylization: Kena: Bridge of Spirits guided my approach to shapes and semi-stylized assets.
- Textures & Details: Real-world references helped inform the texturing process.
- Lighting & Mood: I drew inspiration from Avatar: Frontiers of Pandora, focusing on its immersive and atmospheric lighting.
Tip: Set a time limit for choosing your concept. It’s easy to get stuck searching for the “perfect” idea, which only delays starting your project. Pick something you love that will push you to grow as an artist.
Blockout
I started by blocking out the composition and camera angles with simple shapes to establish proportions and align the scene with its focal point.
Once the blockout was done, I began sculpting key assets like rocks, wood, and statues, while also experimenting with the water shader to integrate it early.
Here’s a progress timelapse from week one until five.
Tip: Block out your cameras early. This will help you prioritize assets and ensure your composition supports the scene’s focus.
Assets Workflow
I followed a consistent workflow for all assets:
- Sculpting in ZBrush – Focused on primary and secondary shapes.
- Low Poly & UVs in Maya – Ensured clean topology and efficient UVs.
- Baking in Marmoset Toolbag – Generated bake maps.
- Texturing in Substance Painter – Created masks and detailed textures.
Below, I’ll break down this process using the wooden pieces as an example.
Sculpting
Almost every asset started with a sculpt in ZBrush. I planned to add most of the details during texturing, so the sculpting was mainly focused on primary and secondary shapes.
High & Low Decimation in ZBrush
I performed two decimation passes on the models in ZBrush.
The goal of the first pass was to create a manageable high-poly model size, while the second pass was to generate an initial low-poly model.
Low Poly Model Clean-Up in Maya
Next, I imported the lower-decimated model into Maya, where I cleaned it up by merging vertices, ensuring the silhouette remained intact, and checking for issues like hidden faces.
After a clean-up pass and manual inspection, the final low-poly model was ready for UV unwrapping.
UV Unwrapping – Using 2 UV Sets
For the material layer setup, I created two UV sets in Maya, each serving a specific purpose:
- UV Set 0 (1:1 Layout): Used for baking maps from the high-poly to the low-poly model.
- UV Set 1 (Tiling Textures): Allowed textures to tile infinitely for higher texel density, enabling detailed patterns in-engine.
Tip: Ensure all your UV shells are aligned in the same direction if you’re using a texture with a clear flow (e.g., wood grain).
Example of Use:
In the wood material layer instance, UV Set 1 is activated to use the UV layout I prepared in Maya for tiling textures.
The macro normal map, however, uses UV Set 0, corresponding to the 1:1 bake, enhancing the model’s primary and secondary details.
Baking in Marmoset
I exported grouped low-poly and high-poly models from Maya, ensuring naming conventions matched correctly.
This allowed Marmoset to automatically organize the imports into folders, streamlining the process.
Tip: Use the quick load feature in Marmoset to save time.
Assets Workflow: Substance Painter – RGB Mask Creation
As previously mentioned, the RGB mask controls material placement on the mesh. For this project, I required masks for dirt, edge wear, breakup, and moss.
The moss was implemented directly in-engine using a Z-up material, so it didn’t need a dedicated channel in the mask.
Channel Assignments:
- Red Channel: Edge wear/damage
- Green Channel: Dirt/dust
- Blue Channel: Breakup
To simplify the process, I used the “Substance Painter Work with RGBA Layers in Viewport” pack by Dylan Abernethy, which greatly improved efficiency when painting and exporting masks. You can check it out here: Dylan Abernethy’s Gumroad.
For the masks, I created a smart material for each channel in Substance Painter, relying on mask generators and tweaking minor details for each asset. This sped up my workflow significantly.
Below is a GIF of the Substance Painter viewport showing the masks.
Assets Workflow: Tiling Textures
I created most of my textures using Substance Sampler and Substance Designer. Below is an overview of my wood texture graph:
This graph defines the various layers and attributes of the wood texture, allowing for detailed control over elements such as grain, color variation, and roughness.
By adding these controllers, I can easily use this substance on other projects in the future as well.
Assets Workflow: Materials
For this project, I used the material layer system for all assets. This workflow offers significant benefits, particularly for larger projects.
Despite the scene being relatively small, I wanted to challenge myself technically and explore the system’s potential.
If you’re interested in this workflow, I highly recommend checking out Chris Pollitt’s explanation: Chris Pollitt’s Explanation.
Why Material Layers?
My primary motivation was the modularity of the system. Stacking layers to create each material allows for easier iteration and ensures consistency across assets.
This versatility was particularly useful for sharing materials like dirt and moss between the wood, rocks, and statues, creating a cohesive look across the scene.
Below is the Material Layer Base Showing the Z-Up Material and Vertex Color Setup.
Assets Workflow: Vertex Painting
In the base material shown previously, I included the option of vertex painting to provide an additional level of control after the RGB masking.
In the following example, I use this feature to remove moss from the faces of the birds.
Assets Workflow: Assembling the Wooden Bridge Using Prefabs
I set up prefabs for the bridge modules early in the process, ensuring that when I reimported the final wooden pieces, the bridge would automatically update.
This setup allowed me to make changes directly in the blueprint, and those changes would instantly reflect across the entire scene. Additionally,
I could modify individual prefabs in the scene without affecting the others, offering flexibility and control during the assembly.
Foliage
Foliage played a crucial role in shaping the overall look and feel of the scene. I created five plant types with variations for small, medium, and large sizes.
Workflow:
- Sculpting in ZBrush: Focused on shapes and details.
- Low Poly & Baking in Marmoset: Used a simple plane with normalized UVs for the low-poly base.
- Texturing in Substance Painter: Exported base color, normal, and packed maps.
In Unreal, I added subtle movement to the foliage using the Simple Grass Wind node. Below, you can see the sculpts, low-poly models, and textures for the foliage.
Foliage Material Setup
The foliage material is straightforward and includes the following components:
- Base Color
- Emissive Map
- Normal Map
- Packed Maps (ORM)
- Simple Grass Wind Node in Unreal Engine
Below is an image of the material editor in Unreal Engine showing the setup of these nodes.
Foliage Placement
I utilized Unreal’s Foliage mode to place the plants across the scene, adjusting the settings for each to ensure variable sizes and enhance randomization.
For covering large areas quickly, I used the paint feature, while the single placement option allowed for more precise adjustments where needed.
Walls Trimsheet
For the walls, I chose to model them as a single piece due to their irregular shape.
I then UV unwrapped the mesh and applied a trimsheet texture that I created using Photoshop for the main patterns and Substance Designer to generate the necessary maps.
The wall material is simple but offers flexibility, enabling me to offset the trimsheet horizontally and adjust both the color and intensity of the paint, providing a customizable look for the scene, as seen below.
Decals
I created a lichen decal in Substance Designer using a straightforward setup of nodes. This decal was intended to add extra detail and break up the surfaces of the models.
Below you can see the lichen decal node setup in Substance Designer.
Tip: Using decals is a great way to add more details and break up repetition in your scene!
Lighting
To achieve an atmospheric mood, I used Lumen and volumetric fog. The central statues served as the primary focal point of the scene, so I carefully positioned lights to draw attention to them.
Additionally, I added supporting lights to areas like the bridge, enhancing the composition and guiding the viewer’s eye through the environment.
Lights on!
Tip: Set aside at least one week for lighting and cinematic renders—they take more time than you’d expect!
Final Pass – Applying Feedback
The project was due at the end of Week 4, and I managed to finish it on time and submitted it for feedback. Giacomo provided valuable insights for me to work on, and I gave myself an extra week to refine the project based on his final notes.
By the end of Week 4, there was still a lot of work left to do on the material layer system. The wall also needed a pass to integrate better with the rest of the scene, as it felt too clean compared to the surrounding elements.
By the end of Week 5, the material layer system was fully implemented, affecting the statues, rocks, wood, and stone objects behind the statues. The wall material now had more texture breakup, and I also did a lighting pass that helped emphasize the focal point more effectively.
Below you can see the comparison shots of before and after applying feedback.
Tip: Always ask for feedback and dedicate time to implement it. Even just one extra week can make a significant difference in the final outcome!
Conclusion
This project taught me a great deal about both technical and artistic aspects. It helped me reaffirm how fun it is to take on new challenges and continue growing as an artist, as well as the importance of receiving feedback from other artists to improve.
Every step of the process, every tweak, and every lesson has been an opportunity to move forward and push myself further.
Many thanks to the Games Artists team for giving me the chance to share this article with you. Thank you for reading this far, and best of luck with your next project!
Many thanks to the Games Artist Team for giving me the chance to share this article with you.
Thank you for reading this far, and best of luck with your next project!