Riverfall: How to Build a Fantasy Environment?

Environmental artist Tobias Koepp, who had a pleasure of working on an amazing game Horizon Zero Dawn (as an intern in Guerrilla Games), wrote a detailed article about the production of a cool personal UE4-project Riverfall.

As an intern at Guerrilla Games, Environment Artist Tobias Koepp had the opportunity of working on an amazing game Horizon Zero Dawn. He wrote a detailed article about the production of a cool personal UE4-project Riverfall.

Introduction

My name is Tobias Koepp and I am a recent graduate student from the NHTV University of Applied Sciences Breda in the Netherlands. There I studied International Game Art and Architecture for 4 years and specialized in 3D Environment Art and World Building. I’ve always been interested in working in the games industry and had an interest in art and for me personally following an education was a good choice to start my game career. My first real industry experience was a 5 month internship at Guerrilla Games in Amsterdam where I worked as an Environment Art Intern on their new title “Horizon Zero Dawn”. I used some of the lessons I learned there for this project which also was my graduation thesis.

Reference Materials and Inspiration

I’ve always been inspired by very stylized games like World of Warcraft or League of Legends and I find it very inspiring to apply a similar approach to my models and textures. For this project I was very inspired by the Gilneas Region, which can be found in WoW. I really like the gritty mood of the environment and the architecture of the city and tried to recreate a similar mood for my environment.

Tobias Koepp, Riverfall, Horizon Zero Dawn, Guerrilla Games, UE4, Unreal Engine 4, gamedev, level design, environment design, World of Warcraft, League of Legends, UDK, tutorial, Maya, PBR, zBrush, gamedev tutorial,

Generally I gathered a lot of reference images and created a lot of moodboards of artworks and styles I like that helped me to create my own models and textures. Of course I didn’t just want to copy what I see so I took elements of pieces I liked and mixed them up with my own style to make it a lot more personal.

Blocking out the Scene

While I created the final environment inside Unreal Engine 4, I started blocking it out with UDK. I started in 2014 and UE4 wasn’t freely available yet and I didn’t see the need to build a stylized scene in a next generation engine yet. I was quite familiar with the UDK as I created another world building project with a team of classmates and was very confident in blocking out a scene for myself.

Tobias Koepp, Riverfall, Horizon Zero Dawn, Guerrilla Games, UE4, Unreal Engine 4, gamedev, level design, environment design, World of Warcraft, League of Legends, UDK, tutorial, Maya, PBR, zBrush, gamedev tutorial,

I knew pretty early that I wanted to create a larger environment that features different areas the potential player can visit. This early blockout already features the main parts of the scene like the bridge with the waterfall, a village and the mountain landscape. While this is quite out of scale, it gave me a very good idea about the level design I was going for and the path the player has to go to, to get to the other side of the bridge.

Tobias Koepp, Riverfall, Horizon Zero Dawn, Guerrilla Games, UE4, Unreal Engine 4, gamedev, level design, environment design, World of Warcraft, League of Legends, UDK, tutorial, Maya, PBR, zBrush, gamedev tutorial,

With that in mind, I adjusted the scale and created an actual path to test the dimensions of the scene. All this happened within a few days and I used very simple models I quickly created in Maya or with UDK library assets. Blocking out your environment very early on is very important and should be done before you do anything else. Even if you don’t have any models available you can just use boxes to get a good sense for scale and composition. I can almost promise you that your first blockout will not be your last and massive changes are very likely to happen.

Once I was satisfied with the level design I started to create final and close-to-final models that will fill up the environment and started with the world building. What’s important here is that you start with the bigger picture and don’t set dress every area with fine detail. Once your biggest structures and landmarks are in place you should begin to deal with adding smaller components. I ended the first half of the project with a benchmark blockout of a scene that I wanted to finish and polish but also with enough options to add or cut things in case I had time left or in case I run out of it.

Tobias Koepp, Riverfall, Horizon Zero Dawn, Guerrilla Games, UE4, Unreal Engine 4, gamedev, level design, environment design, World of Warcraft, League of Legends, UDK, tutorial, Maya, PBR, zBrush, gamedev tutorial,

Building the Assets

Because the scene is quite large, especially for one person to work on, I really had to utilize a clever use of modular assets. If things become too similar then the player gets bored by the environment and that breaks the immersion and the story I am trying to create. On the other hand, creating a lot of individual pieces takes a lot of time and in a project with a set deadline you have to split your time very efficiently to make it to the end with a consistently great looking and finished environment. With all the restrictions I had, I came up with a modular building system that uses very large pieces to create most of the architectural structures in the scene.

Tobias Koepp, Riverfall, Horizon Zero Dawn, Guerrilla Games, UE4, Unreal Engine 4, gamedev, level design, environment design, World of Warcraft, League of Legends, UDK, tutorial, Maya, PBR, zBrush, gamedev tutorial,

As you can see, the pieces are quite large but still offer enough options to stack them together in different ways to make them appear like individual buildings. For further variation I used smaller assets like windows and chimneys to give each building a unique feel. Keeping the building blocks quite large is a very efficient solution to create a couple of villages very quickly.

Tobias Koepp, Riverfall, Horizon Zero Dawn, Guerrilla Games, UE4, Unreal Engine 4, gamedev, level design, environment design, World of Warcraft, League of Legends, UDK, tutorial, Maya, PBR, zBrush, gamedev tutorial,

Keeping the Stylised Vision Intact

My approach to texturing this scene was to use hand painted textures. I have never used Unreal Engine 4 for this approach but I wanted to learn the new engine because it is a lot more future proof than the old UDK. Most of the material information is already in my diffuse map so I mainly avoided using the PBR method for setting up my materials. However, for metal and other reflective surfaces I added some metal and roughness maps to give them a subtle shine that don’t distract too much from the rest of the scene but makes some of the materials pop out a little more.

For my unique assets I usually use Maya to model. The modeling itself doesn’t take too much time as for this project I am working with a low polygon count, because I am adding most details during the texturing process. The texturing itself takes a lot longer and with that in mind I am always looking for pieces that can be duplicated and reused so I don’t have to texture each piece individually.

Tobias Koepp, Riverfall, Horizon Zero Dawn, Guerrilla Games, UE4, Unreal Engine 4, gamedev, level design, environment design, World of Warcraft, League of Legends, UDK, tutorial, Maya, PBR, zBrush, gamedev tutorial,

When I am happy with the model I UV it before I start with the sculpting pass in zBrush. I extract a lot of texture maps from within zBrush that require a UV’d model. If the asset is simple I use Maya to quickly create and pack my UVs. In case of more organic and complicated models I usually use 3D Coat because it is very fast and gives me immediate feedback about my UV layout and any distortions that I have to fix.

Tobias Koepp, Riverfall, Horizon Zero Dawn, Guerrilla Games, UE4, Unreal Engine 4, gamedev, level design, environment design, World of Warcraft, League of Legends, UDK, tutorial, Maya, PBR, zBrush, gamedev tutorial,

To be able to sculpt with even detail across the map I divide the model to have a very even topology. This way I make sure that all areas have the best resolution in zBrush. Only after all these steps I can begin with the texturing. In zBrush I sculpt all the bump information that I will use later for my normal and color maps. For a stylized look I use big strokes, cracks and dents to achieve a very clunky and stylized look.

Tobias Koepp, Riverfall, Horizon Zero Dawn, Guerrilla Games, UE4, Unreal Engine 4, gamedev, level design, environment design, World of Warcraft, League of Legends, UDK, tutorial, Maya, PBR, zBrush, gamedev tutorial,

When I am happy with the result I extract some materials with the “Matcap Baker” plugin for zBrush. These maps I use later for compositing the color map. The most common maps I bake out are Red, White, White Cavity and Sketch. All these feature different lighting conditions and render the details differently which I can take to my advantage when compositing the maps later.

Tobias Koepp, Riverfall, Horizon Zero Dawn, Guerrilla Games, UE4, Unreal Engine 4, gamedev, level design, environment design, World of Warcraft, League of Legends, UDK, tutorial, Maya, PBR, zBrush, gamedev tutorial,

Having these maps baked out makes it very easy to paint the model, as I already know where the cracks and etcetera are so I can just paint over them. For painting I use Photoshop and 3D Coat. I usually start by layering all the maps on top of each other and block out the colors in Photoshop and then start painting in 3D Coat, as well as baking ambient occlusion and lights if needed.

Tobias Koepp, Riverfall, Horizon Zero Dawn, Guerrilla Games, UE4, Unreal Engine 4, gamedev, level design, environment design, World of Warcraft, League of Legends, UDK, tutorial, Maya, PBR, zBrush, gamedev tutorial,

For my tileable textures I am using a similar approach. I start modeling and laying out the shapes in Maya, so I can make sure that the texture is going to tile in the end. I recommend doing this for more complicated shapes that you want to make tileable. For brick walls or wooden planks this step could also be done in zBrush directly. I don’t pay attention to the topology in this case because I am going to dynamesh the pieces in zBrush.

Tobias Koepp, Riverfall, Horizon Zero Dawn, Guerrilla Games, UE4, Unreal Engine 4, gamedev, level design, environment design, World of Warcraft, League of Legends, UDK, tutorial, Maya, PBR, zBrush, gamedev tutorial,

For a consistent look I apply the same sculpting techniques to the texture sculpts as I would do with other models. Although this is going to be a flat texture I am adding some height differences within the shapes that will be later be baked onto a height map. This adds some color differences later in the process.

Tobias Koepp, Riverfall, Horizon Zero Dawn, Guerrilla Games, UE4, Unreal Engine 4, gamedev, level design, environment design, World of Warcraft, League of Legends, UDK, tutorial, Maya, PBR, zBrush, gamedev tutorial,

I only focus on a single shape of the pattern for the sculpting process. More diversity can be added later with the color maps. I use the matcap baker again to bake out all the important maps I can later composite with a few additions. Since you are working on a 2D Texture, you get a normal map for free from zBrush by just applying the related matcap. I also extract a height map and a simple black and white mask for easier selection in your painting applications.

Tobias Koepp, Riverfall, Horizon Zero Dawn, Guerrilla Games, UE4, Unreal Engine 4, gamedev, level design, environment design, World of Warcraft, League of Legends, UDK, tutorial, Maya, PBR, zBrush, gamedev tutorial,

All maps composited over a flat color already give you a very good idea on how the final texture can look like and with the help of the height map, you can already get some nice color differences without having to do that manually. Once you are happy with your paint job you can start to lay out the pattern again. For this I use the template I made very early on in Maya and just put them in place again, add some more color differences and call it done.

Tobias Koepp, Riverfall, Horizon Zero Dawn, Guerrilla Games, UE4, Unreal Engine 4, gamedev, level design, environment design, World of Warcraft, League of Legends, UDK, tutorial, Maya, PBR, zBrush, gamedev tutorial,

Setting Up The Scene

For me it was very important to show off my skills as an environment artist on this project as well as delivering a good looking portfolio piece. Even though this scene is not a game I focused a lot on the player experience and provided ways to progress throughout the environment. One of the first things you will encounter is a huge bridge that leads to the other side of the island. The only way to get there is to climb the mountain. There aren’t many hints on what might be behind there but it encourages you to start exploring and to find out more about the environment.

Tobias Koepp, Riverfall, Horizon Zero Dawn, Guerrilla Games, UE4, Unreal Engine 4, gamedev, level design, environment design, World of Warcraft, League of Legends, UDK, tutorial, Maya, PBR, zBrush, gamedev tutorial,

While there are a lot of alternative routes, I am using a couple tricks to keep the player on the right path. Arch-like structures can be found where the player has to reach a higher level of the environment, and repeatedly doing this teaches the player following the right way.

 

To further help the player find their way through the environment I created a few landmarks that are bigger and much more unique than the other models you find in the scene that can also be used as orientation points. If you are lost, you can simply search the horizon for these structures. These hero objects also help to break the flat horizon of the environment. The world is an island and these buildings help to add some nice silhouettes to the otherwise very flat borders of the world.

Tobias Koepp, Riverfall, Horizon Zero Dawn, Guerrilla Games, UE4, Unreal Engine 4, gamedev, level design, environment design, World of Warcraft, League of Legends, UDK, tutorial, Maya, PBR, zBrush, gamedev tutorial,

Tobias Koepp, Riverfall, Horizon Zero Dawn, Guerrilla Games, UE4, Unreal Engine 4, gamedev, level design, environment design, World of Warcraft, League of Legends, UDK, tutorial, Maya, PBR, zBrush, gamedev tutorial,

Size Matters

As I always wanted the map to be playable and experienced as a complete piece, I didn’t want to split it up. Again, a lot of preparation went into the layout and design of the map. This way I ensured that there is a fixed path for the player and enough to discover to not lose the player’s attention and immersion. There are a few drawbacks though on having a map this large. The light baking takes a very long time to finish and without baking, the performance suffers a lot when you try to create the world in realtime, so I had to take a few breaks every now and then to run a new calculation. However, having the complete environment in one big scene helps a lot with keeping it consistent.

Time of Production

1 of 6

I split this project into two big parts – the block out and the polish pass. Both parts took about 4-5 months each to complete. During the block out I had a lot of freedom to create the world I wanted and could focus on the bigger picture of the environment. I also took time to create final models and put them into place by considering level design, the atmosphere, lighting and composition. I took my time to prepare as much as possible for the polishing phase because if most problems were already solved then that would save me some time for the actual texturing and set dressing work.

During the polish phase I had to place all the assets again, because I have switched to Unreal Engine 4 to finish this project. This however only took me a few weeks because of the work I had done before already. I had a good benchmark ready in the UDK and had everything in place again, without losing too much time. For the actual polish pass, I created all the textures and additional set dressing pieces, like vegetation and other unique pieces that weren’t adding anything to the block out during the beginning of the project.

Overall, the most difficult aspect of creating this environment was to keep the whole scene consistent. Because the world is so large, it wasn’t easy to have the same visual quality all over the scene which resulted in cutting a lot of individual pieces and more relying on my modular assets and set dressing skills. Overall I think I have done a good job by keeping it consistent because the world feels complete and there is no way of telling that there are features missing.

It’s been a great learning experience to work on a bigger project as a single person and exploring your strengths, weaknesses and problem solving skills. I think I have improved a lot on my world building and texturing skills which I was aiming for over the course of the production of this environment. When I completed this, I was still a student and had time to invest into a larger scene and really wanted to push myself with this environment, because once I am in the industry I can’t do any personal work of this scale anymore, but I am looking forward to do this on an actual game.

Join discussion

Comments 3

  • Julian

    Great work Tobias very helpful to me as an aspiring game developer.

    0

    Julian

    ·6 years ago·
  • Dustrega

    Fantastic and inspiring! Excellent explanations of your work too!

    0

    Dustrega

    ·7 years ago·
  • Matthew Centonze

    Hey nice assets you made here, really digging it. Reminds me of World of Warcraft a little bit! Really cool!

    0

    Matthew Centonze

    ·7 years ago·

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