logo80lv
Articlesclick_arrow
Talentsclick_arrow
Events
Workshops
Aboutclick_arrow
profile_login
Log in
0
Save
Copy Link
Share

Breakdown: How to Create a Dark Fantasy Environment of Ruins in a Forest

Heather Geiger discussed the workflow behind the Fantasy Ruins Forest environment, talking about what the goals of this project were, explaining how she sculpted the trees under certain parameters, and detailing how she assembled the landscape.

Introduction

Hello, everyone! My name is Heather Geiger. I'm an Environment Artist with three years of experience in game development. I started as a self-taught generalist before transitioning into environment art over the last two years. I'm now part of the team at ACE Entertainment LLC, where I'm working on their upcoming game.

My path into 3D started in early childhood. I spent hours playing story-driven, adventure RPGs (I’ve played every Final Fantasy) and watching movies like Dark Crystal, Neverending Story, and The Labyrinth, where I first developed my love for the sci-fi and fantasy genres. I always dreamed of working in games. However, I never considered that it might actually be possible, so I went on to work in fashion/merchandising for most of my adult life.

Once I finally decided to go for it, I enrolled in Vertex School's environment art program. During my time there, I was fortunate to learn industry workflows from my mentors, David Lafuente and Kem Yaralioglu. Afterwards, I continued pushing my work through a mentorship with Jon Arellano at Sierra Division Academy. It was under his guidance that I created this Fantasy Ruins environment. All the assets were completed within the 10-week mentorship window, and then I spent my weekends over the following few months on polishing, lighting, and rendering.

Project Goals & Inspiration

My main goal for this project was to challenge myself to pull off an organic scene comprised of sculpted elements. Before this, I had mostly used hard-surface workflows, so I was excited to practice sculpting while learning some interesting techniques to introduce modularity. I really liked the idea of making ruins, because I'd seen such beautiful examples from other artists and wanted to learn the process behind them.

Style-wise, I was inspired by that old-school fantasy film aesthetic, before CG was heavily used and all the sets and characters were crafted by hand. There's something about "almost realism" that feels so otherworldly to me. In that sense, I wanted to follow the rules of PBR texturing while allowing for a bit of stylization in the colors and silhouettes.

I began by gathering references for architectural details, materials, lighting, foliage, and sculpts. I came up with a brief storytelling prompt to use as a guide when deciding on props and overall art direction.

When collecting landscape and foliage references, I drew inspiration from the oak woodlands near my neighborhood in Northern California. I wanted the foliage to feel overgrown and a little whimsical, so I went with weeds like wild clover, stinging nettles, and milk thistle.

Blocking Out the Scene

With references in hand, I set up an initial camera shot and built a simple blockout in Unreal Engine to determine the overall scale and composition. As you can see, my composition and props changed quite a bit throughout the process, but this was my starting point.

To block out the path, I used Unreal Engine's fracture mode. It has several presets you can use to break meshes apart, which can be useful for things like broken glass, rubble, or even damaged variants. In this instance, I just wasn't quite ready to open Maya, so I made it right in Unreal Engine. I often use Unreal Engine's built-in modeling mode for creating and adjusting my blockouts from a given camera angle.

Once I decided I liked my initial composition, I exported everything into Maya to separate my blockout into modular kit pieces. Defining the overall kit early in the process helped me plan my time and strategy. Once I saw all the pieces I needed, I could identify which would be the most time-intensive or require additional research. Below, you can see my final zoo.

Modeling/Sculpting

A few of my pieces were tricky, such as the hero tree and the wreath. I needed to brainstorm ways to make them modular. Below, I'll dive into the strategies I found most useful.

Trees

My trees needed to meet a few requirements:

  • They had to be at least partially procedural due to time constraints, and so I could create quick variants for the background trees.
  • The roots needed to flow over the rockpile in a natural way.
  • The trunk required sculpting to fit in with the scene's aesthetic.

I began by creating my base oak tree in SpeedTree. My rockpile blockout served as a collider that my roots could cascade over. To simulate the right behavior, I set up two "forces". The first was the rocks themselves, which act as an attractor. I added a curve function to vary the intensity. Then, a directional force pulls the roots gently forward and down. This combination created some space in between the roots for a more natural silhouette.

I added a dome-shaped collider around the branches as well for shape control. This was useful for making quick adjustments. I spent some time going back and forth between SpeedTree and Unreal Engine to ensure my tree hugged my architecture without obvious clipping, making additional tweaks to individual branches with SpeedTree's manual tools.

Once I found a base tree that worked, I exported it to ZBrush. From there, I subdivided and sculpted just the trunk while using the existing branches/roots as a guide. That way, I could build up more dramatic transitions and stylize the shape a little.

For the roots, I didn't have time to sculpt each one, so I used a few rounds of material displacement instead. I started with a large Perlin noise, then a fine Perlin noise, and then finally my bark material's Height map. It doesn't look as good as a custom sculpt would, but it served the purpose of making the roots look a little more wicked and less like noodles.

I utilized SpeedTree's UV tools for everything besides the trunk. The trunk was large, so I used RGB masks for texturing. This let me scale up my tiling textures to the right texel density.

Back in the engine, I imported the branches, roots, and trunk separately. I added a dithering effect to the edges of the branches and roots so they could be placed freely and blend into the trunk. In the end, the result looked pretty custom but was 80% procedural. I could still go back to my original SpeedTree file and change the leaves, optimize the branches, or generate new root formations.  

Landscape

My entire landscape consists of one foliage sheet, a rock, two pebbles, and several mounds for blending and adding height variation to the ground. The mounds were assembled out of the foliage, pebbles, and materials I had already created. To save time, it was helpful to find ways to repurpose my assets as much as possible by modifying or rearranging them.

The first step was to address the rocks and foliage. I blocked out my foliage in Maya and added sculpted details in ZBrush. Next, I projected the sculpts onto a plane and sent them to Substance 3D Painter for baking/texturing.

In addition to the typical textures (Color, Roughness, etc), I created a texture with gradients to drive my wind intensity. This allowed me to modify the default "SimpleGrassWind" shader, with the black areas being stationary and the white areas being extra fluttery.

When cutting out my foliage cards, I tried to consider how I wanted them to deform and how often they'd be spawned. If I wanted a lot of variation in the curl, I would add more edge loops. If I knew it was going to be spawned frequently, like the clover, I kept it as simple as possible without creating too much excess transparent space. One reason I love using SpeedTree is its non-destructive nature. It's very easy to re-import your leaves or add LODs if the project requires it.

My ivy uses the same logic as my roots, except here I'm using a wall as a collider and a directional force pointing upwards. I added gravity to get some curl in the branches. By randomizing my parameters, I was able to get endless variants to choose from.

Architecture

The game plan for my architecture was to make a set of thoughtful sculpts and break them up into pieces so they could be flipped around and reused throughout the scene, or tiled and used as trims. I learned a lot about sculpting through this process and had to throw away multiple early versions. While disheartening at times, making mistakes was necessary to build familiarity and speed with the brushes.

To create the low-poly meshes for my sculpts, I chose to use decimation so that the cracks would have some geometry behind them. This is the decimation protocol I like to use in ZBrush. These steps prevent me from having a million polygons in the crevices.  

  • Ensure loose parts are merged/mesh is watertight.
  • Decimate down 1-2 levels.
  • DynaMesh at a medium resolution to flatten out some of the detail.
  • Decimate further to a reasonable polycount.
  • Project your low-poly to map to the high-poly.

Now, I'll talk a bit about how I made my warped assets. Once I had my low-poly meshes baked and ready to go, I brought them back into Maya and applied their material to use as a guide. I didn't decimate them as much as I usually would so that they would deform cleanly.

Next, I used the knife tool to slice up sections I could use to kitbash variants with. I designed my original meshes so that they could tile and be extended, which helped prevent scaling/stretching of UVs. Once deformed into their final shape, I used the "Reduce" feature in Maya to optimize wherever needed.

Texturing

The first texturing step was to create some tiling materials. I wanted to use sculpted elements wherever possible, so I chose the following methods to accomplish that.

METHOD #1 — Sculpt the entire Height map by making a tiling pattern in ZBrush. This process was straightforward — I sculpted a tiling brick pattern and used a plane to bake out a height and color ID mask. I used these textures to build out the rest of my maps in Substance 3D Designer.

METHOD #2 — Grab individual mesh Height maps and scatter them using a tile sampler. This is how I built my landscape materials. In essence, all I did was find sculpts that I already had available and grabbed Height maps of different angles to use in Substance 3D Designer. For the leafy Height maps, I used the Fibermesh feature in ZBrush. It has a library of fibrous geometry to choose from, like grass.

I applied most of my materials using RGB masks, which saved me a ton of time. I found that I only needed a handful of materials and could tweak the values of the entire scene with just a few clicks. This was especially important during the polish phase.

At one point, I was having a hard time getting my materials to have proper reflections. Some assets looked flat even when the Roughness was set quite low, and the normals were exaggerated. To fix this, I opened Unreal Engine's Base Color and Roughness visualization modes and looked for problem areas to address, such as colors that were too bright. With RGB masks, I could swap out a whole material if I needed to, and it would have a widespread impact in real-time.

For some of the architecture, I used a combination of trimsheets and RGB masks. This is my preferred workflow when I have a trim that repeats often, and I want to add in variation. I split my UVs into 2 sets.

UV Set #1 — Trimsheet — Created before warping — often has overlapping UVs if the trim has been duplicated or modified. This is used for normals.

UV Set #2  — Warped Asset — All shells re-packed into the 0-1 space so that none are overlapping. This set is what will be used in Substance 3D Painter to generate RGB masks. This workflow lets you add more environmentally accurate details to your final asset, considering the new position and ambient occlusion data. Once the textures are brought into the engine, you can toggle between UV sets using a Static Switch Parameter.

Alternatively, if I have a fully textured trim I do want to use, I use some shader logic to add gradients. For example, the graph below shows my method for adding moss to the bottom of all my RGB assets. Since it's using world space instead of UVs, it ignores the position of my trims. I just blended it in with my blue channel, so I didn't need to add a bunch of extra textures to my shader, which was already pushing the limits. I did include a little world-aligned texture to give me the option to mask out the effect. 

Assembling the Scene

Once I had all my props created, it was easy to replace my blockout since I'd already established my kit pieces. I could re-import a given mesh, and it would auto-update the scene.

Here's an image showing how I assembled my ruins using my modular kit pieces. In hindsight, I would have added a plain mortar mesh to this set — it would have been a good blending tool.

After the main architectural pieces went in, the next step was blending it all with rocks, mounds, and foliage. When determining placement, I tried to consider how I could best frame my focal point. I started by creating an overall 'U' shape with larger rocks and mounds. I placed piles at the base of my architecture to ground them, and around the paths to vary the landscape height. I placed ruins in the background to create depth and used the resulting leading lines to create secondary points of interest.

Next, I blended these main piles outwards with smaller rocks, then pebbles, and then finally, foliage. To accomplish this, I loaded my foliage paint tool with everything, including rocks, and varied their sizes and orientation. I would often prevent the tool from painting over certain materials or meshes.

That way, I could easily paint in between my path stones, put moss foliage on top of just my moss material, etc. Afterwards, I took my time to polish and paint materials by hand to ensure natural-looking transitions.

Lighting

I wanted my lighting to accomplish a few things. I wanted dappled, forest lighting, an obvious focal point, contrasted silhouettes, and a sense of depth. I also wanted the piece to feel like more than just a pretty picture — it needed to be a little creepy.

I tested several lighting setups before I was satisfied. To be honest, the approach I took to get this final look was a little bit backwards, but either way, this was my process:

Establishing the Focal Point

  • I illuminated the majority of the scene with the Directional Light.
  • I configured the sky light and made it a bit cool-toned. I used real-time capture for my scene, but a cooler-toned HDRI could work too. I feel like the juxtaposition between cool and warm tones is what makes this lighting more stylized/fantasy.

This is how my scene looked with those two things turned on. My goal was to get some interesting, realistic-looking shadows on all the foliage and trees. In previous versions, I noticed my shaded areas lacked realism, and my final scene is pretty dark. So, I decided to start with realism first, and then curate the focal point second.

  • Next, I placed shadow blockers to frame my scene and create a vignette-like effect. I used these on the background trees and foreground. To do this, you can place a shadow-casting mesh anywhere in your scene and check on "Actor Hidden in Game" and "Hidden Shadows".
  • Once the shadow blockers were in, I adjusted the source angle of my directional light until I achieved a soft fall-off.
  • Next, I added a spotlight to intensify the light on the focal point and made it a little warmer. My goal was to make a gradient spanning outward.
  • I set up soft candlelight using point lights to draw the eye in and add more warmth.

Emphasizing Depth

  • I added subtle volumetric fog and turned on volumetric shadows. I wanted a gradient of fog coming from the ground up, so I raised the "Fog Height Falloff" to 1.
  • I adjusted the color of the fog just a little to match the natural light. Then, I pushed the fog backwards using "Start Distance" so that it began just beyond the focal point.

Contrasted Silhouettes

  • I used one or two extra spotlights to highlight the silhouettes of my ruins and my hero tree. I made sure this effect would be relatively subtle and come from the same light direction as my sun.
  • I placed fog cards behind key structures and a few in the foreground as well, to make the atmosphere look cohesive.

Dappled Forest Lighting

  • I added a light function to the directional light to make the dappled effect. This is basically just a noise that drives the intensity of the light. You can plug any grayscale map into it. For mine, I combined a Perlin noise with a branch texture to fake clouds and shadows from the trees.
  • I decided whether to use Ray Tracing/Megalights on a per-light basis. For example, I found that switching on Megalights would cast softer shadows that I really liked, but also had the side effect of creating some artifacts.
  • NOTE: If you get static-looking artifacts in your shadows when using Ray Tracing, sometimes it helps to raise your Final Gather Quality to at least 5 and then raise the "Samples Per Pixel" on your main lights until the artifacts disappear.

Bonus tip: Enhancing material reflections

This is one of my favorite tricks I learned from my mentor, Jon Arellano. If you place a point light low to the ground where your sunlight hits, lower the intensity to something subtle, and increase the attenuation radius quite a bit, you can cast subtle bounce light across your materials. It’ll create some pretty reflections and liven up shadowy areas. If you look at my stone path in the following image, you can see the difference this makes.

Post-processing/edits

Once I liked my lighting, I rendered out an image and looked at it in different contexts — on my phone, on different monitors, and scaled down to a thumbnail-sized image. I tried to consider how the scene would most commonly be viewed. For example, since most people scrolling on their phones would see a tiny version, I chose to exaggerate certain lights more than I had originally thought necessary.

Next, I edited it in Photoshop, experimenting with different filters and settings. Then, I used that edit as a reference to adjust my Unreal Engine scene to match it. Sometimes, it just helps to have a visual guide to follow before taking the time to adjust all the little settings. 

Final Thoughts & Recommendations

This process taught me a lot about project management. If I could offer advice to my fellow artists, it would be to establish which things are most essential to your scene early in the planning phase and re-prioritize this list often. I always tried to consider what would make the most visual impact and do those things first.

For example, if one material covered most surfaces and was close to the camera, it was worth spending the time to make that material high-quality. Meanwhile, some of my background trees are not my best work, but you don't even notice those in the end. Second, if it's your goal to work in games, I would suggest learning a bit about the development side too. Ultimately, when you work at a studio, you're collaborating closely with people from other disciplines, and your assets need to be set up for those purposes.

I think it's important to get familiar with things like naming conventions, collisions, LODs, draw calls, shader complexity, prepping assets for potential animations, level design, and other gameplay-related considerations. That way, you can build good habits from the start. And last, I want to emphasize the importance of community and surrounding yourself with other artists. So many of the breakthroughs that I've had have come from getting feedback and learning from my mentors, friends, and peers.

Special thanks to Jon Arellano for teaching me so many of the workflows that you've read about here. This piece was truly a collaborative effort, and I couldn't have grown as much through the process if it weren't for those who supported and inspired me, or even just told me the truth when something wasn't working. For that, I am so incredibly grateful!

Also, if you've made it this far, I really appreciate that you took the time to read this, and I wish you the best on your art journey.

Heather Geiger, 3D Environment Artist

Interview conducted by Emma Collins

Built for the Game & Digital Art Industry
Get Our Media Kit

Comments

0

arrow
Type your comment here
Leave Comment
Built for the Game & Digital Art Industry
Get Our Media Kit

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