A Detailed Game Environment Built in Unreal Engine 5.3

A Detailed Game Environment Built in Unreal Engine 5.3

Discover Raghav Verma's journey of creating the enchanting "Swamp Haven" environment during his time at Think Tank Training Centre.

Raghav is a 20-year-old Environment Artist from India with a passion for creating fantasy worlds for games. While he doesn't have a compelling backstory, his motivation is simple yet powerful: he loves to see people's reactions to breathtaking scenes. Read on to learn about how he assembled his epic environment whilst studying at Think Tank Training Centre called, "Swamp Haven".


Today we will be taking a look at how I created my mentorship project named “Swamp Haven”. I will be going over the process I followed, the challenges I faced and the techniques I used to achieve the final game environment as shown below.

Before I explain things, I made every single asset in this scene and that includes the foliage. No Megascans assets were used.

The Process

Brief: The entire process will proceed as follows: Modeling in Maya, detailing in ZBrush, baking in Substance 3D Painter, creating procedural textures in Substance 3D Designer, generating trees in SpeedTree, assembling shaders and assets in Unreal Engine, and final composition in Adobe Premiere Pro.

Pre-Production Stage

Planning

First step is to find a concept and research all the references regarding it.

Research is crucial to anticipate the technical and artistic needs of the project. I like fantasy worlds hence I went with the following concept.

The concept for this project was taken from the following artstation post: https://www.artstation.com/artwork/OGalW6 (No Name). Sadly there is no mention of the artist who made this beautiful concept anywhere on the internet.

Having finalised my concept and my goals of the concept, I decided to research and gather references about it. This stage includes brainstorming designs and finding architectural references which resemble the concept. This is how the PureRef file looked like after a proper research.

This purref also includes some lookdev shots from later stage. 

Production Stage

Blockout

Now that the ideas are set, I start blocking out the scene in Maya with a fixed camera that closely resembles the camera in the concept.

I use Maya’s generic human assets to get a size reference for the assets as shown below.

After doing everything in Maya, it is exported to Unreal to get our first look at how the scene would look in the engine.

Creating the Assets

Now it’s time to start working on the assets in the scene. Since the scene contains numerous individual assets that need to be distinguished from each other, such as the planks and support poles, I planned to texture the assets within the engine itself using a custom shader. All the assets in the project, except the hero props, are textured in the engine using baked information. Here’s how it was done:

  1. First, I modeled the base mesh in Maya.
  2. Then, I sculpted the high poly details in ZBrush.
  3. I created the low poly by decimating in ZBrush or by manually using quad draw in Maya.
  4. I used Substance 3D Painter to bake all the information onto the low poly meshes.
  5. The red, blue, and green colours in the bake represent different masks for moss, dirt, and miscellaneous gradient noises. These are later utilised in the engine when texturing them as different masks for respective textures.
  6. The baked information was then used by my Multi-Purpose Master Material to apply the textures and all the details onto the meshes themselves, which I will explain below.

These masks are utilised by my Multi-Purpose Master Material in Unreal Engine to enable on-the-fly adjustments. This shader allows for instanced meshes with variations, ensuring that every plank looks different from the others.

Here’s a video which shows how I can use the material/shader above to change the moss/dirt buildup on my assets:

Here’s what the gym (library of the assets used in the project) looks like:

Mushrooms

These mushrooms utilise detail textures, adding details that are sized accurately according to the texel density of the object. Here’s a visual example of a mushroom using a 2k texture compared to another mushroom with the same texture but with a detail texture on top of it.

Trees

The trees for this project were also made completely inside SpeedTree. Once a procedural tree was set up according to my liking, I was able to create variation in the shape and sizes.

Shingles

The shingles in my scene uses the aforementioned masks along with engine-generated data, such as distance-based approximate AO (based on distance fields and distance to nearest surface), to create accurate and realistic buildup. Here's another example demonstrating how this works for the shingles in my scene:

Here’s a video showcasing how it is working in real-time in the engine:

Random Variations in the instances

On top of all of this, I also utilise world position based random tint on each asset which adds another layer of distinction to these meshes. This can be seen in the video below:

Water Shader

Water in this project was an important aspect for the swamp. For the player to notice little details I added some useful features to my water shader that I made from scratch that helps an artist in art direction and the player to feel immersed.

Here’s how the water shader looks like:

  • The water shader features primary details like those subtle waves which are warping the water texture along with them.
  • Secondary details include the sine ripples which work in conjunction with the larger waves and are made using distance based approximate AO in order to have subtle ripples around any submerged mesh.
  • On top of this, I have some tertiary details like that natural fungi build up on the water itself near those objects too which work in the same manner.

All these details can be changed on the fly using the parameters that I made for this shader. Here’s a video to showcase how these parameters offer flexibility:

The Dome Tents

The dome tents depicted below presented another challenging aspect of the environment. I had to devise a design that resembled the concept while also being physically feasible and suitable as a flexible game asset. To achieve this, I developed a modular design that enables the construction of the tent in the game engine with various permutations.

These modular cloth parts were simulated in Marvelous Designer and then converted to low-poly in Maya.

These modular parts are further customisable to one's liking. In order to make them customisable, I utilised my hero prop master material which has a lot of customisable parameters like shown below:

Experiments

A fun experiment that I came up with was this dirt/mud blob shader:

  • Since I was on a schedule I could not add detailed mud/dirt as a geometry. So, a simple alternative was this shader which displaced the geometry using distance fields. This gives a quick and cheap method to add tertiary details to my scene.
  • It works by offsetting the vertices in X,Y, and Z directions based on how close the blob is to some other geometry (Mesh Distance fields).

Foliage Creation

Foliage was a fascinating aspect of this project, and I thoroughly enjoyed every moment of it.

Here's how I created my foliage from scratch:

  1. Gathering References: The first step was to gather the references for my foliage which was a long process but it was made easy because of my fellow 3d Artist friend Christian Grote, who is a Botanist. With his help I was able to identify most of the plant genuses in the scene and their closest real world references.

2. After doing the research for the types of foliage required in the scene, I start by laying out the base mesh in Maya on square mesh which has a layout of a 2k texture as shown below.

3. Then this base mesh is taken into Zbrush to add all the details as shown below.

4. Now that the high-poly mesh is done for the atlas, we bake and texture this high-poly on a flat square mesh with a 2k resolution in Substance 3D Painter as shown below.

5. This atlas plane is subsequently imported back into Maya for creating foliage cutouts and assembling the foliage types based on the researched references. 🌿🌱

6. This is how the cutouts turned out in Unreal after applying my foliage shader. Colours can be changed in the shader set-up for further art direction.

Substance Designer Tileable Textures

Tileable Textures as everyone knows are a key thing in game art.

I was fortunate enough to have been taught the fundamentals by Johnny Malcom about Substance 3D Designer. His teachings allowed me to design my own textures myself. Here’s a showcase of some of the cool Textures that I made in Substance 3D Designer:

I don’t have a comprehensive breakdown of these tileable textures, but I can share an overview of my substance graphs to showcase how the following textures were made:

Creating textures and shaders are my favorite part of game art and I absolutely enjoy this process. I encourage students and newcomers to implement procedural methods in their workflows in order to stay relevant in this changing industry.

High-poly ZBrush Sculpts

One of the coolest things I learnt from my Mentor - Declan Hart (Principal Environment Artist at Digital Extremes), is creating nicely detailed organic high poly assets. Zbrush is a great tool for sculpting and I utilised it for creating the following high-poly sculpts.


Thank you for reading, and a now a little bit about me!

As a passionate environment artist specialising in games and virtual-production films, I am currently immersed in an exciting project for an unannounced title with Netflix and Hulu. While fully engaged in this endeavour, I remain open to intriguing opportunities and collaborations. Feel free to reach out to me on LinkedIn if you're interested in having me join your team. Additionally, my other work and social profiles via my Rookies portfolio here.

Thank you for taking the time to read through the entire process; I hope you gained some valuable insights today.