ICE Hair from NURBS Surface
Download ICE compounds, XSI model, docs, here.
Compounds:
- am Hair from NURBS Plus: "big" one, with all options, including hair clumping. Needs "am Hair from NURBS Ctrl" to work.
- am Hair from NURBS Single: "simple", it has the same parameters, except for hair locks. It's designed for use with thin NURBS strips.
- am Hair from NURBS Ctrl: just a generator of hair locks, it's needed only "for am Hair from NURBS Plus" compound.
- am Hair from NURBS MotionBlur: enables rendering of motion blur. It should resist in a separate ICE tree, at top of ICE tree that generates hairs.

Usage:
- Create empty point cloud, import "am Hair from NURBS Ctrl" compound, connect NURBS surface.
- Create another empty point cloud, import "am Hair from NURBS Plus" compound, connect first point cloud, NURBS surface, mesh to stick. Base of strands/hairs is always at NURBS surface U boundary. If you enable visibility of NURBS boundary attribute in Softimage viewports, U boundary is displayed with red color. If hairs direction doesn't fit, just swap surface UV's. Also, check where NURBS surface normals going, it's important for many parameters here - these normals should be parallel with normals of head model.
 
am Hair from NURBS Ctrl - Parameters:
- SubCount: Count of hair locks.
- Move start along V: usually it's at zero, increase it only if parts of U boundary of NURBS surface, are close to overlap - in that case, "am Hair from NURBS Plus" can catch attributes from wrong points of Control point cloud.
- U randomness: creates random widths of hair locks.
- V randomness: it's for random parameters related to positions of hair locks.

am Hair from NURBS Single - Parameters:
Same as for "am Hair from NURBS Plus", except parameters related to hair locks. No need for "am Hair from NURBS Ctrl" compound, also, there isn't an input for Control point cloud.

am Hair from NURBS Plus - Parameters:
- Total number of hairs
- Hair segments: it's same for all strands/hairs, regardless of their lengths.
- Size: size of particle shape, shape is set to "segment".
- Push at root, push at tip: "thickness" of hair, in SI units.
- Basic seed for random values, used for hairs layout .
- Push every nth strand along NURBS surface normals, in SI units. It's using modulo function, so it do nothing at zero, or 1.
- Global push: moves all hairs along NURBS surface normals, in SI units.
- Color gradient: gradient relative to hair locks, random. It can be used in rendertree too, by using attribute color.
- Modulate length: can be used for modulating hairs length with weight map at NURBS surface. It takes weight map values only from particle emit location, close to bases of strands. It's relative to NURBS surface V length.
- Random length, at hair tips, relative to NURBS surface V length. It preserves original shape of hair.
- Shear at root: for keeping shape of hair, when sticking to mesh at low angles.
- U rounding: modulates "Push at root" and "Push at tip". Parameter is for modulating the start of effect, relative to NURBS surface V length.
Fixed width : keep widths of hair locks, to the value at hair roots.
- Clump: at 1 is full effect, at zero it do nothing.
- Random moving of clumps, along NURBS surface normals:
- Random clumps length:
- Loose tip: Start and Length are related to V length of NURBS surface, "weight" is in SI units, random will affect both.
- Wave profile: Wave profile is controlled with gradient, instead of function curve, just to make PPG smaller. Gradient is converted to HSV color space, then only value from HSV is used, so, keep gradient gray, color values will do nothing usable.
- Wave strength: global strength in SI units.

- Horizontal and vertical wave start, crossovers, random angle... : Actually, vertical is along NURBS surface normals, horizontal is along closest surface U location. These waves are created with two sinus functions, each at different frequency, so both of them creates curls.
- Stick to surface: just stick hair roots to surface, usually that's a head of your model.
- Cuttofs: Cutoff to Control point cloud is important, increase this if some of hairs going in unwanted direction.
Limitations, issues:
- At moment, only one NURBS surface can be used with point cloud. One NURBS surface = one point cloud.
For many point clouds, it's good idea to create a master point cloud with all shared attributes, then to take parameters from that master.
- Compound for rendering motion blur, "am Hair from NURBS MotionBlur", has a strands velocity multiplied by factor 10 - this is arbitrary, empirical.
 
Regards,
Anto Matkovic
http://www.matkovic.com/anto