Hair simulation delivers stunning results in film renders, but it's far too GPU-heavy for real-time games. Hair cards solve that problem cleanly: each "card" is a flat polygon plane with an alpha-masked hair texture on it, stacked and curved around a character's skull to approximate a full hairstyle. The result looks convincing from gameplay distances, runs on mobile hardware, and LODs exactly like any other mesh.
What Are Hair Cards and Why Game Artists Use Them
Hair cards are the industry-standard approach for real-time character hair. Every AAA character you've played likely has a hair card rig under the hood — the technique gives you full control over draw calls, texture memory, and mesh complexity, all of which matter when you're targeting 60 FPS on mid-range hardware.
The geometry itself is simple: flat quads, lightly subdivided and bent to follow skull curvature. What makes hair cards work is the alpha texture — a PNG with transparent background and painted or procedural hair strands. The engine clips or blends the transparent regions, leaving only the visible hair fibres. Stack 30 to 80 of these cards in layers from scalp to silhouette and you get a hairstyle that holds up at close range without a significant GPU cost.
The full pipeline breaks into four steps: build the card geometry in Blender, create the alpha hair texture, set up the engine material with correct alpha and two-sided settings, then export as GLB or FBX. This guide walks through each step with production-ready settings. Pre-built hair card assets are also available on the BitSoul marketplace if you need a head start.
Building Hair Card Planes in Blender
Start with a single plane, subdivide it three to four times along its length, then use Proportional Editing to bend it into a gentle curve that follows the skull surface. Flat cards look artificial at close range — the curvature is what sells the illusion.
![]()
For the alpha texture, you have two options. Hand-paint hair strands in Krita or Photoshop using a small hair brush on a transparent canvas, or bake a procedural Blender hair texture to a 512×256 or 1024×512 image. Keep the background fully transparent (alpha = 0), and paint strands in grayscale — white means fully opaque hair, black means cut away. Export as PNG to preserve the alpha channel.
UV-unwrap each card so the texture maps along the hair length, not across it. Use Follow Active Quads on a straightened copy of the plane, then re-apply the bend deformation. Keep all card UVs within the same UV island to share one texture atlas and collapse the entire hairstyle into a single draw call.
Once one card is dialled in, duplicate and layer them: a base cap covering the skull, a mid layer for volume, outer wisps for silhouette. Expect 30–80 cards for a hero character, 10–20 for an NPC.
Hair Material Setup: Alpha Blending, PBR, and Two-Sided Normals
This is where most beginners lose time. Hair cards are transparent polygons, which introduces depth-sorting issues — cards behind other cards can render in the wrong order, producing z-fighting artefacts.
The standard fix is to split the shader into two passes: an opaque pass for the solid core and roots, and an alpha-clip pass for outer wisps and tips. Alpha clip discards fragments below a threshold (typically 0.5) rather than blending them. It's cheaper and sorts correctly. Reserve true alpha blend only for the very finest tip wisps where a soft fade is required.
```python
# Blender: batch-set alpha mode on all hair materials via Python
import bpy
for mat in bpy.data.materials:
if "hair" in mat.name.lower():
mat.blend_method = 'CLIP' # alpha clip for most cards
mat.alpha_threshold = 0.5
mat.show_transparent_back = False # disable backface sorting
mat.use_backface_culling = False # render both sides
```
For normals, enable Two-Sided or Flip Normals in your target engine — hair planes have no real backface, so without this, half the cards go dark when viewed from behind the character. In Unity URP, set Render Face to `Both` in the Lit shader. In Unreal Engine 5, enable Two Sided in the material properties. In Godot 4, set `cull_mode` to `CULL_DISABLED` on the `StandardMaterial3D`.
Target these PBR values for convincing hair: Roughness 0.45–0.6, Metallic 0, Specular 0.3–0.5. Add a subtle anisotropy map aligned to the hair flow direction for a realistic specular streak on hero-tier characters.
Exporting to Unity URP, Unreal Engine 5, and Godot 4
![]()
Export from Blender as GLB. Hair cards travel cleanly in GLB because texture data is embedded — no separate PNG files to lose in a handoff. Use these export settings: Apply Modifiers on, Normals set to Face, UVs on, Vertex Colors off. Do not apply transforms before export; let the engine handle scale at import.
| Engine | Alpha Mode | Two-Sided Setting | Depth Sort Fix |
|---|---|---|---|
| Unity URP | Alpha Clip / Transparent | Render Face → Both | Custom Depth Bias per material |
| Unreal Engine 5 | Masked / Translucent | Two Sided ✓ | Sort Priority on material |
| Godot 4 | Alpha Scissor / Alpha | Cull → Disabled | Proximity Sort in StandardMaterial3D |
In Unity, assign your hair PNG to Base Map and enable Alpha Clipping with the cutout checkbox. In Unreal Engine 5, plug the alpha channel into Opacity Mask on a Masked material. In Godot 4, use `StandardMaterial3D` with `Transparency = ALPHA_SCISSOR` and set the Albedo Texture to your hair PNG.
Performance Tips and Common Hair Card Mistakes
Hair cards escalate draw calls quickly without discipline. Apply these rules before shipping:
- Merge all cards into one mesh per region (fringe, crown, sides, tail). Fewer mesh objects equals fewer draw calls, regardless of polygon count.
- Use a 512×512 texture atlas for all strands on a hero character. Reserve 1024 only for extreme close-up cinematics.
- LOD your hair mesh: hero LOD0 → 60 cards, LOD1 → 30, LOD2 → 15 with a baked normal map filling in the detail.
- Avoid overlapping transparent cards in the same depth slice. Offset card planes 0.001–0.002 m apart in local Z to prevent GPU overdraw multiplication.
- Add a bald cap base mesh: swap all hair geometry for a solid skin-coloured cap at the furthest LOD boundary to prevent floating hair artefacts when cards cull out.
Ready-to-use hair card meshes with pre-configured LODs and engine-specific material presets are available on the BitSoul marketplace — saving a full day of setup on each new character project.
---
Hair cards are the professional solution for game characters that need to hold up at close range without killing frame rate. The material setup has a learning curve, but once your pipeline is dialled in, you can dress any character head in under an hour.
Start with production-ready hair card assets at bitsoulhosting.com/marketplace.