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.