Ilya Ivanov did a great breakdown of his Possessed Tree UE4 project created within CGMA course Vegetation and Plants for Games by Jeremy Huxley.
Ilya Ivanov did a great breakdown of his Possessed Tree UE4 project created within CGMA course Vegetation and Plants for Games by Jeremy Huxley.
Introduction
Hi! My name is Ilya Ivanov, I work as a Level Artist at Sperasoft Studio in St. Petersburg, Russia. Before that, I worked at Trace Studio on such projects as Call of Duty: Infinite Warfare, Arktika 1, World of Tanks and others. In addition to the main job, I do freelance and had an opportunity to work on such projects as Armored Warfare, Skyforge, and Mutant Year Zero: Road to Eden.
I got a master’s degree in electrotechnology in The First Electrotechnical University LETI and during my studies, I was engaged in self-learning 3D graphics, and developing my skills in music and drawing.
Since school, I’ve been interested in the games series WarCraft, Command and Conquer, Heroes of Might and Magic, Disciples, Dungeon Siege. But the undisputed leaders for me have always been such games as Diablo, World of Warcraft and Ragnarok online. In my opinion, fantastic worlds of these games shaped my taste and enthusiasm and inspired me to create environments for games.
Start of the Project
The project Possessed Tree appeared out of a desire to improve skills in working with vegetation since 99% of my entire work was mainly hard surface and it lacked something alive.
Fortunately, I caught a sight of the CGMA course Vegetation&Plants for Games by Jeremy Huxley and I immediately became one of his first students. Feedbacks, skills, advice on composition, sculpting and texturing plants, working with the shape of both plants and stone structures and trees that I received during the course, were very useful and highly affected my project.
First Steps
My work began with a single concept painted by Marek Madej for the game Witcher 3: The Wild Hunt. I realized that I wanted to create such a scene! I like the Witcher’s fantasy setting, but the game is also very realistic, so this concept was almost perfect for my purposes. There was a lot of vegetation in it, and it also depicts a dark atmosphere that is not so easy to express.
Next, I collected the references for the main elements, which I thought could be in my scene. I decided first to determine the type of the terrain and what plants and trees can grow on it, what materials can be used, stones, various ruins and so on. The main task at this stage for me was not to invent something new but to use what nature has already made for us. For many of my references, I used the Quixel Megascans library, where I found a huge number of objects that were broken into biomes, which helped a lot in my work. I used the library of materials and objects more than once. Many thanks to the team for the great work!
Having analyzed my main reference, I decided that the focal point in my scene would be the tree. I chose a very interesting species of oak – the oldest in the world, which is about 1500 years old!
When I proceeded to the concept piece of the scene, I was trying to stay close to the concept, but as usual, it did not look so good in 3D. I changed the landscape, rearranged the trees, changed the composition of stones. In the beginning, the scene looked like this:
I got a lot of advice from Jeremy about how to work with the composition, how to make an interesting shape of the stone structures and that the scene needed to be built based on the atmosphere and feeling.
Around the 3rd week of the course, I already had a completed block-out level. Using Maya and ZBrush, I created simple trees, branches with leaves and stones to fill the scene. They all were changed later, and only the stones remained untouched until the very end.
Storytelling
As my work progressed, one thought didn’t let me go. I felt that I had definitely forgotten something important.
I completely forgot about any sort of storytelling and didn’t work with my reference correctly. The concept worked very well with the general atmosphere in the scene, but it did not have an interesting story behind it which is the most important part of any environment.
I paused my work and decided to continue looking for an idea and story references. At that time, an interesting artist Ross McConnell caught my eye. He creates maps for tabletop RPGs and in his artwork collection, I found the starting point of my whole story of the scene. In addition to that, I found a couple of screenshots from Hellblade: Senua’s Sacrifice and decided to add some elements from this amazing game to my surroundings.
The idea was the following: the tree grows in the place of the malignant energy concentration and to stop the spreading it was decided to tie the tree down with bewitched chains. The chains send energy to monoliths enchanted to restrain the evil energy. Because of the amount of accumulated negative energy, the monoliths have almost collapsed and could no longer contain the evilness as before and the negative energy slowly began to appear on the surface and form drops of blood.
Creating Assets
The foundation was set and the story was described. It was the time to put everything into practice and work on the assets.
During the project I worked with the following tools: Maya, ZBrush, Affinity Photo, SpeedTree, UVLayout, Substance Painter, Substance Designer and Unreal Engine 4.
I tried to avoid working in the vacuum as much as possible, which means that each asset should have fit the scene and be the part of one whole. I did constant editing of the materials and textures, adjusting light and color in the scene, and so on. This took quite a lot of time, but in the long run, it worthed it. Do not dwell on how it is turning out, but try to make it as good as possible and look at the whole picture, – that was my thought.
Vegetation & Simple Objects
For simple objects, I created a simple M_BaseProps shader that does not contain anything over the top. It allowed me to control the specular level from the red channel Base Color, change the intensity of the color, specify metal or non-metal, change the surface roughness immediately.
For plants, the standard two-sided foliage also gave more control. For SSS, I used the base color texture but reduced the intensity.
Stones
Stones are one of the main components of the environment and the main task was not to overload them with extra details and leave enough simple forms that would work in almost any situation. I chose a more angular silhouette to convey an atmosphere of tension and anger.
The same material was made in the Substance Designer and further processed in the Substance Painter.
Also, I made several sets of small stones with a more rounded shape for the additional detailing of the main array of stones.
Trees
At first, I made trees and branches in Maya and ZBrush, but it took a very long time and the result was not very realistic. In the end, I decided that if I want to achieve a believable, beautiful and realistic effect, I need to use SpeedTree. And it wasn’t a mistake! I created 4 variations of the trees in one evening and immediately exported them to my scene. There is a very convenient feature in SpeedTree: when importing to Unreal, it grabs and imports materials as well as lightmaps. What a great program!
Roots
I used the roots to detail the slopes. I made them with ZSpheres in ZBrush and also used an amazing plugin for creating the trees ZTree by Ignacio Cabrera Peña. Texturing was made in the Substance Painter.
Leaves
For the leaves, I used a stunning library created by Wojciech Piwowarczyk. The same leaves but blended with the soil material were used for the terrain.
Branches, Bushes & Grass
These assets were taken from the amazing Quixel Megascans library! It was exactly what I wanted to see in my scene: dead twigs, dead branches, dry plants, and the coolest fern. It helped me to save a lot of time, and I’m immensely grateful for.
Making grass was a bit challenging. I took 4 kinds of plant grass, combined them into an atlas with the help of Substance Designer, cut out the geometry by the silhouette and combined it in small clusters the way it works in real life.
To create an atlas I used the Atlaser by Bruno Afonseca nodes.
Ritual Stuff
The idea of adding simple objects like crows skulls and beads was taken from Hellblade: Senua’s Sacrifice.
Shaders for Mossy Objects
The moss was originally made from a photo from textures.com and corrected for the needs of the scene.
The shader was used on the objects where the moss should’ve appeared. I laid it down from above, made a transitional layer, and mixed it with a mask to remove the smooth edges. There is also tessellation only in the moss area and a small push for volume. But the most important thing in the moss is Fuzzy Shading which allowed to give such a fluffy, volumetric effect.
In addition, I added detail normal map because the size of the mesh can vary, and it is required to preserve the clarity and readability of the textures.
Spooky Monolith
As the idea of the scene was formed, I knew that these monoliths should stand out. They are disfigured, cut up by stretched chains, the surface became ashy as the blood from the earth starts to seep through. It turned out very gloomy and cool!
The sculpture is made in ZBrush. The material is the same as that of ordinary stones, plus additional work in the Substance Painter with different generators and masks.
Chains
For the chains, I made a simple geometry and processed it in ZBrush. As the Tree and Monoliths were already arranged in the scene, I let the chains go through previously prepared splines and transferred them to the engine with the help of MASH in Maya.
It was possible to do everything with blueprints at once in Unreal but as usual, the smartest solution comes when everything is already done.
Possessed Tree
The Possessed Tree is the protagonist of the whole scene. The reference itself dictated how it should look: strange, terrifying, interesting.
The basics were done using ZSphere in ZBrush. It helped to keep some kind of angularity of the tree structure. Then I made retopology in Topogun and added more branches in Maya using the spPaint plugin.
The mapping was very simple since I unwrapped it in the UVLayout program and I had only 3 kinds of unique additional branches. UVLayout has the ability to find a similar geometry and unwrap it equally despite the small changes in the size, for example. This saved me a tremendous amount of time!
I made the bottom part of the tree as if someone tore the bark off and it became seen how the blood flowed through the tree.
Thanks to David Chumilla Liccioli for the texture of the oak. Excellent quality scans! I just made small adjustments to the albedo to achieve the color that I needed.
Terrain Shader
The shader was made based on the super detailed explanation from the guys from Sane. I am very grateful for the work. I believe, a lot of information is mandatory for learning.
My shader came out a bit expensive, but since I wanted to do it nicely and learn as much as possible, I decided to leave it as it was and did not remove tessellation and the ability to draw puddles. I limited tessellation with camera view, which helped to improve the performance.
Puddles
I made puddles as a translucent material with a depth effect and a slight dithering effect along the edges to remove sharp boundaries.
Materials
With the help of the Substance Designer, I created materials for the terrains. There were 5 materials: Puddles, Soil, Soil+Roots, Soil+Rocks, Soil+Leaves. Soil became the main material and further materials were added to it through the heightmaps.
I positioned the shapes on the canvas through a series of tile sampler nodes, mixing different masks and noises, and overlaying / splitting / adding them on top. Various small objects such as leaves, twigs, pebbles were added to them.
The main thing, in this case, is to get an excellent reference and not to be afraid of making mistakes in the process. The more experiments you do, the better result you get. I advise you to look at tutorials from Josh Lynch and materials from Chris Hodgson. They are incredible masters, and I learned a lot by studying their work.
Light
Working with the light took me a lot of time. It was very difficult to achieve realistic lighting with such clouds as I had in my scene. I had to constantly change almost every parameter, the angles of light sources and the intensity of the skylight. But the pain was worth it!
The lighting in the scene is static, with baked shadows to get the best result. All the work with lightmaps, except for the lightmap for the tree, was taken over by Unreal itself and it did really well!
There is a very informative video about the light settings. I advise everyone to take a look at it:
In the scene, HDRi map is used as a source of Ambient Light, Direction Light, and Sky Light. There are no additional light sources. In order to get the most out of the photo of the sky, in the material for the skysphere I used the DeriveHDRfromLDR node.
Volumetric fog hugely influenced both the lighting and the overall atmosphere, bringing volume and depth to the scene. Everything immediately began to feel more alive.
Post-Processing & VFX
The post-processing was the simplest part. I made a small color correction in Affinity Photo, some work with contrast and level, several tweaks in LUT and it was finally loaded into Unreal. I’m a fan of the idea that you need to get the maximum out of the picture without post-processing, and then use it only to polish it a bit.
There are few effects in the scene and they are barely noticeable. They were added to simply emphasize what is already in the scene. I added dust floating in the air and birds flying in the sky. That’s it, nothing serious.
Conclusion
In the beginning, I could not imagine what the result of the project would look like. It gave me the strong boost both in the technical and artistic ways. The CGMA course contributed a lot to the groundwork for my project. I think that it was important not only to work directly with the teacher but also to exchange knowledge with the students from the course. Working in a team is an important part of the learning process!
I want to thank all my friends, colleagues, everyone who left feedback, comments and shared experience with me. Thanks for your support!