This week, I focused on summarizing the hair creation workflow for the character, as well as conducting software import and hair simulation tests to ensure that the hair could later be properly bound to the character and simulated in Unreal Engine (UE). Initially, I planned to perform the hair simulation in Maya, but during testing, I found that the calculation speed was too slow, making it inefficient for the project’s needs. Therefore, I ultimately decided to import the hair into UE for simulation.
The following is a summary of my complete workflow:
Initially, I create the hair in ZBrush using a low-polygon hair brush. A key advantage of this brush is that the ends are not closed, which makes it easy to extract curves later when importing into Maya.
After importing the hair into Maya, I divided it into three main groups, as different areas require different hair density, curl, and thickness.
I separated the hair into bangs, long hair, and short accent/outline hair groups.
I used Maya’s Ahoge plugin for this process, which is very user-friendly and much easier to work with compared to XGen. The plugin allows adjustment of density, color gradients, hair cut length, curl, as well as noise and clumping effects based on the curves.
After exporting the hair as an ABC file, I imported it into Unreal Engine (UE).
Since Maya’s hair color cannot be transferred directly—some patterns, like tiger stripes, can be controlled via base color for a hair cluster, but it’s not possible to create a color gradient along individual strands—I created the hair material directly in UE.

This material allows filtering of some variegated hairs using the hair seed number, and produces color gradients along the hair length using the length and lerp nodes. By promoting these vectors to parameters, the gradient can be easily adjusted in material instances later. Additionally, I added noise to introduce variation in the colored strands, enhancing the realism of the hair:
4. Hair Simulation:
In UE, hair simulation focuses on functional movement—while the results are not perfect, it is fast to calculate and render. I created a character blueprint, placing the character’s skeletal mesh within it, essentially using the game engine’s standard logic.
The hair was then added to the blueprint and parented under the skeletal mesh. Before this, the hair needed to be bound to the skeletal mesh and the appropriate binding file selected. To achieve better results, it was necessary to adjust the collisions in the skeletal mesh’s physics asset; otherwise, the capsule around the character’s shoulders would push the hair upward.


I set up the hair physics simulation using Unreal Engine’s built-in strand solver. I configured the relevant simulation parameters and curves to control hair behavior, ensuring realistic movement while maintaining performance suitable for real-time rendering.