Muscle System

   2251   3   0
User Avatar
Member
30 posts
Joined: Sept. 2017
Offline
Hi all,

I have started to learn the muscle rig in Houdini. To start, have tested with stroke muscles and muscle displace near Arm and Neck. Hope so I can continue & complete well with “Muscle Displace”. Please check the attachment of DogOut


So to start with custom geometry, here I've tested with dog's Scapula and Humerus bones, and their Triceps and deltoid muscles.

While creating the Franken Muscle, prompting to select Geometry, then Primitives or Primitive groups to be selected, then at last Muscle Rigs. Here I would like to know the purpose of selecting the Primitives or Primitive groups. Since here I'm using the whole geometry, then there is no point of selecting the primitives, but please help me to solve the waving motion in the video “Wave” on top of the Tricep's muscle.

If I assume to Constrain or Pin the specific points of muscle to the nearest geometric bone, then applying the Franken Muscle, soon those selected points got disappeared. So how do I bring back and merge again for the render. There is a option called “Muscle Pin”, don't know how to work on it? but have tried which a Pin got created but no response. So please check the “Pin” image.

In the “Franken Position” image, have shown that once I create the Franken Muscles, its not getting created and placed exactly to the input geometry. Is it because of the Flex parameter values? and how to retain the input geometry's position?

To get the desired output of muscle simulation, I've played with limited parameters as Tension on Flex, then Jiggle Amount, Stiffness, Mag limit . If I tweak any parameters on Flex parameters my default shape getting changed. So I am not using more in the default pose. Please have look on “Muscle” video.


Whenever the Humerus goes inwards and outwards, need the desired output as shown in “Isometric Param” image of stretches and contractions. So to do, have checked parameters on isometric contraction values. To automate with humerus rotation, tried using the “BlendPose”. So when I try to connect humerus bone to flex values on Muscle rig, at the time of selecting target of muscle rig, I'm getting the fatal error which cant connect it. Please let me know that Is there any other way to automate it?

Since there is no collision, facing some penetrations in between the muscles. So Can we ignore it for the next tissue system process or not? If not then how to avoid those penetrations? Please check the “Penetration” image.


Finally for the tissue, prompted to select the skin, then Muscles and then the skeleton geometry have been selected and then output has come out in the video “Skin”. Many times tried but couldn't able to collide the tissue with the specified skeleton geometry and muscles.

I have also attached the hip file “Mus_01”. Someone please help and suggest me what I am doing wrong

Thanks in advance

Attachments:
DogOut.mp4 (531.7 KB)
Wave.mp4 (777.1 KB)
Pin.jpg (370.3 KB)
Franken Position.jpg (229.7 KB)
Muscle.mp4 (652.6 KB)
Isometric Param.jpg (264.1 KB)
Penetration.jpg (295.1 KB)
Skin.mp4 (801.2 KB)
Mus_01.hip (2.4 MB)

User Avatar
Staff
130 posts
Joined: Dec. 2010
Offline
Hi,
I took a look at your file and included a few minor modifications. Please see the sticky notes inside for more info.

To answer a couple of your other questions…
The purpose behind selecting Primitives after selecting the FrankenMuscle geometry is so that in situations where a model might have multiple muscles as separate pieces, you can extract specific groups from that model to use as individual FrankenMuscles. Since you have discreet geometry objects already, this step might seem redundant.

To constrain specific parts of a muscle, you can use a MusclePin object. This acts very much like a single-point MuscleRig. You can use the viewport shelf tool to place and adjust your pin, parent it to a bone, then include it as one of the rig sources on your FrankenMuscle.

Automating muscle flex activation in 18.0 is pretty open-ended. One way to go about this is to rely on an expression to drive the Flex>Tension parameter on a MuscleRig. The example in the attached file simply uses the bone angle between the two bones in the skeleton as a driver for the tension value.

And finally, regarding the collision penetration, a couple of suggestions might be to increase the resolution of your tissue surface to improve collision detection; perhaps try increasing substeps; and one or two of your muscles are modeled quite thin, you might try adding some thickness to them.

thanks
-j

Attachments:
Mus_01_fix.hip (2.5 MB)

john mariella
Senior Technical Director
SideFX
www.sidefx.com
User Avatar
Member
30 posts
Joined: Sept. 2017
Offline
johm
Hi,
I took a look at your file and included a few minor modifications. Please see the sticky notes inside for more info.

To answer a couple of your other questions…
The purpose behind selecting Primitives after selecting the FrankenMuscle geometry is so that in situations where a model might have multiple muscles as separate pieces, you can extract specific groups from that model to use as individual FrankenMuscles. Since you have discreet geometry objects already, this step might seem redundant.

To constrain specific parts of a muscle, you can use a MusclePin object. This acts very much like a single-point MuscleRig. You can use the viewport shelf tool to place and adjust your pin, parent it to a bone, then include it as one of the rig sources on your FrankenMuscle.

Automating muscle flex activation in 18.0 is pretty open-ended. One way to go about this is to rely on an expression to drive the Flex>Tension parameter on a MuscleRig. The example in the attached file simply uses the bone angle between the two bones in the skeleton as a driver for the tension value.

And finally, regarding the collision penetration, a couple of suggestions might be to increase the resolution of your tissue surface to improve collision detection; perhaps try increasing substeps; and one or two of your muscles are modeled quite thin, you might try adding some thickness to them.

thanks
-j


Thank u Johm for your reply. Since I was busy with another work, could not able look into this. Sorry for the delayed response. Soon will work as per your suggestion and let you know.

Thank you
User Avatar
Member
30 posts
Joined: Sept. 2017
Offline
johm
Hi,
I took a look at your file and included a few minor modifications. Please see the sticky notes inside for more info.

To answer a couple of your other questions…
The purpose behind selecting Primitives after selecting the FrankenMuscle geometry is so that in situations where a model might have multiple muscles as separate pieces, you can extract specific groups from that model to use as individual FrankenMuscles. Since you have discreet geometry objects already, this step might seem redundant.

To constrain specific parts of a muscle, you can use a MusclePin object. This acts very much like a single-point MuscleRig. You can use the viewport shelf tool to place and adjust your pin, parent it to a bone, then include it as one of the rig sources on your FrankenMuscle.

Automating muscle flex activation in 18.0 is pretty open-ended. One way to go about this is to rely on an expression to drive the Flex>Tension parameter on a MuscleRig. The example in the attached file simply uses the bone angle between the two bones in the skeleton as a driver for the tension value.

And finally, regarding the collision penetration, a couple of suggestions might be to increase the resolution of your tissue surface to improve collision detection; perhaps try increasing substeps; and one or two of your muscles are modeled quite thin, you might try adding some thickness to them.

thanks
-j



Hi Johm,

As per your guidance and suggestions, have tried in my previous file itself and had some nice improvements too. Increased the sub steps and collision passes, now the skin gets colliding but I cant fix the penetrations happening between skin and muscle. Since you have mentioned that muscle geometries are thin, so I've tried on surface triangle and voxel sizes in franken muscles under geometry tab. But still its getting penetrated. Either in modeling operator or any other way to thicken the muscle?

The file which you have fixed , seen that there were two passes. In online have seen that tissue pass have taken all in a single pass itself but in the file, muscle pass have taken separately & then the tissue pass have taken. Could I please know why it has been taken like that? Because in that same file itself I've taken muscle pass, then while toggled ON the ‘PreBakedMuscles’, the tissue stays in the default place & not getting deformed to collide with the muscle. So I've done the tissue pass directly as a single pass in my file.

Thanks for the expression provided to automate the muscle flex. But here, instead of automating Tension parameter, I would like to trigger Isometric contraction, Concentric Scale and so on through the suggested expression. So in my next pass, will update with those automations. Meanwhile please help me to fix the above issues.

Thanks in advance

Attachments:
Mus02.mp4 (171.0 KB)

  • Quick Links