# Isohedron Hair Tools
A suite of tools for deforming and procedurally manipulating hair and fur grooms in Houdini. Rather than authoring a groom from scratch, these nodes take an existing groom and help you get it moving — attaching it to an animated character, extracting and preparing a sparse set of guides, driving the full dense result from those guides, and resolving collisions along the way. They are designed to sit around your simulation pipeline, handling everything before and after the sim itself.

# Houdini Hair Node Descriptions
## Hair Adjust Length
Grows or trims groom curves to a target length while keeping their existing shape intact, with natural-looking tip extension and optional straightening toward the skin surface. Length and shape controls can be driven per-curve from painted maps or curve attributes, making it easy to art-direct or correct length variation across an entire groom.

## Hair Attach
Sticks groom curves to a moving character by computing how each curve's root should travel with the skin as it animates. A fast, lightweight first step that sets up curves for collision resolution or full guide deformation downstream.

## Hair Collision
Pushes groom curves away from character surfaces, with built-in friction so hair near the skin moves with it. Stiffness, soft-collision blending, and deflection controls give artists the tools to dial out jitter and get natural-looking results.

## Hair Deform
Drives a full dense groom by capturing nearby sparse simulation guides and blending their motion into each curve. Handles guide extrapolation, clump tightening, and twist, with an interactive debug mode that color-codes guide relationships for fast troubleshooting.

## Hair Deform Procedural
A Husk render-time version of Hair Deform that deforms dense curves against animated guides at render time, keeping material bindings intact without requiring a pre-cached dense groom.

## Hair Extract Clumps
Automatically groups a dense groom into natural clumps based on how curves travel together, then picks or generates a single representative guide for each clump. Outputs clump width per guide point for use in downstream shaping, simulation, or collision setup.

## Hair Prepare
Gets groom curves ready for simulation by snapping roots to the rest skin surface, evening out point spacing, resolving mesh penetrations, and transferring skin attributes like UVs onto each curve. The essential first step before feeding curves into any node in this hair pipeline.

## Hair Regrowth
Generates a higher-resolution dense groom from existing guides, making it easy to produce close-up-ready hair without re-grooming from scratch.

## Hair Select
Picks an evenly distributed subset of a dense groom to serve as simulation or deformation guides, with optional weighting by curve length, straightness, and angle off the skin. Also computes a collision width per guide based on neighbor spacing, ready to feed directly into a simulation.


# Example Scene

Provided with these operators is an example scene that demonstrates the capabilities of each node and some example workflows.

| Example Name              | Description                                                                                                |
|---------------------------|------------------------------------------------------------------------------------------------------------|
| clump_twisting            | Demonstrate the effect of twist on deformed guides on a static mesh.                                       | 
| clumps_on_curving_surface | Guide tighteni keeps clumps together through significant mesh bending.                                     | 
| ground_smoosh             | Character walks through grass with a custom smoosh solver.                                                 | 
| hair_adjust_length        | Adjust the length of a curve, with polynomial extrapolation.                                               | 
| hair_attach               | Demonstrates the advantages of hair_attach over guide_deform.                                              | 
| hair_collision            | Demonstrates the use of the hair_collision node to handle post simulation curve penetrations.              | 
| hair_deform               | Guided deformation of hair curves on a walking character.                                                  | 
| hair_extract_clumps       | Use hair_extract_clumps to identify clump and select representative guides.                                | 
| hair_regrowth             | Grow denser hair on a region of a mesh that already has hair.                                              | 
| hair_select               | Examples for using hair_select to choose subsets of curves to use as guides.                               | 
| husk_procedural           | Workflow for using the hair_deform_procedural node to deform hair at render time.                          | 
| predeform_hair            | Workflow for pre-deforming hair to counteract the effect of gravity settling on a groom during simulation. | 
| whip_motion               | Fast moving ball of hair demonstrates clumps sticking together cleanly.                                    | 

## What you should have received

| File                                  | Description                                                                                                |
|---------------------------------------|------------------------------------------------------------------------------------------------------------|
| `otls/iso-hair-1.hda`/`hdalc`/`hdanc` | The library of hair tool HDAs.                                                                             | 
| `iso-hair-1.hip`/`hiplc`/`hipnc`      | Examples and workflows for using these tools.                                                              | 
| `iso-hair-1.json`                     | The Houdini [package](https://www.sidefx.com/docs/houdini/ref/plugins.html) file to configure these tools. |
| `README.md`                           | This guide                                                                                                 |
| `EULA.md`                             | Software license                                                                                           |


# Licensing

These nodes require a valid license to execute. A license is checked out the first time a node is cooked in a session and remains held until Houdini is closed.

## License Server

The `isohedron-license-server` must be reachable from the location specified by the `ISOHEDRON_LICENSE_SERVER` environment variable, which defaults to `http://localhost:8848`.

In a studio environment, the license server is typically set up and maintained by an IT administrator. If you are unable to connect or your checkout is being rejected, contact your IT administrator rather than attempting to troubleshoot the server directly.

If you are working independently, the license server is a single self-contained binary that is straightforward to run on your own machine. Refer to the operations manual for setup instructions.

## Consumption

Licenses are consumed per machine rather than per process. Multiple Houdini sessions running on the same machine will share a single license.

A license is returned once all processes on that machine have finished using it. In the event of an unclean shutdown, any held license will be automatically returned within approximately five minutes. Studio administrators can manually release a stuck seat immediately using the license server's administration tools.

## Expiry

Licenses are issued with an expiry date. Once a license lapses, checkouts will be denied until a renewed license is installed on the server. Expiry dates can be checked at any time via the license server dashboard or CLI. It is recommended to arrange renewals before expiry to avoid any interruption to your pipeline.

## Purchase

To purchase or renew licenses for these tools, please contact [sales@isohedron.com.au](mailto:sales@isohedron.com.au).

## License Types

Licenses come in a variety of flavors, depending on the version of Houdini used:

| Houdini License Category | Interactive | Isohedron License Required  |
|--------------------------|-------------|-----------------------------|
| Commercial (Core/FX)     | Y           | iso-hair-1-commercial       |
| Commercial (Core/FX)     | N           | iso-hair-1-commercial-batch |
| Indie                    | Y           | iso-hair-1-indie            |
| Indie                    | N           | iso-hair-1-indie-batch      |
| Apprentice               | Y           | Free to test                |
| Apprentice               | N           | Not supported               |
| Husk Procedural          | Y/N         | iso-hair-1-procedural       |
