Jasmin Habezai-Fekri did a breakdown of her new stylized environment Bird House created in ZBrush, Substance tools, and Unreal Engine 4.
In case you missed it
Read our previous interviews with Jasmin
Hi everyone! I am Jasmin Habezai-Fekri, a 3D environment artist from Germany. I’m super excited to be back for another breakdown! Currently, I am freelancing in games and finishing my final months at university. You might have seen my work in a previous 80.lv article, where I talked about how I approached the Sunny Market Entrance project, marking my first steps towards diving deeper into PBR approaches in 3D. After finishing the Market piece, I felt very motivated to continue my journey towards learning new workflows and software, since I really enjoyed the opportunities this new route brought for me artistically.
Bird House: Goals
Looking for a new challenge to tackle, I realized that I’ve been itching to learn Unreal for a while now, however, I never felt like there was the time or right opportunity for it. While I was working on my Market piece, I actually tried to migrate the project from Marmoset into Unreal. But it didn’t really work out the way I imagined it due to the fact that I already had a very solid lighting and material setup inside Marmoset, making it difficult and frustrating to replicate these results inside Unreal. I personally do not think it’s beneficial to swap engines or render software if you already passed the first 50% of the production time on your projects. Therefore, I decided to finish it inside Marmoset and use Unreal from the start when I begin another piece.
Here, I wanted to choose a concept as a starting point, so I could focus more on learning Unreal and try my best to replicate the concept inside the engine while applying my newly gained PBR learnings. This is when I discovered Arturo Serrano’s Bird House concept. I was instantly convinced that this would be a great piece to work with since it looked like it could fit into a Ghibli movie perfectly. For me, it also offered a wide range of topics and checked all the boxes in terms of learning goals I set for myself which included:
- Creating a Landscape
- Making different types of Foliage
- Making a house, on which I could practise material blending, Vertex Colors, Decals, etc.
- Making various Material types, Detail Normals, etc. with Substance Designer
- Creating small animations and movements for immersion
Creating the Landscape
Since the Bird House is located on a piece of land with grass taking over a big part of the whole composition of the piece, I decided to take some time and focus on learning more about how to create one. Doing a bit of experimentation would give me the opportunity to develop the tech that is needed to achieve the 2D look of the concept. Fortunately, there is an abundance of resources out there on landscape building and I got the gist of it pretty quickly. However, the main issue I had was the fact that the grass did not have a painterly look to it, mainly due to the fact that it was casting subtle shadows and no matter how much colour variation I put into my painted grass cards, they still looked very uniform overall. Here I started to look into how other artists have approached this and found Christopher Radsby’s Blog posts on his Legacy piece and also a great breakdown by Christian Sparks on stylized grass and shaders. Seeing how others approached this type of stylization helped me to achieve my own in the end. The biggest breakthrough was achieved when I set the grass to shadeless and forced the normals of the cards to face upwards at all times, eliminating any unwanted shadows or unappealing shading.
For each colour I wanted to paint, I created different layers inside the landscape material, making it possible for me to use this tool just like a paintbrush to shade my grass as I please with any colour I want. It’s fun to mix tech and art in this way.
After that, I also used the RVT tool to blend the rock meshes into the landscape seamlessly, following this little guide by Chris Murphy:
Texturing the House and Props
For the house, I created a trim sheet that included different variations of wood and metal. It was completely sculpted inside ZBrush making use of the wrap mode so that the textures would still tile. Later, I textured them inside Substance Painter, constantly making sure with some prototype meshes that the tiling isn’t visible when used in the context of the scene. I used it all across the scene, including smaller props like the storage part. This made the process of building the house together pretty quick and gave me room to iterate on other parts. For the concrete, I actually reused some of my older textures I already made for the Market project and adjusted them slightly inside Photoshop. The brick texture is also made inside Substance Designer. For the smaller bricks, I simply scaled them inside the UE shader. Inside the Engine, I blended the concrete with the brick materials to create the desired look from the concept, where the bricks are coming through the painted concrete on top. Here, I started vertex painting the bricks and also included some subtle colour variations to each material, which is also vertex paint based. It is important to make maximal usage of all the different channels you can use for vertex painting, it offers a lot of opportunities to make more organic looking tileable textures that lose their repetitive nature that way.
Main parts that have tiling textures:
Tiling textures in Substance/ZBrush vs. inside Engine with Vertex Painting applied:
To keep it consistent with the shadeless look of the landscape, I applied the same technique to all of the other foliage pieces of this scene. For the canopies of the trees, I modified the normals in a way, where they use the normal information of a sphere that has the same shape as the canopy itself. That way, the foliage cards of the tree appear very smooth without any dark shadows casting onto themselves. Custom Normals are a great way to control how lighting interacts with your meshes, therefore I spend quite a lot of time to get them just right. If you want to read more about vertex normals, this Polycount thread explains this technique very well.
Since the shape of the canopy I created was very versatile, I was able to reuse it for the bushes in the back. Here I duplicated a bunch of them and tried to arrange them in a way that they create an interesting silhouette.
Breathing Life into the Scene
One of the final steps for this project was adding some small animation and movements to the scene. The foliage comes to life with the” simple grass wind” node, which I also used for the trees. The trees, however, have a slightly different wind weight to them to break up the repetitive movement. Due to the grass also having a wind panning effect inside the material, it appears to have movement of its own, also making it look more organic overall.
For the smaller props, I created a blueprint that simulates movement inside the material without the need to animate any of the meshes. This is done through the Rotate about Axis node. The blueprint determines the centre of the moving object and feeds that into the shader, which uses that as the axis to rotate the object around.
The falling leaves are a particle effect, where I fed one of the leaf textures of the tree into it. I made sure that the leaves fall in the same direction as the wind is moving the flag and the grass to keep it consistent.
Generally for particle effects, I can really recommend Dean Ashford's Youtube channel!
The lighting was fairly simple in this scene and didn’t change significantly throughout production. Generally, I follow the rule of cold shadows/warm highlights or vice versa with every scene I light, since it gives the lighting a lot more believability. Even if a scene is stylized, it is essential to follow general rules of lighting, composition, and colour theory.
Everything is lit dynamically with two directional lights. The first one casts the main shadows and is slightly tinted yellow. It is fairly bright since the scene is set on a sunny day with a hint of clouds in the sky. The second light brightens up the shadows and gives them a blue tint, creating a cool atmosphere where the shadows are cast. Its intensity is lower than the main light.
The skylight is also yellow, re-enforcing the feel of warm weather conditions.
The only place where I used an additional light source is the area underneath the rock. Here I placed a small point light to brighten up the shadows again.
I did not use any heavy post-processing settings despite a small exposure boost and a slight sharpening effect which I found through this tutorial:
This project has been one of the most rewarding ones so far. While it seemed pretty daunting to get into Unreal Engine and having to start from 0, it was very motivating to see how I could bring my art to the next level. Integrating an environment into an engine opens up so many doors in terms of believability and immersion. In some ways, this was also the most smooth development of a piece I experienced, probably due to the fact that I practised all the workflows I used in this project beforehand, therefore having a lot more time and freedom to spend on learning Unreal itself.
One big lesson I learned was mostly related to the way I study. Having a structured learning plan and goal makes an essential difference when learning new workflows instead of going into it with no set project in mind. Even when I faced issues or things that needed re-iterating over and over again, I managed to stay on track due to the fact that I planned my milestones beforehand. Putting that extra time into organising a project before jumping right into it helps to speed things up later down the route.
I also realised that during the blockout phase, it helps me immensely to create placeholders for all my tiling textures and integrate them into the engine as early as possible alongside my blockout. Having done this early in production was probably the reason why I was able to get close to my final lighting and colour palette quickly since I put my focus on how the colours work inside the composition from the start.
Thank you for reading, stay safe!