Houdini 20.5 Nodes Geometry nodes

Fiber Groom geometry node

Defines the fiber direction vector for input solid muscle geometry.

On this page
Since 19.0

This node allows you to interactively paint the fiber direction for your muscle tetrahedral meshes.

Understanding Fiber Direction

Fiber direction in Houdini’s muscle system is based on biological muscle structure. In real muscles, cells are long and thin (called muscle fibers) and contract along their length to generate a force in that direction. When a muscle contracts, it does so along the length of its fibers.

Each vertex on your tetrahedrons has a direction or vector associated with it. When you paint fiber direction on your muscles, you are adjusting these vectors. Vector values are stored in the materialW attribute.

Fiber direction establishes the anisotropic compression axis that scaling happens along for muscle contraction. This means that when a muscle flexes (activates) and a muscle scale force is then applied to a muscle tetrahedron, the tet is then scaled in the direction its fiber vectors point along the muscle.

When you first create a Fiber Groom node, it automatically initializes fiber direction based on each muscle’s longest axis. This default works well for long and cylindrical muscles. For curved muscles and complex shapes like the latissimus dorsi or trapezius, you may have to make manual adjustments.

The system focuses on overall flow rather than perfect surface adherence. Minor surface penetrations of the fiber direction vectors shouldn’t affect overall results.

Working with Strokes

When you paint on your geometry with the Fiber Groom brush, the fibers are pushed in the direction of your strokes and the orientation of their vectors change accordingly. You want your muscle fibers to flow in the most logical direction for your muscles based on their shapes and where they should bulge when flexed.

The fiber grooming process follows a specific workflow:

  1. The first stroke on a muscle sets the initial direction for all vectors on that muscle

  2. Subsequent strokes refine the existing directions in specific areas

Other important tips are:

  • Both short clicks and long strokes are valid techniques

    • Short clicks offer more precise control

    • Long strokes can quickly establish overall direction

  • Keep stroke direction consistent once chosen for a muscle to avoid confusing the groom system

  • Make sure Axial Ramp Correction is on as it helps ensure proper fiber direction initialization.

Note

  • Some of your fiber direction vector lines may appear to go inside or disappear inside your muscles. This is expected and will not affect your painted vector values as materialW only accepts a direction along the surface of your muscles as a value. You cannot paint values contrary to this even when the fiber direction vector lines in the viewport state may depict otherwise.

  • The initial fiber groom for each muscle is based on a muscle’s longest axis. As such, the default fiber groom values for regular shaped muscles may be more desirable initially than those for oddly shaped muscles.

Viewport Tips

  • Enter the viewport state by pressing Enter to see the fiber direction vectors

  • If vector displays appear incorrect initially, adjusting the Vector Scale parameter slightly can resolve display issues

    • The visualization lines may sometimes appear to penetrate the surface. This is normal and doesn’t affect the actual fiber direction computation

  • It’s recommended to keep Strokes Ignore Pieces off to work on one muscle at a time Use the Vector Scale parameter to adjust the display length of fiber direction vectors

State

Fiber Groom state hotkeys

Hotkeys or Interaction

Action

-drag

Paint the direction of the muscle fibers.

Press+hold S

Enter isolation selection mode. -click a muscle while in this mode to isolate it. While in isolation paint mode, any strokes you paint will only affect the isolated muscle. By default, you can paint across all muscles.

Fiber Groom state right-click menu
Fiber Groom state visualizers
Example: Painting the fiber direction

Attributes

materialW

point

Sets and stores the local space direction or vector that is used for the fiber groom direction.

Parameters

Group

Restricts the groom to only the specified muscles (muscle_ids).

Piece Attribute

Specifies the attribute that identifies your muscle geometry pieces for the fiber groom. By default, Piece Attribute is muscle_id.

If you are using this node for a purpose other than for muscles, you can specify your custom attribute here.

Visualize Fiber Direction Vectors

When on, the fiber direction vectors for your muscles are represented by blue lines in the viewport state.

Example: Visualize Fiber Direction Vectors on/off

Vector Scale

Increases or degrees the length of the fiber direction vector lines in the viewport state.

Strokes Ignore Pieces

Each of your strokes registers itself on the first point you click. When on, you can stroke the fibers across multiple muscles at once. When off, you can only groom the fibers on the individual muscle you began your stroke on. Strokes Ignore Pieces is off by default.

Example: Strokes Ignore Pieces on/off

Axial Ramp Correction

When on, the axialramp attribute will tend to be more sensible about which way is up. This will affect the initial orientation of the the materialW attribute which is used as the fiber direction. When off, this orientation can appear somewhat arbitrary. The axialramp attribute will only be computed if it doesn’t already exist. Therefore, this toggle will only have an effect when the incoming muscle geometry does not have an axialramp. Once strokes have been cached, materialW will no longer react to changes to this parameter.

External Curves

Uses a series of external curves to drive the fiber groom stroke direction for your muscles.

This parameter is only available when you have external poly lines connected to input 2 of the Fiber Groom SOP node.

Groom Fibers By Proximity

Muscles use the curves closest to them in proximity to determine their fiber groom stroke directions.

Groom By Matching MuscleID

Muscles use the curves that match their muscle IDs to determine their fiber groom stroke directions.

Symmetry

Enable Symmetry

When on, groom both halves of your character’s muscles at the same time if your character is symmetrical.

Mirror Origin

XYZ position of the symmetry plane relative to the origin of the muscles.

Mirror Distance

Distance offset of the symmetry plane from the Origin.

Mirror Direction

Across which plane (X, Y, or Z) to mirror the muscles. Also determines the normal direction of the symmetry plane.

Clear All Strokes

Deletes all the unsaved fiber groom strokes from all your muscles.

Inputs

Input 1

Muscle tetrahedral meshes with muscle_ids.

Input 2

Helper curves to direct muscle fiber direction. You can use these poly lines alone or as your first set of strokes. Poly lines that have the same muscle_id names as muscles are automatically linked to their like-named corresponding muscles.

Outputs

Output 1

materialW attributes values.

See also

Geometry nodes