top of page

Fairy's Tide

Fairy’s Tide is an exploration of environmental design with Unreal Engine. On the technical side, I focused on techniques such as trim sheet textures and vertex painting while creating a space that could be feasibly explored by a player in a game. On the creative side, I focused on crafting an area that felt magical while still remaining largely grounded in realism. I wanted the scene to feel like it could be a real place, and that a larger world existed beyond the tree line.

Process

I started by creating three reference boards that served to guide me and keep my vision on track. The first board focused on the “elements” of the scene, highlighting references of ruins and a general color scheme I was aiming for. This included a mix of real life ruins and fantasy artwork created by professional artists.

The second reference board was a “lighting” board, which collected a variety of photos showcasing how sunlight affects the trees and grass in forests similar to what I was envisioning. This board also served as a useful resource for looking at general foliage placement.

The final board was a “quality benchmark” board, which was necessary to remind myself of the quality I was shooting for in the final product. I pulled images from current gen games on the market that impressed me and had similar environments, to use as inspiration for what could be accomplished.

Environment_Elements.jpg
Environment_Lighting.jpg
Environment_QualityBenchmark.jpg

You may notice that the original green/red color palette on these boards did not carry over into the final piece. While I kept a similar green, I made the conscious decision to swap out the red for purple/pink tones due to technical constraints that arose during development (detailed below in the foliage section).

While developing the assets, I used a texel density of 512 pixels per meter since that’s a common industry scale to work with. I wanted to go low poly with the props and rely on a single trim material to carry the detail load across all of the architecture. By baking bevel detail into the normal map of the trim, I could avoid beveling edges on props and save a few polygons.

uvs.jpg

First UV set for textures

lightbakeuv.jpg

Second UV set for baking lightmaps

To help break up the repetition of the stone trim, I added three layers of extra detail. The first layer was a discoloration of the stone to show worn down areas. Originally I tried to increase efficiency by using a single stone texture map and changing the hue/desaturation in the shader blueprint to create a second version that I would paint onto the original. Unfortunately this didn’t give me the results I was hoping for, and so to meet my deadline I simply generated a second color map of the stone in Substance Painter and used that. In hindsight, I have a few more ideas for how I would get this paint setup working in a future environment, and I would also like to explore decals as an alternative way to add dirt cheaply.

TrimThreePiece_Low_StoneTrim_01B_BaseColor.png

Main trim texture

StoneTrim_01A_BaseColor.png

Edited trim texture for secondary discoloration blending

The second and third layers were moss. The second layer was moss generated based on the z direction, which automatically covered the tops of all objects that had it applied. The third layer was the same moss effect, but using vertex painting so I could manually paint the sides of objects to break up unnatural edges. In order to convey accurate paint data, some of the props required more vertices so I updated the models with a few extra edge loops.

The landscape was painted with a blend of 5 materials: 3 mosses, 1 mud, and 1 puddle.

Landscape+Material.jpg

Landscape material

Screen+Shot+2020-08-10+at+7.08.57+PM.png

Exploring ways of extracting roughness and spec from a single basecolor texture

Screen+Shot+2020-08-10+at+7.08.43+PM.png

Moss material function

Screen+Shot+2020-08-10+at+6.50.41+PM.png

Changing the color of moss based on distance from the camera

For the foliage, I created a few plant assets to familiarize myself with the pipeline, but this slowed down my progress considerably. I knew that I needed several types of plants/trees to hit my quality goals and give the illusion of a real environment, so I decided to save time by using a few foliage packs available on the marketplace. The foliage was added through a combination of hand placement and foliage brush.

I edited the foliage shader to reflect the magical tone I was going for. By generating a hue shift on the leaves and grass based on camera distance, I was able to add a beautiful gradient to the scene that animates while you walk through it. I’d like to revisit this technique in later projects, as it seems like a simple but effective way to bring an environment to life.

In the original concept the foliage was planned to be red, but hue shifting to that color on the borrowed assets did not look good. I considered re-texturing the plants with a more stylized approach to achieve the red look I desired, but due to time limitations I decided to adapt and look for a different color scheme that harmonized with the assets.

The ivy placed around the temple was a combination of foliage assets downloaded and decals. I found that while decals were easier to place in large quantities, some ivy geometry was needed for areas where the ivy hung from architectural overhangs. These 3D assets also reflected light better than the decals I used, which brought visual variation to patches of ivy on the walls.

fern.png

Fern asset modeled and textured while learning the pipeline

Screen+Shot+2020-08-10+at+6.54.48+PM.png

Exploring different methods of animating foliage

While rendering the above video and images, I found that using Temporal AA with the default settings gave very blurry results. To fix this, I followed the advice of a kind soul on reddit who suggested several console commands to improve visual fidelity:

  r.TemporalAACurrentFrameWeight 0.2

  r.TemporalAASamples 4

  r.Tonemapper.Sharpen 1

Activating these along with a few other tweaks (such as r.ForceLOD 0 and foliage.ForceLOD 0 to prevent pop in) gave a clean render that I was satisfied with.

CT_4_final.jpg
CT_5.jpg
CT_3_final.jpg
FairyTide60.jpg
FairyTide30.jpg
FairyTide70.jpg
bottom of page