logo80lv
Articlesclick_arrow
Research
Talentsclick_arrow
Events
Workshops
Aboutclick_arrow
profile_loginLogIn

Designing Tranquil Forest Environment Inspired By The Last Of Us

Carlos Barrera discussed the creation of a forest environment in Unreal Engine 5, built using a procedural foliage system and inspired by the atmospheric worlds of The Last of Us and The Witcher 3.

Introduction

Hello everyone! My name is Carlos Barrera, and I'm a 3D Environment Artist from Spain. I'm very excited to share this project on 80 Level, as it has been one of the personal works in which I've learned and grown the most as an artist.

Since I was a child, I've felt a strong connection with video games, but over time, I realized that what attracted me the most wasn't just playing them but understanding how those worlds were built. I remember paying attention to the landscapes, the ground vegetation, the tree trunks, how the lighting changed in indoor and outdoor areas, how those giant cliffs were formed, or how a scene could convey so much without the need for characters or dialogue.

I started my studies at the vocational training center Cesur, where I learned about video game development in general, and later I specialized in environments and props by doing a master's degree at Voxel School. During that period, I also had the opportunity to do an internship at Secret 6, which was a key experience for understanding workflows and production standards.

Even so, a very important part of my training has been self-taught. I spend hours researching, trying new things, seeing how other artists work, and applying it to my own projects. I'd also like to mention that I followed Michael Gerard's course, which was a great help in establishing some key foundations for the project.

This project you’ll see below is a good reflection of that whole process: trial and error, many hours, and above all, a strong desire to keep improving.

Getting Started

From the beginning, I wanted to approach an environment that would be both a technical and artistic challenge but, at the same time, achievable and personally motivating, and that would allow me to learn new things. I wanted this project to serve as a testing ground to improve my skills and solidify key knowledge. I had several goals set from the start:

  • Learn an efficient workflow for the creation and implementation of vegetation in Unreal Engine.
  • Develop procedural tools that would help me achieve faster and more controlled set dressing.
  • Deepen my understanding of creating realistic materials in Substance 3D Designer.
  • Improve my lighting and atmosphere skills within Unreal Engine 5.
  • In terms of inspiration, I looked closely at games like The Last of Us and The Witcher. Both have a very distinctive atmosphere, where lighting, color, and composition play a fundamental role in giving environments their personality. I wanted to capture some of that essence: a forest with a calm yet powerful atmosphere, breathing narrative even without any characters present.

Regarding reference work, I built a PureRef board with screenshots, real-life photographs, and examples from other artists. I relied heavily on the website Monumental Trees to study real tree species and shapes, and I also analyzed gameplay footage to understand how scenes are visually composed in open spaces.

Here you can see part of the references I used to guide myself throughout the project:

Blockout

Since Sunveil Forest is an open environment without architecture or specific narrative elements, the blockout was quite organic. From the beginning, I knew I was going to build the scene mainly procedurally, so I didn't need a very detailed layout. Still, I wanted to define the overall composition from the start to guide the development and make sure everything worked well from the camera’s point of view.

My first step was sculpting the landscape with the Landscape Blueprint Brushes in the Landmass plug-in, which allowed me to work with custom alphas to shape the terrain. I left a flatter central strip where I imagined the path would go, and on the sides, I added elevations that would later serve as a base for distributing foliage and rocks.

Once that initial blockout was defined, I started working in layers: first a base of ground foliage (grass, small plants, etc.), then medium-sized rocks, and finally, the trees. The idea was to build the scene from the bottom up so that each layer integrated properly. Since the project had a procedural focus, I used the PCG system to generate variations quickly and experiment without wasting time adjusting each element by hand. That said, in some key areas, I placed certain trees or rocks manually to enhance the silhouette or depth of the camera.

To close the composition, I added several mountains in the background created in Gaea, which helped give a greater sense of scale and framing without overloading the main scene. For this, I exported three textures: the normal map, a mask that sat over the mountain to allow for snow application, and the height map from which I extracted the mesh.

SpeedTree Workflow

For the ground foliage, I started by downloading base textures from Quixel Bridge, selecting only those that interested me for their variety and color. From there, I used SpeedTree to generate an atlas that unified all these textures into a single one, with the goal of optimizing engine performance by reducing the number of draw calls.

Once the atlas was assembled, I began creating each plant separately. I used a trunk tube in Spine mode as the main stem, and on top of that, I added a Frond to apply the planes with the atlas textures. This method allowed me full control over the silhouette of each plant, adjusting curvature, height, and spread very quickly.

For the trees (pines and poplars), I designed a modular system based on combining branches with and without leaves. I created four types of branches, two leafy and two bare, which I combined into a single atlas to make iteration and variation easier. The general process consisted of:

  • Creating the main trunk with a trunk node.
  • Generating branches using trunk tubes with geometry.
  • Adding Spines to control the distribution of sub-branches.
  • Applying Fronds with atlas planes for the branches.
  • Incorporating loose leaves (leaf nodes) to densify specific areas and lumps to add relief to the trunk. 

Throughout the process, I paid close attention to the creation of LODs with different geometries to ensure good performance without compromising visual quality at medium and long distances later in Unreal Engine.

Unreal Engine 5 Workflow

For the implementation within Unreal Engine, I divided the vegetation system into two main blocks: ground foliage and trees.

Ground Foliage

I used the Landscape Grass Types system to automate the appearance of foliage. I created four different types, each with various vegetation instances (such as flowers, grasses, rocks, or bushes). This system allows me to control parameters like density, scale, and randomness separately for each type.

I connected all of this to the landscape material using the LandscapeGrassOutput node. This way, when painting with a specific channel of the material (for example, the dirt material), small rocks are automatically generated on top of it, so I don’t have to place them manually.

Trees and Procedural System (PCG)

For tree distribution, I developed a tool based on Unreal Engine’s PCG Graph system. This tool allowed me to automate the placement of trees and their younger versions (samplings), significantly reducing the work time compared to the manual method. In the graph, I used nodes like Surface Sampler to position trees on the terrain, and I combined different types of noise and Density Filters to adjust frequency and distribution.

This gave me full control over where and how each element appeared. For example, in certain areas, I could make poplars more frequent than pines to reflect subtle ecosystem changes.

I also set up variations in scale and rotation to ensure that even when reusing the same model, each tree looked different. This helped avoid visual repetition and reinforced the feeling of a natural and organic environment. 

Landscape Shader in Unreal Engine

In Unreal Engine, I developed a landscape shader that allows me to combine multiple materials dynamically. For this, I used an RGBA mask, where each channel controls a different region of the terrain (rock, grass, mud, gravel, etc.). This way, I can apply up to four different materials simultaneously and automatically, which helps break visual repetition without the need to manually paint each area.

The shader also includes a function to enable or disable Parallax Occlusion Mapping (POM) in real-time. This adds visual depth to rougher or eroded materials, maintaining a good balance between realism and performance. Additionally, I implemented a slope detection system that automatically replaces the base texture with a rocky material in sloped areas, such as hillsides, thus enhancing the natural look of the terrain.

Rock Shader in Unreal Engine

For the moss-covered rocks, I followed the same workflow that I detail step by step in my project Modular Rock – Breakdown, published on ArtStation. There, I explain from scratch how I create modular rocks optimized for video games, including modeling, baking, UVs, and their implementation in Unreal Engine.

In that project, I go into detail about how I combine different types of surfaces (rocky, wet, and moss-covered) controlled through masks and instanced parameters in the shader. This allows me to easily adjust the visual appearance depending on light direction, environmental conditions, or biome type.

Below, I've included some videos showing in real-time how I adjust the values of the material instance for this type of rock:

Materials in Substance 3D Designer

Creating the landscape materials was one of the first steps and a key part of the project. I developed four main materials that shared a certain visual coherence among them, both in shape and color, so they could blend naturally in Unreal Engine. The structure of each material followed a fairly simple but effective logic:

  • First, I built a base with some relief, like soil or wet mud.
  • Then, I generated the secondary elements independently: grass, leaves, small stones, lily pads...
  • Next, I combined both using Shape Splatters to obtain the final height map.
  • Finally, I applied the rest of the maps: color, roughness, normal, and AO. 

Once I had the materials ready, I exported them and moved them to Quixel Mixer, where I created additional variations by combining the previous materials. This gave me a more versatile set of materials that I could later apply and blend directly within Unreal Engine.

For each final material, I exported four textures: Albedo, Normal, Displacement, and RDAO (Roughness, Displacement, and Ambient Occlusion), optimized for use in the terrain shader.

Composition

For the final composition of the scene, I followed a workflow that combined procedural creation with manual detailing, always aiming to guide the viewer's gaze through the central path:

  • I first defined the main shot and placed the path right in the "sweet spot" of the frame (rule of thirds). I adjusted the camera height and angle to enhance the sense of depth and give prominence to the trail as a narrative element.
  • I used the PCG I created to populate the sides of the path with trees, bushes, ground foliage, and rocks. With a single click, I could generate endless variations; this allowed me to quickly explore different vegetation densities and distributions.
  • In less populated areas, I manually placed rock formations and small storytelling details. This helped avoid monotony and added points of interest. I added slight variations in scale and rotation to the vegetation to break repetition and reinforce naturalness.
  • From time to time, I pulled the camera back or switched to a tighter focal length to ensure that the details worked both in wide shots and close-ups. 

Lighting

In this project, lighting was my main tool to transform a forest scene into an almost magical cinematic sunset moment, with a vibe somewhere between The Last of Us and The Witcher. For this, I used Lumen to achieve realistic lighting.

  • Main source: a warm Directional Light, oriented to simulate a low sun on the horizon. I adjusted its intensity and color temperature until I found that characteristic sunset look.
  • Targeted fill lights: I placed Point Lights strategically where the forest became too dark, especially around rocks. This helped better define shapes and silhouettes without losing the sense of dusk.
  • Atmospheric depth: Volumetric Fog was key to generating the well-known god rays. By enabling Height Fog and adjusting its density and scattering, I allowed light beams to pass through the branches while also adding realism and a sense of depth. 

For rendering, Lumen handled most of the light bounces, but I also enabled high-quality shadows and contact shadows on nearby objects to ensure sharp contrast. In post-processing, I adjusted everything within Unreal: I slightly lowered the overall saturation to tone down the overly warm palette and slightly increased contrast in the mid-tones and highlights, aiming for that distinct video game cinematography look.

In summary, it was a process of trial and error (although "error" here means discovering a better setup), eye breaks, and a lot of patience until I achieved the soft, dramatic, and immersive lighting I was looking for.

Conclusion

This project took me 19 weeks from start to finish. During that time, I faced several significant challenges: on the one hand, learning completely new techniques, on the other, generating realistic vegetation and searching for composition and lighting that conveyed just the atmosphere I wanted.

The most valuable lesson I take with me is that patience and perseverance are just as important as technical skill. We don't always find the solution on the first try: sometimes, you need to take a step back, rethink what isn't working, and keep exploring until you find the right combination.

My advice for those of you starting in the world of 3D is simple: enjoy the process and embrace the setbacks. Experiment without fear, ask for feedback from other artists and see each failure as a learning opportunity. With consistency, the moment will come when your work reflects all the growth you’ve experienced.

Carlos Barrera, 3D Environment & Prop Artist

Interview conducted by Emma Collins

Join discussion

Comments 0

    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