Stretch point – making cheap muscles in max

Often times while skinning a character, as you can see in my lazy skinning and binding video, sometimes I used helper or faux muscle bones to help with some areas, like around the legs/crotch, or the armpit/chest area. Adding a bone that is connected on both ends to different bones, and stretches and squashes in between them can help preserve volume by adding nice subtleties to the skinning, or just flat out make it possible.


In this post I’ll cover how to setup a bone like shown above, and provide a script that does it for you automatically.

To start with you’ll need a bone chain of at least 2 bones, you can manually do this with more, but the current version of the script only operates on a one segment chain, consisting of a parent bone and an end bone.

To begin, make 2 point helper objects, and align one to each of the bones. Then position constrain each of those bones to their respective helper point. Then take the parent bone ( the long one ) and orientation constrain it to the helper object for the end bone. Make sure to choose the parent bones helper point as the upnode, to avoid flipping in cases where the bone inverts. Finally you select the parent bone and open the bone tools, and set the object property under the “stretch” category to “squash” you can try others, or disable it, but this will give the bone that nice gummy aspect. That’s it!

stretchPoint Squash

By default the script sets it to squash, but if you want to change it to something else, it is the same operation.

Here are guts of the script, to do with what you would like:

cpEnd = point box:on wirecolor:green
cpParent = point box:on wirecolor:green

cpEnd.transform = endbone.transform
endbone.pos.controller = position_list ()
endbone.pos.controller.Available.controller = Position_Constraint ()
endbone.pos.controller.Position_Constraint.constraints.appendTarget cpEnd 100

cpParent.transform = parentbone.transform

parentbone.parent = controlPointUpnode
parentbone.rotation.controller = rotation_list ()
parentbone.rotation.controller.Available.controller = LookAt_Constraint ()
parentbone.rotation.controller.LookAt_Constraint.constraints.appendTarget cpEnd 100
parentbone.rotation.controller.LookAt_Constraint.controller.upnode_world = off
parentbone.rotation.controller.LookAt_Constraint.controller.pickUpNode = cpParent
parentbone.rotation.controller.LookAt_Constraint.lookat_vector_length = 0

select cpEnd

But I have a version that will prompt you if you do not have the proper objects or selections, and is really, the easy way to go about it.

So click here to download the script in a more user friendly form!

Of course I have to mention there are the CAT muscles that you can use, which have more features, and some bending, but if you are looking for something simple and fast, and you can build however you wish, I think these often are the way to go.