Malte Resenberger-Loosmann showed the working process behind the ponytail hairstyle, shared the scene setup in Maya and Unreal Engine, and explained how GS CurveTools helped create realistic hair.
In case you missed it
More from the artist
My name is Malte Resenberger-Loosmann and I usually lead small teams or jump into hard-surface modeling for AAA and indie game projects on a daily basis. In this article, I want to explain how I got out of my comfort zone, why it is important to do so, and how you as an artist can benefit from it.
Before the end of 2022, as soon as my vacation started, I got inspired by one of Supermassive Games projects as their real-time characters caught my attention – especially the in-game hair. I knew that transparencies and alpha masking can be a difficult topic in game engines as I often saw very flat or low-quality hair or fur in other games.
First, I did my research on how workflows and pipelines can produce high-quality hair for real-time environments. As someone who sets up workflows and pipelines for companies or art teams, I understand the importance of grasping the fundamentals of hair creation. Second, the software used is significant. As I have worked with Max, Maya, and Blender in my career, I do not have a particular preference regarding 3D packages. All of these major tools have third-party or built-in capabilities to create hair. During my search, I discovered FiberShop, which allows you to create 2D and 3D hair cards and bake all necessary texture maps with just one click. I also decided to use Maya's built-in plugin XGen to produce "chaos," also known as "flyaway" hair strands.
Placing those cards manually is both good and bad. Therefore, I wanted to take advantage of hand-placed cards for a more organic and realistic look as well as spline/curved-based distribution to save some time in the end. I discovered a very useful tool called GS CurveTools, which can bind and manipulate your mesh on-the-fly, striking exactly the balance I was seeking.
To get a first overview of every single step, I checked out the video tutorials of TriGon Art to get a sense of the complexity to create hair but within my own creative twist.
The Ponytail Hairstyle
As is usual for any 3D projects, I searched online for references and the style I wanted to go with. Shape and volume are very important when it comes to hair creation. It is also beneficial to layer the hairstyle and build one pass after another to get great volume and coverage for part of the head.
I drew parts of my strategy to help me focus on one part and move to the next layer in my progression. It also allows me to get an overview of where I am after some time. Analyzing the references made it clear that most hair cards have to be clumped together as it is typical hair behavior. It is important to achieve an organic and non-linear look, which can be generated in FiberShop by using different modifiers such as Clamp, Curl, and Randomize length and thickness of roots and tips.
I know that some artists do their entire hair cards in Maya by using XGen and Arnold to render all necessary maps, such as ambient occlusion, flow maps, root gradients, and so on. However, in FiberShop, it can all be baked in one go. Later, I used XGen in Maya to generate single flyaway hairs, as the workflow is very straightforward.
Maya Scene Setup
After creating the first hair cards, I moved on to implementing them in Maya with GS CurveTools. I applied the first three cards of the texture to actual geometry bound on a curve. This way, you can choose a good variation of hair cards while covering the head geometry. Usually, this sheet of curved geometry will grow as you create more and more variations of different layers of hair.
A very useful tip I learned the hard way is to never, ever use "Delete All by Type -> Delete History", as it will break the bindings that were created with GS CurveTools. My project was almost destroyed, but fortunately, I had a backup file. If you plan to use additional geometry or modeling, use "Delete by Type -> Delete History" instead.
As I made progress, I first tried to cover all the geometry areas with simple hair and bigger card meshes. Additionally, I defined the ponytail volumes and shapes using longer hair cards. I also set the first break-up cards, which achieved a great variation of flows and an organic feel to the head.
For a certain period of time, it is very important to save your scene often and check your work in Marmoset for a quick preview. First, I considered rendering the entire project in Marmoset but decided against it, as I prefer working in Unreal and believe it provides crisper results overall.
At this point, it's a back-and-forth process between cards and making small adjustments to check up on hard intersections, hair flow, and organic arrangement. These checkups may take up a lot of time, but they will make sure that you're on the right track. The first few cards may not look promising, but they will build up into a really nice hairstyle soon. It's important to concentrate on the final output and trust yourself. Set up a basic material and bake the flow, AO, and Diffuse/Alpha maps to use in a shader.
To get some more volume, I used longer hairs and additional strains to the side. I started all around the forehead up to the neck and mirrored most of the curves and readjusted them to get a more unique look from every side of the head.
Baby hairs are important to create a realistic look and feel. These hairs are very thin and soft. I used 4-5 different hair variations for the neck, ear, and temple areas and 2-3 different cards to cover the forehead geometry.
Working with XGen can be fun once you know the workflows and what to take care of first. Make sure to start with a brand new Maya file, set the project, and then begin a new XGen hair collection. Otherwise, you may encounter issues during hair creation, as the setup has to be like that.
I began the process of creating guide hairs for a base geometry of the head using retopology techniques. I refined the overall flow and appearance of the hair, constantly checking for proper placement and brushing direction to complement the main ponytail. To achieve a more chaotic look while still maintaining performance, I utilized modifiers such as noise and curl and carefully considered the number of hair strokes used.
I followed a similar process for the eyebrows, analyzing reference images to understand the direction and growth of the hair, and using a clump modifier for variation in single and grouped hairs. After achieving satisfactory results, I exported the guide hairs as a Mel file for seamless integration into my Maya scene.
Once the curves were placed and tweaked, I bound my short hair cards geometry with GS CurveTools and set the orientation of the individual cards towards the base head. I checked everything in Marmoset and then switched back to Maya for further tweaking.
With performance and LODs in mind, I exported the geometry as LOD0 and then further reduced it to create LOD1, with LOD2 containing the bare minimum of polygons. I also manually deleted any low-resolution hair planes that would deform my textures.
Unreal Engine Setup
Finally, I prepared the geometry to use in Unreal Engine, importing it into a basic scene with a single-color inverted sphere background and a classic portrait lighting setup featuring a cold rim light, warm fill light, area light, and front light for a soft look and feel. In the Post-Process Volume, I enabled raytracing for GI and reflections, an Ambient Cube HDRI for additional reflection on the hair, and various post-processing effects such as tinted shadows, vignette, and exposure.
Furthermore, I also made sure to test the hair in-game to ensure that it was performing well and that there were no issues with clipping or flickering. I also made sure to tweak the hair's collision settings so that it did not interfere with the character's movement or animation.
Overall, creating hair for this character was a process that required careful attention to detail and focus on both aesthetics and performance. By utilizing various tools, techniques, and best practices, I was able to create a believable and realistic-looking hair that performed well in-game.
Stepping out of your comfort zone as a 3D artist can be beneficial in terms of skill development and motivation. By learning new techniques or tools, such as the creation of organic hair and grooming, an artist can gain new strategies that can be applied to other projects, such as hard-surface modeling.
GS CurveTools is a very good example as I’m still using it for cables or wrapped cloth or other organic parts in my models, where I previously wasted a lot of time adjusting shapes or wrapping things by hand.
This broadens the artist's skillset and can lead to more versatility in their work. Additionally, learning new skills can be motivating, as it keeps the artist engaged in the creative process and can lead to new opportunities and challenges.
Malte Resenberger-Loosmann, Hard-Surface & Material 3D Artist
You may find these articles interesting