Reusable Assets and Vegetation Workflow for Games

Billy Matjiunis from Ubisoft Toronto discussed his career path, talked about the team's approach to creating and organizing reusable assets for the Far Cry franchise and shared his workflow for vegetation production.

Introduction

My name is Billy Matjiunis, and I’m currently working as an Associate Art Director at Ubisoft Toronto. I’ve been here for roughly 9 years and have contributed to a range of titles, from linear single-player games like Splinter Cell: Blacklist and the Shangri-La portion of Far Cry 4, to open-world games like Far Cry: Primal and most recently, Far Cry 5. I began here as a 3D Modeller on Splinter Cell: Blacklist as one of the first few artists to join the project during pre-production. I then worked my way to Level Art, where I got to own larger sections of a level and had modellers and texture artists working under me to help realize a space. From there, I moved to the role of Lead Artist where I was responsible for overseeing a small team of Level Artists, providing environment art direction and technical oversight as well as keeping a few locations where I could remain hands-on. I’m now splitting my duties between Lead Artist and Associate Art Director on one of our current projects at the studio, which is unannounced at this time.

For the past 5 years, I have also been teaching a 3D Game Art class at George Brown College, where I used to study before getting my first big job in the industry, and for the past year and a half, I have been providing monthly mentorships through The Mentor Coalition. I feel like the experience I have gained in teaching and mentoring has helped me a lot in my Lead and Director roles at my studio. It’s really strengthened my ability to provide feedback as well as help to coach and guide other artists through their career paths. It has also reinforced some of the most important fundamental workflows that we often overlook and has in-turn made me an overall better artist and developer.

About the Career

During my time at Ubisoft, I have been able to work on two very distinct ends of the spectrum with regards to how we design, plan and execute the visuals of an environment. On Splinter Cell: Blacklist, for example, it was a single-player, linear game with a distinct ‘cell’ (no pun intended) team structure in place. Each level or mission would have a team that was working on it from beginning to end. The composition of that team generally consisted of a Level Designer, Level Artist, 3D Modeller, and Texture Artist. (depending on the scope of the level, we might add to those numbers to balance the production.)

The map I worked on, for instance, was the Abandoned Mill set in London, England. The Level Designer (Paul Dobson) and Level Artist (Denny Borges) would work together on the high-level intention of the space. Denny would begin to do an art pass of the design provided by Paul, modeling out some of the large shapes and doing a lot of the macro-composition. He would also begin to split the level into sub-maps in order to safely load and unload sections of the level to provide room for our assets to fit within memory. He would then assign sections to me and our texture artist (Jasmine Wong) to work on while he continued to work on other portions of the map.

1 of 5

Since all the other levels of the game were also doing this with their ‘cell’ teams in parallel, before we would begin to work on our areas we would first look at our asset database to see what has been made and could be reused, and what we need to build from scratch. From there, we would just build what we needed for our maps. We were mainly concerned with it fitting within the confines of our map and sub-map streaming limits and not too concerned with the global impact of the assets we were creating. Basically, if it worked on our level, it was good to go. 

This was also very similar in Far Cry 4, the only difference being that now I was the one in the Level Artist seat. Although you might think of Far Cry 4 as an open-world game, in Toronto, we worked on the Shangri-La portion of the game, which was more narrative-heavy, linear missions the player would encounter. At the start of this production, I paired with another Level Artist (Jobye-Kyle Karmaker) to split a large map in half, so each had our sections to own. From there, I worked with my Level Designer (Ben Aersson) and 3D Modeller (Darren Horrocks), and we just built what we needed to complete our mandate.

Our mission started with the player walking towards a waterfall that was flowing in reverse and entering a peculiar sedimentary cave to grab a time-stopping bow in front of a giant 6-armed rock statue, so almost everything we needed to build was custom. We were able to reuse some of the cave kit pieces from the open-world areas for metric guides for player navigation, but due to the thematic we were going for it all had to be re-sculpted and re-textured. Although we would regularly check the asset database to see what had been already created, we didn’t really have a great organizational structure in place for reuse across the project. This ultimately ended in a lot of assets that were made 2, 3 or even 4 times. Shrines, pillars, rock walls, you name it. There was quite a bit of unnecessary work that we did that could’ve (and should’ve) been avoided.

1 of 3

On Far Cry: Primal and Far Cry 5, things were different on the production side. We were now dealing with the challenges of building for a true open-world game, and we made it a point of trying to optimize our production efforts. Although we tried to maintain a fair amount of uniqueness in our locations, our assets had the potential of existing anywhere, so we had to build with that in mind. We set up an internal asset team (which we named the Object Bank) that would handle and organize all of our assets, cataloging and tracking every asset produced for the game. This really cut down on the amount of waste and redundancy on the environment side. Level Artists would now be creating more thorough call-out lists for what they need to complete their locations upfront. That list would then be vetted by our Object Bank team to see what already exists, what’s in production or what needs to be built from scratch. Anything that needed to be built would then be modeled out by the Level Artist before being textured and polished by the Object Bank team.

To give you an example of this in practice, take a look at the images below. For this mission, called ‘Elliot Residence’, my Level Designer and I wanted to create a bit of a navigational puzzle in order to provide the player a challenge in finding a key to the hidden underground bunker which would give them an exclusive weapon and a bunch of loot. Based on the Level Design blockout by Nicolas Najm, I realized that we needed to build a 2-story cabin. We were suggested to reuse one of our existing residential bungalows, but we were pretty set on having the house be 2-story in order to maintain the feeling we were going for. I pitched the idea of creating a flexible 2-story cabin ‘kit’ that we would reuse in interesting ways at other locations as well. From there, I went about designing and modeling the kit to fit not only this location, but I tried to make it flexible enough where it could be extended and varied with the different add-on pieces. I then ended up adding some additional pieces that I needed to some of our other kits, had some decals created to add a bit of uniqueness to the cabin, repurposed and set dressed some existing assets to fully realize the space.

1 of 2

Shoutout to our Object Bank team who were responsible for the final model and texture passes. The key takeaway here is that this upfront cost of ‘measuring twice and cutting once’ wasn’t really done as diligently on our past productions. On those projects, we would have just barrelled forward, building whatever we needed for our own spaces while creating a lot of redundancy in the form of duplicate assets along the way.

Working on Birch Forest

1 of 4

For this scene, I wanted to make something that used all the tools and techniques that we would typically use in our regular production pipeline at work. I wanted to build it using all my own personal scanned data and wanted it to also be not too far off from being within playable performance numbers if a subsequent optimization pass was done. Regarding software usage specifically, although I used pretty much the whole toolbox at one point or another, I would say the main tools I couldn’t do without in the scene were Agisoft Photoscan, SpeedTree, Substance and, of course, Unreal Engine. Other than doing my first pass placeholder meshes in SpeedTree, I relied heavily on my scanned data to move forward with my final textures and models. I waited for an ideal overcast day with minimal direct sunlight and then went to a nearby hiking trail to capture as much data as I could in a single outing. (The equipment I used here is actually from my studio! See the image below)

I used different techniques for capturing mesh vs. texture data. For example, when scanning the trunk of a tree, I would do a series of photos in a full 360-degree circle around the tree. If I wanted to capture the leaves of that tree, I would place a few leaves on a black piece of bristol board and take a single high-resolution photo from a top view. When I was done scanning, I would transfer those photos onto my pc at home and run them through LightRoom for calibration. This stage at the beginning just ensures that all the photos have the correct lighting and color values, which will help out my texture work later on. Anything that was scanned as a mesh would then be sent to Photoscan for processing. This step would generate a high definition mesh and texture which I would essentially treat as a high poly object in ZBrush.

From there, it’s a matter of building a low poly, unwrapping, and baking. If it was something like a tree stump or branch, it would go directly into UE4, however, if it was a tree trunk that I wanted to use as my bark texture, I would go into Substance Designer to adjust it so that it tiles properly. If what I was working on were the HD leaf images I would be using to build my cluster, I would take those into Photoshop to build an HD atlas, and generate my normal, AO and roughness maps in Substance Alchemist.

Now, once I have my bark texture and my HD leaf material maps, I go into SpeedTree to build my cluster texture. In case this sounds confusing, I’ve added some images to help illustrate the typical workflow I use for creating some of these different elements. All my high poly models here are done directly in the built-in SpeedTree modeller. Typically, this HD leaf modeling step would have been done in some other modeling package (like 3Ds Max, Maya or Blender) but the more I’ve been using SpeedTree, the more I find myself cutting out some of the modeling work I would typically be doing in those other software packages.

1 of 3

Now for my scene, I had some general numbers I used as constraints from past projects, but I used those as general guides rather than hard limits. On Far Cry 5, for example, the first LOD of a tree would have an average of 10k triangles, a bush would have around 2k, and a 3m patch of grass would cost about 600 tris. Also, a tree would have a maximum of 2 materials, one for the leaves and one for the bark.

Even with those metrics I just mentioned, Far Cry 5 had exceptions that broke those rules for specific reasons, and so I naturally just used those general numbers, while pushing a bit where I felt I just wanted to have some fun. All of the trees and bushes in my scene share the same leaf textures, and all the trees use the same bark. All the grass and flowers in the scene are split between 2 texture atlases. My geometry usage was a bit higher for the trees, but I also went much lower with my bushes and saplings than we did on some previous games. It wasn’t really intentional, I just built what I needed to get the look I wanted and let the numbers fall where they did. If I noticed the polycounts getting unreasonably high, I would look at the cause and try to correct for that.

Also, since I was just having fun with the project, I didn’t bother building any additional LODs, which as a rule of thumb you would try to cut the tri-count in half with each LOD you build (you would typically have about 5 LODs per tree). By the end of the project, I had some trees that ended up being a bit higher in triangle count, but the bushes and saplings came in under budget. (Just to add a caveat here, it’s higher if you are using open world budget guidelines for your vegetation, if you were making a linear game, it might not actually be that high.)

So as you can see, it’s very relative to the game you’re making. On the material side, I’m using a total of 6 texture sets (birch bark, birch leaf, trunk decal, grass, flowers/weeds, and plants), so there is a good amount of reuse which is great to keep the memory count down and draw calls to a minimum. It was a bit of a push and pull in that sense. Again, I would just like to reiterate, for your portfolio work, I think that the focus should be on building a scene that looks as good as you can make it, and just make yourself aware of the general limits that exist, and when you break certain rules, make sure that it’s done intentionally and for the sake of having a better-looking portfolio piece.

1 of 2

Now for my scene, I had some general numbers I used as constraints from past projects, but I used those as general guides rather than hard limits. On Far Cry 5, for example, the first LOD of a tree would have an average of 10k triangles, a bush would have around 2k, and a 3m patch of grass would cost about 600 tris. Also, a tree would have a maximum of 2 materials, one for the leaves and one for the bark.

The Assets Approach

When I’m setting up my scenes in UE4 (or any engine I’m using to build levels), one of the first things I do is set up and lock my main camera angles in order to figure out my desired composition and framing. I would hand place the foreground, mid and distant vegetation, rocks or clutter within the frame that serve as my primary elements. These are the elements I’m figuring will drive the player(viewer)’s eye throughout the scene.

For this part, I’m trying to focus on having a good amount of rhythm for the different elements. To drive the viewer, I’m using a mix of scale, shape language, color, and clustering of the elements to help the eye either rest or move around the scene. I would look at this part almost like an animation block-in. I’m trying to put in the main elements to serve my shots, and trying to find an effective balance to help the eye move around in a pleasant way. Everything in-between the main elements I’m using as either filler, or boundary edges, and for that specifically, I gathered and studied reference to find the recipe for the forest, grassland, and meadow that would also help ground some of the artistic decisions I made with my framing. Trying to pay attention to how far apart the trees usually grow, how many saplings or plants are usually in the immediate vicinity, so on and so forth.

When set-dressing certain spots I’m trying to think about clustering the elements based on how they would naturally fall and gather. Rocks would usually slide down slopes, and small pebbles and twigs that get blown about would collect around them. That would usually cause the grass around that to clear and certain plants/weeds would then sprout. With every element I add, I ask myself how that would impact things around it, and I try to make sure it feels as physical as possible. Some of that is pulling from my existing tricks with regards to set dressing, while consciously trying to pay attention to what I’m doing and cross-checking my references.

Lighting

One of the things that helped tie everything together was having neutral data to work with from the beginning. This is one of the most important parts, especially if you are working with photogrammetry. When I went out to capture the different elements, I tried to get as much of it as I could on the same trip. Since most of it was from the same area, it would naturally help the different assets ‘connect’ better. Once I began to process the data, I would run all the photos through LightRoom to build a color profile that I would apply to the full set of images. This ensures that my white balance and colors are as neutral and consistent as possible across the sets of data.

For the lighting, this is largely an iterative process. First off, as with everything, I gather some images of the type of lighting setup I’d like to go for. I try and study these to see what the relationship is between the atmospheric effects I’m seeing. How far or high the fog goes, how bright the hotspots are and how dark the shadows get. What the interaction between all the vegetation is.

My first actionable step when I initially set up my camera angles during my blockout phase, is to proceed and get the first pass of my lighting intentions in there. What I’m trying to do in this phase is to capture a feeling or mood. I want to make sure that the lighting supports my composition, so I make sure the light and dark areas help to support my focal points. I start to set up my sun position/angle, intensity, and color, but I don’t take anything too far or tweak any of the finer details. I prefer to save that for later, during a more final refinement pass. Every time I update any of the assets, be it models or textures, I further refine and balance the lighting. I am constantly making subtle tweaks as I go, pushing the hues from the lights and shadows a bit based on how the materials are starting to fit together.

I also have begun using this little ‘Pixel Depth Offset’ network, thanks to Wiktor Ohman, and his awesome World of Warcraft Homage in UE4 project. It’s subtle, but it really helps to connect all the elements better, and I ended up using it on almost everything in the scene. (See image below for node network and example) When I feel like things are starting to click, I start to have some fun with the post FX. For me, leaving this part until the end really helps to serve a couple of purposes. For one, if you can make your scene feel good with as simple a lighting setup as possible, the post will really help to elevate the quality and get you that final bit of polish. It also serves as a home stretch of sorts for me. Once I hit this part of the project, I know that I’m almost finished, and it gives me that little mental boost I need to close everything out.

The Biggest Challenges

From the beginning of the project, I had made the commitment to release all the project files so that people can see how everything was constructed and put together. There’s a certain feeling of discomfort here because everyone would be able to see how I handle my data. The goal was that I didn’t want to polish or shine anything up too much to the point where it wasn’t ‘real’, or how I would work normally. I wanted people to see that it’s ok if your personal art piece doesn’t have the most flexible and optimal master materials and that every asset isn’t pixel perfect. There are flaws there, and that’s ok. It’s more about how you put things together, how you make everything fit cohesively, and how you block the views and sightlines just enough to serve your main shots and camera angles. It’s really how we build our games anyway. We do just enough so that the area that the player will be walking through is polished as much as possible, and we block the areas where they can’t go or see. That vista in the background of your favorite game might just be a matte painting cut-out, a literally 2D image in the distance shrouded by fog, but if you set it up just right it serves it’s purpose perfectly.

Another challenge throughout this whole thing was just being able to actually finish it to be honest. Between my studio duties, mentorships, and teaching, my schedule is quite packed. Although I still make a point to find time to do personal work, I rarely have the energy to push something through to the end, especially, for a mid-sized project like this one. I usually get fatigued part way through and abandon it – especially, if I succeed in tackling the part of the project that had me most interested to begin with (like say, if I wanted to try out new modeling or texturing technique, for example). For this project though, I made it a goal to push and see it through to the end, and I’m glad I did.

If you’re interested in looking at any of the files more deeply, you can grab them from my Gumroad or ArtStation pages. 

Thanks and I hope some of this was helpful! Feel free to reach out or connect with me on my social media platforms below! ?

Billy Matjiunis, Associate Art Director at Ubisoft Toronto

Interview conducted by Kirill Tokarev

Join discussion

Comments 1

  • Anonymous user

    Very interesting article, thanks for sharing!, love the enviro art in Farcry :D

    I have a question, with your experience in UE4, you mentioned using a temporal dither with PDO (blending rocks :) , do you find that this approach has a notable performance hit in larger worlds at all?

    Thanks again for sharing! Beautiful scenes :)

    0

    Anonymous user

    ·3 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