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 nameParentsMFn typeCompatible function sets
follicleshapekFolliclekBase
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)TypeDefaultFlags
inputSurface (is) nurbsSurfaceNULLoutputinputconnectable
Input surface
inputMesh (inm) meshNULLoutputinputconnectable
Input mesh
inputWorldMatrix (iwm) matrixidentityoutputinputconnectable
Input matrix from mesh or surface
parameterU (pu) double0.0outputinputconnectablestorablekeyable
U parameter value on surface
parameterV (pv) double0.0outputinputconnectablestorablekeyable
V parameter value on surface
startPosition (sp) nurbsCurveNULLoutputinputconnectable
Input start position curve
restPosition (rp) nurbsCurveNULLoutputinputconnectable
Input rest position curve
currentPosition (crp) vectorArrayemptyoutputinputconnectable
Input poly line from hair system node. This is converted to an output nurbs curve.
restPose (rsp) enum0outputinputconnectablestorablekeyable
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) enum1outputinputconnectablestorablekeyable
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) enum2outputinputconnectablestorablekeyable
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) enum0outputinputconnectablestorablekeyable
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) boolfalseoutputinputconnectablestorablekeyable
If true then emit the hair from the opposite side of the input surface.
hairSysGravity (hsg) double1.0outputinputconnectablestorablekeyablehidden
The global gravity value from the simulation node. (used by RestPose )
hairSysStiffness (hss) double0.5outputinputconnectablestorablekeyablehidden
The global hair stiffness value from the simulation node. (used by RestPose )
overrideDynamics (ovd) boolfalseoutputinputconnectablestorablekeyable
If true then use the local hair settings rather then the global hairSystem ones
collide (cld) booltrueoutputinputconnectablestorablekeyable
If true then collide this hair with geometry if the global hairSystem has collisions
damp (dmp) double0.0outputinputconnectablestorablekeyable
This overrides the damp on the hairSystem. It can be used to stablize problem hairs.
stiffness (stf) double0.15outputinputconnectablestorablekeyable
The amount the hair can flex with regard to the rest position.
stiffnessScale (sts) compoundn/aarrayoutputinputconnectablestorablekeyable
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) float0.0outputinputconnectablestorablekeyable
Position of ramp value on normalized 0-1 scale
stiffnessScale_FloatValue (stsfv) float0.0outputinputconnectablestorablekeyable
Ramp value at the sibling position
stiffnessScale_Interp (stsi) enum0outputinputconnectablestorablekeyable
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) double0.0outputinputconnectablestorablekeyable
The amount the simulated hair can stretch along its length.
clumpWidthMult (cwm) double1.0outputinputconnectablestorablekeyable
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) compoundn/aarrayoutputinputconnectablestorablekeyable
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) float0.0outputinputconnectablestorablekeyable
Position of ramp value on normalized 0-1 scale
clumpWidthScale_FloatValue (cwsfv) float0.0outputinputconnectablestorablekeyable
Ramp value at the sibling position
clumpWidthScale_Interp (cwsi) enum0outputinputconnectablestorablekeyable
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) double0.0outputinputconnectablestorablekeyable
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) compoundn/aarrayoutputinputconnectablestorable
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) float0.0outputinputconnectablestorable
Position of ramp value on normalized 0-1 scale
attractionScale_FloatValue (atsfv) float0.0outputinputconnectablestorable
Ramp value at the sibling position
attractionScale_Interp (atsi) enum0outputinputconnectablestorable
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) double0.0outputinputconnectablestorablekeyable
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) double1.0outputinputconnectablestorablekeyable
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) double1.0outputinputconnectablestorablekeyable
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) double0.0outputinputconnectablestorablekeyable
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) boolfalseoutputinputconnectablestorablekeyable
If true then the clump is split into 3 sub groupings that are braided.
colorBlend (cbl) double0.0outputinputconnectablestorablekeyable
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) float3outputinputconnectablestorable
input color
colorR (cr) float0.0outputinputconnectablestorablekeyable
color Red value
colorG (cg) float0.0outputinputconnectablestorablekeyable
color Green value
colorB (cb) float0.0outputinputconnectablestorablekeyable
color Blue value
fixedSegmentLength (fsl) bool0outputinputconnectablestorablekeyable
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.0cmoutputinputconnectablestorablekeyable
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) double1.0outputinputconnectablestorablekeyable
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) integer2outputinputconnectablestorablekeyable
The degree of the final generated output curve.
clumpWidth (cw) float0.3outputinputconnectablestorablekeyable
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) double30.0, 0.0, 0.0outputconnectable
world position of hair base
outTranslateX (otx) distance (double)0.0cmoutputconnectable
X value of outTranslate
outTranslateY (oty) distance (double)0.0cmoutputconnectable
Y value of outTranslate
outTranslateZ (otz) distance (double)0.0cmoutputconnectable
Z value of outTranslate
outRotate (or) double30.0, 0.0, 0.0outputconnectable
world rotation of hair base
outRotateX (orx) angle (double)0.0degoutputconnectable
X value of outRotate
outRotateY (ory) angle (double)0.0degoutputconnectable
Y value of outRotate
outRotateZ (orz) angle (double)0.0degoutputconnectable
Z value of outRotate
outTangent (otn) double31.0, 0.0, 0.0outputconnectable
twist vector at hair base
outTangentX (otnx) distance (double)1.0cmoutputconnectable
X value of outTangent
outTangentY (otny) distance (double)0.0cmoutputconnectable
Y value of outTangent
outTangentZ (otnz) distance (double)0.0cmoutputconnectable
Z value of outTangent
outNormal (onm) double30.0, 0.0, 1.0outputconnectable
normal at hair base with elevation and azimuth applied
outNormalX (onx) distance (double)0.0cmoutputconnectable
X value of outNormal
outNormalY (ony) distance (double)0.0cmoutputconnectable
Y value of outNormal
outNormalZ (onz) distance (double)1.0cmoutputconnectable
Z value of outNormal
outHair (oha) hairCurveNULLoutputconnectable
output hair data for use by hairSystemShape node
outCurve (ocr) nurbsCurveNULLoutputconnectable
output hair data for use by hairSystemShape node
validUv (vuv) booltrueoutputconnectable
If false then the specified uv for input mesh is not currently defined.
mapSetName (msn) stringNULLoutputinputconnectablestorable
The Name of the mapset of the poly on which follicle is present