Bringing the Oldwood Tree
to Life

Most gamers conceptually understand what it must take to create a video game at some level. Even if they don’t know the exact hows or whys, they know there is a significant amount of work involved in turning 1s and 0s into a living world. This month we peel the onion back a little more to give you a better understanding of the lengths we go through to craft an environment that feels organic and beckons you to explore its untold depths as we sit down with newly appointed Senior Environment Artist, Jimmy Lane, as he detailed the process involved in creating the Oldwood Trees in Faerthale.

Jimmy: Before even a single sketch is drawn, the worldbuilding process starts with the game’s lore. The brief given for Oldwood stated: “In a world of very old things, the trees of Oldwood are truly ancient. But they are no longer in as great a number as they once were, and this wide strip is all that was left when the Elves founded Faerthale. The Oldwood growths are immeasurably tall, exceptionally wide and appropriately spaced apart from each other. “

To meet this design challenge, we had to approach building a tree of that scale differently than a normal tree. Other trees in Pantheon will have the same texel density (detail density) but don’t require the sculpting that a 5+ story tree would.

1. Initial Concept Design

Several options Lead Concept Artist, Jared Pullen, created under the guidance of Lead Writer JN Gehart.

Ultimately, the tree below was selected because of its interesting root structure, winding nature, and general width of its canopy.

2. Oldwood Tree Greybox

1st Iteration

I did a quick blockin using zspheres in zbrush and threw it in game. Immediately it was apparent that we would have NavMesh and collision issues. The root structures were too small on the bottom, so we had to change the design to fit the gameplay and performance requirements.

2nd Iteration

These things are huge! So our next hurdle to tackle was creating some detail at player level, down below at the base, without it causing problems.

3rd Iteration

This was starting to get there. The third iteration allowed for five unique root connections to the ground. Additionally, the root structure traveled outward and then continued back to a center point underground so it could be perched on rocks or ledges.

Even though we had already split the asset into two primary objects, we found that in order for quality and performance to stay on par, we needed to split the asset into more parts. You can't just ask Unity (and your machine after Unity gets it) to load this single continuous five story object. So we drew up a plan to separate the objects:

    • Root Base - that can be rotated and scaled

    • Trunk - which can be rotated

    • Branch/Frond structure

    • Plugin root ground assets as needed

    • Vines as needed

A plugin root kit began to take shape, which augments the tree and allows it to extend down a surface, allowing hero tree areas (by a camp for instance), to be set dressed and stand out for players. The root kit ended up being its own set of pieces to be used throughout the world, so we won't be discussing it in more depth today.

Around this time, the Benchmark image, which we revealed in last month’s newsletter, was completed. It helped inform us as to the intended true nature of these trees:

    • We needed a big bend in the trunk with a potential trunk alternative using the same primary asset, but also bent to create a less distinct shape.

    • The branches needed to be fewer and larger while continuing to provide large canopy cover. We ended up doing about three different branch types, which I will go into in the section below.

With the greybox and render approved, we went on to the high res sculpt phase, which just so happens to be one of my favorite parts.

Sculpting the trunk

I have always been told reference is king. Anytime we are ever creating things, we always have reference up to compare. The choice to add knots onto the sculpt was based on some older cyprus and olive trees we found.

Detailing the Base

It was actually a bit of a surprise task to deal with the insides of these. Since the player can walk inside, the interior had to be sculpted up as well. At Bruno’s suggestion, we made it so that it could be placed by itself for max re-use.

Final Tree Sculpt

The trunk and base were dealt with separately so that we could spin them and get a different looking tree. From here, the trees go on to Retopology (low res mesh creation), UVs, Texturing, and Game Integration, just as any other asset might.

So with that going on, let's turn our attention for a moment to the branches and leaves that adorn the tree.

3. Frond/Card Bake Pipeline

Project Faerthale has allowed us to tackle issues which had never been dealt with in the game before. I want you to take a second and think about all the different trees in all the different games you have ever played. Up till now, Pantheon has never had an actual finalized tree. Everything that you have seen, as far as trees are concerned, in AVP or Thronefast have been temp asset store placeholders. The time you have given us in order to develop pipelines has enabled us to create something which facilitates non-destructive creation, efficient rendering, iterative results, and automated busy work.

Before we dive in, we need to point out that games approach trees slightly differently than a movie might. On a movie, you can render every single leaf at max quality and it will only add time to the final render, but not hurt the way the movie is viewed. For a game, we have to place many leaves upon a single branch network, and then render that entire network as a single image. We call these branch networks fronds or cards. The goal is to get the most out of as little as possible in terms of what the user is required to render in real time.

Here is the overview of our frond creation process and the programs involved:

    • High res leaf model - Maya & Zbrush

    • Lowres leaf model & UV - Maya

    • Texturing the leaf - Substance Painter

    • Cardbake - Substance Designer

    • Pack for Speedtree - Substance Designer

    • Frond creation & Batch bake - Speedtree

    • Input of Speedtree Batch Bake & Repacking - Substance Designer

    • Atlas multiple fronds together & Export final texture - Substance Designer

    • Make card mesh - Maya

    • Final Test - Unity

While it might seem like many steps, we have frontloaded development on the pipeline in order to automate the grunt work. Because of our pipeline, the time we spend can be directed at the actual creative task of bringing the concepts from 2d to 3d game ready assets. The core of this process is nondestructive, which means we can change your one awesome leaf, do a rebake, and it will automatically populate to all the branches and in-game within about two minutes.

This also means that you could fully replace the leaf that it started with and get a completely different looking frond! So let's go in depth:

1. High res leaf model - Maya & Zbrush

Jerry Kulkis, our Environment Artist, created the assets for what you see here in step one, two and three. The primary things we need to focus on at this stage are silhouette and curvature. In order to get a good bake down the line, it needs depth/curvature so that we can paint information on top of it.

2. Lowres leaf model & UV - Maya

Now we need to make a lower resolution mesh from the sculpt, UV it, and export it out. This step is really just a jumping off point. As the mesh will never make it in-game, but be baked down, the resolution of the mesh and its UVs can be much less optimized than normal. Zbrush auto Zremesher/Dynamesh for mesh topology and a quick planar projection make your machine’s processing power the only time limiter here.

3. Texturing the leaf - Substance Painter

Substance Painter is our tool of choice for texturing, and it proves itself each day as we run it through the paces. One of the methodologies we try to make use of as we are texturing is to stack masks in such a way that we can always go back and make changes. One of the key advantages to using this setup is we get pretty close to what it will look like in engine as we paint. So if it looks wrong, we can know early on and change it.

4. Cardbake - Substance Designer

Once we export our Painter maps, we need to bake down our high res sculpt, as well as the textures onto something more usable. A bake plane is quickly created in Maya based on the scale of the leaf, then we go into Substance Designer.

We actually have a baking preset, which has all the names and baker types already configured. So all we have to do is locate the exported images from Painter, the high res sculpt from Zbrush, and then start the bake!

5. Designer Pack for Speedtree

Once that bake completes (it's very fast), we have to pack up all those textures in something Speedtree would like. We created a Designer graph that only requires us to change the image inputs, and it will do all the packing work for us!

6. Speedtree frond creation & Batch bake

Before going straight into Speedtree, we have to create a lower resolution mesh, which we can use as a leaf card. This card is the actual mesh asset, with proper UVs utilizing the baked & packed maps from part 5, which is placed around the branch in Speedtree.

Speedtree makes our jobs easy with the amount of flexibility it offers. With its version 8.4, we are able to not only create all the fronds, but bake their output as well. The only issues we have are that it doesn't offer as many Custom maps as we would like and its lack of A channel packing. In a perfect world, we would output fewer images to Speedtree so that there is less to keep track of.

7. Designer input of Speedtree Batch Bake

Here we take another graph that has already been made, hook up our newly exported images from Speedtree, and move along.

8. Atlas multiple fronds together & Export final texture - Substance Designer

In order to give us the most performance, we place several fronds upon one image. This allows not only for efficiency but also variety. We took the Material Transform node, which ships with Designer, and modified it so that we could also pass our packmaps along it.

From there, we simply place as many items as we need for the scene in as small a space as we can. This graph structure is reusable, but typically the placement/location of the fronds is all manual.

8. Make card mesh in Maya

The next step is to take the atlas and start creating the actual mesh, which would be spawned along a branch in engine. Efficiency is king, and often you have to go back and iterate on your polygon count in order to attain your middle ground of performance to quality.

9. Final test in Unity

Once the texture is approved in engine, normally we would move onto naturally scattering the fronds along the branches of a tree within Speedtree. However, for the Oldwood tree we actually created a series of mega branches, which dwarf typical trees. These mega branches are then placed by default in specific locations along the tree, and are capable of being relocated in order to best fit the lighting/theme needs.