Game export
Hair cards with LODs, and strands for Unreal, Unity and glTF.

Cards
Add a Cards node (Add Node > Games) where the look should be carded, or run
groomlab.create_cards(groom, lod="mid"). The cards follow the groom's clumps and shape, and their
textures are baked from its own strands.
The node's panel shows what its cards cost and has Show cards, Show textures, LOD, Bake Maps, Bake Scalp and the exports.
- LODs: Hero, Mid and Low set a triangle budget (about 50k, 15k and 4k) and the card layout that goes with it. Every level keeps the groom's silhouette: fewer cards, not bigger ones.
- They look like the strands: in the viewport the cards are lit as the strands are (their
normals, highlight and ambient), and each card is tinted to its own strands' color, root to tip,
while the textures stay shared. The exports carry the same: the normals, and the tint as a
vertex color (glTF:
_TINT). - Baked maps: depth, coverage, tangent, attribute, color and AO, in Unreal's hair card layout.
- The atlas survives brushing: after a bake, cards rebuilt by later edits keep their place in the atlas. A node whose maps are out of date gets an orange badge.
- Bake Scalp bakes the hair near the skin into the scalp's UVs, with a hair cap, so low LODs don't show bare skin between cards.
- Cards are always built from the whole groom: the viewport's preview density never thins them.
Where to send them
| Target | Menu | What you get |
|---|---|---|
| Unreal cards | Cards node > Export for Unreal... | _cards.fbx, the six maps, the hair cap and a JSON of the channels |
| Unreal strands | GroomLab > Export > Unreal Groom... | Alembic in Unreal's groom format, with guides for simulation |
| Unity cards | GroomLab > Export > Unity Cards... | FBX (Y up, meters), PNG maps and suggested HDRP and URP materials |
| Unity strands | GroomLab > Export > Unity Strands (.abc)... | Alembic for Unity's strand hair package |
| glTF cards | GroomLab > Export > glTF Cards... | .glb with the maps inside, one mesh per LOD |
Exporting several LODs into one folder keeps them apart: names end in _hero, _mid or _low.
groomlab.create_cards(groom, lod="hero")
groomlab.export_cards_unreal(groom, "C:/game/hair", "hair", lod="hero")
groomlab.export_cards_gltf(groom, lods=["hero", "mid", "low"])
groomlab.export_unreal_groom(groom, "C:/game/hair.abc")Color patterns in engines
HairColor's bands, feather patterns and tips are colors per point, and its iridescence a mask per point (Color patterns):
| Target | Colors | Iridescence |
|---|---|---|
| Unreal strands | groom_color per vertex | groom_iridescence per vertex; with Iridescence as AO (iridescence_as_ao=True) also groom_ao, which the Hair Attributes node gives a material |
| Cards (Unreal, glTF, Unity) | Baked into the Color map (a feather's card is its vane laid flat, so its patterns map straight on) | The Color map's alpha (Unreal; RGBA only then); Unity's Mask map's red; glTF: not carried |
| Unity strands | One color per strand (Cd, as GroomLab's Alembic writes it; bands and patterns along a strand do not travel) | Not carried |
| glTF cards | The baked _BaseColor and each card's _TINT | Not carried (the alpha is the coverage) |
The repository's docs/UNREAL_HAIR_MATERIAL.md is a recipe for the Unreal material (strands and
cards) that mixes the iridescent color in by that mask, its hue turned by the view's angle, with
tools/unreal/groomlab_hair_material.json describing the same graph node by node.
Feathers in engines
- As cards:
groomlab.create_feather_cards(groom, lod="mid")gives one alpha-tested strip per feather, both vanes and the rachis baked into its texture, alike feathers sharing a few textures. Each card folds along a spine so lifted or cupped vanes show as a V. Unreal, Unity and glTF take them. - As strands: the rachis becomes a mesh to skin with the character, and the barbs are strands
rooted on it.
- Unreal:
groomlab.create_rachis_mesh,export_rachisandexport_unreal_groom. - Unity: GroomLab > Export > Unity Feathers... writes the strands, the rachis FBX and a manifest of the Hair Asset settings.
- Unreal: