Forza Horizon 4: Creating Seasons with Substance
The fourth installment in the Forza Horizon series is set in a huge open world beautifully representing the United Kingdom. For the first time in the iconic series, dynamic seasons have been introduced; this means more work but also more ways to express creativity for the environment art team. Read on to get an idea of how they tackled this new challenge thanks to the Substance toolset.
Hi there, my name is Don Arceta and I’m Lead Environment Artist for the Forza Horizon series at Playground Games.
I’ve been working as an environment artist since 2005, having worked on the original Mass Effect trilogy and Anthem. After working on science-fiction for so long I was looking for a change, and I wanted to challenge myself in new ways. I’ve always been intrigued by games that recreate contemporary, real-life locations, and that’s what brought me to Playground Games. I loved what Playground did with Australia in Forza Horizon 3, and I was very curious to know what location they planned to recreate next. Fortunately for me, there was an opportunity to join their talented team, so I did!
The Challenge: 4 Seasons
One of the big features of Forza Horizon 4 was that it would have changing seasons. Typically, a Forza Horizon game would have one static season, which was more or less summer. For Forza Horizon 4, the challenge was that we had to craft summer, autumn, spring, and winter all to the high quality that the Forza Horizon series is known for, within the same development time as the last game.
Since there was a potential of having to create four distinct seasonal variations of textures, we had to find efficiencies. We needed a way we could easily create variations of materials and share creation techniques. This meant that we had to depend a lot more on procedural creation, spending time developing custom nodes, graphs, and smart materials.
We used Substance quite extensively. We used Substance Designer to create almost all of our tileable textures. Substance Painter was used primarily for texturing assets. Almost every environment art asset in Forza Horizon 4 had some part of it run through Substance Designer or Substance Painter at one point. Roads, rocks, terrain, foliage, barriers and buildings all had some degree of Substance authoring.
For terrain materials, we would generally start with photogrammetry elements that we’ve captured in-house and scatter the elements to create our textures in Substance Designer. Every terrain material was authored to have a near and far version. This allowed us to keep high detail close to the camera, avoiding tiling and work in macro shapes in the distance. Substance Designer made authoring the distant textures much quicker as we were able to leverage a lot of work done for the near textures as a base. Every terrain material is comprised of diffuse, normal, ambient occlusion, roughness, height, blend, and hardness (wetness behavior) texture maps. We’d author the summer version first, and once we were happy with the material we’d then create the seasonal variants. Depending on the reference, sometimes the seasonal variant might be a tweak in color, which might mean a simple adjustment of a gradient ramp, or sometimes it might look completely different, which would mean very different distribution density of the photogrammetry elements. All winter variants of textures were created using in-house ‘Winteriser’ nodes. These Winteriser nodes allowed us to achieve a snowy look or a frosty look.
Assets went through a very similar process, creating the summer version of the texture first and then the winter version later. For assets, we had a Winteriser smart material in Substance Painter which was used to create their frosty or snowy winter variants.
Not everyone was familiar with Substance. We had a full range of skill levels on the team; some people had been using it for years while some had never used it before. For artists new to Substance Designer it was a lot of practical learning. They were able to open finished materials, look at the graphs and learn by poking around. Since our graphs were all authored using a similar order of operations it was easy to jump in and decipher different artists’ graphs.
We did use Substance in different ways than it’s traditionally meant for. We used Substance Designer to bake in shadows into our transmissive masks for the leaves of our foliage. This was to give the visual of leaves shadowing each other on the texture. This helped add quite a bit of depth to our foliage. Another time we used Substance differently was with the terrain. We’d use Substance Designer to add micro details to the terrain height field, using it to sculpt in roadside ruts and bumps.
Of course. Let me introduce you to a couple of our artists here at Playground Games. Nathan MacKenzie will provide a breakdown of our Wetlands Grass Material, and Phil Baxter will give a breakdown of our Lakes District Bank Material.
Wetlands Grass Material
In the north area of the map, this grass material was created with the mindset of the grass being very lush in summer and changing drastically every season. Since the material needed to look very different in each season, we had to make sure it was a simple and tidy graph that could be changed easily. This saved time when iterating to its final in-game texture for all seasons.
We start with an atlas texture of baked high poly grass to create a height map. This is then sampled to create a base layer of grass. The basic base color also comes from this part of the graph. We use an array of custom sampler nodes that we’ve created in-house. All of these have their own normal map, which then get built up together later in the graph.
We then start the blending of the array with the use of this blending approach, building up the normal maps separate from the height map. There is also the use of a custom node, made in-house, called the Self Shadow node, which adds different lighting elements to the material.
We finish up the graph adding any extras that might be needed such as curvature or warping. It then gets funneled into the stock Base Material node which allows us to be neat and tidy with the graph. This also helps us see what the material looks like as it is built up.
Building the graph this way made it easy to make seasonal variants. Two things had to change - one was the random seed number, and the other was the color gradient at the start of the graph.
Lakes District Bank Material
This material was primarily made for roadside banks. It needed to be non-directional, and be composed of mud, scree, dead vegetation, and moss. As with all of our materials in Horizon 4, it needed seasonal variants. In this case, variants with frost and light patchy snow.
Starting with a simple base of photogrammetry, I cut up a scan of some scree into usable chunks and feathered the edges so they could height blend together without seams. I ran these bitmaps through an in-house custom splatter node which allowed us to slice up the atlas and splatter them with multiple maps simultaneously.
With the base in place, I blend in some material height using a simple procedural mud which I’d made for a different material.
I now scatter some tiny pebbles and dead grass onto the surface. The rock bitmaps (albedo, height) are sourced from photogrammetry. These were shot on a turntable in the studio.
They’re light in the mix, but they help bed in what follows later. We have a large bank of renders of commonly used assets to add to our scenes. Some, as with the rocks, are sourced from photogrammetry, whilst others come from 3ds Max. We find this approach greatly speeds up our workflow as our internal library is quite large now, plus it helps with consistency between artists, and it keeps our scenes cleaner.
The next layer is a thick bed of moss. This required readable macro forms as well as up-close micro detail, and a distribution which wouldn’t obviously tile. My first step was to create a simple distribution mask with a BnW Spots, Perlin Noise Zoom, Clouds 2, and multidirectional warp and slope blur.
Next up are a few simple alphas from our library which will form the basis of the moss detail. They’re splattered around into clusters and the albedo is generated using gradient maps. I repeat this process to build up a selection of shapes and color variants.
Clusters are splattered using the distribution mask and holes are cut into the output based on the highest points of the existing height map, to allow the larger rocks to break through. I then normal combine in some macro shapes for a better long distance read.
Another layer of vegetation is added on top with grass and hay from our library of scanned alphas.
With that, the base, summer version of the material is ready. Next up, seasonal variation. To achieve this, we rely on an in-house custom node, something we call the Winteriser. This node adds frost based on curvature and height, and blends in snow with various types of breakup. It allowed artists both internal and external (for whom we implemented a more straightforward mode with many of the more granular options disabled) to create winterized versions of their materials within a few minutes. This was used right across the game, from terrain to building assets.
The node is fairly complicated internally, as it needed to provide enough flexibility to work on any type of asset.
Tips & Tricks
One thing I would say is that not everything has to be 100% procedural, and it's best to not start from scratch if possible. Reuse and repurpose as much as you can and invest time in creating custom nodes that you can easily update and share with the team.
There were numerous times we had to do massive batch re-exports of our terrain materials because of custom node changes or due to art direction. Hundreds of material textures were re-exported manually which took a lot of time and effort. Substance Automation ToolKit is something we are looking at as a solution to this problem.
All images courtesy of Playground Games