James Brisnehan discussed in great detail his huge UE4 project Villaggio Toscano talking about level design and assembly, modeling in Maya, texturing with Substance tools, foliage creation, lighting, and polishing.
Hello, 80 Level readers, my name is James Brisnehan, I'm a game environment artist, and I'm here to talk about my recently finished project Villaggio Toscano. To me, this project represents all that I have learned and how far I have grown as an artist since I graduated from college.
I studied game art at Full Sail University in Florida. After I graduated, I of course tried to get a job in the industry right away, but I didn't get many bites. I had a few small freelance gigs that didn't pay much, joined a Kickstarter project that didn't end up paying at all, and eventually had to get a retail job at GameStop. Then I realized that my portfolio just wasn't up to industry standards. I was marketing myself as an environment artist, but the only environments I had to show were from way back at college and were mediocre at best. I knew I could do a lot better, but I needed to prove it.
Villaggio Toscano: Concept and Goals
I actually had several goals in mind when first planning the project that would become Villaggio Toscano. I wanted to make the most complete, polished, and beautiful environment I could, while also getting more comfortable with Unreal Engine 4 and Substance Designer, get practice using trim sheets, and improve on one of my weaker areas: foliage. First though, I had to decide what kind of environment I wanted to make. I came up with a few decent ideas, but then I found some paintings on google of Italian streets and villages, and they were perfect. The vibrant colors and cozy comfortable mood of the paintings really inspired me. There was a great mix of hard surface and organic elements, just the right amount of foliage, and great opportunities to practice aging and weathering.
Also working on a scene grounded in reality made finding good reference a breeze. Apparently, people enjoy vacationing in Italy and taking tons of pictures to post online... something I wish I could afford to do. Oh well, building my own Italian village is the next best thing.
The scope of the project started off much smaller. Initially, I planned to only make the 8 buildings I had in my concept sketch. But while working on this project, I just couldn't help but wonder what might be around the next corner... and then the next.
I wanted the terrace restaurant on the left side of the street to be a focal point, so I decided to flesh out the area around it. I changed my mind a couple of times about what I wanted the surroundings of the restaurant to be, before finally deciding on a town square. Then, later on, I started imagining what might be on the other side of the little archway on the right of the street, so I decided to build a courtyard back there. I went through a few layout iterations of the courtyard, all the while making sure none of the buildings I was placing kept the sunrise from hitting my main street just right. Eventually, I decided to abandon that courtyard altogether and left it half-finished. Then soon enough, in a different area, I tried building another courtyard... and a side street... before eventually scrapping them too.
And so it went, expanding out and scaling back, throughout the whole length of the project, in between spurts of modeling, texturing, and trying to fine-tune the lighting. I probably should have taken the time during the planning phase to really decide what I wanted to build (and stick to it), but that chaotic process of playing with the layout in UE4 was one of the most fun parts of the project. Occasionally. letting loose and just building whatever new idea popped into my head kind of reminded me of when I was a kid playing with legos, or trying to make the perfect park in Rollercoaster Tycoon. I think it worked out for the best though because some fantastic looking areas ended up in the final layout of the village; an extended main street, a town square, and two side streets.
The buildings were the first things I started modeling and texturing after the blockout. In Unreal. I used BSPs to block out the 8 buildings I had drawn in my concept sketch, then I exported them all to Maya to use as a guide. Modeling the shells of the buildings was pretty simple, they were just rounded cubes with holes punched out. Adding detail required more thought and planning. I wanted to try building things in a modular type of workflow so I decided the roofs, gutters, chimneys, doors, windows, shutters, and balconies should all be separate meshes, so I could assemble and decorate the buildings in different ways in Unreal. With each building being different, I also decided to make each side of each building different. I had some that could be used as storefronts, some that looked more residential, and even different architectural styles inspired by different images from my reference collection.
(Re)learning Substance Designer
I decided I should get started on texturing before I got too far into modeling because I wanted to use tileable and reusable textures for 90% of my assets. I chose to design my project around reusable textures in part because I didn't want to have to create a unique texture set for each and every asset, and also because I've heard this is how many of my favorite game studios do things. Having reusable textures of course meant using trim sheets (of which I had limited knowledge at the time), and in the game industry's current software-scape, it also meant getting to know Substance Designer (which I had only tried once before). Learning about trim sheets was pretty easy, one or two tutorials and I understood it well enough, but learning Substance Designer took a while. Even though I had used it once before, it felt like learning it all over from the beginning. After going back through all of the beginner level tutorials on Allegorithmic's website, I started trying to make some brick and cobblestone textures. I had this plan to first create several different types of stone, then try to combine them together in different ways using the 'flood fill' node to make bricks and cobblestone. It looked terrible.
I was starting to get the hang of Substance Designer, picking up techniques and strategies from all of the tutorials, and actually started to remember the names of some of the nodes. I decided to tackle some of the other textures on my to-do list, like the stone trim, the roof/gutter trim, and the glazed tiles. I started the roof by modeling some simple geometry for a quick normal bake, then took the map into Photoshop to clean up, make it tileable, and block out some masks. Finally, I brought them into Designer to begin turning them into a trim material. I kept things manageable by splitting up the work into sub-materials: metal, paint, rust, terracotta, and mortar, then combining back together using the masks.
For the stone trim and tiles, I used a different workflow. I learned from some of the tutorials I've watched to start with basic shapes and build up detail in the heightmap before anything else. Working like this was essentially sculpting with nodes. Once the heightmap was complete, it could be used to create the normal, roughness, and ambient occlusion. The final thing to tackle was color. Taking elements of the other channels and running them through 'gradient map' nodes was a good way to start building the color map.
By this point, I understood Substance Designer enough to start developing my own workflow, sort of an amalgamation of the others I had seen. One thing I would like to share with anyone reading this is "My Toolkit". It's something I'm pretty sure I picked up from a video series on the Allegorithmic Youtube channel (now renamed "Substance by Adobe"). The idea is to have a file, or 'Package', full of useful tricks and graphs that can be added to and borrowed from whenever needed. For example, I created a wood grain texture, with parameters to change everything from the size of knots to the angle of wood fibers. It has outputs for height, normal, AO, masks, and highpass. I saved this all-purpose wood grain graph in my toolkit, and now whenever I start on a wood type material, I can drag and drop this graph in as a custom node, and save hours of work.
Another Graph I created for my toolkit was a quick-start graph for UE4 materials. Whenever I start a new material I duplicate this graph from my toolkit, rename it, and have all of the settings and output nodes set up just the way I like them. Whenever I started a graph completely from scratch I would always have to spend some time doing things like adding AO to the outputs, splitting my heightmap path into a normal map and AO, plugging some 'uniform color' nodes into the color, roughness, and metal outputs to make the cube not look like a mirror, and combine the greyscale maps into a packed RGB texture. With my UE4 quick-start graph, I don't have to do any of that. I can just jump in and start working on the heightmap.
Modeling Everything Else
With a set of textures ready to go I went back to filling up my library of modular assets. I may have gone a little overboard here, building such a large variety of assets (as many as I thought I would need, but probably more than I actually ended up using). Every time I looked back at my reference images I thought "oh yeah, I need to make some of these", or "I should build one of those, and I should make a couple of variations of it as well". I definitely chose variety over efficiency throughout this project. At least texturing everything was pretty easy since it was all using trim sheets, and luckily I found a feature in UE4 that created all of the LODs for me. Having to make all of the LODs for a whopping 284 unique assets myself would have been a huge pain.
Highlights from the Modeling and Texturing Stages
For some of the new groups of assets, I needed to make new trim sheets. I decided to split up the trim sheets based on the type of material. A wood trim with 3 color variations, one glass trim, two awnings, and two metals. I split them up like this to make texture packing easier, as each type of material required different types of maps.
I created most of the materials completely in Substance Designer similarly to my stone trim, but the metals required a different workflow. For some reason, I decided to make one metal trim for all of the assets I would need for the whole environment, and one just for the decorative wrought iron. To do this, I had to thoroughly plan out what assets I wanted to make from that point on, and what metal pieces they would need. I then modeled high-polys and low-polys for things like lanterns, railings, hinges, chains, door handles, and anything else I thought I might need. I saved the top third of the UV space for horizontally tiling trims (essentially 4 different metal bars). I then took them into Substance Painter to bake and texture. For the swirly decorative wrought iron, I began by modeling in Maya as well, but with these, starting with NURBS curves was a must. I created a few basic curves to start with, extruded polygons along them, subdivided, assembled in different patterns, and decorated with leaves and thorns. Then off to Painter for baking and texturing.
To make things easier while building all of the assets, I decided to keep a full set of low-poly metal pieces to the side, so I could duplicate, drag over, and place whatever bit I needed. It was much easier than modeling a hinge or handle and then trying to line up the UVs after. Of course, I eventually made assets that required pieces I had not planned for and didn't have in the metal trim. For those, I decided it would be easier to manipulate pieces into new shapes than to actually make a new texture. For example, I made a chair out of the bottom of a lantern, a railing end post, and some bars. Also, I turned the bottom of a lantern, a door knocker, and a couple of doorknobs into pieces for an umbrella.
I forgot when exactly, but at some point during this project, I decided to add more textures to my landscape. Even though my cobblestone material had gotten a lot better, in Unreal it still just looked like a simple texture on a landscape plane instead of a real street. I thought breaking it up into different sections would help. I made 3 additional cobblestone textures and a concrete texture. Once I had them all plugged into my landscape material and started painting, I ran into a strange problem... puddles. The way I did puddles before then was to branch off my cobblestone layer, make it darker and glossier, and lerp the normal with a flat color. That puddle layer would not work for the new cobblestone layers though. I tried to make a puddle layer with flat colors for its normal roughness and color, but it lost way too much detail. So I had to make separate puddle variants for all of the new textures.
With puddles sorted, the next issue to tackle was transitions. Fading between textures didn't look right, so I tried separating with meshes. I created raised sections and lowered sections split up by blocks of concrete. I also painted a concrete gutter into my main street. It looked good for a while until I was looking through my reference folder and realized that Italian streets don't really have much (or any) concrete. So I went back through and replaced all of the concrete blocks with new meshes using brick and cobblestone textures, and it looked even better. Plus, having to replace the concrete gutter forced me to finally sit down and learn about decals. It took a few tries to get the edges of the decals to blend well (through feathering the transparency mask and matching up the vert. painting with the landscape), but it was now starting to look more like real streets.
I knew that the plants and flowers were going to be a major part of my environment, so I really took some time to plan and research them. After researching what kinds of flowers are popular in Italy and figuring out which ones were most prevalent in the reference images I had gathered, I decided on 4 types of plants. Climbing ivy for the walls, hanging ivy and petunias for the balconies, and bougainvillea for the pergola. I also did some research into what workflow I wanted to use and found one I liked.
The basic plan was to first model the high poly versions of all of the plants, next bake them down into textures, and last use the texture maps to build the low poly models. Sounds simple right? Well, I ended up over-complicating the first step, which in turn created complications for the second (more on that in a bit). I started out by modeling one sample of each flower, a few leaves, a branch, and a vine in Maya. I then decided to take them into Mudbox to turn them into high-poly sculpts and do a little painting. After that, I baked down the normal, AO, and color from the sculpts onto the mid-resolution models from Maya and brought them into Substance Painter to finish creating their material. Along the way, I decided to make an alternate version of the material as well.
I loaded the finished materials for the mid-polys into Maya, ready to start arranging them for the final bake down, when I suddenly felt unsure of how to proceed. I had never made plants of this complexity before, and I didn't have a plan on how to model the low-poly plants, which meant I wasn't sure how best to arrange the mid-polys before baking them to a flat plane. I had seen plenty of tutorials on how to make game-ready models of grass and trees, but I had no idea of how to model petunias and bougainvillea. Then I had a strange idea, and I booted up "Uncharted 4". I jumped into the Italy level, found some petunias, ivy, and bougainvillea, then flew the photo-mode camera right into the pants to try to figure what parts were modeled and what was left as flat textures. It actually helped a lot, and I formed enough of a plan to get back into Maya and start arranging the mid-poly foliage.
I created some large bundles for filler to be placed in the center of models, some single branches for filling out silhouettes, some individual leaves for adding volume, and I kept one branch to the side, leaving room for its UVs so I could have a 3D branch for later. Also, I decided to separate the ivy onto their own sheet. I had a little room left on the flower sheet, so I added some loose flower petals to be scattered on the ground of my environment. With that, I was now done with what was supposed to be my first step (felt more like five).
Once everything was in Unreal, it was time to set up the foliage materials. I had kept the flowers (mostly) white so I could multiply different colors on top using masks. I started with 4 or 5 colors and added more as I needed them. By the end of the project, I had 8 colors for the base version of the flower material, and 6 for the alternate version, plus 3 colors of hanging ivy.
In the middle of all of the foliage creation process, I actually took a few months off to participate in an Artstation challenge. Once I finally came back to this project, I decided to port over some of the foliage models I had made for the Artstation challenge so I could have an even larger variety of plants in the Italian village. The ported over plants included a tree, a couple of ferns, grass, moss, and small moss flowers.
Detailing and Decorating the Village
When moving everything into the UE4 level, at first I was placing everything by hand. I wanted all of the buildings to look unique, but as I kept expanding and changing the layout of the village and adding in groups of assets, this became more and more tedious. Moving the buildings was the worst, trying to select all of the windows, curtains, shutters, doors, and all of the decorations each time I wanted to move was a pain. Luckily, while I was skimming through a tutorial series looking for tips on lighting, I found an episode on using Unreal's Blueprints to make prefabs of assets. With this method, I could fully assemble one of each building type and easily pop instances of them into the level wherever I wanted. Including background buildings, the final layout of the village had 67 buildings, so this definitely saved me some time. Once I finally had a layout of the village I was happy with, I customized the prefab buildings in the center of town, adding decorations, different flower arrangements, and sometimes even changing up the architecture. I also added chimney smoke to some of the buildings, to add a little life to them. (I can't take credit for making that particle effect though, I just borrowed it from UE4's 'starter pack'.)
One of the final things to finish up the village was build and place signs. I had an idea of what I wanted a couple of the buildings to be, but I thought if I'm going to make signs for them, I might as well make some for all of the other buildings I've placed that resemble a storefront. Taking a quick look around the level, I found that there were 13 buildings that could be turned into shops. I took a screenshot of each in case I wanted to do a paintover, and set about deciding what each shop should be, and how to decorate them.
I did some research on what kinds of shops and restaurants are common in Italy, spent a lot of time with a translation website, learned a thing or two about Italian grammar, nearly doubled the size of my reference folder and came up with a plan for what each shop should be. Next, I downloaded some free Italian-looking fonts and spent time in Photoshop trying to remember some of the things my high school graphic arts teacher taught me about typography and logo design. For the sandwich board menus, I simply put together a texture atlas of cropped photos (even though I like making textures from scratch, I didn't feel the need to learn enough Italian to write my own menus). In Unreal I split the menus up again with a 'UV Remap' node, to create instances of each menu. The UV remap node was a little finicky though so I had to add a 'Constant 4 Vector' and a 'Make Float 4' to get it to work.
Lighting and Polish
Lighting is something that I worked on and learned about continuously throughout the project. I knew that lighting is very important to all 3D art, and can even make or break an environment. I wanted the lighting in my scene to really bring out its beauty. I thought a golden hour or sunrise type of lighting would look good. I love the way low-angle sunlight can bounce off of buildings and fill up shadowy streets.
I did all I could to make the lighting the best it could be: watching tutorials on lighting in Unreal (both technical and artistic), gathering and studying plenty of lighting reference, trying to get the perfect light bounces by moving around buildings and rotating the directional light, trying out different sky textures, and experimenting with different settings on all of my lights, fog, and lightmass. For a while, I even wrote down and kept track of what settings I changed for each light build, to help myself learn how they all worked. As the environment became bigger and denser, the light builds got longer and longer as well. The final light build took around 36 hours. I started feeling bad for my poor little laptop, even though it was new (I had to replace my old laptop halfway through the project because some discontinued components burned out; the long build times were... probably unrelated). After a ton of trial and error though, I finally got the lighting to look really good, and it brought the village to life.
During the polish phase, I also placed all of my cameras for my final screenshots. I let my inner amateur photographer loose and searched high and low for the spots with the best composition and lighting, then played around with the focal length (or field of view), aspect ratio, depth of field, vignette, and exposure settings to get the perfect shots. I always tried to remember to lock down the cameras once I got them in just the right position so I wouldn't accidentally move them later. I had over 30 cameras set up, but I thought that was a little much, so I trimmed it down to just the very best shots... which still resulted in 21 cameras.
Because I decided not to do any fly-throughs or play-tests or anything animated on my portfolio, I could cheat a little for my final screenshots. For the final 21 cameras, I did one last polish pass, taking a long look at each shot, and then making final adjustments to enhance them even more. I did things like add in extra lights to highlight things and punch up reflections, move or hide objects to fix the composition, and adjust the color correction/post-process settings for each camera (though I didn't have to do much post-processing adjustments since the lighting came out so well, really just some white-balancing). For one camera, the perfect shot just happened to be behind a building, so I hid it just when looking through that camera. Also, every one of the 'falling' flower petals was hand-placed in mid-air. I didn't really want to learn effects in UE4 just to have some falling petals in my screenshots. Plus, this way I had control over the exact placement of the petals so I could use them to benefit the composition of each shot.
And with that, my Italian Village was complete. It was a long time coming, but finally, I have finished it. I spent much, much longer on this project than I ever thought I would. I worked on it on and off for two years. A lot of the bloat of that time frame comes from working around a day-job, taking several months off to work on another project, dealing with the loss of a computer, and general motivation and distraction issues that come with working from home on a personal project with no real deadline. Still, though, I spent a ton of time on this project. I may have let its scope get away from me, but I learned a lot while working on it, I gained new skills, I accomplished the goals I set for myself, I added a great new page to my portfolio, and I had fun. For my next personal project, I think I'll try to make something a bit simpler though... we'll see.
For anyone who has made it this far, thank you for reading my 80 Level interview on the making of "Villaggio Toscano". I hope you enjoyed my tale of artistic growth, and maybe learned something along the way, even if the only thing you learned from me is just what not to do. Either way, thanks for reading.
And one last thing, I'd like to give a big shout-out to the community on the Polycount forum. This was the first project I had ever posted on that website, and deciding to share my progress from the start with others was one of the best decisions I made during this project. Not only did sharing my progress help keep me motivated, but it also helped me get feedback throughout, and some of the suggestions and critiques were absolute gold. One person suggested adding a fountain to the town square, another helped me realize that one of my early cobblestone iterations looked like it was covered in mud, and a third pointed out that all of my light bakes ended up with a weird magenta hue, which I might have never even noticed. Sharing unfinished, in-progress art with others might be scary, but WOW, can it ever help.