Primitive Tab

The Primitive tab is where you generate dense hair strands from your sparse guides. This is where guides (50–500 curves) become realistic hair (10,000–100,000+ strands).

What is Primitive Generation?

Primitive generation fills in thousands of strands between your guides through interpolation. Each strand follows nearby guides, creating dense, realistic hair.

Density Panel

Density

Base number of strands.

Range: 1.0–10,000,000 (Default: 100.0)

Controls strand count. Higher values = more strands = denser hair.

Expression support: Yes (click ƒ button)

Texture support: Yes (paint/save/load buttons)

When to adjust:

  • Preview/testing: 100–5,000
  • Medium quality: 5,000–20,000
  • Production: 20,000–100,000
  • Hero shots: 100,000+

Performance tip: Start low (1,000–5,000) while styling, increase for final renders.

Multiplier

Global scale factor for density.

Range: 0.0–100.0 (Default: 1.0)

Quick way to scale strand count up/down without changing the base value.

Use Density Map

Enable texture-based density control.

When enabled, uses a painted texture to control density per-area:

  • White = full density
  • Black = no hair
  • Gray = partial density

Great for hairlines, thinning areas, bald spots, and patterns.

Strand Shape Panel

CV Count

Control vertices (points) per strand.

Range: 0–200 (Default: 0)

  • 0 = inherit from guides (recommended)
  • Higher = more points per strand = smoother curves

Radius

Interpolation radius — how far strands look for nearby guides.

Range: 0.001–10.0 (Default: 0.15)

  • Larger (0.2–0.5): Smooth, blended hair
  • Smaller (0.05–0.15): Follows guides more closely

Expression support: Yes

Texture support: Yes (paint/save/load buttons)

Variation

Random variation in strand interpolation.

Range: 0.0–1.0 (Default: 0.0)

Adds randomness to how strands follow guides. Higher values = more natural, less uniform.

Expression support: Yes

Texture support: Yes (paint/save/load buttons)

Length Panel

Length

Strand length multiplier.

Range: 0.0–10.0 (Default: 1.0)

  • 1.0 = same length as guides
  • 0.5 = half guide length
  • 2.0 = double guide length

Expression support: Yes

Texture support: Yes (paint/save/load buttons)

Example expressions:

rand3(0.8, 1.2, index)     # Random 80-120% per strand
lerp(0.8, 1.0, v)          # Shorter at bottom, full at top

Width Panel

Width

Strand width (thickness).

Range: 0.000001–0.5 (Default: 0.01)

Expression support: Yes (inline ƒx)

Typical values:

  • Fine hair: 0.0003–0.0005
  • Normal hair: 0.0005–0.001
  • Thick hair: 0.001–0.005
  • Fur: 0.005–0.02

Taper Panel

Controls how strands thin from root to tip.

Amount

How much taper is applied.

Range: 0.0–1.0 (Default: 1.0)

  • 0.0 = no taper (constant thickness)
  • 1.0 = full taper (thin to nothing at tip)

Expression support: Yes

Texture support: Yes (paint/save/load buttons)

Start

Where taper begins along strand.

Range: 0.0–1.0 (Default: 0.2)

Expression support: Yes

Texture support: Yes (paint/save/load buttons)

End

Where taper ends along strand.

Range: 0.0–1.0 (Default: 0.95)

Curve

Taper curve shape.

Range: 0.1–5.0 (Default: 1.0)

  • 0.5 = ease in (gradual then sharp)
  • 1.0 = linear
  • 2.0 = ease out (sharp then gradual)

Taper Ramp

Visual curve editor for taper profile.

Default: Linear from 1.0 (root) to 0.0 (tip)

Preset buttons:

  • Linear — Straight taper
  • Ease In — Gradual taper, sharp at end
  • Ease Out — Sharp taper, gradual at end
  • Ease In/Out — S-curve taper

Interpolation modes: Linear, CatmullRom, Bezier

Surface Offset Panel

Root Offset

Offset strand roots above surface.

Range: 0.0–1.0 (Default: 0.0)

Lifts strand roots slightly above the mesh surface to prevent clipping.

Region Map Panel

Creates hair partings and prevents strands from crossing boundaries.

Enable

Turn on region-based parting.

When enabled, strands only interpolate from guides in the same region:

  • Paint RED = Region 0
  • Paint GREEN = Region 1
  • Creates a natural parting line between regions

Buttons: Paint 🖌️ / Save 💾 / Load 📁

Parting Strength

How much strands are pushed away from the parting line.

Range: 0.0–5.0 (Default: 1.0)

Parting Mask

Optional mask to control parting strength spatially.

Buttons: Paint 🖌️ / Save 💾 / Load 📁

Generate Button

Generate Hair — Creates strands using all current settings. This is the main action button at the bottom of the tab.

Practical Examples

Basic Hair

Density: 10000, Multiplier: 1.0
CV Count: 0 (inherit), Radius: 0.15
Length: 1.0, Width: 0.001
Taper Amount: 1.0

Dense Production Hair

Density: 50000
Radius: 0.12, Variation: 0.3
Width: 0.0005
Taper Amount: 0.9

Thin/Fine Hair

Density: 15000
Radius: 0.18
Width: 0.0003
Taper Amount: 1.0

Thick/Coarse Hair

Density: 8000
Radius: 0.1
Width: 0.002
Taper Amount: 0.7

Tips

  • Start low, go high. Begin with low density (1,000–5,000) for fast iteration. Increase for final renders.
  • Density maps are powerful. Use them for hairlines, thinning, and patterns.
  • Width matters. Proper width makes hair look realistic. Too thick = fake, too thin = invisible.
  • Natural taper. Use default taper settings for natural hair.
  • Region maps for partings. Paint red/green regions to create natural hair partings.
  • Expressions for variation. Use rand3() to add natural variation without painting textures.

Common Mistakes

  • Too much density too early. Starting with 100,000 strands is slow. Start with 5,000–10,000.
  • Ignoring width. Using default width for all hair types. Fine hair needs thin strands, coarse needs thick.
  • No taper. Setting taper to 0.0 for natural hair. Real hair tapers.
  • Forgetting density maps. Using uniform density everywhere. Use maps for hairlines and thinning.
  • Too much radius. Large interpolation radius (0.5+) makes hair too smooth and uniform.