Houdini 21.0 Nodes Geometry nodes

Muscle Constraint Properties Otis geometry node

Creates and modifies the muscle Otis constraints for the input solid muscle geometry in preparation for the muscle simulation.

On this page
Since 21.0

Overview

This node creates and modifies the attributes that drive multiple layers of muscle Otis constraints. These constraints are then created by the Otis Muscle and Tissue Configure SOP which are used by the Otis Solver SOP to:

  • Constrain the muscle ends so that they are very inflexible and closely follow the bones' animation.

  • Glue muscles to muscle to strongly attach muscles together.

  • Constrain muscles to tissue to stop muscles from separating from each other and from the bones.

How-to

To...Do this

Set up muscle properties for your muscles

  1. Create your first Property Assignments multiparm.

  2. In the first multiparm’s tab, leave the Group parameter field empty and then set all the broad general constraint settings that you want to apply to all the muscles for your character.

    This tab will be your constraint settings master page, and most of these settings will most likely use the Absolute versions of the parameters.

  3. Simulate using Otis Muscle and Tissue Configure SOP and Otis Solver SOP.

  4. Create your second Property Assignments multiparm.

  5. In the second multiparm, select the names of the muscle or group of muscles you want to define the constraint settings for in the Group parameter field using the @muscle_id grouping syntax, and then set all the constraint settings that you want to apply to those muscles.

    This tab will be a specific constraint behaviors page where you will dial in the constraint settings for the muscles you specified, and most of these settings will most likely be a mixture of Absolute and Relative versions of the parameters.

  6. Run your simulation once again to view the result of your specific constraint behavior properties set-up.

  7. Repeat steps 4-6 for each additional page of constraint properties you need to create.

Setup viewport for muscle visualization

  1. Select the Muscle Constraint Properties Otis node.

  2. In the viewport, select Enter.

    • The muscleID section displays in the viewport allowing you to select the muscle to visualize.

  3. In the Visualize options for the node, you can switch between the different sections such as Muscle Ends and Muscle Glue to visualize the other areas.

State

Muscle Constraint Otis hotkeys

Hotkey or Interaction

Action

Press A

Adds a new Property Assignments multiparm for the currently selected muscle in the viewport state.

Parameters

Visualize

Determines which main constraint properties are currently being displayed in the node’s viewport state. Clicking on a button will also select the relevant tab.

Display Bone Geometry

When on, shows the node’s second input in the viewport state. Bones are only displayed if you provide them as the second input.

Muscle End Radii Use World Space Distance

When off, End Regions will be proportional to the computed length of a given muscle. The computed length of a muscle will be stored in the musclelength point attribute. If the musclelength attribute already exists, it will be used instead of being computed. When this parameter is on, End Regions disregards musclelength, and the muscle end mask values are measured in world units. Muscle Ends use the axialramp attribute to determine the extents of individual muscles.

Axial Ramp Correction

When on, the axialramp attribute will tend to be more sensible about which way is up. This will affect the correlation between the Muscle End Radius parameters, and the orientation of the affected muscles. 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.

Constrain Surface Points Only

When off, masks created by this node are allowed to be non-zero on interior tet points.

Use Multiparm Tab Labels

Use the Property Label if it is specified, otherwise the Group to label the the multiparm tabs. Any occurance of @muscle_id= will be stripped. Uses numbers instead when off.

Strip Prefix from Tab Labels

Strips anything preceding the first underscore from the label, if multiparm labels are enabled. This is useful for removing prefixes such as L_ from the label when only dealing with one side.

Property Assignments

When you first create a Property Assignment multiparm, all its parameters are off by default and each parameter has a default value. You can choose to enable only the parameters you want to use in that multiparm, and you can also choose to keep their default values or modify them. If you ever need to view the default values for the muscle proprieties, just look at the unmodified Absolute values of the parameters. Only parameters that are turned on (with the check boxes next to their parameter names) are applied to their respective muscles.

Absolute and Relative parameters

Each parameter has an Absolute or Relative version of the setting.

When a parameter is Absolute, its value is explicit and it functions as an override. For example, if on multiparm tab 1 Shape Stiffness = 100 and then on multiparm on tab 2 Shape Stiffness = 50, then the shape stiffness property value the muscle solver would use is solidshapestiffness = 50.

When a parameter is Relative, it is a multiplier of the parameter’s default value (if only the Relative versions for a parameter are used across all Property Assignment multiparm tabs) or a multiplier of an Absolute value from a previous tab. For example, if on multiparm tab 1 Shape Stiffness = 100 and then on multiparm tab 2 Relative Shape Stiffness = 2, then the shape stiffness property value the muscle solver would use is solidshapestiffness = 200.

Number of Assignments

The number of defined muscle property setting assignments. Adds or removes a Property Assignment multiparm.

Property Assignment multiparm tabs

  • A single multiparm tab can define the muscle property settings for a single muscle or multiple muscles (muscle_ids). See Group.

  • A single muscle can appear on multiple multiparm tabs.

  • Each multiparm tab is processed in sequential order, from lowest numbered tab to highest numbered tab. So if a muscle appears on more than one multiparm tab, then the property setting values on the highest numbered tab takes priority and either multiply (when set to Relative) or override (when set to Absolute) the settings from lower numbered tabs.

See Working with Muscle Property Assignments for more information.

Group

Determines which muscle(s) to assign the current Property Assignment multiparm’s settings to. This parameter only accepts single muscles or lists of muscles formatted in the @muscle_id grouping syntax. For example, @muscle_id=L_biceps, @muscle_id=L_biceps,L_triceps, or @muscle_id=L_biceps @muscle_id=L_triceps @muscle_id=L_deltoid. This parameter does not accept regular geometry groups.

You can specify the group selections for your Group parameter in the following ways:

  • In the viewport state, press A, select the muscle(s) you want to add to the group, and then press Enter. A new Property Assignment multiparm is created and the muscle(s) you selected are added to its Group.

  • In the Parameter Editor, click the arrow icon next to the Group parameter, select the muscle(s) you want to add to the group from the viewport state, and then press Enter. The muscle(s) you selected are added to the Group.

  • In the Parameter Editor, manually type the names (muscle_ids) of the muscles you want to add to the group in the Group field.

Tip

If you leave the Group parameter field empty, then its multiparm settings are applied to all your muscles.

Property Label

This parameter allows you to enter a desctiptive string of text to help you name or identify the properties configured on this multiparm tab.

Enable All

Turn off to bypass this multi parameter instance without having to delete it.

Muscle Ends

This constraint is applied where the muscle insertions exist near the ends of your muscles. You can disable it entirely or apply it in one of two ways:

  • As a target constraint. Muscle ends will attempt to follow pre-animated positions during a simulation.

  • As a nearest bone attachment. Muscles will attach themselves to nearby bones in the t-pose position.

    You can choose which constraint method to use by setting the Muscle Ends parameter on the Muscle Solver Vellum SOP node in your muscles network.

Stiffness

Override

Determines how strong the constraint is when increasing the distance between the muscle ends and their bones relative to the rest distance, and how much the muscle ends are allowed to move away from the bones. Also determines how rigidly the muscle ends follow the bones' animation.

Relative Stiffness

Multiplier

See the Stiffness parameter description.

This parameter is only available when the Absolute/Relative selector is set to Relative.

Damping

Override

Reduces the constraint’s energy from iteration to iteration and determines how much energy is lost trying to maintain the attachment. A high damping value creates a sluggish connection. It does not weaken the attachment however, it just makes the attachment not respond as quickly. For example, it makes the attachment appear more syrupy and the muscle appears to swim towards the bones rather than follow them directly. A low damping value may cause oscillations and jitteriness in your muscle.

Relative Damping

Multiplier

See the Relative Damping parameter description.

This parameter is only available when the Absolute/Relative selector is set to Relative.

Distance Threshold

Override

Determines how far to search for what to attach the muscle ends to. Typically the heat mapped areas of the muscle will attach to nearby bones. The constraint will look within this distance of attachment and will try to find bones within that threshold. If it finds bones, then that is what it will attach the muscle ends to. If it does not find any bones within that threshold, it will keep the muscle ends unconnected.

Relative Distance Threshold

Multiplier

See the Distance Threshold parameter description.

This parameter is only available when the Absolute/Relative selector is set to Relative.

Rest Length Scale

Override

The rest length of the distance constraints will be the original distance between the muscle ends and their bones. This scale increases or decreases the resting distance during the simulation.

Relative Rest Length Scale

Multiplier

See the Rest Length Scale parameter description.

This parameter is only available when the Absolute/Relative selector is set to Relative.

End Regions

Radius 1

Similar to the radius controls that exist for the muscle’s tendons, but this applies to the muscle end constraints and their heat map visualizations in the viewport state. These Radius parameter values are used by the muscle ends constraint to calculate the distances from the muscle ends. It looks at what it guesses is the axis of a muscle, and it then takes a distance along that axis. This affects how much the muscle ends constraint kicks in for a muscle.

Radius 2

Adjusts the end mask on the other end of the muscle to Radius 1.

Muscle Glue

Stiffness

Override

Determines how strong the glue constraints between muscles are, how strong the constraint is when increasing the distance between the muscles relative to their rest distances, and how much the muscles are allowed to move away from each other.

Relative Stiffness

Multiplier

See the Stiffness parameter description.

This parameter is only available when the Absolute/Relative selector is set to Relative.

Damping

Override

Reduces the constraint’s energy from iteration to iteration and determines how much energy is lost trying to maintain the connection. A high damping value creates a sluggish connection. It does not weaken the connection however, it just makes the connection not respond as quickly.

Relative Damping

Multiplier

See the Damping parameter description.

This parameter is only available when the Absolute/Relative selector is set to Relative.

Distance Threshold

Override

Determines how far to search for neighboring muscles to connect to. The constraint will look within this specified distance of attachment and will try to find other muscles within that threshold. If it finds nearby muscles, then that is what it will attach the muscle to. If it does not find any other muscles within that threshold, it will keep the muscle unconnected.

Relative Distance Threshold

Multiplier

See the Distance Threshold parameter description.

This parameter is only available when the Absolute/Relative selector is set to Relative.

Glue Mask

Sets the muscletomuscleglue mask to this value for all points in the group. If the glue mask remains zero everywhere, no glue constraints can be formed.

Tip

If you cannot get glue constraints in the correct regions using Glue Center Distance Threshold or Glue End Regions, then you can just set the value over the whole muscle using the Glue Mask. Only points within the Distance Threshold of other muscles and specified Glue Candidates will form constraints.

Glue Center Distance Threshold

Points within this distance from the yz-plane will have a muscletomuscleglue value of 1. This is useful for attaching muscles to their mirrored counterparts down the central line of the body.

Glue Candidates

Restricts which muscles a muscle can glue to from a list of specified muscles. This field accepts entire muscles listed given as @muscle_ids, ranges of primitive numbers, or individual primitive numbers as a space separated list.

Limitation

You cannot mirror muscle glue attachment candidates that are defined as primitive numbers.

Glue End Regions

Radius 1

Similar to the radius controls that exist for the muscle end mask, but this applies to the muscle glue constraints. It looks at what it guesses is the axis of a muscle, and it then takes a distance along that axis to determine the starting points for each radius. This is useful for muscles whose ends aren’t near a bone and instead need to attach strongly to neighbouring muscles.

Radius 2

Adjusts the glue mask on the other end of the muscle to Radius 1.

Muscle to Tissue

These parameters define how the tissue attaches to nearby muscle geometry via soft constraints. These constraints are created from the tissue’s inner surface (which should be a tightly fitting shrink-wrap over muscles and bones) to muscles.

Mask

Override

Non-zero values act as a multiplier on the constraint stiffness. Values of zero will prevent constraints from forming.

Relative Mask

Multiplier

See the Mask parameter description.

This parameter is only available when the Absolute/Relative selector is set to Relative.

Bone Geometry

These parameters define the bone t-pose (rest transforms) and initialization frame for your character’s skeleton. This determines the particular bone orientations that are used when computing the constraints for this node.

Note

If you are not using the Input 2 on this node, then you can just use the tpose attribute value from upstream in your Muscles & Tissue network.

T-Pose

Specifies from where to get the bone t-pose.

Use Initialization Frame

Get the bone t-pose from its first frame transforms.

From Attribute

Get the bone t-pose from the attribute defined by the T-Pose Attribute parameter.

Initialization Frame

Specifies the number of the animation frame from which to get the bone t-pose.

T-Pose Attribute

Specifies the name of the attribute from which to get the bone t-pose.

Bone ID Attribute

Determines which bone(s) to assign the current Bone Geometry multiparm’s settings to. Similar to muscle_id to select muscles.

Inputs

Input 1

Solid muscle (tetrahedral) meshes with properties.

Input 2

Bone geometry or other input geometry.

Outputs

Output 1

Solid muscle (tetrahedral) meshes with properties to form muscle Otis constraints.

See also

Geometry nodes