The Stranding Project: Combining Houdini and UE4 in Environment Art

Damien Lappa discussed the pipeline for The Stranding Project, an organic environment inspired by the legendary Kojima Productions's game.

Introduction

My name is Damien Lappa. I am originally from Tallinn, the capital city of Estonia, and currently working as an Environment Artist at Ubisoft Paris.

My journey into the gaming industry started with the degree of Game Design at the university of XAMK based in Finland, Kouvola. I always had a passion for both cinematography and games, and it was a matter of time before I fell in love with 3D environment art during my early studies.

Before joining Ubisoft I worked in outsource studios - Ringtail Studios and elite3d. So far I have contributed to multiple projects including Blood & Truth, Rage 2, Need for Speed Heat, and Tom Clancy’s Ghost Recon Breakpoint.

Discovering Houdini

For some time, SideFX Houdini was integrated as a game development tool for multiple aspects. One of the biggest game-changers was the release of Houdini Engine, which allows the engineers to build the bridge of the procedural processes inside of in-house tools or third-party software solutions including 3dx Max, Maya, UE4, and etc.

In some scenarios, if you have the conception changing constantly within a short amount of time, going procedural can become a great solution. There are multiple DCC packages that allow you to use some of its power like 3ds Max and Maya, but it may become inconsistent at some point, if you have a data overload eventually you may have to collapse it to keep the files safe.

The very first time I saw Houdini in action was a few years ago. It was used for limited aspects, but it was enough to spark curiosity on my side to go deeper into the procedural workflow. I started to learn Houdini with more passion during the production of Ghost Recon Breakpoint, where it was heavily involved in many subjects including world-building.

Learning Houdini became my personal challenge. As an artist, I see it as a tool that allows me to create environments in multiple creative ways that have a non-destructive workflow with its rules and interactions in both large and micro scales. Applying Houdini Engine to packages like Maya or Unreal Engine via Digital Assets (HDA) gives me a huge variety of different possibilities I can reuse and adapt to specific needs, and with the support of SideFX, most of the complex tools for gamedev are even more accessible than ever.

Nowadays Houdini has become my main software on a daily basis among the other tools. 

1 of 3

The Stranding Project: About the Project

It is no secret that the project is heavily inspired by Death Stranding. The team behind this game made an incredible work which I followed since its first announcement and it is a huge pleasure to study its world design.

The process of creation started from the simple screenshots of the game and during the process, I took some little inspiration elsewhere including real-life images and other projects like Doom Eternal, Ghost Recon Breakpoint, or Far Cry 5.

Eventually, the goal became not only to build the environment but also to create and adapt the system of rules by linking Houdini and Unreal Engine together.

Terrain Generation

For many, the creation of a terrain sometimes can be a complex process requiring multiple steps and tweaks, especially if you want to create something more original. With Houdini, it is possible to create a basic terrain from scratch by using just a few sets of nodes to generate any detailed surfaces.

One of the tricks I love using in the procedural generation is called Pareidolia, more known as the recognition of the familiar shapes in the clouds. If you are stuck and don’t know where to start from, generate a noise and your brain will more likely start to find some interesting shapes, which can be built into a composition.

The starting point of this process is creating a few Heighfield nodes and saving it as a digital asset (HDA) as soon as possible. Within a couple of minutes, you can create the basis of the landscape which you can always return to and add more rules. During this stage, I would also recommend integrating first masks as layers based on slopes and curvatures. The sooner you will set it up, the easier it will be to add more complex logic like trees, paths, or rivers, together with the adjustments to the mask that will be more under control.

Unreal Engine 4 allows integrating landscape masks with the layer attributes without any textures and uses its samples within the landscape material. At this early stage, it gives you an opportunity not only to make a rough block out to see the first step but also to reuse it and bring the terrain to the final result within a single file.

River System

After creating the base of the landscape, I had to build the first set of rules of the generation process: a river system.

If you are interested in a basic creation of the rivers, check the speech from Ben Schrijvers about the river generation in Horizon Zero Dawn. There are a lot of interesting tips that can be added to multiple scenarios!

The function itself is based on a curve exposed inside of the Digital Asset that adapts to the position automatically. For this project, I simplified the river by the basic clamped random width and added a stepping effect with the fused points by the grid. If you can achieve some effects in a simple way, don’t be afraid to do so! Sometimes it helps to conceptualize the idea quickly and reuse it to add more complex logic later on.

The data generated by the spline was used to modify the layers to make sure, for example, that the grass will never grow underwater. Based on that I also created a new layer of wetness, which I assigned inside of the shader to add some moisture to the river banks by adding a couple of constants to adjust the color brightness and the roughness of the material.

By making the intersections between the ground and the river, it allows not only to create new masks, exclusion rules, and scatter the assets which belong to the zone, but also affect the mesh itself by adding vertex color for displaying a foam and displacement inside of UE4 shader. In addition to all of that, with SideFX Labs (ex Gamedev Tool), setting Flow maps has never been easier.

Flow map, in simple words, is a texture with directional information based on 2 floats/channels that affect UV inside of the shader to bring a stream effect. Setting it up as a function can become extremely useful in terms of reusability within a single shader by affecting textures and outputs. Using lerp with, for example, vertex color as an interpretation for the blending can easily add the required complexity to the movement like water with an effect of foam.

If you are interested in making flow maps, there are plenty of good tutorials on how to achieve it with different software solutions, including painting it in a Substance Painter by hand. What makes Houdini so powerful is that whenever I make changes with the randomized scattered assets, the direction of the vectors is automatically applied.

Dressing the Landscape

Creating huge objects can sometimes become an incredibly tedious process, especially in open worlds. There are many ways to dress environment scenes. One of them is instantiating the pre-made assets and adapting the terrain to the final look to create incredible landscapes. Another way is to use procedural generation!

The creation of the cliffs is inspired by one of my favorite speeches about Far Cry 5 procedural world-building by Etienne Carrier. If you haven’t seen it yet, you should definitely watch it. This is one of the best examples of how powerful Houdini can be in gamedev!

To generate the slopes, I converted the mask from the texture into 3D objects and then extruded it keeping the back faces as a group to affect the final mesh to remove the backsides. In most cases, to create organic objects, I use voxel-based conversion (VDB) and then add, based on the UVs a displacement, projected by the Height map texture from, e.g., Quixel Megascans.

Another option I discovered recently is using a Triplanar projection developed by the SideFX Labs team, which brings a simplified tool to build an even more complex system and, if needed, it can always be polished later on.

The main disadvantage of creating cliffs with this method is the number of unique and large-sized objects. To export the generated assets to the engine it requires breaking the meshes into more pieces by a Clip node to prevent the streaming issues. However, as a result, you can make the terrain incredibly distinctive based on a single texture.

Making the assets like towers for the background was the trickiest part for me. Creating the futuristic sci-fi looking shapes can sometimes be a laborious process to find a suitable silhouette which fits the environment.

At first, my intention was to make the assets by hand, but through trial and error, I found an interesting solution. The process begins with generating an illusory city of similar shapes and then I picked the one that I liked the most among the other random pieces.

The process is mainly built using the combination of 2 nodes: Polyextrude, with an additional attribute based on the random vertex color per primitive, and Lot, developed by SideFX Labs. The rest of the city shapes that were not selected I have decided to place in a long distance to add additional silhouettes.

Fog and Clouds

One of the biggest Houdini's strengths is working with volumes. To build a cloud or a fog there is no need for any advanced skills. Just find a suitable shape and transform it into a cloud and then render the result as a texture.

For a start, it is enough to create a volume straight out of a base mesh and scatter points over its space. Since the fog consists of complex air flows, this combination of meshes is reshaped back into a volume, where I start to add sampled noises via VOPs to simulate its effect.

Another option is to work with simple nodes like Cloud and Cloud noise, but personally, I prefer stacking a few VOPS which allows me to add either Turbulent or Anti-Aliasing noises and mix with each other. Don't be afraid to play with that, creating clouds can be a really fun process!

The way I used fog in Unreal is basically positioning a plane with a simple unlit translucent shader and setting with an image that I rendered in Mantra inside of Houdini as a texture.

Going back to a flow map - here is a good example of how a basic math function can be reused to add a bit of more dynamics inside of the environment. For the Stranding Project scene, I have dimmed the clouds drastically, but I will definitely give more attention to this subject next time.

Scattering the Objects

At this moment when all the assets were prepared, I used a combination of Houdini’s scattering system of multiple instances inside of Unreal Engine 4 via HDA and the built-in grass system to bring micro props based on the masks within the landscape material.

At a certain point, when you start to use the data between two applications in one single Digital Asset, the time of computing changes can become enormous, especially if you will want to adjust the base a little bit in the end. The solution for me was separating the system into multiple digital assets with the usage of File Caches to store and update the results in each HDA.

Cached files provide an option to store a big amount of asset data and thus allows to build interaction between Unreal Engine 4 and Houdini. Instead of referencing the id’s of the assets, I decided to apply them directly in UE4 via Object Merge node. Working with the instances scattered inside can become a tricky process if you want to display them directly in Houdini. Exposing the file caching option can be a good possibility to bring the elements and add them either to the ground projection, or making them as an obstacle for the flow map and add an additional vertex color to the river.

When the medium and large-scaled assets were set up, I settled up to stick to a function inside of Unreal called Landscape Grass Type for setting the micro details like pebbles or moss clusters and assign them to the layer samples inside of the main landscape shader. The set up is extremely easy, and if you have the mask data, the only thing left is to assign the right assets.

A common mistake I notice sometimes is a huge overload of visual information. When you have almost infinite possibilities with displaying that many micro props, keep a focus on the noise. Real-life is full of small details, but in a game world sometimes you need to give a bit more exaggerated scale to avoid either the aliasing effect or the consumption of the pixels by Temporal Anti-Aliasing (TAA). It is also a good practice to keep a good eye flow to guide players without making everything over-detailed.

Scene Assembly

Since my goal was to focus mainly on the cooperation between Houdini and UE4, I mainly used Megascans assets to assemble the scene. The team behind building Megascans scans did an astounding job. Using accessible scanned assets allows you to focus more on experimenting.

Despite the generated meshes, most of the assets I used were from the Icelandic library directly in UE4. The bridge between Unreal and Megascans provides you not only with the exporting option but also applying basic functions, which allows previewing the results in a second and then replace with the shaders with your own tweaked parameters including for example pixel dithering offset.

In the end, I only used a few shaders. The most complex ones were made for the Landscape, and the River, where the most transitions between textures were compiled. The rest were either the basic PBR or Unlit Translucent.

Lighting and Post-Process

Building the lights and post-process can be quite challenging. The color grading can change the whole mood or make some hidden elements to tell more of the story. I try to set up the general light as soon as possible using Light Source and experiment with the overall mood by adjusting Exponential Fog. 

In some cases having only one source is not enough. For this scene I used slightly intense point lights with the warmth set to D50, in contrast to the global temperature of D65, adding more contrast between the shapes to guide within the composition.

 I prefer to touch the post-process as less as possible, tweaking only the temperature of the color with saturation and adding a bit more contrast if needed. One shader that is worth mentioning is called sharpening. I use it to bring back some details taken off by TAA. This is one of the cheapest anti-aliasing methods, but its constraint is losing some of the details by blurring small pixels.

Resources for Learning Houdini

The program is quite complex, but not as crazy as it might seem initially. With endless possibilities, you can get lost in many topics like VFX, modeling, data management, or composing. Personally, I would recommend starting with a straight focus on certain subjects. Originally, I started to use Houdini as a bridge to replace my tools in Autodesk Maya, until even more nodes started to come to my attention. There is still a long road to master the software for me, but I cannot imagine my workflow without it anymore.

There are countless different tutorials and lessons. Personally, I would recommend starting with watching the very basics on https://www.sidefx.com/learn/ and trying to experiment with nodes as soon as you get to them to build something new. If you get stuck, don't be afraid to search for the answers in Google. You will be surprised by how many solutions there are.

Some other resources I would heavily recommend for watching:

Damien Lappa,  Environment Artist at Ubisoft Paris

Interview conducted by Arti Sergeev

Keep reading

You may find this article interesting

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