Hair System

Overview

Hair System Diagram Three main building-blocks of hair in Hair Tool: Setup, Hair (sub)Systems, Profile

In Hair Tool there is concept of: Hair System - it is Blender geometry-nodes based modifier where hair strands are generated and modified. Modifications are done by adding sub-nodes (here called Deformers) to these modifiers (Hair Systems).

Hair-cards, in Hair Tool, are build from three basic modifiers (some are optional):

  • Setup modifier that connects: guide curve and source mesh
  • Hair Systems These are like the building blocks of the hair. They use generators to create strands and deformers to shape them,
  • Hair Profile modifier where geometry, UVs, and materials are attached to strands,

Multiple Hair (sub)Systems, can be connected together using labels called Tags. This helps to set child-parent like relation, which is needed, for: hair interpolation, clumping and other effects.

Hair System panel is located in Right Sidebar > Hair Tool Tab > Hair System Panel.
Click [+] to add Hair System to selected mesh (or curve) object.

Hair System UI Example of two Hair Systems setup: Parent and Child. Child System is made from: Strand Generator, Noise, Clump, Set Radius etc. deformers. Parent system is guided by: HairCurve guide (second input at very top)


Sub-Systems Types

After adding a hair (sub)system, the first slot in the deformers stack is automatically added, with its type determined by the selected hair sub-system type.

Strands Generator

It will grow strands, from Base Mesh surface. You can control parameters like: resolution, density, length, interpolation (Parent Child relation must be set) etc. These strands are affected by all subsequent deformers in current system stack

Set parent Tags and enable interplation option, so that generated strands will follow these Tagged strands. See Child Parent Setup

Align to Surface Normal

Align to Surface Normal - option changes how the interplation works. Do not confuse with Align Tilt To Source Surface

Strands Distribution

Poisson distribution is a better way to spread things out evenly than just randomly placing them.

Here's why:

Imagine you're trying to place hair strands on a surface.

  • Random placement: You might end up with clumps of hair in some areas and gaps in others.

  • Poisson distribution: This method makes sure the hair is spread out more evenly. It does this by removing any hair strands that are too close together.

Random vs Poisson Left: notice the clumping of hair roots; Center: Poisson distribution helps to remove these clumped dots (colored in black), by removing roots that are closer than Min Distance parameter. Right: Increase Density parameter to fill up the empty spots

Strands Filter

Imagine you want to modify multiple Hair Systems, by adding Set Radius or Align Tilt. Instead of adding these deformers to each individual Hair subSystem, one by one, you can utilize the Filter System to affect all previously generated strands simultaneously. All type of strands can be modified:

Note: If no filter tag is specified, then all strands will be affected. Otherwise only strands with specified tag will be affected.

Demo of applying 'Scale' deformer to strands generated with Right and 'Left' Hair Systems. When no filter Tag is set, then all strands are scaled

Strands From Grid Surface

This type of Strand Generator, will guide strands using guide mesh (grid mesh, made of quads only). Root of strands will be placed:

  • on edge loop marked as Sharp (Ctrl+E -> Mark Sharp)
  • or on crease edge (Shift+E -> Crease Edge).

These strands can be affected by all subsequent deformers in current system stack

In video above - top, boundary edge loop was marked as sharp

Note: Notice how guide grid, in video above, has uneven topology - getting dense to the right. This is important when adjusting 'Uniform Spacing' option

Note: To mask-out placement of roots, just plugin in vertex group mask into 'Placement Mask' input

Examples of proper grid guide topology: Bad Grid Mesh Check out the FAQ to see examples of wrong mesh topology

Interpolated Strands

This Strand Generator, will use existing curves add extra strands in between them. In that case order of strand matter!

In video above I used drawn strands to guide the 'Interpolated Strands' generator (video is narrated)

Note: If order of your strands is wrong, and Automatic Spline Sorting option fails, you can use Sort Strands by Stroke operator to manually fix the order (see video above)


Transfer Hair System

Hair System can be assigned to Mesh or Curve Hair object, depending on which object is selected when you add Hair System. If you want to change Hair System 'owner' you can use Transfer Hair System operator. System Owner

Hair System that generates hair-cards (in center above) can be assigned to:

Source/Base Mesh mesh from which strands are spawned from (often scalp mesh)
Empty Mesh helper, without geometry, usually linked with Source Mesh and Guide Curve
Guide Curve curve object that guides strands
Empty Curve helper, without geometry, (usually linked with Source Mesh and Guide Curve)

Hair system transfer possibilities:

Current Owner Transfer To Result
Guide Curve Base Mesh Hair System will be moved to Base Mesh Surface (usually scalp)
Guide Curve Empty Mesh Hair System will be moved to new, empty mesh object
Empty Curve Base Mesh Hair System will be moved to Base Mesh Surface (usually scalp)
Base Mesh Guide Curve Hair System will be moved to Guide Curve
Base Mesh Empty Curve Hair System will be moved to Empty Curve Hair object
Base Mesh Empty Mesh Hair System will be moved to Empty Mesh object
Empty Mesh Guide Curve Hair System will be moved to Guide Curve
Empty Mesh Base Mesh Hair System will be moved to Base Mesh

Visually, there should not be any noticeable difference. However, the owner of the Hair System will change
User cases when you want to use Transfer Hair System:

  • if you want to 'Bake' curves generated by Hair System to curve, but it is assigned to Mesh (meshes cannot receive curves geometry). In that case you can transfer Hair System to Empty Curve, and then bake it to it
  • if hair interpolation is broken (e.g. stops working after you select and try to sculpt Guide Curve. See note in Hair Interpolation section

General Operations

General Operations

  • Remove whole Hair System - removes all Hair Systems, Setup and Profile modifiers from object
  • Update Whole Hair System - updates Setup, Profile, Hair SubSystems (without deformers) nodes. All nodes are recreated from scratch, it is destructive operation and may break your Hair setup!
  • Bake All SubSystems - bake curves generated by All Hair sub-Systems into 'real' curves geometry. This works only on hair curve type of objects (try: Ctr+Shift+H > Transfer Hair System: to Empty Curve, or to Guide Curve)
  • Transfer Hair System - explained here

Child - Parent setup

Linking two Hair SubSystems, with Child-Parent relation, enables capabilities such as: interpolation, clumping, curls, braids, twist and others.
Use Tags to link two Hair SubSystems, establishing a parent-child relationship.

In the video above, I show how to make the red strands (called "ParentSys") the parent (guide) for the yellow strands (named "Child"). You can use any tag name you want. In this example, I used "RED".

Note: Parent Hair System has to be placed above Child System in the stack, or else Child strands won't 'see' the Parent strands

Hair Interpolation

To enable hair interpolation, current Hair System has to have parent - see above.

After that Toggle Interpolation button will be accessible (enabled by default) in first deformer - Strands Generator properties

Note: In some cases interpolation may behave erratically (e.g interpolation breaks when you select Guide Curve). The most likely cause is - cyclic dependency:
- Guide curve depends on your base mesh (usually scalp),
- Base Mesh (with Hair System attached) depends on guide curve (through enabled interpolation to Parent - Guide Curve).
To fix it and break the cyclic dependency use Transfer Hair System and move Hair System to either Empty Mesh or Guide Curve.

Since Hair Tool 3.0 and later versions, strands interpolation operates within areas surrounded by mesh islands - meaning, if you want to make hairstyle with split:

  • split scalp mesh in two, without separating to new object, (e.g. select edge loop, that divides the scalp in half - and press 'V' to rip it). Now child strands will not cross this edge.

In video above I have cut mesh in 4 parts (visualised with 4 colors). Strands won't cross islands boundaries

Note: If you want to make hairstyle with split, you can use Select By Island to select guide strands from specific island

Note: instead of splitting the edges physically, you can use the Edges split modifier

Hair sub-System menu

Sub-Systems Menu

You can copy settings from any hair system, and paste to target using entries above.

Bake

Procedurally generated strands cannot be groomed. First convert them into 'real' geometry with 'Bake' operator. This will bake: active (and preceding) Hair sub-Systems or All Hair sub-systems into 'real' curve geometry, that can then be groomed using Blender 'Curve Sculpt' mode.

Note: Baking works only if Hair System is attached to hair curve type of objects! If not the use: Ctr+Shift+H > Transfer Hair System > to Empty Curve or to Guide Curve)

Curves in video cannot be groomed, since they are generated procedurally. After baking, you can groom them without issues

Update Node Pack

Update selected Hair Components (geometry node setup) to its latest version, for example after updating add-on

Copy/Paste Hair System

Copy Hair System settings from: Active Hair sub-System or All sub-Systems

Paste Hair System settings to: Active Hair sub-System or to All sub-Systems

Copying All SubSystems (and profile settings) from one object to another. Receiving object has to have at least one Hair subSystem attached. Also make sure both objects share same vertex groups, similar sharp (or crease) edges - if you copy Curves From Grid type of setup

Switch Hair System Type

Switch Hair System Type - for example from Strands Generator to Strands Filter.

Hair System UI Pasting Hair System settings (or instancing object that uses Hair System), will create linked copy. This means that change performed on new copy, will affect original Hair subSystem too. Number of Hair System users is displayed next to Hair Tag (green box in image above)

Note: You can unlink Hair System, by clicking on 'users number' (see green box above)


Tags

Think of Tags as labels we apply to the strands in a Hair System. They enable us to establish child-parent relations or manipulate specific strands with strands filter. Why won't we use system name for that functionality? The reason is, that you can assign multiple tags to same strand e.g.:

  • Hair System A strands Tags: LONG and CURLY.
  • Hair System B strands Tags: LONG

Now you can modify strands tagged with LONG label - using Strands Filter, without having to create same deformers on Hair System A then B twice.

Tags can be also assigned to subset of strands from within Hair System with Assign Tag deformer.

Hair System Tags In image above we tagged 'First' Hair System A with label. 'Second' and 'Third' system are linked to it - which allows us to use e.g. interpolation on them. Note: Guide curves received GUIDE tag automatically

Tag can be assigned in few ways:

  • by typing it in next to system name see A tag in image above. If system has no tag assigned then [TAG] label is shown
  • by using Assign Tag deformer
  • you can also assign tags to Hair System guide object (new Curve Hair) using Tags Panel. See Below

Tags Panel

In video above we create Tag A, then assign selected curves to tag A using Assign button

Note: Assigning Tags only works on new Hair Curves. To be able to select individual curves, like in video above, you have to use Hair Modeling mode. For now only selection works from all the available Modeling Tools


Updating

After updating Hair Tool add-on, you may need to update your Hair Setup:

  • There is option to update Individual Hair System elements (Deformers, Masks, Profiles etc.) - located in Deformers dropdown menu
  • Setup and Profile node (green and blue box on image below)
  • Update Whole Hair System located in General Menu - this will update all nodes, in all Hair Systems for all objects on scene. Be warned though: add-on will try to recreate whole node tree structure from scratch, so this may now always work.

Updating Hair System Nodes You may update deformer, profile, mask etc. nodes using menu above

Note:: Using individual node packs update (only Deformers, or only Masks etc.) method is usually safer.


Limitations

  • Only One UV box can be assigned to profile - you can use Mesh Profile with multiple meshes as a workaround for randomizing UVs (No longer the case Since HT 2.44)
  • Hair Modeling Tools do not work (except selection)
  • Hair interpolation is using booleans under the hood. Because of this, interpolation may fail if boolean fails. And Interpolation may be slow on heavy base meshes (I recommend using lowpoly hair surface meshes). Hopefully I will find better way in the future, to create interpolations. (No longer the case since Blender 3.5 and Hair Tool 2.44)

FAQ

I get Errors in console

If you open old blend file with old Hair Tool setup, after you updated Hair Tool, you may get some errors, and UI wont be drawn correctly. Use Update Whole Hair System located in General Menu - this will update all nodes, in all Hair Systems for all objects on scene

Warning this is potentially destructive operation, since whole node tree will be recreated from scratch. Updated nodes behavior may change, resulting in slightly different hair look

Hair Interpolation won't work

In some cases interpolation may behave erratically (e.g interpolation breaks when you select Guide Curve). The most likely cause is - cyclic dependency between Base Mesh with attached Hair System and Guide Curve. See note in Hair Interpolation section.
To fix the cyclic dependency use Transfer Hair System and move Hair System to either: Empty Mesh or Guide Curve.