Houdini 21.0 Nodes Geometry nodes

Muscle Solidify geometry node

Converts input surface geometry to a tetrahedral mesh for use as muscles.

On this page
Since 19.0

This node iterates on each piece of input surface geometry, freezes them at the Initialization Frame if animated, and converts them into tetrahedral meshes using Tet Conform.

This conversion helps with:

For the Muscles & Tissue system, muscles are required to be solid tetrahedral structures, but input surfaces do not need to be tessellated as triangles since the Muscle Solidify SOP node will automatically convert your surfaces to triangles using its Remesh Surfaces settings or its internal default remesh mechanism.

However for best results, it’s recommended to use an external Remesh SOP node to convert your input surfaces to triangles before tetrahedralization because it has additional parameters that control tessellation quality that the Muscle Solidify SOP node does not have.

Example: Tessellation quality differences between remesh methods

Warning

Any deformations to solid tetrahedral geometry can potentially create inverted tetrahedra (tetrahedra that have overlapping adjacent components and negative signed volumes). You cannot produce a successful muscle simulation with solid geometry that contains inverted tetrahedra.

How-to

To...Do this

Modify the internal and surface tetrahedral structure for optimized muscle behavior

  • Adjust the Max Tet Size for the internal tetrahedral density.

  • Use the Remesh setting to refine the surface tetrahedron’s size.

    • You can inspect the internal tetrahedral structure by using a Clip SOP node.

Improve performance by distributing muscle tetrahedralization across multiple processor cores

If necessary, tweak other settings such as Max Tet Size, Surface Remeshing, in Manual Mode instead of Auto-Update to pause cooking.

Use automatic or manual surface remeshing

Automatic surface remeshing

  1. Make sure the Remesh Surface option is turned on.

    • This node will refine the surface automatically before tetrahdralization.

Manual surface remeshing

  1. Turn off Remesh Surface.

  2. Create a Remesh SOP before your Muscle Solidify SOP

    • If you want similar results to the automatic remesh in Muscle Solidify, use the Adaptive setting in the Edge Lengths parameter.

Note

The order of the min/max size parameters is reversed between the Muscle Solidify SOP and Remesh SOP

  • Muscle Solidify: min size → max size

  • Remesh SOP: max size → min size

Fix self-intersecting muscle geometry that may cause simulation errors

  • If you have Remesh Surface turned on, this will automatically correct self-intersections during tetrahedralization.

  • If you used an external remeshing method, you will have to manually inspect and correct the intersections.

Cache out Muscle solidify results to prevent recooking when file is opened

  1. Create a File Cache SOP node and attach it after the Muscle Solidify SOP node.

  2. In File Cache SOP, de-select the checkbox for Time Dependent Cache parameter. This ensures that only a single frame is stored.

Attributes

maxthickness

primitive

Measures and stores the outer thickness (layer of tets) of the muscle’s tetrahedra. This is used by the muscle constraints to vary how strong an attachment is.

musclethickness

point

Measures and stores the thickness of the entire muscle. This is used by the muscle properties like Thickness Threshold to determine what parts of a muscle are tendon.

tpose

point

Sets and stores the rest position or t-pose pose for the muscles.

Parameters

Max Tet Size

Sets the upper size limit for individual generated tetrahedrons. The volume of a regular tetrahedron is determined by its side length. Max Tet Size specifies this side length, and as a result determines the maximum volume of the tetrahedra generated by the Muscle Solidify SOP.

The size of a muscle’s surface triangles does not necessarily determine the size of its interior tets. A muscle can have larger surface triangles and smaller interior tetrahedrons depending on the current Max Tet Size setting.

For example, in the images below, the surface triangles remain constant while the size and number of the interior tetrahedrons change depending on the Max Tet Size setting.

Example: Max Tet Size muscle interior close-ups

Use Local Feature Size

Determine the sizes of surface tetrahedra by following the sizes of triangles on the surface.

Local Feature Scale

A scale factor that is multiplied with triangle size to determine sizes of tetrahedra at the surface.

At Most One Surface Face per Tet

This option ensures that each tet contributes at most one triangular face to the surface of the tet mesh; distinct triangles on the tet mesh surface cannot be faces of a single tet. This option is useful when you want to preserve vertex attributes such as uv coordinates on a tet mesh.

T-Pose

Specifies which muscle geometry pose to use as its rest position or t-pose. Your muscles need to be at their t-pose positions when they are tetrahedralized.

Use Initialization Frame

Use the muscle geometry’s pose at the specified Initialization Frame.

From Attribute

Use the muscle geometry pose defined by the specified T-Pose Attribute.

Initialization Frame

Specifies the frame at which to evaluate the input muscle geometry and hold it static while it is converted into a tetrahedral mesh. By default, the initialization frame is set to the first frame of your playback bar’s range ($FSTART).

This parameter is only available when T-Pose is set to Use Initialization Frame.

T-Pose Attribute

Specifies the name of the attribute that contains the t-pose at which to evaluate the input muscle geometry and hold it static while it is converted into a tetrahedral mesh. By default, this attribute is tpose.

This parameter is only available when T-Pose is set to From T-Pose.

Enable Multithreading

When on, the node will try to tetrahedralize all your muscles at the same time up by assigning one muscle_id per thread up to the capacity of your system’s multithreading capabilities. This method is a lot faster than the sequential method. Enable Multithreading is on by default.

When off, the node goes muscle-by-muscle and tetrahedralizes each muscle one at a time. This operation in performed sequentially by muscle_id in a loop and it will wait to complete one muscle’s tetrahedralization before moving on to the next.

Interpolate Point Attributes

Transfer point attrib values from surface to interior.

Point Attribute Method

The method used to transfer point attribute values to the interior.

Closest Surface Location

For each interior point, use the attribute value of the closest surface location.

Smoothly Varying

Interior points interpolate surface values as smoothly as possible. Interior points close to the surface will match their closest surface’s value fairly accurately. Values further into the interior will bleed together.

Remesh Surfaces

There are two methods for handling the remeshing process: internal remesh and external remesh.

For external remeshing, complete this process before using solidfying your muscles. When using external remeshing, the order of the min/max size parameters is reversed between the Muscle Solidify SOP and Remesh SOP:

  • Muscle Solidify: min size → max size

  • Remesh SOP: max size → min size

  1. Internal Remeshing (Default):

    • Simpler approach using the node’s built-in remesh settings.

    • Automatically handles self-intersections.

    • Controlled through the Remesh Surfaces parameter.

  2. External Remeshing:

    • Uses an external Remesh SOP for more control

    • Requires manual handling of self-intersections

    • Allows finer control over surface tessellation

    Remesh surfaces

    When on, converts the input muscle surfaces into triangles.

    These parameters control the size and number of each muscle surface’s triangles.

    NOTE: Adjusting tetrahedron sizes can be computationally intensive. Since this process only needs to be performed once, it’s recommended to cache the results for better performance.

    Min Size

    The minimum target edge length of the triangles on the exterior of the muscle pieces. Increasing this value makes the triangles bigger.

    Max Size

    The maximum target edge length of the triangles on the exterior of the muscle pieces. Decreasing this value makes the triangles smaller.

    Relative Density

    Determines the number and size of the triangles on the exterior of the muscle pieces. A higher value produces triangles that are both smaller and greater in number. Values less than 1 have a decimating/coarsening affect on the exterior of the muscle pieces. Gradation also lessens the affect of Relative Density.

    Gradation

    The rate at which edge lengths are allowed to change from one surface triangle to the next. Higher values generate fewer triangles, but they also lower the overall quality of muscle piece exteriors.

    Re-Transfer Attributes from Source Mesh

    After remeshing, transfer attributes from the Source Mesh. Without this, the remeshing process can alter the accuracy of existing attributes.

Inputs

Input 1

The muscle geometry to convert from surfaces to tetrahedral meshes.

If the muscleid attribute or the tpose attribute are not present on the input muscle geometry, then the Muscle Solidify SOP will:

  • Create the tpose attribute and set its value to the geometry’s pose at the Initialization Frame.

  • Create the muscle_id attributes for each connected cluster of primitives (muscle) on the input geometry and assign them a default muscle ID (for example, muscle_0, muscle_1, muscle_2, and so on).

Outputs

Output 1

  • Static tetrahedral meshes for each muscle.

  • maxthickness point attribute and the musclethickness primitive attribute.

See also

Geometry nodes