Houdini 21.0 Muscles and tissue

Preparing geometry for muscles

On this page

Overview

Proper geometry preparation is important for better muscle simulation. This page covers how to prepare your muscle and bone geometry before you simulate them. It ensures you have correct geometry formats, proper naming conventions, and verify the setup to prevent common simulation issues. Most of these steps are not mandatory but they are recommended for better results.

Geometry requirements

Geometry preparation encompasses both the muscle geometry and bone geometry.

When preparing both muscle and bone geometry, there are several key parts:

  • All muscle surfaces must be manifold non-intersecting polygonal geometry.

  • Make sure your input geometry primitive type is polygon face and not a packed primitive. If it’s packed, make sure to unpack and, if necessary convert it from Polygon Soup Primitives to Polygons.

  • Models should be real-world scale to ensure proper physics simulation

    • Make sure your geometry follows Houdini’s meter-based unit system.

    • To scale from centimeters to meters: use Transform SOP with uniform scale of 0.01. Remember to use another Transform SOP at scale of 100 to get back to the original size before you export.

Specific to muscle geometry

  • Each muscle component requires a unique muscle_id attribute value for identification.

Specific to bone Geometry

Bone surfaces serve as the foundation for muscle attachments and driving the motion in the simulation, and require specific preparation:

  • For Otis Simulations the bone surfaces must be triangulated. You can use a Remesh SOP on your rest bones, and then deform them with your animated bones using a Surface Deform SOP. If you have bone capture attributes, you can use a Bone Deform SOP instead.

  • Remove small crevices and holes where possible.

  • You must have a valid tpose attribute for rest position reference.

  • An identifying string attribute such as bone_id helps with specifying muscle to bone constraints.

Muscle IDs and T-Pose setup

The T-Pose and muscle IDs form the foundation of Houdini’s muscle simulation system. The T-Pose is the rest position where all constraint relationships and attachment points are established. The muscle_id attribute allows individual control over muscle properties, constraint relationships, and symmetrical behavior. This helps with more precise customization of each muscle’s physical characteristics and interactions. The proper muscle IDs ensure that properties and constraints are correctly assigned to specific muscles rather than applied globally. Both of these setups happen before simulation because the muscle solver relies on the T-Pose to configure constraints by temporarily removing animation and returning to this neutral state.

This setup is important because without proper T-Pose and muscle IDs:

  • Muscles lack stable reference positions for muscle attachments and prevent targeted property assignments.

  • Hard to establish accurate muscle ends.

  • Result in unstable constraints, incorrect muscle behavior, and the inability to control individual muscle properties effectively.

Muscle IDs

The muscle_id attribute identifies distinct muscles. Each muscle and bone piece must have a unique identifier attribute.

You can create it in two ways:

1. From existing names

  1. Use Muscle ID SOP.

  2. Turn on Initialize from Input Attribute.

  3. Specify the name of your existing attribute in Input Attribute Name.

  4. To use your attribute as is, turn off Extract Element from Path Attribute.

  5. If you have a path-style attribute such as the hierarchy of the geometry is contained in the attribute value and separated by /, then ensure Extract Element from Path Attribute is on. You can then specify the Element Pos from End to pick the last chunk (0), the second-to-last (1) and so on.

2. Manually naming using Muscle ID SOP

  1. Enter viewport state and select muscles individually

  2. Assign appropriate prefixes follow naming convention:

    • L_ prefix for left side muscles

    • R_ prefix for right side muscles

    • C_ prefix for central muscles

Bone ID attribute

Similar to muscles, bones need identifying attributes. There is currently no predetermined attribute name for bones. The Otis recipes use muscle_id for the bones too, for simplicity. To create an id attribute for the bones:

  1. Copy existing names when available using Initialize from Input Attribute on the Muscle ID SOP.

  2. OR use Muscle ID SOP to create new bone IDs

    • Keep names descriptive and consistent with muscle naming

Muscle T-Pose setup

The Muscle Solidify SOP atutomatically handles T-Pose creation for your muscle geometry. During processing, it generates the T-Pose attribute and stores the model’s position as the rest position. The node then names this rest position attribute as tpose which ensures that all muscles have proper rest positions for constraint calculation and deformation.

Bones T-Pose setup

Unlike muscles, bones require manual setup of their T-Pose configuration. To do this, create a Set T-Pose SOP for your bone geometry. This node creates and stores the critical rest position information that the muscle system uses for constraint calculations. The T-Pose attribute should be specified early in your network to ensure all downstream nodes have access to this reference position. Verify that the T-Pose values accurately represent your character’s intended rest position because this affects all muscle attachments and deformations that follows it. You can verify the value of the tpose attribute by temporarily placing down an Extract T-Pose SOP Extract T-Pose SOP on your animated bone geometry. This can help ensure the result matches your T-pose.

Pre-Roll configuration

When your setup requires a pre-roll phase, add a Muscle Preroll SOP to your animated bone surfaces.

This node manages the transition between rest pose and animation through three key parameters:

  • Initialization Frame specifies which frame serves as your target pose, establishing the endpoint for your pre-roll transition.

  • Initial Hold parameter determines how long the system maintains the t-pose before beginning the transition. This corresponds to a frame number and will be the last frame that the T-pose will be held at.

  • Pre-roll Duration controls the length of the blend between your t-pose and initial animation pose, allowing for smooth integration of dynamics. This is a number of frames rather than a frame number.

  • If you want your output animation after the preroll to match the incoming animation, make sure Initial Hold + Pre-roll Duration +1 = Initialization Frame.

Muscles and tissue

Basics

Working with muscles

Muscles recipes

Legacy Muscles (Vellum Solver)