logo80lv
Articlesclick_arrow
Research
Talentsclick_arrow
Events
Workshops
Aboutclick_arrow
profile_loginLogIn

Nexus: Creating a Stylized World in Unreal Engine

Environment Artist Eric Tahiri shared a comprehensive write-up on creating the stylized world of Nexus, explaining how the waterfall was made, how the level's objects were blended together, and what techniques were used to guide the player.

Introduction

G’day! My name is Eric Tahiri, I am an Australian Environment Artist/Level Designer previously working at Upsurge Studios. My love for video game art started while frequently replaying a 20-minute demo of Zelda: Wind Waker on the GameCube and being amazed by how it looked! Later, I went to study game art and animation at college and found my love for creating environments and interactive levels in Unreal Engine!

Since then. I have been a part of various projects, both personal and professional, and most recently worked on creating the level "Bunker" in Pavlov VR. For the last year and a bit, I have been working with Jonathan Verbeek, who approached me to help create NEXUS: A World Beyond, a puzzle game focusing on electricity, lasers, and robots to solve challenges! While Jonathan handled the coding side of things, I created many stylized assets, as well as made the level that would act as a demo map to launch alongside our near-future planned Kickstarter release!

I’m here to share a few workflows and techniques that helped me create this level in UE4, including how I made the stylized waterfalls with various materials and particles, using virtual texturing and other methods to dynamically blend geometry for a natural look, and using color and shape language to help guide the player through the level!

Creating a Stylized Waterfall

One of the main vistas in this level is a giant waterfall crashing off the side of the floating island, as well as a few other waterfalls around the island. To start off, I looked at various waterfalls other artists had created, as well as some from games like Wind Waker and Rime!

I also broke down the components of what makes up a waterfall and split it up into four main parts; the material for the waterfall base, some light splash particles, water ripples, and faster water splashes. The waterfall itself is not the most complex system to exist, it’s actually quite simple, but it’s the conjoining of these simple elements that give it a style that’s appealing!

The material for the waterfall is actually very straightforward – besides the color, which is just two uniform colors blended with a camera distance, all the magic mostly happens through panning textures! For example, one of the more obvious elements is the streaks of whitish blue that run down the vertical section! For this, I use a mask of some banding lines that are simply panned down at a constant speed! To control this speed, the UVs of the waterfall plane can be stretched larger or smaller to speed up or slow down the rate in different areas!

I didn’t want to have too much noise either, so this panning texture actually gets crunched to either black or white rather than the greyscale input, this gave it a more cartoonish look! There is also some alpha that gets faded into at the bottom of the falls – this helps because they are floating islands, and you don’t want to see a harsh cutoff where they end!

The particles that appear on the curve of the falls are very simple. They are derived from the base "fountain" Niagara particle, with the initial location widened by a box location in the particle spawn! I also increase the gravity force and make sure that the sprites are shrinking in scale to nothing before they despawn. Like the banding lines in the falls material, I use a cutoff on the circles so there is no gradient falloff – just harsh lines, this is for that toon effect!

The ripples that appear in the water mostly rely on the use of panning textures! The key that makes this one work is to have the UVs normalized in the 0-1 range, and that they tile on the U axis! In this case, I use it on a looped mesh, which I use frequently in areas where the water would be moving fast and colliding with something! I scale these meshes wherever I need and they sit slightly above water so there’s no Z fighting!

As for the material, I use the same banding lines mask that the water material uses, but this time they drive the UVs of another texture that’s just a half-toned black and white image! This with the help of a linear mask, makes the banding lines have no falloff like the tooned look I’m going for. It also disintegrates them to nothing before they hit the edge of the mesh, so there’s no harsh cutoff and it gives a natural fade-off rather than just using opacity!

The splashes that I use in conjunction with the ripples are actually very similar in setup. It’s almost using the same node graph for the opacity mask, but instead of banding lines, I use a Voronoi mask to get sharper edges – it almost looks like fire and probably could be used in such a way! The main difference is that the mesh is now a sphere or in some instances a cylindrical shape!

The other big difference is I mix some panning Perlin Noise into the World Position Offset of the material. The vertices are being pushed based on the vertex normal, which implodes and contracts the vertices from their position, rather than just having them globally move in one axis! This gives the splashes a wilder look, and blending these meshes alongside rocks or objects in the water really gives the impression of a fast current!

Using Virtual Texturing and Other Methods to Blend Objects into the Level

Throughout the level were many cliffs, rocks, and foliage types that needed to be visually tied together to create a more natural look. Using Unreal's Virtual Texturing, vertex color blending, landscape painting, dynamic masking of objects up-vector, and world space noise masks, I was able to create an environment that felt like things blended in smoothly with each other.

By using virtual texturing, I was able to blend significant objects or natural-looking assets with the ground. For the most part of the scene, I use this on the cliffs, rocks, trees, and hills so they feel more grounded and the seams are less obvious! 

To start with, I create two runtime virtual texture volumes that encompass the Unreal landscape, one recording the height and the other the material. These then get fed into a master material that blends them with the original material using a ‘blend material attributes’ node where the height VT acts as an alpha. I have a few parameters to control the falloff and blend amount, and also the option to disable VT altogether. Note that I also have a node in my landscape material called ‘runtime virtual texture output’ where I plug in material values that will drive the mesh master materials.

One other useful application of virtual texturing is to merge large scaled versions of the cliff into the landscapes. When I place the flat sides of the cliff with VT enabled on them they get whatever was painted on the landscape showing up on the top. This lets me hide the landscape mesh with a visibility mask so the borders aren't obviously using UE's landscape system, and gives a much more organic look. I also needed to hide parts considering these are floating islands with gaps between them!

The reason I try to keep as much landscape mesh as possible visible is so I can use the landscape painting tools in Unreal Engine! It’s very easy to set up one of these materials, the colors are mostly uniform shades that I lerp together using a world-aligned texture mask of some Perlin Noise as the alpha!

These colors are predetermined in a material parameter collection, which controls the base of the grass meshes so they blend together nicely. I use a height blend input of some cloud noise to get a blend between painting dirt and grass that gives a more stylistic transition and doesn’t use the default weight blend method, which usually makes noticeable jaggy lines between colors.

The last and the handiest way I blend colors in my scene is by using a system in my master material that automatically colors any upwards-facing vertices on a mesh! Think of it like as if there is snow accumulating on the top of a mesh, but instead of snow I use the same grass colors as the landscape! This is handy considering how many cliff faces there are around this island scene, and I also use it for anything that needs to feel overgrown such as ruins or rocks!

The setup for this material is actually very simple since there's a node in Unreal that basically does it all for you – World Aligned Blend! As you can see in the node graph below, I add some parameters and overwrite the blend bias from what seemed to be -50 to 51, into a 0-1 range by lerping them and giving me more convenient control! This system made it easier to create more unique and visually interesting instances of the meshes the material was being applied to!

Guiding the Player with Color and Shape Language

Since this is a level with the intention of being played, and considering the size of the scene, I had to use many visual cues to help guide the player to where we wanted them to look next! Although the map is moderately linear, there’s still a vast area that the player can explore, so we had to come up with ways to focus their attention.

One of the key components I use to direct the player to the next location is through shape language. There are larger visual points of interest that work to attract the player throughout the level, such as the big red factory, or the windmills, and although these work great, there are passages and pathing that can sometimes make areas feel too open and confusing.

To counter this I use a particular method of utilizing archways to funnel a player through to a new zone! As long as it's in a place that the player can quickly scan over and memorize, then it creates a reassurance that they know how to progress and even if they loiter around an area they know where to head next.

Since there can be a lot of visual noise at any point depending on how far away a player is or the angle they are viewing from, I use an awesome technique I learned from ABZU, which is to create a plane wall that has a slight opacity and emissive that occludes the interior of most of the arches. The closer the player approaches this plane, the lower the opacity goes until it eventually is gone. This is useful to hide the noise behind the archway and make it more noticeable, I also use it to help frame certain areas for compositional reasons when they become too noisy with background elements.

Sometimes, there were instances where it was too obvious I was trying to direct a player in a certain way, so I had to use elements that were already present in the environment but in a new way. One of the more obvious ways I achieved this was to use bright vivid colors that stood out amongst the browns and greens as a way to grab the players' attention. A common case I use is these reddish-pink ferns, which can be found throughout the level in tactical locations!

In the image below, I have a clearer, more direct path on the left that is assisted by distant sunlight and is less obscured by trees and props, although I wish for the player to also explore the more shadowed path to the right. Using the same bright ferns, I’m able to grab the players' attention and create some interest in the right path!

Since they are surrounded by other foliage it doesn’t stick out as odd that they would be there, whereas using shapes to guide the player here might feel too forced (that being said, the opposite of that statement is true, so it’s important to have a balance of both elements in a way that doesn’t feel forced- unless you want that, then, by all means, have a giant neon arrow pointing your way ahead!). The inspiration for this came from Sea of Thieves where they use red ferns in a similar way!

Another way to keep a level interesting and to help a player not get lost is to have landmarks that can be used in a way to understand your current location. One very obvious indicator I use on this level is a large windmill that sits at the tallest point in the center of the island. Besides one moment where you are in a cave underneath it, the windmill can be seen from all angles and locations on the map. By looking at it, you can identify where you are and more or less how far you’ve progressed in the level!

A similar example to the windmill is a bridge that the player passes early on within the map. There are 3 moments you can see this bridge, and all are viewed from different angles, either from either side or by actually walking on it. Looping and crisscrossing through the level like this is a nice way to make a player understand the environment they are within since they are viewing similar landmarks but in a new light each time.

Conclusion

I hope this article gives valuable insight into how I went about various elements through creating this environment. There are obviously many more aspects to creating a level of this scale, but hopefully, the points I covered provide some stepping stones through the creation process!

For anyone getting into environment art, my best advice would be to take your time and start small! It can get daunting with so many things to consider (foliage, props, skybox, particles, water, etc.) so remember to plan ahead, create asset lists, scribble down some concepts and get more reference than you’ll need! With every environment made I’ve learned five times more than I did before I started, so keep practicing and always seek feedback! Good luck!

If you want to continue to see updates on the game, feel free to follow us on our journey on Twitter or the website. If you have questions or suggestions, feel free to join our Discord server too.

Eric Tahiri, 3D Environment Artist

This content is brought to you by 80 Level in collaboration with Unreal Engine. We strive to highlight the best stories in the gamedev and art industries. You can read more Unreal Engine interviews with developers here.

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