How to Create Procedural Hair Cards in Ornatrix App: A Step-by-Step Workflow

Hair cards are one of the most common ways to bring hair into real-time engines and games, but building them by hand, strand by strand, is slow and hard to iterate on. In this tutorial, Marsel Khadiyev walks through how to build a full hair card setup in Ornatrix procedurally, starting from a raw scalp groom and ending with an exportable hair card atlas that combines both scalp hair and eyebrows.



Why go procedural

A manual hair card workflow usually means placing individual cards by hand and re-doing that work every time the hairstyle changes. The procedural approach in Ornatrix keeps every step as an operator in the stack, so nothing is locked in. Strand count, card width, texture assignment and color can all be revisited at any point without rebuilding the groom from scratch.

Building the base groom

The workflow starts from Ornatrix's New from Templates option, selecting the Human template to load a pre-fitted scalp. This template includes two separate parts, the scalp hair and the eyebrow hair, which are combined later into one shared hair card atlas.

  • The strand count is reduced with the Filter operator, since a full groom has far more strands than a hair card setup needs.
  • A Change Width operator sets the hair to the Card mode, removing the natural taper so every strand has a consistent card width.
  • A Rotate operator with the Orient Based on Strand option aligns the resulting mesh perpendicular to the scalp instead of facing random directions.

From hair to hair cards

Once the strands are converted to a mesh, the Create Hair Cards option builds the initial card setup. By default every strand gets its own texture island, which becomes unmanageable at any real strand count. Switching Mesh From Hair to the "one island per strand group" option consolidates the layout so each strand group shares a single island in the hair card atlas instead.

From the Edit Hair Cards panel, each island can be assigned a hair card preset, such as Basic, Feather or Braid, and each preset includes multiple variations with different parameters. Density, detail, length, length variation and root and tip color can all be adjusted interactively, with the texture atlas updating in real time.

Working with texture channels

Every hair card carries more than a single diffuse texture. The atlas preview can be switched between base color, alpha, normal, depth and ambient occlusion channels, which is what a renderer or engine like Marmoset would use to shade the hair card correctly. Braid presets expose their own parameters on top of this, including braid type, frequency and clump count, letting the same base preset produce a French braid, a Dutch braid or a rope.

Isolating specific areas of the groom

Not every part of a hairstyle needs the same hair card treatment. Adding an Edit Guides operator in strand selection mode makes it possible to select specific strands and assign them a new, unique strand group. Once that group exists, it shows up as an empty island in the hair card atlas and can be assigned its own preset, such as braids for a section of hair that should stand apart from the rest.

Merging in a second groom: the eyebrows

The eyebrow groom is a separate, pre-grafted groom in the same scene. It goes through the same steps as the scalp hair: a Change Width operator set to Card, a reduced hair count since only a couple hundred cards are needed per eyebrow, and a Rotate operator set to orient based on strand shape.

Instead of creating a second hair card atlas, a Merge operator inside the main hair setup pulls the eyebrow strands directly into the scalp hair mesh. To keep the eyebrows on their own island rather than reusing the scalp texture, a Generate Strand Data operator assigns them a unique strand group using the Constant method, so the eyebrow area lands on a separate, addressable island inside the same atlas.

Exporting the hair card atlas

With the layout and presets finalized, the export options let you choose which channels to include and the image format for the output. Pressing Save Hair Card Atlas writes each channel out as a separate file, ready to be brought into a game engine or a renderer as maps on top of the hair card mesh.

Conclusion

Because every step in this setup lives in the operator stack rather than being baked in by hand, the whole groom stays editable: strand counts, card presets, colors and channel output can all be revisited later without starting over. This tutorial covers the core hair card workflow in Ornatrix; a follow-up tutorial will go into building custom hair card presets from scratch.

Comments