Go to: Related nodes. Attributes.

This node builds the hair structure required by the hairSystem node. It also holds per hair attributes that can be used to override the global hairSystem simulation attributes. It takes an input start and rest position curve as well as a surface and position on that surface. It generates polylines that are then passed to the hairSystem node. The current position from the hairSystem is then passed back to this node as an array of points. The follicle node then turns this array of points into an output nurbs curve for use by other nodes, such as a paint effects stroke.

Node name Parents MFn type Compatible function sets
follicle shape kFollicle kBase
kNamedObject
kDependencyNode
kDagNode
kShape
kFollicle

Related nodes

projectCurve, rebuildCurve, detachCurve, attachCurve, extendCurve, insertKnotCurve, curveShape, nurbsCurve, hairSystem

Attributes (69)

The following quick index only shows top-level attributes (too many attributes to show them all): attractionDamp, attractionScale (3), braid, clumpTwistOffset, clumpWidth, clumpWidthMult, clumpWidthScale (3), collide, color (3), colorBlend, curlMult, currentPosition, damp, degree, densityMult, fixedSegmentLength, flipDirection, hairSysGravity, hairSysStiffness, inputMesh, inputSurface, inputWorldMatrix, lengthFlex, mapSetName, outCurve, outHair, outNormal (3), outRotate (3), outTangent (3), outTranslate (3), overrideDynamics, parameterU, parameterV, pointLock, restPose, restPosition, sampleDensity, segmentLength, simulationMethod, startCurveAttract, startDirection, startPosition, stiffness, stiffnessScale (3), validUv

Long name (short name) Type Default Flags
inputSurface (is) nurbsSurface NULL outputinputconnectable
Input surface
inputMesh (inm) mesh NULL outputinputconnectable
Input mesh
inputWorldMatrix (iwm) matrix identity outputinputconnectable
Input matrix from mesh or surface
parameterU (pu) double 0.0 outputinputconnectablestorablekeyable
U parameter value on surface
parameterV (pv) double 0.0 outputinputconnectablestorablekeyable
V parameter value on surface
startPosition (sp) nurbsCurve NULL outputinputconnectable
Input start position curve
restPosition (rp) nurbsCurve NULL outputinputconnectable
Input rest position curve
currentPosition (crp) vectorArray empty outputinputconnectable
Input poly line from hair system node. This is converted to an output nurbs curve.
restPose (rsp) enum 0 outputinputconnectablestorablekeyable
This specifies how the rest position of the hair used by dynamic computations is determined. It may be straight, based on the start curve position or a separate input curve may be used. "start minus gravity" attempts to compute a rest position based on gravity and the hair stiffness such that the hair is in dynamic equilibrium at the start of the simulation. If "same as start" is used then the hair will fall at the beginning if there is any gravity and the hair is not totally stiff.
pointLock (ptl) enum 1 outputinputconnectablestorablekeyable
This specifies where the hair is attached relative to the start position. One may constrain the base( like a normal hair), both ends( like a rope attached at either end ), or with no attachments the hair will fall like a loose string that is dropped. One can animate this parameter to detach a hair during a simulation.
simulationMethod (sim) enum 2 outputinputconnectablestorablekeyable
This specifies how to apply dynamic motion to the hair. If static then no dynamics are computed for the hair, which will appear totally stiff in the start position. Dynamic computes the hair position based on forces and collisions. Passive moves it by interpolating the motion of neighboring dynamic hairs, which can be an efficient way of simulating masses of hair in self collision.
startDirection (sdr) enum 0 outputinputconnectablestorablekeyable
This determines the initial direction a hair emits from the follicle. This is used when determining rest deflections, as well as when increasing subsegments on the hairsystem. If the restPose is straight and this is set to start curve, the hair will try to assume a straight line based on the first segment of the start curve. If surface normal is selected then the hair would instead move towards a line coming straight out of the surface. IF this is set to surface normal then subsegments in the hairsystem will refine such that the root of the hair is normal to the surface.
flipDirection (fld) bool false outputinputconnectablestorablekeyable
If true then emit the hair from the opposite side of the input surface.
hairSysGravity (hsg) double 1.0 outputinputconnectablestorablekeyablehidden
The global gravity value from the simulation node. (used by RestPose )
hairSysStiffness (hss) double 0.5 outputinputconnectablestorablekeyablehidden
The global hair stiffness value from the simulation node. (used by RestPose )
overrideDynamics (ovd) bool false outputinputconnectablestorablekeyable
If true then use the local hair settings rather then the global hairSystem ones
collide (cld) bool true outputinputconnectablestorablekeyable
If true then collide this hair with geometry if the global hairSystem has collisions
damp (dmp) double 0.0 outputinputconnectablestorablekeyable
This overrides the damp on the hairSystem. It can be used to stablize problem hairs.
stiffness (stf) double 0.15 outputinputconnectablestorablekeyable
The amount the hair can flex with regard to the rest position.
stiffnessScale (sts) compound n/a arrayoutputinputconnectablestorablekeyable
Stiffness Scale affects the stiffness from root to tip of the hair. The left of the graph is the root and the right is the tip. Typically the root of a hair is thicker and thus stiffer than the tip. This attribute multiplies the stiffness parameter value, so a value of 1.0 will leave the stiffness unchanged. Note that there is also a stiffnessScale attribute ramp on the hair system shape node which affects all hairs in the system. This per-follicle parameter is used in place of the hair system's version when overrideDynamics is true.
stiffnessScale_Position (stsp) float 0.0 outputinputconnectablestorablekeyable
Position of ramp value on normalized 0-1 scale
stiffnessScale_FloatValue (stsfv) float 0.0 outputinputconnectablestorablekeyable
Ramp value at the sibling position
stiffnessScale_Interp (stsi) enum 0 outputinputconnectablestorablekeyable
Ramp Interpolation controls the way the intermediate values are calculated. The values are:
None: No interpolation is done; the different colors just show up as different bands in the final texture. Linear: The values are interpolated linearly in RGB color space. Smooth: The values are interpolated along a bell curve, so that each color on the ramp dominates the region around it, then blends quickly to the next color. Spline: The values are interpolated with a spline curve, taking neighboring indices into account for greater smoothness.
lengthFlex (lfl) double 0.0 outputinputconnectablestorablekeyable
The amount the simulated hair can stretch along its length.
clumpWidthMult (cwm) double 1.0 outputinputconnectablestorablekeyable
This scales the hair clump relative to the global hair clump width on the hair system node. If the hair clump width on the hair system is zero, then this parameter will have no effect, as zero times anything is always zero. Note that this will also affect the overall number of hairs within a clump, such that the density per unit remains roughly constant.
Note that there are also clumpWidth and clumpWidthScale attributes that are in effect only when the overrideDynamics attribute is toggled on. For dynamic hairs, these two additional attributes can be used to more finely tune the clump width, including varying the width along the length of the follicle. For dynamic follicles, the effective clump width is the product of clumpWidthMult, clumpWidthScale and clumpWidth. For non-dynamic follicles clumpWidthMult alone provides the width.
clumpWidthScale (cws) compound n/a arrayoutputinputconnectablestorablekeyable
Clump Width Scale scales the clumpWidth attribute along the length of the follicle. The left of the graph is the root and the right is the tip. As a dynamic hair parameter, it is only used when the overrideDynamics attribute is enabled. Otherwise, the clumpWidth and clumpWidthScale values on the hairSystemShape node are used instead. For dynamic follicles, the effective clump width is the product of clumpWidthMult, clumpWidthScale and clumpWidth. For non-dynamic follicles clumpWidthMult alone provides the width.
clumpWidthScale_Position (cwsp) float 0.0 outputinputconnectablestorablekeyable
Position of ramp value on normalized 0-1 scale
clumpWidthScale_FloatValue (cwsfv) float 0.0 outputinputconnectablestorablekeyable
Ramp value at the sibling position
clumpWidthScale_Interp (cwsi) enum 0 outputinputconnectablestorablekeyable
Ramp Interpolation controls the way the intermediate values are calculated. The values are:
None: No interpolation is done; the different colors just show up as different bands in the final texture. Linear: The values are interpolated linearly in RGB color space. Smooth: The values are interpolated along a bell curve, so that each color on the ramp dominates the region around it, then blends quickly to the next color. Spline: The values are interpolated with a spline curve, taking neighboring indices into account for greater smoothness.
startCurveAttract (sct) double 0.0 outputinputconnectablestorablekeyable
This value determines the amount of attraction of the current hair position to the start position. Normally one would leave this at zero for long flowing hair. However for short hair it can be difficult to make hair stiff enough. This is good when the hair needs to be very stiff, and yet at the same time have some dynamic properties. At a value of one the hair position will be the start curve position( relative to the transformed follicle position ), only collisions and forces will still deflect the hair. Without startCurveAttract this could otherwise require a very high iteration count and damp value, especially if there are many cvs per hair. Note that there is an identical startCurveAttract on the hair system node. This per-follicle parameter is used in place of the hair system's version when overrideDynamics is true.
attractionScale (ats) compound n/a arrayoutputinputconnectablestorable
This value attenuates the startCurveAttract value along the length of the follicle. The left of the graph is the root and the right is the tip. If the startCurveAttract attribute is zero then this parameter will have no effect, as zero times a number is always zero. There is also a corresponding attractionScale parameter on the hair system node which has the same effect only for all hairs. This per-follicle parameter is used in place of the hair system's version when overrideDynamics is true.
attractionScale_Position (atsp) float 0.0 outputinputconnectablestorable
Position of ramp value on normalized 0-1 scale
attractionScale_FloatValue (atsfv) float 0.0 outputinputconnectablestorable
Ramp value at the sibling position
attractionScale_Interp (atsi) enum 0 outputinputconnectablestorable
Ramp Interpolation controls the way the intermediate values are calculated. The values are:
None: No interpolation is done; the different colors just show up as different bands in the final texture. Linear: The values are interpolated linearly in RGB color space. Smooth: The values are interpolated along a bell curve, so that each color on the ramp dominates the region around it, then blends quickly to the next color. Spline: The values are interpolated with a spline curve, taking neighboring indices into account for greater smoothness.
attractionDamp (ad) double 0.0 outputinputconnectablestorablekeyable
Attenuates the effect of startCurveAttract on a per-follicle basis. The actual attraction to the start curve is performed by altering the current velocity of the hair so that it will meet the start position. This control attenuates this value. When this value is one, the motion towards the start curve is fully attenuated, leaving simply the start position plus field forces. This is useful for applying fields on top of previously animated hairs. To acheive this affect, you should set attractionDamp = 1.0 and make the stiffness ramp all 1.0. There is also a corresponding attenuation parameter on the hair system node which has the same effect only for all hairs. This per-follicle parameter is used in place of the hair system's version when overrideDynamics is true.
densityMult (dml) double 1.0 outputinputconnectablestorablekeyable
This scales the number of hairs relative to the global hair per clump on the hair system node. If the hairs per clump on the hair system is zero, then this parameter will have no effect, as zero times anything is always zero.
curlMult (cml) double 1.0 outputinputconnectablestorablekeyable
This scales the curl rate relative to the global hair curl attribute on the hair system node. If the curl on the hair system is zero, then this parameter will have no effect, as zero times anything is always zero.
clumpTwistOffset (ctf) double 0.0 outputinputconnectablestorablekeyable
This affects the rotation of the individual hair clump about the central hair axis. This adds onto the global twist defined on the hair system node. If the twist on the hair system is zero, then this parameter will have no effect, as zero times anything is always zero.
braid (brd) bool false outputinputconnectablestorablekeyable
If true then the clump is split into 3 sub groupings that are braided.
colorBlend (cbl) double 0.0 outputinputconnectablestorablekeyable
This allows one to have a different base color per hair clump. The attribute value determines the proportion the global color is is blended with the local color attribute. If the value is zero than the hair color is determined by the global hair color on the hair system node. If the value is 1.0 then the color is entirely the color attribute on this node. In between values blend between the two values.
color (cl) float3 outputinputconnectablestorable
input color
colorR (cr) float 0.0 outputinputconnectablestorablekeyable
color Red value
colorG (cg) float 0.0 outputinputconnectablestorablekeyable
color Green value
colorB (cb) float 0.0 outputinputconnectablestorablekeyable
color Blue value
fixedSegmentLength (fsl) bool 0 outputinputconnectablestorablekeyable
Toggles how input curves are sampled. When this attribute is on, segmentLength attribute is used to determine the number of CVs sampled on the input curve. When the value is false, sampleDensity is used to compute the number points sampled.
segmentLength (sgl) distance (double) 1.0cm outputinputconnectablestorablekeyable
Specifies how long each segment on the hair should be. This is another way of sampling the input curve, used when fixedSegmentLength is on. Using a fixed segment length can provide more realistic hair simulation when the length of the hair varies across the same hair system. Setting a consistent segment length across all hairs will make longer hai rs have more CVs and shorter hairs have less CVs.
sampleDensity (sdn) double 1.0 outputinputconnectablestorablekeyable
This controls the number of points to sample along the input start and rest position curves when generating the outHair to pass to the simulation node. A value of one will cause the simulation hair to have the same number of poly line segments as the curve has cvs. A value of 2.0 will will double the number of segments, while a value of 0.0 will result in a single segment. This can dramatically affect the speed and quality of the simulation.
degree (dgr) integer 2 outputinputconnectablestorablekeyable
The degree of the final generated output curve.
clumpWidth (cw) float 0.3 outputinputconnectablestorablekeyable
This is the base or maximum width for the dynamic hair groups. As a dynamic hair parameter, it is only used when the overrideDynamics attribute is enabled. Otherwise, the clumpWidth and clumpWidthScale values on the hairSystemShape node are used instead. For dynamic follicles, the effective clump width is the product of clumpWidthMult, clumpWidthScale and clumpWidth. For non-dynamic follicles clumpWidthMult alone provides the width. Unlike Clump Width Mult, this attribute has no effect on the number of hairs per clump. It thus provides a way of scaling without affecting density.
outTranslate (ot) double3 0.0, 0.0, 0.0 outputconnectable
world position of hair base
outTranslateX (otx) distance (double) 0.0cm outputconnectable
X value of outTranslate
outTranslateY (oty) distance (double) 0.0cm outputconnectable
Y value of outTranslate
outTranslateZ (otz) distance (double) 0.0cm outputconnectable
Z value of outTranslate
outRotate (or) double3 0.0, 0.0, 0.0 outputconnectable
world rotation of hair base
outRotateX (orx) angle (double) 0.0deg outputconnectable
X value of outRotate
outRotateY (ory) angle (double) 0.0deg outputconnectable
Y value of outRotate
outRotateZ (orz) angle (double) 0.0deg outputconnectable
Z value of outRotate
outTangent (otn) double3 1.0, 0.0, 0.0 outputconnectable
twist vector at hair base
outTangentX (otnx) distance (double) 1.0cm outputconnectable
X value of outTangent
outTangentY (otny) distance (double) 0.0cm outputconnectable
Y value of outTangent
outTangentZ (otnz) distance (double) 0.0cm outputconnectable
Z value of outTangent
outNormal (onm) double3 0.0, 0.0, 1.0 outputconnectable
normal at hair base with elevation and azimuth applied
outNormalX (onx) distance (double) 0.0cm outputconnectable
X value of outNormal
outNormalY (ony) distance (double) 0.0cm outputconnectable
Y value of outNormal
outNormalZ (onz) distance (double) 1.0cm outputconnectable
Z value of outNormal
outHair (oha) hairCurve NULL outputconnectable
output hair data for use by hairSystemShape node
outCurve (ocr) nurbsCurve NULL outputconnectable
output hair data for use by hairSystemShape node
validUv (vuv) bool true outputconnectable
If false then the specified uv for input mesh is not currently defined.
mapSetName (msn) string NULL outputinputconnectablestorable
The Name of the mapset of the poly on which follicle is present