Muscle simulation experiments (nude female model).

JoeSchmoe:
It should be possible, though highly cumbersome. By using action constraints + many hundreds of tiny helper bones, you should be able to accomplish this.

However, the resulting deformation may not be as ideal as you want, even after a lot of intricate tweaking.

Aligorith

Well, here is an update after a very long time. I apologize for not answering to all who posted back in August. I read in a notification that someone bumped this thread just to ask for my model for free and didnā€™t realize many good comments had followed.

Anyway, by that time I was depressed and discouraged and had dropped this project because I had a problem with ugly artifacts. My stupid problem had nothing to do with drivers or shapekeys.

On my previous posts, I tried to show how great driven shape keys can work for shoulders, but I had not solved the problem of combined rotations causing ugly transitions.

Back then, Blender 2.42 had not been released and there were no pydrivers. A few weeks ago I started to learn what those pydrivers are about. So I used them for my model and it was so amazing to see how nicely and naturally the shapes started to combine! No position however extreme would look bad and the movement needed absolutely no bizarre tweaking of bones, constraints or anything else.

Having that solved, topology flaws started to reveal. Some denting and bumps were unavoidable because of my bad edgeloops.

It was time again for big topology changes. Because Blender has some bugs that can easily ruin all the work done with shape keys, I save my model and all shapes as text files to regenerate everything if needed and can use scripts to change all the vertex indices, so all my work is not lost when I make radical topology changes.

These images show how now I adopted this double face loop approach around the shoulder, which I copied from ā€œBiscuitā€, the male model by Broken. His model has clean and corrrect shoulder topology. My model didnā€™t end up as clean as his, but I managed to get rid of artifacts.

http://img.kokcito.tk/post2/p37.jpg

I canā€™t describe exactly why it works so well, but this topology solves the most difficult point, which is the fold which occurs between the chest and the arm when the arm is stretched forward.

http://img.kokcito.tk/post2/p35.jpg

Here are some images showing arbitrary poses.

http://img.kokcito.tk/post2/render051.jpg

http://img.kokcito.tk/post2/render022.jpg

As you can see, I smoothed the ribs, so criticized before:
http://img.kokcito.tk/post2/render040.jpg
(I know the gaps between the toes looks bad)

Here are some animations. The movement is not very nice, but the idea is to show how the deformation works. Please comment if you have ideas to improve my animations.

You might notice that the upper arm looks fat, this is in part because I have not solved the problem of querying the correct roll angle to drive the shapekeys that compensate for twisting.
(Ambient occlusion just stopped working for no reason, only for my fileā€¦)
Animation 1 413 kb
Animation 2 313 kb

Here is a dressed version. I had to create a new file and regenerate my model from text files to make AO work again (darn bugs), although now I got some ugly dark zones.
Animation 433 kb

I took code from scripts written by others to solve the problem for X and Z combined rotations. My current problem is getting the correct Y rotation for the twisting arm. I am too ignorant to come with my own solution, but it appears that this can be solved by using the roll_correction() function from Basil Fawltyā€™s pose script.

Ender Saka: Thanks for all your very good comments. I have made the armpit more concave. About the scapula, I knowā€¦ that part is very difficult to edit because there are a lot of vertices and when working on a deformed mesh a lot of tools donā€™t work and vertices must be moved one by one.

Catboy85: Your solution is a very good alternative to pydrivers! If only I had read your answer in time. Pydrivers are very cool anyway.

Well, in case you want to know more, I submitted a shoulder tutorial using pydrivers to the tutorials forum. It has not got much interest :frowning: .

Simply amazing. You should write a book.

I second that, or at least a lengthy tutorial. Granted theres no hope, but any chance we could see the .blend file? :smiley:

Now that is just a lambert with AO?

1 Like

simply amazing.

Its too daring to critique such technical prowess, but for the sake of feedback, I find the shoulder seems a bit ā€˜forwardedā€™ from its natural position. Mostly in the opening frame of the ā€˜back animationā€™ and in the first textured image of your latest post.

these results are wonderful. and thank you for sharing and explaining everything. your whole website (kokcito.tk) should be archived in the blender documentation! :thumb:

Thanks to you all!

I donā€™t think I could write a book. I am far from finished. Everytime I do big changes, it seems it is never enough. I plan to update my tutorials.

I guess you mean the skin? It is Oren-Nayar, some noisy procedural textures and ramps for slightly reddish shadows.

Yes, maybe it is, but not too much. The first frame you mention has also a big bulge in the middle of the upper am.

The muscles under the arm have to be pushed forward about 5 cm. I was going to post some images, but I should better get it right, it is more difficult than it seems.

toloban,

please report the bugs! If we donā€™t know about them, we canā€™t fix themā€¦

TolobƔn, this is really amazing! Can you show armature and shoulder vertex groups attached to it (if you use them at all)? Also, do you use weight paint too?

1 Like

In fucking credibel manā€¦ that is really greatā€¦ i have never really unbderstood this topology thingā€¦ but im learning more about it everyday.

I am still doing this area. The forward motion needed a more radical displacement of vertices. In a real body I guess bones and muscles displace under the skin and that is very difficult to simulate without adding a lot of vertices. So in a 3D model like mine the skin just stretches a lot. It doesnā€™t look too bad, but if there was a tatoo or some pattern that depends on UV coordinates, it would become distorted.

Here is an animation of recent changes to the forward motion shape key. As Ender.Saka noted, the scapula was no displacing enough (I have been assuming that everybody here can play looping animations, but I have learnt than in some players it is difficult to get anything to loop).

AVI file, 80K

Yes, I know, I know, sorry about complaining so much! I jut fell frustrated. I did submit a bug report before posting and hopefully it will be corrected. Sometimes it is also frustrating not being able to reproduce the problem to submit a good bug report.

Thanks Popski.

I am using a standard armature and weight groups to deform the mesh. There is nothing really special about them. It is driven shape keys that make the deformation more believable. The only ā€œspecialā€ bone is hidden bone that allows to twist the arm. You will find more information here.

did you already try stretch constraints?

Neablo, yes I have tried using them, but they donā€™t work as nicely and predictably as driven shape keys.

okay,thanks
someone told me this was the best way to simulate muscles and stuff, but I believe you more as your models and anis look betterā€¦ :slight_smile:

http://www.blender3d.org/cms/Stretch_To_Constraint.483.0.html

the difference being that the constraints make a pretty good deformation WITHOUT extra modelling, whereas shape keys make exactly what you want, but you have to model what you want the final result to look like in each extreme

This is simply amazing. You my friend are a perfectionist, and it shows. If you ever grace the blender world or 3d world for that matter with a book, Iā€™m sure the world would receive it with praise.

2d

Iā€™m curious how you solved the driver problem with pydrivers- Iā€™ve never used them- donā€™t know how-. I gave up on using rotations on complex joints for drivers- Instead I use a bunch of bone-hacks to drive the shapes. rotation just doesnā€™t work unless the joint is limited to one or at most one major and one minor axis (as Iā€™m sure youā€™ve found). any pointers/tips? Iā€™d like to get away from the bonehacks- if pydrivers are the holy grail, then so be it- :slight_smile:

What are pydrivers, a link again to my little tutorial.

Slikdigit, it really depends, there are advantages to both pydrivers and bones.

Pydrivers:

  • Armature simplicity: One thing that I like about this model is that I am still using a very basic armature, I deleted lots of hidden bones using lots of difficult constraints. My model is easy to pose because I only need to rotate a few bones. It is just as easy as posing Gus, the gingerbread man.
  • With Pydrivers there are a number of things you can accomplish which you canā€™t by using the values that you get from the standard drivers. For example, if you rotate a bone 45Ā° on the X axis and then 45Ā° on the Z axis, the Y axis is twisted about 36Ā° regarding its original roll angle. That is important if you use this value for a driver. However, the numeric data you get from the interface is always 0Ā° because you never explicitly rotated the bone on its Y axis. This twisting resulted from a second rotation made on an axis which had its global orientation changed in the first rotation.Bones:
  • Using bones, you donā€™t need to know anything about Python or rotation matrices (not that I really know how they work, but there are enough Python examples to copy from).
  • Catboy85 suggested a smart idea in this thread. Basically you create copies of the bones which you canā€™t use to drive shapes because they can rotate in more than one axis (arms, thighs) and add copy rotation constraints to these copies, locking the X or Z axis. Then you use those bones to drive the shape keys. You end up with some extra bones, but it works.I can say I have finished with my ā€œexperimentsā€ and the shapekeys that I needed for the full body. As the only detail that was missing, to make the eyelids automatically follow the eyes, I converted the eye bones usual track to constraints to IK solvers (which as a big advantage allow to limit the range of rotation of the eyes), and used the same pydrivers I was already using elsewhere, now to drive the eyelid shapekeys.

I finally solved the problem of getting the correct Y rotation from a bone, but this made me find a new problem. Even though it is now easy to pose my model in some extreme positions,


ā€¦ I discovered there is a strange behavior that causes a hidden IK constrained bone to twist and distort the arm in a few poses. I still donā€™t know how to solve thisā€¦ Looks terribleā€¦

TolobƔn, have you seen the work of Warwick Mellow?

Worth browsing, if you havenā€™t. Under the ā€œCharacter Setupā€ section, thereā€™s an excellent analysis of the problems of a realistic shoulder setup. He works in Maya, but most of itā€™s translatable to Blender. He devotes a fair whack of text to realistic clavicle and scapula simulation. Yours is looking very good in its most recent incarnation, but you might still get something out of it.

Have a look, anyway. Itā€™s an incredible resource, and his result speaks for itself. I think youā€™re on the way to something comparable here, and Iā€™m looking forward to seeing it develop.