NeurIPS 2026

SAFE-Hair

Scalp-Anchored Fields for Exportable Single-View 3D Hair Reconstruction

Yucheng Wang1, Zedong Wang1, Yuetong Wu1, Yue Ma1, Dan Xu1†

1The Hong Kong University of Science and Technology

†Corresponding author

SAFE-Hair teaser: front, side and back views of reconstructed strand hair from single portraits
Figure 1. SAFE-Hair reconstructs an explicit strand-based 3D hair asset with stable scalp-rooted follicles from a single portrait. Front, side and back views recover the full hairstyle; the bottom row spans eight categories.

Contributions

  • 32,768 strands

    Grown from fixed follicles on a shared scalp, from one portrait.

  • Persistent identity

    Every strand can be edited, simulated and exported in one forward pass.

  • Scalp-rooted

    The structure grooming and simulation need. Meshes and Gaussians lose it.

  • Mesh-based

    No explicit strands, so nothing can be groomed or simulated per strand, and there is no follicle correspondence.

  • Gaussian-based

    Strands pass through the head, follicles are unstable and do not persist, and the result is hard to serialise as a groom.

  • SAFE-Hair (ours)

    Explicit strands rooted on the scalp, a persistent follicle ID for every one by construction, and collision-aware grooms ready to export.

Methodology

Instead of predicting unordered strands in image or world space, SAFE-Hair reasons entirely in a canonical scalp-UV domain shared by all subjects, then decodes one candidate strand per persistent follicle.

SAFE-Hair pipeline overview
Figure 2. Overview. Dense image features are projected into scalp-UV space; a conditional Rectified Flow turns noise into a latent scalp field \(Z\); a shared follicle decoder queries \(Z\) at canonical follicles \(\{\mathbf{u}_r\}_{r=1}^{R}\) and strands are obtained by forward integration from fixed scalp roots.
  1. Scalp-UV conditioning

    Fit a template head, extract DINOv2 features and warp them onto the scalp through the recovered camera. A fixed follicle set gives every strand a persistent identity.

    \[ \mathcal{R}=\{\mathbf{u}_r\}_{r=1}^{R},\qquad \mathbf{x}_{r,1}=\psi(\mathbf{u}_r) \]
  2. Rectified flow on scalp fields

    A conditional vector field transports Gaussian noise to a latent scalp field \(Z\in\mathbb{R}^{128\times128\times64}\), completing invisible regions with learned priors.

    \[ \mathcal{L}_{\mathrm{rf}}=\mathbb{E}\big\|v_\theta(z_t,t,C)-(z_1-z_0)\big\|_2^2 \]
  3. Persistent follicle decoding

    A shared decoder predicts occupancy, segment directions, length allocation and total length; strands grow from the root by forward integration.

    \[ \mathbf{x}_{r,t+1}=\mathbf{x}_{r,t}+L_r\,q_{r,t}\,\hat{\mathbf{d}}_{r,t} \]
  4. Validity priors and export

    Attachment, collision and bending priors reduce root flipping, head interpenetration and kinks. Strands are grouped into guide families and serialised to Alembic or engine-native grooms.

    \[ g(r)=\arg\min_m\ \alpha\|\mathbf{u}_r-\mathbf{u}_m\|^2+\beta\|\mathbf{f}_r-\mathbf{f}_m\|^2 \]

Interactive: grow strands from fixed roots

Each curve is integrated from a fixed root on the scalp using per-segment directions \(\hat{\mathbf{d}}_{r,t}\) and length weights \(q_{r,t}\). Switch the priors off to see why they matter.

Penetrating samples: 0%

Qualitative Results

The portrait shows only the front. SAFE-Hair completes the side and back on the scalp, and curls continue around the head instead of stopping at the silhouette.

  • Input portrait

    Input one front-facing portrait

  • Reconstructed hair, front view

    Front reconstructed groom

  • Reconstructed hair, side view

    Side never seen in the input

  • Reconstructed hair, back view

    Back completed by learned priors

Comparison with Img2Haircut and DiffLocks

Against Img2Haircut and DiffLocks, SAFE-Hair produces scalp-attached strand geometry with more consistent back-view completion and fewer head-interpenetration artifacts.

Multi-view comparison with Img2Haircut and DiffLocks
Figure 3. Front, side and back views for four portraits. Each block shows SAFE-Hair first, then Img2Haircut and DiffLocks.

Quantitative Results

On HairBench-3D, SAFE-Hair leads every geometry metric and every asset metric against five baselines. It reaches an F-score of 81.7 (from 77.9), 69.8 on invisible regions (from 66.1) and a penetration ratio of 3.9% (from 4.8%), compared with the strongest prior baseline.

  • 99.8%

    of roots land on a valid scalp region, against 93.2% for the strongest prior method.

  • 3.28 mm

    Chamfer distance, down from 3.74 mm.

  • 4.2 s

    per portrait for 32,768 strands, with no test-time optimisation.

Main results

MethodChamferPts ↓F-score ↑F-score (Invis.) ↑IoU ↑Pen. ratio ↓
Perm5.8261.442.70.7818.6
NeuralHDHair4.3671.856.20.8246.1
Hairstep4.4870.659.40.8727.2
DiffLocks3.9176.563.80.8475.4
Im2Haircut3.7477.966.10.8614.8
SAFE-Hair (ours)3.2881.769.80.8843.9

Asset usability

MethodRootDist ↓ValidRoot ↑FollicleStab. ↑ExportSucc. ↑
Perm––––
NeuralHDHair3.882.1–71.3
Hairstep2.987.4–76.8
DiffLocks2.489.60.61†82.5
Im2Haircut1.793.20.68†88.1
SAFE-Hair (ours)0.299.80.9199.6

Bold: best; underlined: second best. RootDist: mean root-to-scalp distance (mm). ValidRoot: % of roots on a valid scalp region. FollicleStab.: active-follicle consistency under crop, colour and mask perturbations. ExportSucc.: % of predictions serialisable as valid grooms. †Approximated by nearest-root matching.

Exportable Groom

Every strand is decoded from a canonical follicle, so its identity is simply the follicle index \(r\). Follicles are grouped into guide families and the result serialises straight into Alembic or engine-native strand assets.

  • Strands coloured by guide-family cluster

    (a) Guide-family clusters

  • Guide strands of the groom

    (b) Guide strands

  • Refined groom rendered with strand shading

    (c) Refined groom

  • Dense follicles. 32,768 canonical follicles with 32 control points per strand.
  • Guide selection. Guides chosen by farthest-point sampling in scalp-UV space.
  • Child assignment. Children assigned in joint scalp-position and strand-feature space.
  • Lossless metadata. Grouping never alters the reconstructed geometry.
strand {
  follicle_id: 18342
  scalp_uv: (0.412, 0.637)
  points: float3[32]
  guide_id: 207
}

BibTeX

@inproceedings{wang2026safehair,
  title     = {SAFE-Hair: Scalp-Anchored Fields for Exportable
               Single-View 3D Hair Reconstruction},
  author    = {Wang, Yucheng and Wang, Zedong and Wu, Yuetong
               and Ma, Yue and Xu, Dan},
  booktitle = {Advances in Neural Information Processing Systems (NeurIPS)},
  year      = {2026}
}