|On this page||
Using muscles to deform the skin of a character
This basic workflow describes how to add muscles to an animated character and use them as a skin deformer. This approach uses muscles to deform the skin of a character without having to perform any expensive physical simulations. The muscle system in Houdini accommodates a non-linear workflow, so it’s possible to add and extend your character rig without following a rigid procedure.
It is not necessary to have a fully rigged and animated character to add muscles, but it is helpful to get immediate feedback as you build. For this example we will use the rigged and animated legs of a Tyrannosaurus.
Drawing muscles and attaching them to your rig
Start by clicking the Stroke Muscle tool on the Muscles shelf, and selecting the skin object of your character. This puts you in a stroke state, where this skin is brought in as your projection geometry.
You can modify the radius of your cursor by using the mouse wheel or by holding ⇧ Shift and dragging .
Draw a stroke on the surface of the skin to create a proxy muscle. You can continue to restroke the same muscle until it is where you want it.
The actual muscle position is projected at a depth, which you can control with the Depth parameter. While in the stroke state, you can also modify the Radius or use the ramp on the Stroke Profile to change the silhouette of your muscle.
You have the option of going back and refining the muscles later, so they don’t have to be exact at this time.
Once you are satisfied with the initial placement of your muscle, you can either press Enter to accept the stroke, or press Accept Stroke in the parameter dialog. You also have the option to Accept and Create a New Stroke, which will commit your stroke to the current muscle, but allow you to remain in the muscle stroke tool so you can create another. This allows you too quickly create multiple muscles on your character.
If you play your animation, you will notice that the muscle doesn’t move with the character, because it isn’t wired up to anything. Muscle nodes have two inputs. The first is the input of the parent for the head anchor (red). The second is the input for the parent of the tail anchor (green).
Connect the muscles to the bones using the Attach To Bones shelf tool. Select the muscle you want to attach to your character rig and press Enter, next select the head anchor and press Enter, then select the tail anchor and press Enter.
This interactive way of attaching muscles in the viewport is handy when you have multiple muscles and complex rigs, where locating the nodes in the network tree requires a lot of searching.
Even though the tool is called Attach to Bones, you are not limited to attaching muscle anchors to bones. You can also attach them to objects and constraints.
Changing the shapes of muscles using muscle handles
Press ⌃ Ctrl + R to activate the pose state, which allows you to modify both translation and orientation of the muscles. You can apply the translation and rotation to multiple muscles at once by holding ⇧ Shift when you select them, and changing the dropdown to Global Transform Handle. This will merge all handles into one handle that will affect all selected objects.
For a clearer view of the inner handles when you are making edits, you can hide the outer geometry of the muscles by turning off the Muscle checkbox in the viewport for the selected muscle.
You can also use the muscles radial menu by making it the active menu. Pressing C in the viewport will toggle it open. This is useful for quickly isolating and showing/hiding muscle objects. For more information, see the Radial menus help page.
Edit your muscles to push through the surface of the skin, so that the outer surfaces of the muscles bulge the skin out on the character. You can do this using the handles, and also the initial set up controls on the Muscle object. On the Geometry tab there are parameters to define the initial shape of the muscle, before being deformed by they internal muscle rigs. For example, the ramp can change the Profile Curve of your muscle, and the minimum and maximum values will set the range of how the profile is applied. For more information, see the Muscle object.
The initial orientation of each handle is established by the surface normal vector of the stroke you drew when the muscle was created. The Y axis of the handles is aligned with that direction.
Once you have your initial muscle positions set up, the parameter values must be saved in this condition as the capture pose. You can do this by selecting the muscles, and pressing the Set Capture Pose button on the Capture Deform tab. Doing this freezes a copy of your muscle parameters so that they can be accessed by the rest of the tools wherever a muscle’s capture pose is required.
Next you can add secondary animation to the muscles automatically by turning on the Use Jiggle checkbox on the Jiggle tab. This will enable jiggle and also allow you to control the behavior of the jiggle qualities. The body of the muscles will automatically have some overshoot and spring-back.
This is a quick way to add movement without needing to perform expensive simulations.
Using muscles as a displacement deformer
Click the Muscle Displace tool on the Muscles shelf, select the skin object, and then select the muscles to displace with. Right away you should be able to see a bulge effect on the thigh area.
As you play your animation, you will see the skin adaptively deform wherever the muscles are pushing. The muscle movement is independent of the skin surface. The skin slides over and around the muscle volumes as the character moves, since the skin is not bound to the muscles directly.
On the Muscle Deform SOP you can tweak the parameters for skin tightness and smoothing.
Adding muscles to an existing displacement setup
Since the muscle workflow is entirely procedural, it is relatively simple to add muscles to the displacement setup. Once an additional muscle is built and attached to the rig, you need to incorporate it into the displacement. Simply click the Muscle Displace tool on the Muscles shelf again, select the skin and press Enter. This time you will be prompted to add or remove muscles from the displacement . Holding ⇧ Shift and clicking the new muscle will add it, while holding ⌃ Ctrl and clicking will remove muscles.
Make sure all of the muscles are selected and press Enter. The shelf tool automatically inserts the new muscle into the object merge.
Using muscle masks
Occasionally, areas of skin are affected by overlapping muscles and the displacement isn’t correct. You can prevent this from happening by using muscle masks. Muscle masks are used to limit the displacement amount of a muscle (or group of muscles) to specific regions of the skin that are painted with a weight value.
Click the Paint Muscle Mask tool on the Muscles shelf, and select the skin geometry of your character. Use the drop down menu to select the muscle to use as the current region. Then, paint the area of skin that the muscle is allowed to affect.
This tool disables all muscle displacement until you paint the skin. It automatically sets all weight masks to 0 prior to painting.
To speed up working in the viewport, you can switch the display flag to the Capture Layer Paint SOP so less calculations are being done as you paint. This won’t show you the bulges as you paint, but if you roughly know where you muscles are, this can make painting quicker.
For a more visual approach, you can switch the view to Ghost other objects in the object visibility menu, and use ⌃ Ctrl + to select the muscle you want to paint. This will automatically update the dropdown menu as you change your selection, and allow you to paint confidently on the skin.
Space + Y will allow you to toggle between views so that you can paint the skin without the muscle blocking and then go back to select other muscles.
Often it makes more sense for the Muscle Deform SOP to treat multiple muscles as a group, rather than individual muscles. You can give clusters of muscles logical names for paint masking. Every Muscle object has a Muscle ID parameter which is meant for this purpose. By default it is set to the expression variable
$OS, which just expands to the object node name. This means that every muscle is given a unique ID. By overriding this default, you can take a collection of muscles and give then a common shared ID. Click the Paint Muscle Mask tool on the Muscles shelf, select the 3 upper leg muscles, and change the Muscle ID from
All muscles being fed into the muscle deform set up get stamped with a point and primitive attribute named Muscle ID. The Muscle Deform SOP uses that value to match up muscles, centers, and weight masks to ensure that the bulging happens in a controlled way. The Muscle Capture SOP is responsible for making the initial link between the muscle IDs and the weight masks.
The original Muscle ID names will still appear in the dropdown menu, even though they are obsolete, if the painting was done before the Muscle ID names were changed to group them together. You can clear the old mask by clicking Reset All Changes on the Capture Layer Paint node. Clearing this stored information will remove the originally named muscles from the dropdown menu and you will see the grouped ones as one entry. Also, using ⌃ Ctrl + to select the regions to paint will select all muscles in the group with the shared ID.
Paint your weight masks for the clustered regions to get the deformation working properly again. If you turn on the display flag of the Muscle Deform SOP, you should see that the deformation is behaving much better and the overlapping issue should now be resolved.
Mirroring your muscle set up
In typically character setups, you will do most of your muscle work on one side your rig and then use mirroring to copy your work across the symmetry plane.
Naming your nodes following the standard naming convention will make mirroring much easier. For example, a simple prefixing convention like
L_ to represent the left side.
Click the Mirror tool on the Muscles shelf. This tool is a generic mirroring tool, and does not work exclusively on muscles. Anything you have selected will be mirrored. It may be easier to select your muscles in the network editor instead of the viewport, so you don’t accidentally select other things.
You can also use the New prefix parameter in the operation controls toolbar to replace the old
L_ prefix with the new
R_ prefix to represent the right side, and press Enter to mirror your symmetrical copies. The mirror function examines the inputs to the nodes and if they are connected to to a parent that also follows the
R_ naming convention, then they are automatically attached to parents on the mirrored side.
If you play your animation, you should see that the mirrored muscles are attached to the correct bones and are animated with the same jiggle settings that the original muscles have.
Even though the muscles are copied, the influence on the skin isn’t. You need to include these new muscles in the muscle displace set up, like you did for the calf muscle. Simply click the Muscle Displace tool on the Muscles shelf, select the skin, and press Enter. You will see which muscles are already included, as they are highlighted. Press ⇧ Shift + the muscles you want to add, and press Enter to accept.
The last step is to mirror the weight masks, so that the skin will be affected by the displacement of the copied muscles.
To make a more accurate selection, type Space + 3 to change the view to a front view before making your selection.
Click the Mirror Muscle Mask tool on the Muscles shelf, select the points that will receive the mirrored mask weights, and press Enter to confirm your selection.
Pressing Space + 1 will return you to the perspective view.
Select the muscles that you want to have mirrored. You may have to ⇧ Shift + to add any muscles that may not have been automatically detected, and press Enter to confirm your selection. Lastly, select the destination muscles (which should be automatically detected), and press Enter.
Using muscle masks are not only useful for fixing errant deformations, but they also make your simulation more efficient by minimizing the amount of displacement calculations. Using muscle masks means that the deformer only spends time projecting skin points if it finds non-zero values for any muscle IDs it encounters.
You can use basic muscle shapes to produce detail in the skin by layering and overlapping muscle objects, using the same workflow as above.
You can also use muscle objects to represent internal shapes that may not be anatomical muscles at all, such as the abdomen of an animal. You can use a single shaped muscle object to product secondary jiggle and get the effect of internal body mass bouncing inside the skin.
In complex setups, where the number of muscles starts to weigh down performance, you can temporarily turn off all jiggle and only activate it on muscles you're working on. Even though the jiggle animation is lightweight, you should expect some lag as the number of muscles increase.
Another way to speed up playback is to use viewport isolation to only display the muscles you are working on.
Tools for creating muscles
There are new tools on the Muscles shelf for creating muscles.
Creates a rigged muscle with head and tail anchor connections.
Creates a rigged muscle by stroking a curve onto a skin object.
Creates the internal components of a muscle (the rig), by stroking a curve onto a skin object.
Creates a simple rigging component for pinning regions of a Franken Muscle to your character rig.
Creates a hybrid muscle made up of any number of geometry objects and any number of muscle rigs and pins.
Connects muscles, muscle rigs, and pin anchors to other objects in your scene.
Disconnects muscle, muscle rig, and pin anchors from other objects in your scene.
Sets the Muscle ID for selected muscles.
Applies a deformer to selected skin geometry so that muscles will displace the skin where ever they make contact.
Paints a mask attribute on the skin geometry per muscle_id to limit the effects of a Muscle Deform to specific regions.
Applies muscle mask weights from one side of a geometry object to another.
Collects muscles, modeled anatomical bones, and skin objects and places them into a single dynamics simulation.