Page 1 of 1

Kristinka Hair Node Reference

Posted: 10 Feb 2010, 21:50
by rray
:-! This reference is somewhat outdated. For a more current version see the "online docs" link on Anto's kHair page.
Btw Anto, feel free to remove the link from your hp if you think it makes sense.
Kristinka Hair (kH) toolkit node reference
(work in progress, please pm me for additions&corrections)

short glossary of terms used here
strand=1 hair
node=compound
point=point in a pointcloud.
particle=same point
strand root=same point (in a pointclous with strands)


also look at the FAQ (next post)




1. EMITTING (HAIR)

____________________________________________________________________________________


kH Emit Guides
______apply to: * empty point cloud
______outputs: * execute port
______required inputs: * NURBS In Name (Emitter)
______demo: * Very-Basic-Setup.emdl

Adds points with temporary initial strands to the pointcloud, originating from the input NURBS surface.
UI Controls include various positioning options (grid, random, density distribution), number of strand segments.
This is the main node for hair creation which styling nodes like kH Follow NURBS or kH Cross Sections operate on top of.

TIP #1: Use the UI Controls to increase the density at the lower U border where the hair roots are more visible. For some hairstyles this improves the impression of fullness while maintaining render times.
TIP #2: Guide Strands can perfectly be used for final hair rendering - the alternative of having a secondary point cloud (with kH Emit Hair applied) makes sense for speed optimization purposes in scenes with high hair count or when using simulation.

____________________________________________________________________________________


kH Emit Hair
______apply to: * empty point cloud
______outputs: * execute port
______required inputs:
__________________* point cloud with at least kH Emit Guides applied
__________________* NURBS In Name(Emitter)
______demo: * Follow-NURBS-Tutorial.emdl

Adds points with "filler strands" to a secondary point cloud. The node has built-in lock and clumping options (See kH Grouping node) that make use of the guide strands.

Locks "by distance" separates strands, using distance from strands to guides. Distance higher than "Dist End" value, means full weights of locks. In Simulation-PhilPack-xsibase-25feb10.emdl demo, this option is used for dynamic weighting of lock effect, to avoid penetration of strands around model's shoulders.
"Align locks" creates effect, similar to "align profile to path" option in XSI Extrusion Along Curve operator, but it can produce overlapping around highly curved guides.

"Execute On Emit" port is mainly for deleting some of points, if this is needed.

NOTE: The input NURBS surface (emitter) is the same one as used in kH Emit Guides
NOTE: To avoid hair interpolation artefacts, kH Emit Hair makes use of the splitting offset data written by nodes like kH Splitting Offset or kH Offset Curves (See kH Splitting Offset for details, this is something similar to max's "smoothing groups", only for strand instead of normal interpolation)







2. EMITTING (FUR)

____________________________________________________________________________________


kH Init MeshUV Emitter
______apply to: * polygon mesh
______outputs: * execute port
______required inputs: * UV set on the polygon mesh to be used (select in an UI object picker)
______demo: * Simulation-Fur.emdl

Prepares a polygon mesh for use as the emitter for kH Emit Fur. Beware, as a necessary side effect, points are moved to their UV locations in XYZ space (X=U, Y=V, Z=0) once applied - you'll need to delete/reapply or disable the node temporarily if you wish to make further edits to the polygon mesh.

NOTE: The polygon mesh won't actually emit any points or strands. The emitting is done by kH Emit Fur on the main point cloud which will use the polygon mesh only as a reference.

____________________________________________________________________________________


kH Emit Fur
______apply to: * point cloud
______outputs: * execute port
______required inputs:
__________________* polygon mesh object (Emitter) with kH Init MeshUV Emitter applied
__________________* a fur profile through the kH Fur Profile node
______demo: * Fur-Vector-Field.emdl

Adds points with strands to the pointcloud, originating from the input polygon mesh surface.
UI Controls include strand count ("rate"), strand length, number of segments, orientation.

This is the main node for fur creation. Fur doesn't require styling nodes like kH Follow NURBS or kH Cross Sections. Instead a fur profile is used which must be provided by the kH Fur Profile node.

TIP #1: Local density distribution can be controlled using the texture editor: The more dense the UVs, the less hair is created in that area.
TIP #2: Points get a local coordinate system: Z is surface normal, Y is surface tangent in the UV's "U up" direction, X is perpendicular to Y and Z. The strand profile's oriented along that system. At UV seams, where the continuity would break, use a kH Vector Field node to provide kH with hints for a continuous orientation across the whole model.

____________________________________________________________________________________


kH Fur Profile
______apply to: * kH Emit Fur node
______outputs: * array of 3D vectors (profile)
______demo: * Fur-Vector-Field.emdl

Provides a profile (=strand shape) for the kH Emit Fur node, editable through an fcurve.

____________________________________________________________________________________


kH Fur Vector Field
______apply to: * point cloud
______outputs: * execute port
______required inputs: * group of Nulls ("vector field")
______other requirements: * kH Emit Fur already executed on the point cloud
______demo: * Fur-Vector-Field.emdl

Re-orients the fur strands according to a provided group of NULLs.
Controls include editable falloff distance/profile and some debug display options.

____________________________________________________________________________________


kH Init Mesh Static
______apply to: * polygon mesh, before deformations
______outputs: * execute port
______required inputs: * UV set on the polygon mesh to be used (select in an UI object picker)
______demo: * Fur-Vector-Field.emdl

Provides "static" attributes from mesh emitter, for use with kH Vector Field node.






3. MAIN STYLING (HAIR)

____________________________________________________________________________________


kH Cross Sections
______apply to: * point cloud
______outputs: * execute port
______required inputs: * one or more NURBS surfaces (via Get Data nodes)
______other requirements: * kH Emit Guides already executed on the point cloud
______demo: * CrossSections-Grouping.emdl

Modifies existing strands so they go through the input NURBS surfaces one by one.

More technically speaking, each strand's UV location on the emitter NURBS surface is looked up on each of the input NURBS and used as a cubic bezier control point for the strand computation. This is why the strands do not go directly "through" the input NURBS but sometimes derive a little.

TIP #1: Beware, previous shapes of all strands will be overwritten. This node should be the first modifier, if used.
TIP #2: Make sure the existing strands have enough segments, kH Cross Section does not add segments to the strands.
TIP #3: This node makes use of the data that kH Add MidPoint wrote. If it exists, this spares you from creating the first NURBS surface ("shot direction"). Do not connect anything to the "NURBS Surface A" port when using kH Add MidPoint.

____________________________________________________________________________________


kH Add MidPoint
______apply to: * point cloud
______outputs: * execute port
______required inputs:
__________________* polygon mesh (collision geometry)
__________________* NURBS surface (1st cross section)
______other requirements:
__________________* kH Emit Guides already executed on the point cloud
__________________* kH Cross Sections executed after this node
______demo: * CrossSections-Grouping.emdl

A "kH Cross Sections" helper. Executing this node before kH Cross Sections will spare you from creating the first NURBS control surface which sets the "shot direction" of the strands. Instead you will have a set of controls that will let you conveniently adjust the shot direction.

TIP #1: The input NURBS surface is the same as connected to the "NURBS Surface B" port of kH Cross Sections.
TIP #2: Do not connect anything to the "NURBS Surface A" port of kH Cross Sections when using this node.

____________________________________________________________________________________


kH Follow NURBS
______apply to: * point cloud
______outputs: * execute port
______required inputs: * NURBS surface via Get Data Node
______other requirements: * kH Emit Guides already executed on the point cloud
______demo: * Follow-NURBS.emdl

One of the main hair styling tools. Picks up strands where their roots come close to the NURBS surface, then smoothly layers and leads them in the positive U direction of the surface.

Controls include cutoff distance, layer thickness ("Push"), height offset ("Shift"), strand length, pickup area limitation ("Limit Along U"), length of the area in which strands get layered ("End Along U"), and some controls for the width distibution ("Modify along V").

TIP #1: Unlike kH Cross Sections, this does not overwrite the previous shape of ALL strands, but only of those that come within the cutoff distance range to the NURBS surface. This means that this node can be used at any point in the execution order unless the NURBS surface covers the whole emission area.
TIP #2: Use the add ratio input for controlling strand segment density distribution, for example if you want to have more segments near the root because the strand bends stronger in that area. Expects a kH Strand fCurve. A (0,0) to (1,1) like curve will result in the default distribution. If you want a denser strand distribution, decrease the fcurve slope in that area.
TIP #3: For selective using, for example to share an emission area with another kH Follow NURBS, factory nodes such as Every Nth Particle may be plugged into "Enable" port of this node.
TIP #4: In version 1.14, it supports animated deformations, in a way that functions of underlying NURBS surfaces, can be separated - second NURBS surface can move the strands. In case nothing is moved-simulated, the same NURBS can be plugged in two ports - internally it's the same structure as before.
TIP #5:"Is Active" output can be used for isolating effect of later deformations, for example, it can be plugged into 'Enable" port of kH Curls node.
NOTE: This node writes data to help avoid interpolation artefacts using kH Splitting Offset

____________________________________________________________________________________


kH Follow 2 NURBS
______apply to: * point cloud
______outputs: * execute port
______required inputs: * 2 NURBS surfaces (via Get Data Node)
______other requirements: * kH Emit Guides already executed on the point cloud
______demo: * Follow-Two-NURBS-Offset-Curves.emdl

Works similar to the kH Follow NURBS node. The first surface has the same function as in kH Follow NURBS, picking up strands at their roots, layering and leading them towards positive U.

You'll notice there is no layer thickness control ("Push"). This is because the layer gets distributed between the two NURBS surfaces (Basically making the second NURBS suface an interactive control or "hull" of the layer)

kH Follow NURBS tips equally valid for this node.

In version 1.14, kh Follow NURBS has a "negative push" option, also it allows input of two NURBS surfaces - this may be enough for using "single" kH Follow NURBS for all purposes.

____________________________________________________________________________________


kH Offset Curves
______apply to: *
__________________* kH Follow NURBS or
__________________* kH Follow 2 NURBS node or
__________________* kH Cross Sections (to U and V offset) or
__________________* kH Push or
__________________* kH Randomize or
__________________* kH Turbulence Static or
__________________* kH Curls ( to X and Y weight and offset)
______outputs: * (multiple)
______required inputs: * curves via kH Add Control Curve Nodes
______other requirements: * kH Emit Guides already executed on the point cloud
______demo model: * Follow-Two-NURBS-Offset-Curves.emdl

This node is connected to multiple parameters of the kH Follow NURBS / kH Follow 2 NURBS Nodes, enabling an interactive control of the shape of groups of strands.

As soon as the node is connected to the Follow NURBS compound, a UV representation of the hair root points will be displayed at a user defined position inside the viewport - The next step will be to create a set of curves inside that UV area, going from left to right. The position of the leftmost point of each curve defines the group of strands which gets picked up and will be affected by that curve.

Curves going straight from left to right will not modify their group of strands, but any derivation from a straight line will have an effect:

Up/Down (Global Y) movement of the curve points will move the according area of the strands around the V direction (crosswise) of the deformer NURBS.
Left/Right (Global X) movement of the curve points will move the according area of the strands around the U direction (lengthwise) of the deformer NURBS.
Inside/Outside (Global Z) movement of the curve points will move the according area of the strands perpendicularly to the plane of the deformer NURBS.

NOTE: To avoid unwanted interpolation, kH Offset Curves writes splitting offset data to separate effected groups of strands. This works similar to max's smoothing groups.

TIP : Use the "Point Y" output as input of "width Y center" of Follow NURBS, to get center of scaling, then modify scale by kH Strand fCurve.

____________________________________________________________________________________


kH Offset CurveList
______apply to: * kH Follow NURBS / kH Follow 2 NURBS node
______outputs: * (multiple)
______required inputs: * curve with serveral subcurves
______other requirements: * kH Emit Guides already executed on the point cloud

This has the same function as kH Offset Curves. Uses a single curve with subcurves as the input instead of multiple curves.

NOTE: Use the newer version, kH Offset Curves. This one was kept for compatibility.

____________________________________________________________________________________


kH Add Control Curve
______apply to: * kH Offset Curves
______outputs: * array of vectors
______required inputs: * curve
______demo model: * Follow-Two-NURBS-Offset-Curves.emdl

Allows to plug in curves directly into kH Offset Curves.


NOTE: Obsolete in version 1.14, geometry reference should be used instead.

____________________________________________________________________________________


kH Add Curve Root
______outputs: * 3d vector

Internally used compound . Need to be in folder that Softimage recognizes when loading, for proper working of kH Offset Curves and kH Follow Curve compounds.

____________________________________________________________________________________


kH Add Curve Ratio
______outputs: * Array of 3d vectors

Internally used compound . Need to be in folder that Softimage recognizes when loading, for proper working of kH Offset Curves and kH Follow Curve compounds.

____________________________________________________________________________________


kH Follow Curve
______apply to: * point cloud
______outputs: * execute port
______required inputs: * curves via Get Data node
______other requirements: * kH Emit Guides already executed on the point cloud
______demo model: * Follow-Curve_Hair-Fur-From-NURBS.emdl

Picks up strands where their roots come close to the curve base (U=0, displayed red if NURBS boundary visibility is on), then smoothly leads them in the positive U direction of the curve. Controls include cutoff distance, falloff control, blend start/length, clumping towards the curve, clumping crossover length, splitting offset

NOTE: This node writes data to help avoid interpolation artefacts using kH Splitting Offset

____________________________________________________________________________________








4. SECONDARY STYLING(HAIR)

____________________________________________________________________________________


kH Grouping
______apply to: * point cloud
______outputs: * execute port
______other requirements: * existing strands on the point cloud
______demo: * Follow-NURBS-Tutorial.emdl

A node for breaking up the even distribution of strands by bundling groups of strands.

Groups are defined by temporarily picking a random set of strands ("group guides") and assigning the rest of the strands to them by closest distance. Each strand gets "bundled" by moving it toward its group's guide strand ("clump") or by only taking the shape of the guide strand but not its position ("lock"). Each bundling method can be controlled with a set of sliders including controls for weight, crossover point and crossover length.

Also the number of group guides can be controlled.

NOTE: kH Grouping makes use of the splitting offset data written by nodes as kH Splitting Offset or kH Offset Curves (this is something similar to max's "smoothing groups", only for strand instead of normal interpolation)

____________________________________________________________________________________


kH Strand Length
______apply to: * point cloud
______outputs: * execute port
______other requirements: * existing strands on the point cloud
______demo: * Hair-from-Fur.emdl

Cuts off strands at a random point between a min and a max value, at a constant distance, or at a mixture thereof.

____________________________________________________________________________________


kH Subdivide Strands
______apply to: * point cloud
______outputs: * execute port
______other requirements: * existing strands on the point cloud
______demo: * Simulation-PhilPack-xsibase-08aug09.emdl

Usually simply use a higher strand segment count in the emit nodes to get more resolution. Using kH Subdivide Strands might make sense in optimization when it's used after a node that doesn't need the resolution but would otherwise make the computation slower because of a high strand count. Should be tested on a per case basis if it makes sense to use this node.

____________________________________________________________________________________


kH Turbulence
______apply to: * point cloud
______outputs: * execute port
______other requirements: * existing strands on the point cloud

Adds a turbulized vector to the strand points.

TIP: This nodes displaces nearby strands in the same direction, resulting in a very regular look. To make the strands flow more randomly, plug a kh Random Value into Turbulence Center (through a scalar to vector node). Increasing "Target End" will displace the strands more independently.

____________________________________________________________________________________


kH Turbulence Static
______apply to: * point cloud
______outputs: * execute port
______other requirements: * existing strands on the point cloud

Shifts around strand points on their perpendicular plane (XY). Shifting is done in a turbulence pattern. Controls include noise type, frequency, exponent, complexity, weight-along-strand fcurve, overall XY weight, XY shift, Noise calculation position (UV point or group), "Every Nth" (Affect only every Nth strand).

____________________________________________________________________________________


kH Curls
______apply to: * point cloud
______outputs: * execute port
______other requirements: * existing strands on the point cloud
______demo: * Follow-NURBS-Tutorial.emdl

Shifts around strand points on their perpendicular plane (XY). Shifting is done in a spiral pattern. Controls include curl count, exponent, weight-along-strand fcurve, overall XY weight, XY shift, randomization ID (random value per point, guide or group).

TIP #1: Default curling direction is clockwise. For CCW curling, use a negative number of curls (or a negative value for either X or Y weight).
TIP #2: Curls usually need a high strand resultion. Increase the segments count in the emitter node if you notice steps.

____________________________________________________________________________________


kH Push
______apply to: * point cloud
______outputs: * execute port
______other requirements: * existing strands on the point cloud

Pushes hair inward/outward along the Up Vector. Controls include weight by fcurve-along-strand and overall X,Y weights.

____________________________________________________________________________________


kH Randomize
______apply to: * point cloud
______outputs: * execute port
______other requirements: * existing strands on the point cloud
______demo: * Follow-NURBS-Tutorial.emdl

Shifts around strand points on their perpendicular plane (XY). This node can offset whole strands. Randomization can also be done per group (as set by kH Grouping), or per guide (after kH Emit Hair)

Other options include "Every Nth" (Affect only every Nth strand), XY weight.

NOTE: This node can add to a natural look by making a few single hairs fall out of place.

____________________________________________________________________________________


kH Bend
______apply to: * point cloud
______outputs: * execute port
______other requirements: * existing strands on the point cloud
______demo: * Follow-NURBS.emdl

From a user specified point on, bends the strands towards a circular shape. Default bend orientation is the strand's up vector.

Controls include "Start" (where the bend begins), radius, blend length, max angle, roll (from default orientation)

TIP: node that two bend nodes can't be stacked. The second will overwrite the first one.

____________________________________________________________________________________


kH Bend Factory
______apply to: * point cloud
______outputs: * execute port
______other requirements: * existing strands on the point cloud

Bends strands using an along-strand-fcurve. Default bend orientation is the strand's up vector.

Controls include "Angle" (when fcurve is 1), "Roll" (around default bend orientation).

____________________________________________________________________________________


kH Splitting Offset
______apply to: * point cloud
______outputs: * execute port
______demo: * Follow-NURBS-Tutorial.emdl

kH Splitting Offset is used to avoid strand interpolation artefacts around areas where the hair is parted. Generally, the concept of splitting offset is used for other things as well, but let's look at interpolation first as used by kH Emit Hair or kH Grouping.

The method used to remove interpolation artefacts is to temporarily separate strand root islands. This way no "unwanted" neighbor strands can be located, like on opposite sides of the area where the hair is parted (where strands would possibly go straight down into the head).

To explain further, let's first look at three of kH's custom attributes that are stored for each strand root in the point cloud.

* kH_EmitPointUV: The strand root's UV position on the emitter.
* kH_PointUV: same as kH_EmitPointUV initially, but deformers like kH Follow NURBS "stamp" the UVs from their own NURBS here. This way there's a chance to find islands to separate.
* kH_PointUVOffset: (0,0) initially but for selected strand roots will be added to.

To get yet more technical - for strand interpolation, closest strand roots are looked up. The lookups internally look at each strand's (kH_EmitPointUV + kH_PointUVOffset) vector - note that kH's lookups are done in the UV space, not in 3D space.

Notice that if at this point the kHPointUVOffset attributes were populated with the right values, the island separation would already be completed.

This is of course where kH Splitting Offset does - it takes the kH_PointUV attributes with the stamped UVs from the deformers, and uses them to identify strand roots which kH_PointUVOffsets are going to be increased. This has to be done manually by creting a step-function curve that takes either U or V of kH_PointUV as the input, and outputs to either U or V of kH_PointUVOffset. Usually one step is enough (= 2 islands).

The concept of splitting offsets is also used by kH Offset Curves in order to separate the strand bundles. kH Splitting Offset is not used in that process though because kH Offset Curves writes the kH_PointUVOffset attributes directly

____________________________________________________________________________________


kH Loose Hair
______apply to: * point cloud
______outputs: * execute port
______requirements: * existing strands on the point cloud

Compound for applying random, isolated deformation to only few strands. First it scales the chosen strands, then it gradually moves strand tips.

____________________________________________________________________________________


kH Roll Root
______apply to: * point cloud
______outputs: * execute port
______requirements: * existing strands on the point cloud

Rotates strands around root's position. Normal of NURBS emitter is used as an axis.

____________________________________________________________________________________








5. HELPER NODES

____________________________________________________________________________________


kH Random Value
______apply to: * var. parameters
______outputs: * execute port

Outputs a random value. Depending no the selected option, kH Random Value produces different value for each strand, for each group of strands (after kH Grouping), or for each guide hair (after kH Emit Hair)

____________________________________________________________________________________


kH Turbulence From UV
______apply to: * scalar parameters
______outputs: * scalar

Outputs a turbulence value that is computed from the emitter point's UV - strands which roots are close to one another will have similar values.

____________________________________________________________________________________


kH Strand fCurve
______apply to: * var. parameters
______outputs: * array of scalars
______demo: * Follow-NURBS-Tutorial.emdl

Instead of having a constant value, selected scalar parameters of the kH nodes can be fed a kH Strand fCurve which will apply the values defined by the fcurve along the length of the strands. A few example are thickness, follow NURBS shift, turbulence weight.

TIP: X=0 is at the root of the strands.

____________________________________________________________________________________


kH Strand fExponent
______apply to: * var. parameters
______outputs: * array of scalars

Instead of having a constant value, selected scalar parameters of the kH nodes can be fed this node which will apply exponential values along the length of the strands. A few example are thickness, follow NURBS shift, turbulence weight.

____________________________________________________________________________________


kH Get Emitter UV
______apply to: * var. parameters
______outputs: * scalar
______demo: * Simulation-PhilPack-xsibase-08aug09.emdl

This node outputs the current point's U or V position on the emitter surface. Options include "XY" (picks whether U or V is being output), "Type" (Modifiers "stamp" their own deformer's UVs on kH cloud's ICE attributes - use "by Modifiers" if you want those)

The output scalar is run through an fcurve.

____________________________________________________________________________________


kH Get Emitter UV
______apply to: * var. parameters
______outputs: * array of scalars

Similar to kH Strand fCurve. Instead of applying function curve along ratio of strands, length in SI units is used. It can be used whenever needed for an effect than doesn't rely on strand length. For example, start of curl effect at the same distance from the root, regardless of variable strand length.

____________________________________________________________________________________


kH UpVectors From NURBS
______apply to: * point cloud
______outputs: * execute port
______requirements: * existing strands on the point cloud

Creates Up Vectors, by rotation of initial up vector, defined by NURBS emitter. If strand positions are modified by simulation, up vectors need to be re-created for using modifiers such as curls or push, in post-simulation region.

It utilizes factory 'Increment Rotation with 2 Vectors' node. In some cases, up vectors can flip.

____________________________________________________________________________________


kH UpVectors From Closest Strand
______apply to: * point cloud
______outputs: * execute port
______requirements: * existing strands on the point cloud

Creates up vectors, by using directions to strands from closest point. Up vectors aren't aligned along emitter in a way of "kH UpVectors From NURBS" but they can't flip.

____________________________________________________________________________________


kH Match NURBS To Mesh
______apply to: * NURBS surface
______outputs: * execute port
______requirements: * polygon mesh, extracted from NURBS surface

Utility compound, for deforming NURBS surfaces by polygon meshes. It can be used after procedure:
- select NURBS surface
- go to Model>Create>Poly.Mesh>Nurbs To Mesh
- set From Control Hull: On
- set Stitch Active: Off
- freeze mesh

____________________________________________________________________________________


kH NURBS UV Density
______apply to: * NURBS surface
______outputs: * execute port

Utility compound, which allows sliding of NURBS surface along itself. If XSI Reparametrize Surface Operator isn't enough, this node may be used for "heavy" operations.
To work correctly, high point density on NURBS surface is needed.

____________________________________________________________________________________


kH Get NURBS UV
______apply to: * NURBS surface
______outputs: * execute port

Utility compound, for modifying effect of function curves in kH NURBS UV Density. X may be modified by Y, or reverse.

____________________________________________________________________________________






6. RENDERING

____________________________________________________________________________________


kH Optimize Strands
______apply to: * point cloud
______outputs: * execute port
______requirements: * existing strands on the point cloud

Purpose is to get lighter point cloud in rendering, trying to keep original shape. It removes segments from strands, except a few of them, almost equally distributed by 'segment length' value. Then it keeps segments with angle to neighbor, higher than 'min angle'. Also it always keeps first and last segment. Suggested usage is to first set count of segments in kh Emit Guides, to get smooth shape, then to gradually increase 'segment length' and 'min angle' parameters in kH Optimize Strands.

TIP #1: This compound should go as 'last before rendering'. If second, 'hair filler' point cloud is used, kH Optimize Strands should go *only* on second point cloud. Because kH Emit Hair takes strand positions from three closest points from guides, variable array of strands that kH Optimize produces, if kH Optimize is applied to 'guides' point cloud, can cause problems.
TIP #2: Compound will transfer some attributes, such as size and velocity, to newly created array. Anyway, it should be used carefully in rendering animations.

____________________________________________________________________________________


kH Point Color
______apply to: * point cloud
______outputs: * execute port
______demo: * Fur-Vector-Field.emdl

Colors points (and thereby their strands) by picking a color from a user defined gradient. This is done using a turbulence pattern, a random pattern, or a mixture thereof.

TIP #1: The point color can be picked up and used in the render tree using the Attribute_Color node.
TIP #2: kH Point Color can't apply a range of colors along the length of the strands. If you want that, you will have to use the coloring options inside the hair renderer render tree node.

____________________________________________________________________________________


kH Shadow 2Points
______apply to: * point cloud
______outputs: * execute port
______required inputs:
__________________* polygon mesh (collision geometry)
__________________* light (light and interest position)

Darkens the point color if the emit position is in the shadow of a collision object.

NOTE: This works for very short hair/fur only since point color can't be applied along the length of the strand.

____________________________________________________________________________________


kH Random Scalar Attribute
______apply to: * point cloud
______outputs: * execute port

Sets the kH_RandomScalar attribute for each strand that may be read later in the render tree. Controls include Random Min/Max ("Start, End"), "Length" and "Normalize to length" (Values can be normalized to length of strand)

____________________________________________________________________________________


kH Delete Points
______apply to: * point cloud
______outputs: * execute port

Removes strands. Controls include "Input" (probability of removal, 0=always removed, 1=never removed) and "Seed" (for random computation). Should be plugged into the "Execute On Emit" port of the emitting nodes.
Input could be driven by a weightmap for instance for controlling hair emission density.

Can also be used for a quick render preview if used last in the execution order (For instance with "Input" set to 0.5 for rendering only half of the total strands)






7. SIMULATION

____________________________________________________________________________________


kH PhilPack Init Simulation
______apply to: * point cloud, unsimulated ICE tree
______outputs: * execute port
______requirements: * existing strands on the point cloud
______demo: * Simulation-PhilPack-xsibase-25feb10.emdl

Creates initial attributes for PhilPack Dynamics Framework. Same as "Init Strand Dynamics" from Phil Pack.

____________________________________________________________________________________


kH PhilPack Dynamics Framework
______apply to: * point cloud, simulated ICE tree
______outputs: * execute port
______requirements: * existing strands on the point cloud
______demo: * Simulation-PhilPack-xsibase-25feb10.emdl

Main simulation node, modification of "Strand Dynamics Framework" from Phil Pack. Collision is called only once per frame. This is faster, but with high speed movement it can produce collisions on a wrong side of mesh - hairs will be pulled back on the opposite side of collider, instead of pushing.
Added "add array to gravity parameter", mainly for adding result of "kH Turbulence" to gravity factor.

____________________________________________________________________________________


kH PhilPack Static Vectors
______apply to: * point cloud, simulated ICE tree
______outputs: * execute port
______requirements: * existing strands on the point cloud
______required inputs: * NURBS surface
______demo: * Simulation-PhilPack-xsibase-25feb10.emdl

Creates orientations of points, by using direction from original point positions, to equal UV positions on NURBS surface. Simulated strands tends to be aligned to provided direction, during all simulation time.
For example, this can prevent strands from falling around model's face.

____________________________________________________________________________________


kH Point Dynamics Init Sim
______apply to: * point cloud, unsimulated ICE tree
______outputs: * execute port
______requirements: * existing strands on the point cloud
______demo: * Simulation-OnePoint-ShortHair.emdl

Creates initial attributes for One Point Dynamics.

____________________________________________________________________________________


kH Point Dynamics
______apply to: * point cloud, simulated ICE tree
______outputs: * execute port
______requirements: * existing strands on the point cloud
______demo: * Simulation-OnePoint-ShortHair.emdl

Main simulation node for One Point Dynamics. "One Point Dynamics" is simulation preformed only on points. Node creates spring motion on points, which is transferred to strands in post-simulation.
There are only two parameters: "Drag" , which is "negative force" against movement, and "Restore", which is a force that trying to restore original positions.

____________________________________________________________________________________


kH Point Dynamics 2Strands
______apply to: * point cloud, ICE tree in post-simulation region
______outputs: * execute port
______requirements: * existing strands on the point cloud
______demo: * Simulation-OnePoint-ShortHair.emdl

Post processing node for One Point Dynamics. It takes point movement and applies it to strands. First it add positions of hair tips to positions of simulated points, then these positions are used as target for "direction constraint" for strands.
"Normalize direction" provides the same distance from roots to tips - in some cases it can help for smoother movement. "Clamp At Distance" will just stop the movement, after simulated points reaches some distance to original positions.
Node has a function curve for modulating effect along strand's length.

____________________________________________________________________________________


kH MotionBlur XSI 701

NOTE: Obsolete node in version 1.14 - it compares strand position at previous and current frame, then it calculates velocities, needed for rendering motion blur.

____________________________________________________________________________________


kH Constant Strand Length MT
______apply to: * point cloud, ICE tree in post-simulation region
______outputs: * execute port
______requirements: * existing strands on the point cloud, mt_strandNodes addon

Resample strand positions to even distances, scales strand to desired length in SI units

____________________________________________________________________________________


kH Prepare For MT Extrusion
______apply to: * point cloud, ICE tree in post-simulation region
______outputs: * execute port
______requirements: * existing strands on the point cloud, mt_strandNodes addon

Creates attributes for using with MT ICE Strand Extrusion, also allows variable width of extruded meshes.

____________________________________________________________________________________


kH Resample Strands MT
______apply to: * point cloud, ICE tree in post-simulation region
______outputs: * execute port
______requirements: * existing strands on the point cloud, mt_strandNodes addon

Resample strand positions to even distances. It can be used before "Curls" node, for providing correct look of curls.

Re: Kristinka Hair Node Reference

Posted: 10 Feb 2010, 21:52
by rray
and a small F.A.Q.

What kind of hair is used?
______kH uses ICE strands for hair.

What are ICE strands?
______Each point in a point cloud optionally has an array of 3D vectors as an attribute.
______This is the point's strand - the array represents the strand's positions - the point itself serves
______as the first strand position. For rendering, these strands are converted to the mental ray hair
______primitive type. The points themselves are not rendered.

How is a "point" related to a "particle"?
______Basically the same, generaly the word particle is used more in a context when they are
______actually rendered (unlike here).

What is a "strand root"?
______Same again. The points in a point cloud with strands are also called "strand roots" - since they serve as the first strand position.

What does kH do?
______kH creates strands on a point cloud that may be rendered.
______Some kH nodes are fed helper objects for shaping these strands (emitter, cross sections,
______follow NURBS, follow curve). Additional helper nodes (randomization and coloring of strands)
______Styling parameters may be given as static number, or controlled along the length of a strand
______with an fcurve.

What's the difference between a "node" and a "compound"?
______None, exactly the same. Note that "node" may also refer to a render tree node.

Why is hair and fur treated differently?
______Fur emitters are usually more complex shaped (whole bodies) which is why they require
______ a polygon mesh object and dont allow a
______NURBS surface for the emitter. However NURBS have other advantages so a good solution
______ was to split emitting types for fur and hair.

What advantages do NURBS emitters have over polygon mesh emitters?
______Built-in UVs, easier styling with the cross section node, faster

How do objects emit strands?
______Emitters don't actually emit points or strands, their surface acts as a position reference for
______the emit nodes which then do the point and strand creation inside the point clound.

Re: Kristinka Hair Node Reference

Posted: 15 Feb 2010, 12:14
by Andr
Awersome tools!!! Thanks!

Re: Kristinka Hair Node Reference

Posted: 03 Mar 2010, 17:07
by izze
Very helpful, thanks.

Re: Kristinka Hair Node Reference

Posted: 05 Jun 2010, 13:23
by hchs
very cool!