Ghjuvannu-Carlu Sozzi shared why they decided to create the paint stroke mask, explained how reaching a painterly look differs in 2D and 3D, and spoke about the process of the paint stroke mask creation.
Hello, I’m Ghjuvannu-Carlu Sozzi, a french 3D environment and level artist at Endroad, working on a Grendizer game. I do side projects, mainly because I love doing them as well as I wish to hone my skills.
During my reflections on my adaptation of Airi Pan’s series of concept art "Ambrosia", I thought a lot about how I should adapt this great art style in 3D.
As a 3D artist, I fell in love with these artworks months ago. The artistic direction gives these warm and sacred feelings. Airi filled Ambrosia’s world with so many details and information.
Adapting these concept arts was a great challenge. Stylized environment art encompasses a lot of constraints and rules. One of them is making a scenery that is interesting from different points of view, both far and near the camera while maintaining style and art direction.
What is the solution that allows me to iterate quickly while getting interesting results? I made this paint stroke mask precisely for this.
This came to me when I watched some Arcane screenshots.
You can see some really nice paint strokes, especially on the ground. This contributes to giving a stunning, painterly style to the show.
However, in 3D, this is different, you always move your camera so you can’t have absolute control over how players watch your scenes.
Usually, in Unreal, you would get these details by painting them directly on your model’s texture or adding a detail map to the material. These were great solutions but they were incomplete for what I wanted. They lacked flexibility.
In the screenshot above, there are some subtle painterly effects on these meshes obtained by using curvatures, AO maps, gradients, noises, and material. This is a great and solid base. But what if I want to quickly make changes? I have to make tons of goings and comings between UE5 and Substance 3D Painter.
When I saw Insomniac Games documentation on Sunset Overdrive during 2015’s GDC, especially the part with the brush stroke mask, I had the intuition that it was exactly what I needed.
What if I make a material that would directly add a mask with brush strokes to the base color of my meshes? Unreal is a great engine, especially for artists with little technical baggage like me. You can achieve some really nice results with a few nodes.
I first made the mask. I’m not a good painter, so my three shapes were made in Substance 3D Designer by using noises, vector drawing, and the famous "slope blur" node.
I fused them in the RGB channels and I had my paint strokes mask.
I applied it as world aligned so that the same mesh won’t get the same strokes at the same place. I attributed each stroke's channel color and here is what I had:
Not very convincing at first. It looks out of place and it’s not flexible. So what if I had some opacity and tilling to the 3 channels?
Here we are! With some simple tricks, I could manage to give some painterly vibes to my meshes.
To be quicker, I made the paint strokes mask in a material function that I added to my base color. I used a mask to avoid applying it on the metallic parts of the texture but you can try it if you want.
This material function is not the most optimized but my master materials are rather simple so I could use it without thinking about performance.
Here are the graphs:
You can see it in action here.
In the end, this is a really simple trick. The point is to gain time and details easily while staying with the original art direction of the concept arts. You can get some nice aspects that give a painterly look to your project. Think about this as a starting base. You can always add options to be more creative and optimized.
Ghjuvannu-Carlu Sozzi, 3D Level and Environment Artist
This content is brought to you by 80 Level in collaboration with Unreal Engine. We strive to highlight the best stories in the game dev and art industries. You can read more Unreal Engine interviews with developers here.