Hemlock Forest – Environment Breakdown – Jonjo Hemmens
I’m Jonjo Hemmens, an Environment Artist currently working at Rocksteady Studios. I graduated from Falmouth University in 2019 and have previously worked with Nvidia, Creative Assembly, and Antimatter Games.
After spending a year creating hard surface props, I had the itch to pick up something new and fill a gap in my game art skill set. I decided to make learning organic workflows a priority for my next project which was close to the opposite of what I’d spent the last year working on.
Developing the skills to conquer the fear of foliage was the biggest goal. I wanted to push my skills with Speedtree, Substance Designer, and Zbrush further and to give myself the confidence to tackle organics in my personal work which is something I’ve always avoided.
One of my key inspirations for the project was watching Jon Park doing a painting instructional video for the CGCore community. I found the image he was studying and the way he broke down the forms and the layers of the environment to be very inspiring. From this shot, I started building up similar references and inspiration. I found a lot of similar references to the image Jon was using in the American North West, so I decided to set my forest there.
The motivation for this project was to spend as much time as I needed to find my feet with organic workflows and learning the tools I needed to create the assets for the project. This is the longest personal project I’ve worked on, but it was very important to me that I built up a strong set of skills to be able to create organic assets in the future and to not shy away or feel the need to lean on external sources to create the assets I need.
Learning Speedtree was one of the most important parts of the project. With a lot of learning and persistence, I was able to create all of the variations for the Western Hemlocks and the Red Cedars, as well as the branch atlases, pretty much all in Speedtree. To ease me into Speedtree, I started with something simple, creating the fronds for my Western Sword Ferns. As you can see, it’s just some leaves I modeled and baked, on a mostly straight branch, nothing impressive, but it started to build some familiarity with the tool.
Creating the branches for the Western Hemlock was a big step up at this point. I modeled and textured some high poly needles and pine cones using Maya and Substance Painter. I then brought them into Speedtree to assemble some branches using the “cluster” template. The template is already set up with a 2D perspective which gives you a solid idea of how it’s going to fit onto your atlas. I switched out the leaf meshes for my own, applied my materials, changed the leaf generation mode to bifurcation and set a low threshold, then played with a range of settings until I was happy with how it compared to the ref.
Once I was happy with each branch, I used the export material tool which renders out your branch. Keep the whole branch within the red bounds in the viewport, as this is the area Speedtree renders. For my first tree branch atlas, I definitely think I could push this further by creating some more useful branches and make more use out of the space in my atlas, but it ended up doing the job.
Final Albedo / Normals of the Western Hemlock Atlas
The albedo across my branches is really uniform and I wish I had utilised the variations slider before I exported all my branches. The variations colour inputs are set to handy green variations by default, and the slider allows you to modify the intensity. This can provide some subtle colour variations to your materials like your needles or leaves. Even just using a small amount makes a big difference.
When learning a new tool or workflow it’s possible you’ll miss things like this. I discovered this tool far too late into the project to make the most of it, but missing a feature like this is pretty hard to forget; I’ll definitely be making the most of it on future projects.
With my branches ready I started making my trees. For my first trees in Speedtree, I went for the Western Hemlock. The Hemlock isn’t a particularly complex tree so it was great to start learning the tools with.
The first step was to import my atlas and make some branches. I set up new materials for my atlas and used the Leaf Mesh Cutout tool to split my atlas into leaf meshes. The Speedtree Youtube channel demonstrates the tool concisely and is definitely one of the most useful tools in the program. One thing the video doesn’t mention is that if you click off Speedtree or off the Window, the tool will close instantly. If you haven’t applied your new branches to either the high, med, or low inputs, you will lose your progress.
Detailed drawing by Matt Strieby (2018.03).
With my leaf meshes ready I moved onto the foundation of the tree. The Hemlock doesn’t have too many difficult elements. I struggled to get the tops looking correct on some of the medium and large-sized trees as I was trying to do all of the branches and leaves with a single set of nodes. Later on, I realized that I could have multiple sets of branches, some that would cover the lower half and some that would cover the top half. This gave me a lot more control over areas of the trees that just had different volumes.
I wanted to create a range of tree sizes and variations for each, as I knew with only two types of trees, repetition could be a problem. I ended up making 3 large, 3 medium, and 4 small types for the Hemlock. Within these variations, some are a bit thinner, some are thicker, and the small ones try to show the tree at different stages of early growth.
Getting the top of the hemlock to stoop properly presented a bit of a problem. I tried to add additional gravity to the trunk, but this was quite destructive. I found the option to convert my trunk into a hand-drawn asset, which allowed me to use nodes to shape the trunk.
Hand drawing can be used from the start of a tree and is best demonstrated in this Speedtree tutorial. Although I only used it for one small problem, this tool opens up a lot of potential for my future trees.
The second set of trees I made was the Western Red Cedars. I broadly followed the same process for these but applied a lot of what I learned from doing the hemlocks previously. I think these trees lack a bit of variation, but I was happier with some of the finer details.
I added some bare branches into the Red Cedar atlas, which added some noise and helped break up some of the thicker clumps of needles.
I was pretty happy with the asymmetry of this variation. It gave a good sense of gravity and showed the weight of the dense branches pulling down on an old branch. However, I found that it blocked a lot of sight through the forest, so I had to use it sparingly.
I think for my first set of trees in Speedtree, I’m pretty happy, but there’s so much I still have to learn about how to introduce more variety into my trees. There is still so much for me to learn about the tool and the art of creating trees.
In the future, I want to tackle something a bit more fantastical. I’m massively inspired by the works of Adrien Paguet-Brunella. He posted some incredible trees that he worked on for Assassin’s Creed Valhalla. His profile is filled with some of the best foliage work I’ve seen in games. I hope to be able to make some hero trees like this in the future, rather than just generic sets with small basic variations.
Approach to making plants/flowers/weeds/grass (basic workflow talk through)
As this was my first attempt at creating foliage assets, I had no idea how to create shrubs and plants properly. My head had been in hard-surface mode for the past year. To start learning some good workflows, I referred to Peyton Varney’s Protégé Foliage Tutorial. I also checked out Karen Stanley’s tutorial which follows similar workflows but has some excellent tips too. I’ve shared these tutorials more times than I can remember as it contains a lot of incredibly useful tips. I found that I prefer to assemble my atlas layout in my blockout stage before I start the highpoly stage and I usually texture in Painter over designer. Instead of repeating their tutorials back to you, I’ll cover the areas where I’ve deviated from their tutorials.
To work out what I wanted to model, I found a Native Plant Guide created for King County in Washington which was roughly where my scene was set. This website had all of the native plants found in the region, which I spent a good few hours sifting through. The website has tonnes of information about each plant as well as some shots for you to get a good idea of the type of plant. I ended up picking the plants based more on what I felt would be interesting or challenging to model over ones that would definitely be found in a forest.
The most interesting plants I ended up picking were the Rattlesnake Plantain, the Longipetala, and the Camas. Each of them had some really difficult modelling challenges and looked distinct.
Here are the blockout models for the Longipetala plant right before I brought it into Zbrush. I have the whole atlas blocked out so I know when my sculpting pass is complete, I can export and bake. As you can see in the screenshot, I’ve got my material colours set up early so I can create a transparency mask quickly. It also helps when you want to apply a material to a fiddly part of your mesh that would be frustrating to hand paint. I made the pollon tips on the flowers a yellow ID so that I would save time having to manually mask out each one. The blue strip on the side is a bit of a generic stem that I will use when assembling tube meshes to attach the flowers to the plants.
In the tutorials, Peyton and Karen use Substance Designer to texture their plants, but I’m a bit more capable with Painter, so I use that instead. Because I planned on creating a lot of plants with similar materials, I created a set of Smart Materials in Painter for both the petals and the stems/leaves. Both materials were generic by design. They included basic colours, roughness variation, micro height details, and some basic subsurface values. They were designed to be built upon and to save me from having to start from scratch each time. When starting a new Painter file, make sure you add the opacity and scattering channels before you bring in smart materials using them.
I then apply my smart materials and use the color selection mask in Painter to isolate each part. To save a bit of thinking, I always try to use the same colours for each element. For example, I always use the same pink hue for the opacity mask.
Rather than break down every material I made, I would push people towards the Painter Tutorials tutorials of both Jason Ord and Rick Greeve. Despite the fact they both cover hard surface assets, they cover a lot of fundamental skills in Substance Painter that I use regularly to get solid results with any asset you decide to texture.
Pushing Your Texturing Further by Jason Ord covers every part of the texturing process from how to identify good references all the way down to setting up your own base materials and building up all the nitty-gritty details.
When I’m happy with my textures, I’ll export and bring them into Maya and start cutting the atlas out into individual parts. Assembling some basic pieces first makes life a lot easier. With the long petals, I had a flat circular base on which I would layer the leaf clusters on top to give the plant some volume. If I plan on bending or deforming a mesh, I’ll add some additional edge loops, then remove any that don’t significantly improve the silhouette or shape of the plant when optimizing.
For the stems of the flowers, I created a triangular tube. I found that these looked far better than flat planes from all angles, and were only marginally more expensive. This variation of the plant is quite costly from a game development perspective at 912 tris, making it one of the most expensive ground plants in the scene. This was by far the most detailed plant in the scene and it’s used quite rarely in specific spots, unlike some of the other plants like the clovers which are used densely and almost everywhere.
Here are some Marmoset renders showing the plant off in all its glory. Although there is some clipping in places, it’s almost impossible to avoid this (especially when you add wind effects in Engine). I was pretty happy with these in the end as they look quite close to their real-world counterparts, and they introduced some much-needed colour variety into the scene.
Shot of the Longipetala in Marmoset
Shot of the Longipetala in amongst the other foliage
To challenge myself and to push my skills with the tool further, I created all the main materials for the project exclusively in Substance Designer. Learning more about the strengths of the tool and building good workflows was a big goal for me.
One of the first things I created in the project was the Western Hemlock bark, which was by far the biggest learning curve for me. I spent about a month fumbling around with this material, finding my feet and re-starting a couple of times. Creating the fractured bark pieces accurate to the reference was very difficult and I still feel like it could be done better.
Hemlock Bark Material
One of my project goals was to build up experience in Substance Designer. As a games environment artist, Substance Designer is primarily used to create tiling materials but can be used in many different 3D workflows, such as scan processing, asset texturing, baking, etc. It’s an incredibly powerful tool, and I hope to be able to show my process.
The first material I created for this project was the Western Hemlock Bark. This material was seriously challenging for my skill level, but it provided a lot of opportunities to learn about shape generation and detailing.
This was the primary reference for the material. I picked it because I liked the way that the bark plates split and peeled outwards. The sawn knots in the wood also have a really nice circular pattern. I thought they would be a lot of fun to attempt. My material definitely ended up deviating quite a bit from the original reference. My knots are quite large and chunky, there is a lot more albedo contrast in the crevices between the plates. These changes were made to improve the look in-engine, but aside from that, I can see a lot of flaws in quality and detail that I didn’t achieve compared to the ref.
This would be the point where I would break down the graph, show screenshots of my work, and guide you through how I achieved my results. Unfortunately, my graph is an absolute disaster. The first half has some sense of structure, but as soon as I start detailing, it becomes a massive pile of un-readable spaghetti. I am really not proud of this one.
Returning to this material for this article, I tried for a few hours to un-knot this mess, but there’s no saving it. I could not tell you really how it works anymore, and If I wanted to make a significant change to any of the details of this material, it would be a real struggle to find out where any changes happen.
I realised how bad this was too late to fix it and instead I made very sure that my future graphs had proper structure so that you can follow the material as it develops and see where meaningful changes are being made. The graph for my dirt and needles material is much cleaner. I’ll talk about how I managed to downsize my graphs and my structure decisions for this a bit later.
Dirt and Needles Material
The base of any forest floor is usually scattered with lots of broken branches, needles, dead leaves, and pebbles, as well as a lot of plants.
Creating the base dirt can be broken down into a couple of steps. Although there’s a lot of nodes early on, I’m basically just trying to create a height map with enough interesting primary, and secondary forms to avoid any obvious landmarks when the material tiles across the landscape.
This noise gets pushed through a directional wrap which blends my noise map with a pre-made dirt map. This adds a lot of dirt details super quickly and blends nicely with the height information made previously. After that, I sample some other noises to add some extra details, and I’m done.
With the dirt base ready, I moved on to creating some of the assets to scatter around the material. The material is broken up into four different lanes to make it easier to see where a change is being made. The mask blending samples from the previously scattered assets helped create a black and white mask to feed into the next scatter to prevent assets from overlapping awkwardly.
Not only is it easier to understand, but it’s easier for me to now re-sample the assets I used in other graphs and materials which will save me time in the future.
Foliage Painter Tool
Unreal Engines Foliage tool allows you to paint assets across your level really quickly. This is particularly useful when you’re trying to create a forest that has many different types of plants, trees, rocks, sticks, and shrubs. Hand placing this many assets would take a very long time for a large scene.
The tool allows you to add static meshes, then assign parameters for how it will be painted into the scene. For each plant, you can assign different values for how densely they’ll be painted, what kind of slope angles they can be painted on, etc.
I set up most of my assets in the tool so that I could quickly paint foliage throughout the whole level.
Terrain Sculpting Process
I began by using large brushes, sculpting my large forms. I decided to have the scene to have one large hill, then pathways leading from the base of the hill, all the way to the top, with waterfalls and rivers to break up the middle of the scene.
With my primary forms in place, I paint my materials onto the landscape. I use it to decide where I would place my set dressing elements before I started sculpting my smaller details. I used the river rocks to define where my rivers would go, the mud for the paths, and the moss for dense patches of foliage. Wherever there are really steep height transitions, I usually use rocks to form a cliff face. Adding cliffs and rock clusters really help add structure to the scene, treat them like you would use walls in an interior.
When I set dress, I usually go from big to medium, to small. I start with the largest assets such as boulders, mountain rocks, and trees. Getting these in early saves you time and energy by either blocking off spaces and giving you a smaller space to set dress with your smaller details.
Once I’m happy with my larger assets, I’ll scatter my foliage in the mossy areas, add some embankment meshes to the pathways, then hand place some rocks and tree stumps to make some areas of interest.
By being creative with my camera angles and set dressing, I was able to make the scene feel much larger than it actually is. As you can see in this top-down shot, most of the static shots take place in a pretty small part of the scene. The areas in red here aren’t seen in any of the renders because they’re occluded or the camera just never points in that direction.
Experimenting with compositions and camera angles early on helped me save so much time, and I didn’t have to dress a massive landscape in the end, just the areas that were most important.
Unreal 4.26 Screen Space Global Illumination
One of the new beta features in Unreal Engine 4.26 is real-time SSGI (Screen Space Global Illumination) solution. Global illumination simulates lighting interactions with geometry and material surfaces. The scene lights will bounce between surfaces, sampling colours from the light and the bounce surface to create more realistic lighting.
Here is an example of it on and off in my project to better illustrate what it does.
As you can see, the SSGI adds a lot of bounce light in the crevices. It really helps to remove some of the darker values and softens the values out nicely. The values I’ve used here are the highest I can set, so in some places, it gets a little too intense.
One of the biggest upsides of using this is that it is super cheap to run, and provides pretty good bounces across your whole scene.
There are a couple of downsides to the tool. First of all the global illumination seems to get less intense around the edges of the frame, creating a vignetting effect. I found that I was relying on the SSGI to raise the values of my shadows, but on the borders, I was getting really dark values. (Example)
During my cinematic, I noticed that as the scene moved past certain objects, you can see some pretty severe flickering that doesn’t look correct at all.
And finally, I noticed that it could flatten the normals of some assets depending on how intense the SSGI was on that asset. On this rock, you can see that some of the heavier cracks almost disappear.
The tool is in its beta stages and I felt like it was still worth using for my project, despite some of the issues I ran into.
To enable the SSGI for your own project, you only need to open up your project settings and search for it, then tick the checkbox.
Once it’s enabled, you can change the intensity with a post-process volume by modifying the Indirect Lighting Intensity value.
If you’re using Unreal Engine 5 or 4.27, you have other options. Unreal Engine 5 uses Lumen which comes with fantastic global illumination by default, and Unreal 4.27 has a plug-in for NVidia’s RTXGI tool. This feature might only be useful for those still working on 4.26 or for those looking for a low performance cost solution to GI.
Setting up Lighting Sub-Levels
Lighting the forest was particularly difficult because of many different camera angles, assets getting in the way. Once I was happy with the primary forms of the forest and I wasn’t going to make any major layout changes, I started introducing sub-levels that would have specific models and its own lighting set up for particularly tricky shots. Sub-levels are just like regular levels but can be toggled on or off in your current level. They’re also super handy if you’re working on a collaborative project.
Some of my sublevels for my cinematic shots
As I mentioned previously, the forest isn’t particularly large, and to save myself some time it was a lot easier just to build some of the shots with sub-levels. This meant that I could add a dozen or so large trees to a shot without blocking the sun for half the level. I could also have a different direction for the directional light in whichever shots I wanted.
If you intend on using sub-levels and you have a cinematic, make sure you add a level visibility to your sequence, or the screen will go black.
Atmospheric perspective is the effect the atmosphere has on the appearance of an object as viewed from a distance. I learned about this phenomenon through James Gurney’s book, Colour and Light, and wanted to achieve the same results. He describes it as; “The bold colors of the foreground gradually transform until they match the sky.”
To simulate this effect in UE4, I tried to create a post-process material that would change the colour of the foreground and the background based on scene depth. Through some research online, I found that a good material for this already existed in Quixel’s Medieval Game Environment Project.
The material has a colour value for both the foreground and the background. Here are some examples just to demonstrate how it works in my scene.
On the left, I’ve got the scene without any of the atmospheric perspective enabled, and my settings for the shot. You can see that my settings push the blues in the background without adding any blues to the foreground. I used some more extreme examples on the right to illustrate how it’s working. Although these are completely impractical they do a good job of showing the transition. Even if you’re not interested in using atmospheric perspective, the ability to manipulate colour hue in the foreground and background is a really powerful tool.
Cinematic Rendering Resources and Tips
For the cinematic, I wanted to mimic some of the forest drone flythrough videos I’d seen on YouTube. They usually have simple, slow-moving camera movements through the forest, showing off some beautiful scenery. The simple camera movement was an excellent choice considering I’m a cinematics noob. I’m not an expert, but I picked up some useful tips that could help if you’re trying to achieve similar results.
Particle and Wind Delay
Something I noticed on my early renders was that the particle and wind systems weren’t doing moving until very late into the cinematic. This was because these systems need time to start when you start rendering or playing the scene.
To make sure these things kick off properly for your cinematic, you can add an engine warmup count which starts all of these processes without rendering out any frames. I added a 600 frame delay, which is probably a bit over the top, but with 4K renders, you really want to make sure your wind and particles aren’t still booting up.
The movie render queue is a really fantastic tool for cinematic rendering and you can do a lot of interesting things with it to enhance your renders. I’m going to talk about Will Faucher’s channel later, but here are a couple of videos of his to help you understand the tool and what it can do;
Subtle Camera Shake
In some of my shots, I use just a little bit of camera shake which makes the camera shots feel a bit more organic. Adding things like this to digital work help push things closer to realism, which is really hard to achieve. Here’s a great tutorial that covers how to set it up for yourself. Personally, I prefer really subtle camera shake, so I keep the values low.
If you want to know more about camera shake / cinematic post-processing in general, I recommend a series of blog posts done by Alex Tucker;
There are some great tips and breakdowns here to help people understand how to control different types of post effects for their scenes.
Hiding assets from certain shots
If you have some troublesome assets that you didn’t quite get sorted into the right sublevels, or an asset is just being difficult for this one particular shot, you can hide individual assets just for your shot.
Here I’ve hidden some of the taller trees in the shot to better shape the background. I simply dragged the asset from the outliner into the sequencer, added an “actor hidden in-game” track. From there you can keyframe whether the actor is visible or not for the shot.
You won’t be able to hide foliage-painted assets, as the foliage painter adds all of those assets into an instanced foliage actor. I ended up just replacing some of my painted trees with hand-placed ones so I could hide them.
One of the most valuable resources I came across during the project was the videos by Will Faucher. He has a lot of learning content focused on Unreal Engine and Da Vinci Resolve. In his videos, there are countless useful tips, rendering tweaks, and breakdowns to help you understand how he pushes his cinematics further. I highly recommend his content for anyone looking to do cinematics in UE4.
Before I got stuck into this project, I wrote for Game Artists before about my Vending machine project, if you’re interested in hard surface props, there should be something there for you.
Despite being new to organics and foliage, I really enjoyed working on this project and learning more about the Substance and Speedtree tools, and I hope you were able to learn something from my project too. If you have any further questions about my work, feel free to send me a message on Artstation and I’ll do my best to get back to you.