Realistic Hairstyle Tutorial – Marcin Cecot
Hey! My name is Marcin Cecot and I’m a 3D artist working in the games industry since 2012.
For years I’ve worked as a lead artist in different projects, working on 3D Characters, Props, Lights, Shaders and other games aspects related to 3D art. Plus some 3D printed stuff.
When I started working on my latest hairstyle asset, it was supposed to be a part of the game character I have worked on for some time. The original hairstyle from the concept art was pretty simple, just some straight, long hair. I felt that it can be a good opportunity to strengthen my real-time hair skills. That’s why I decided to change the hairstyle and try something more challenging, including more intertwining, longer hair, more volume.
But still keeping the general shapes from the original concept art. Over a year ago I took the Hair Creation for Games course by Johan Lithvall. I can definitely recommend it to anyone who wants to understand the workflow behind the best looking hairstyles in the industry. So, for me, that recent project was a great opportunity to test what I actually learned.
My overall workflow is heavily based on Johan’s techniques. Yet, it’s not completely the same, as I had to change some parts, inter alia, because of a different destination engine.
That’s probably something you can read in almost any article about 3D nowadays. And yes, references are super important. Spend as much time as you need looking for them. Try to sort your reference images into different groups, like:
Front, back, sides, details, closeups, intertwinings, braids, etc.
And when you have collected some references go through them and imagine how you are going to use them when working. See which ones can be helpful when working on the general shape of the hairstyle, which ones you are going to use when working on the details.
If you study them before working you can judge if they are enough or maybe you still need another view to understanding the structure of the hairstyle. If you need (and can), spend the whole day or even more just on this step. The better your reference board, the easier it’s going to be later. It can be quite frustrating and distracting when you have to stop working on the hairstyle and go back to look for more references. But sometimes, it may still happen later.
The first thing I needed was the texture for my hair cards. Before I even started working in 3Dsoftware, I needed a plan, a 2D plan! I don’t feel comfortable drawing, but I didn’t need any real work of art anyway. I decided to make a 2×1 texture to fit more hair strands there. You can see from right to left that the hair is very dense at first and get more and more sparse with time.
That’s because the hair on the right is used for the first layers, which the main purpose is to block the view. It doesn’t need too much transparency if any. Then, in the end, I use hair strands made of few hairs or even just a single one to add some final detail and break up the silhouette.
Then I jumped into Maya and created some basic splines following my beautiful hair strands sketches. I tried to catch the whole silhouette and some of the interactions between the splines. They are just general guides that I can use to generate the groups of hair later.
That’s when I could open Xgen in Maya and start working with real hair at last.
Xgen is a very powerful tool. It can be intimidating at first, as it’s different from what you usually work with as a3D artist. But when you learn the basics, it’s very easy to start creating cool and complex results.
I didn’t use any grooming brushes, I worked with modifiers. So the first step was to convert my splines into Xgen guides, adjust them a little bit and start using Xgen modifiers to get some nice hair. The most important modifiers for me were: Clumping, Noise, Cut and Coil. That’s all I used. I stacked multiple instances of different modifiers for each hair strand, played with the values and finally got this:
I felt that it may be good to have some more hair strands than what I initially planned in my sketch. You can see that even for the very dense strands, I still have some holes on the sides here and there. They can be useful when assembling hair card geometry later. Time to get some actual textures! I converted XGen hair into geometry.
After some small manual adjustments, I exported everything and used XNormal to bake some initial maps:
Normal, ambient occlusion, height, alpha, ID. You may need another set of maps depending on your final software, but it was enough for me to work on the textures I could use in Marmoset Toolbag.
There’s nothing fancy here, I just created a plane, added one of my baked maps as a texture and cut the vertical hair cards. I made sure to adjust the meshes to make them fit the texturesas close as possible, without leaving too much of unnecessary transparent spaces for the sakeof the optimization.
I started assembling the final hair cards from these flat meshes. In most cases, I used 3 cards to get 1 full hair card set. For the flyaway hair, I used 2 cards instead, as it’s not so important to get more volume in their case, but rather to get rounded shapes later. These hair card sets let me get more depth and avoid creating a very flat helmet hairstyle.
You can find different approaches to placing hair cards on the Internet. In the past, I tested some cool ideas, like using Zbrush fiber mesh to place cards (useful for short fur!), Zbrush insert meshes, controlling cards with the splines, etc. Today, I’m quite sure that if you want to get the best results, especially in the case of long hair, there is no better way than just manually placing every single hair card.
It sounds like a lot of work and it is, but it’s not a very complicated process. Basically, find some nice music or good documentary movies and start working.
Using a mix of Maya nonlinear deformers and manual vertex adjustments, I worked on all the layers getting to the final result. When placing hair cards, I do my best to prevent hair from crossing each other.
Remember that hair won’t look perfect from the start, spend some time focusing on the bigger shapes, then start breaking the silhouette with more subtle details and leave flyaways for the end of the process. Don’t get discouraged if the asset doesn’t look good instantly, it can take days to get the final result.
Study your references all the time and iterate if you must.
I start checking my meshes in my destination software quite early to make sure that everythingis ok. In Maya I don’t really use any specular in the material, so it’s easy to miss some problemsand the sooner you spot them the easier it is to find the solution. So, from time to time I exportthe hairstyle, import it to Marmoset Toolbag and check it from different sides in a scene withbasic lighting and basic materials.
When working with long hair, it’s hard to add any color variation to the textures and not make it very repetitive. I’m using the same hair cards on the top of the head and at the bottom of the whole hairstyle. As a result, I can’t really add any strong gradients or other color information to the textures as they would repeat across the whole height of the asset.
But there are other ways of adding such details to the hair, e.g. vertex colors. Firstly, I baked ambient occlusion to the vertex colors in my whole mesh. As a result, I got some additional depth information.
Then, I manually adjusted these colors, painted places where I wanted the hair to be lighter/darker and finally introduced a slight top-down gradient. This way I could easily change the brightness of the hair across the whole object, using only a few pretty flat textures. Marmoset is not the best tool to control vertex colors’ strength (there are some additional plugins that can help), but in in-game engines, you will usually have much more control.
Textures and presentation
The textures I used are very simple:
-Normal map baked from xNormal
-Ambient Occlusion map also baked from xNormal
-Diffuse is a greyscale map I created in photoshop by mixing base color and height maps I baked previously. I made sure that it’s quite subtle, without any strong contrast.
I had other maps to help me to show the detail:
-Specular map was a simple noise with a vertical directional blur.
-Alpha map baked in xNormal.
With my diffuse texture, I was able to use diffuse color to add color information to the hair. When you change the color, it’s important to remember about changing the colors of the reflection as well to show that the light actually travels through the hair layers for a moment before being reflected. My final material is mostly a standard setup for the hair.
I used Vertex Color Albedo to let the shader use the vertex colors I added to the mesh. I used anisotropic specular both for the main and secondary reflections. It means that there will be a directionality added to your reflections, hence it’s required to have all the hair textures being placed in the same direction on your UV or to add a special flow map to your project. In my case, all the textures were placed vertically, so I didn’t really need the flow map.
For both reflections, I added some color information, lighter for the first reflection and darker for the second one. I also shifted the second reflection towards the roots of the hair.
In Marmoset Toolbag I start with simple three-point lighting and I add some additional light if I think it’s necessary to accentuate any feature of the hairstyle. I usually prepare separate lighting for the shots which have different camera angles to make sure that everything is lit correctly. In my scene, I had spotlights only.
I used Marmoset Toolbag 3, so no ray tracing this time.
The main goal of this project was for me to step out of my comfort zone and level up my hair for game creation skills. It’s definitely not easy to make sense, long hair where you have to keep attention to every single hair card’s placement, but the biggest challenge here is to be patient, able to rework some parts, iterate and read the references all the time.
Technically, the whole workflow is not a very complicated process. After getting the basics, you know more or less the whole thing. While it’s very time-consuming, it’s also a very artistic work, where you don depend on the simulations or procedural algorithms, but you have control over every smallest part of the asset and it’s up to you to build the final look.For me, the hardest part is always to start.
It can be very intimidating when you see the head model and you realize you have to place all the hair by hand. But when I finally force myself to start, it’s easy to lose track of the time. And the final result can be very satisfying.
Thanks for reading!You can find me here: https://www.artstation.com/kar