Abandoned Village Environment – Dylan Burgess
Hello, I am Dylan Burgess. I recently graduated with a BFA in May 2020 and am about to start an MS in Interactive Entertainment in Fall 2021. I began studying 3D art at home in 2019 and have been working on developing my 3D environment art for games for a bit over a year now, primarily working in Unreal Engine 4.
This scene is based on a concept by David Honz, which he created for a two-part Artstation challenge a while back. You can find his work on his Artstation account. I chose this concept to work off of because it contained a wide variety of elements that I wanted to improve on, such as the sky and clouds, the vista, outdoor lighting, the fog, and the foliage.
For the last half of the project, I worked with a mentor to dial in my work with some consistent professional feedback, something that I can easily recommend to anyone learning from home on their own.
Like many others, I used the program PureRef to compile and organize my images. You can simply copy and paste images from anywhere online into the program, so it keeps your downloads folder clean and allows you to easily organize your reference photos into groups with notes.
I used Google Images as my primary source of references and also loaded up Ghost of Tsushima on my Playstation 4 and took some screenshots that would be helpful as a visual benchmark from a recent release in the same type of setting.
For my block-out, I modeled basic versions of all the major assets I’d need in Maya and included a stand-in water plane with some screen space reflections so that I could start to visualize the reflections in the composition. Here I just used the basic sky sphere included in UE4 (to be replaced later with an HDRI backdrop and translucent cloud planes) and also sculpted the landscape into the general shape of the front cliff and the far-off vista. The cliff and vista would later be replaced by meshes generated in World Machine (the vista) and sculpted in ZBrush (the cliff).
I replaced the block-out assets with the finished assets in order of importance. This importance was determined based on the size of the asset on screen, its prominence in the composition, repetition throughout the scene, etc. Iteration was a huge component of my process, and a few of the more prominent assets were reworked many times throughout the process of building out this scene. If I am unhappy with an asset’s fidelity or fit I don’t hesitate to create a new Maya/Blender file and create another version based on what I learned from the previous iteration.
Materials and Shaders
I used many strategies for creating the materials and shaders in my scene. Some of these include Substance Designer graphs, traditional high-low poly bakes with texturing in Substance Painter, baking high poly meshes to flat planes with opacity masks in Marmoset Toolbag, converting photo sources to PBR textures, and using particle system emitters in Blender to generate complex groups of meshes that could be baked to images and tiled in Photoshop.
What I chose depended on what I felt would yield the best balance of fidelity and speed for each material. I also used a mix of tiling materials, trim sheets, and unique materials depending on the asset.
The torii gate is far from the camera and is a unique asset, so I simply UV unwrapped it into a couple of materials and created unique texture sheets for it in Substance Painter. The thatch, ground, and net materials were closer to the camera and/or used more often, so tiling textures and trim sheets made more sense for these to achieve higher resolutions or for easy reusability.
One of the most prominent materials in the concept was the wood texture found on the boardwalks, houses, dock posts, and boats. Because of this, I created this material first. I ended up using a set of 8 boards and three broken boards to construct all of the wooden boardwalks, the walls of the houses, and bent versions to construct the boats. Because I wanted the boards and posts to have worn ends with unique grain patterns I sculpted the wood grain on each asset individually.
In ZBrush, many layers of back and forth strokes of varying size across the surface of the asset with the clay buildup brush followed by wearing down the buildup with the trim smooth border brush created the effect of wood grain relatively quickly.
Then I could bake the normals to the low poly meshes and texture the assets in Substance Painter using fill layers and mask generators to create the proper color and roughness maps. With one asset done, I could create a smart material out of its layers in Painter so that I could quickly apply the same look to the other bare wooden assets.
The clouds were another prominent asset in the scene that I gave high priority to. For these, I used a photo that I took near where I live of a cloud that looked very close to what I needed in my scene. I then used Affinity Photo (a Photoshop alternative) to create a series of masks that I could use to build a translucent unlit shader in UE4.
To do so, I cut the cloud out from the background with a mix of select by color, selection brushes, and a custom cloud alpha eraser for believable edge breakup. Once isolated, I repaired any parts of the cloud that were covered by poles or trees with the clone brush.
I then created four masks from the photo: one for a color blend, one for an edge light, one for a height fade, and one for an opacity mask. I then packed these into a single texture using the RGBA channels.
My shader graph in UE4 uses the red channel mask to blend between two 3 vector parameters that drive the basic emissive color of the cloud. I then layered another 3 vector parameter on top using the edge light mask.
The height fade mask is left optional with a switch so that some clouds can fade near the horizon and blend with the vista. Finally, the opacity mask is simply plugged into the shaders opacity channel. When applied to a plane, this shader does a good job of creating believable clouds that transition nicely into the vista.
The thatch roofs took quite a bit of iteration before I was happy with the result. The strategy I ended with was to use an opaque tiling material that is occluded by a opacity masked material a small distance above it. This creates a fuzzy look to the thatch that can be broken up more with an opacity masked trim sheet along the edges and protruding randomly from the surface.
I also set up my shader in UE4 so that I could override the base color of the opacity masked material with colors for moss and mold with vertex painting.
All of my foliage was modeled by hand in Blender and then baked to a plane in Marmoset Toolbag 3. This allowed me to get the normals of the foliage looking believable while keeping the poly count as low as possible. Some exceptions to this include the fallen tree in the midground, whose trunk is solid and branches are baked to planes, and the grain stalks of the grass, which are bent cylinders with an array of planes at the top for the grain sprouts. All of the trees in the background were baked to planes since the distance negated the need for the extra geometry.
A unique strategy I used for my grass was a base color made up of an RGB mask. I used this with 3 vector parameters and lerp nodes to customize the color in material instances of the UE4 shader instead of having the base color set in the texture map.
My lighting is pretty simple. I used ray tracing for my reflections so that I could achieve the occlusion under the dock on the right of the composition easily. All of my lighting is dynamic. I used the HDRI Backdrop plugin so that I could use an HDRI to add complexity to my lighting.
I also created a custom LUT for my scene once the rest of the lighting was set up so that I could do the final tweaking necessary to push the lighting to the finish line. The process for creating a LUT is simple: you use adjustment layers in Photoshop to color correct a screenshot of your scene, download the basic LUT from Unreal’s documentation and open it in a separate Photoshop file, copy and paste over your adjustment layers, export the color corrected LUT, and then drop it in the LUT slot in a post-processing volume in UE4.
Creating a custom LUT is an important step in the final polishing stages of a scene and quickly pulls the entire scene together.
Thank you for reading through the breakdown of my Abandoned Village scene. The scene was a dense learning experience and I could only scratch the surface here.