A hair card atlas looks perfect at full resolution and fringes at gameplay distance. The cause is filtering, not bad art: mipmaps average neighbouring texels, and neighbours at an atlas border belong to a different card — or to empty background.
Why atlases bleed
Every mipmap level halves the texture, so a background-coloured gutter beside a strand eventually averages into the strand. The visible symptoms are dark halos, eroded strand tips and alpha edges that shimmer as the camera moves. The smaller the on-screen card and the tighter the packing, the earlier the bleeding starts.
Scroll horizontally to view all columns.
| Symptom at distance | Cause | Where it is fixed |
|---|---|---|
| Dark or light halo around strands | Background colour sampled into the strand at lower mips. | Bake with edge dilation; widen padding. |
| Strand tips erode or vanish | Thin geometry covers sub-texel area at low mips. | Minimum card width rule; alpha stays exact, colour dilates. |
| Neighbour card colour leaks in | Atlas neighbours packed gutter-to-gutter. | Gutter width sized to the mipmap chain, not to taste. |
Edge dilation and padding
HairStorm's bake engine expands colour texels into background gutters while leaving the alpha mask exact: edges stay razor-sharp, but the colours a mip level averages in are strand colours, not background. Padding then guarantees those dilated gutters never touch a neighbour card.
Layout rules that survive
-
Bake at final resolution or higher
Bake at the resolution you will ship — up to 2K on Free, up to 4K on Personal, Professional and Studio. Padding sized at 4K covers deeper into the mip chain than padding sized at 1K.
-
Keep padding proportional to the smallest strand
Fine flyaway strands need proportionally wider gutters than chunky bands. If tips erode first, raise padding before touching the art.
-
Never share a gutter between two cards
Auto-packed HairStorm atlases assign every card its own dilated gutter via dual UV channels (UV0 geometry, UV1 atlas sampling). Hand-edited UVs must preserve that separation — see bake maps and UV cards.
Pre-export checklist
Run this at the resolution you will ship, in the engine you will ship in — Unreal Engine 5 or Blender — before calling the atlas done: zoom to gameplay distance, force the lowest mip you support, orbit the head, and watch card borders and strand tips. If it survives that, it survives players.