We propose significant simplifications in muscle modeling and simulation to facilitate real-time anatomical skin deformation for full-body articulated characters. The muscle shape is a function of an animated quadratic Bezier action curve and control rings derived from it. The action curve is uniformly sampled to derive control rings driven by a scaled sinusoidal equation to model fusiform shapes. A single spring is attached between the central control point and the midpoint vector between the extreme control points of the Bezier action curve...
We propose significant simplifications in muscle modeling and simulation to facilitate real-time anatomical skin
deformation for full-body articulated characters. The muscle shape is a function of an animated quadratic Bezier
action curve and control rings derived from it. The action curve is uniformly sampled to derive control rings
driven by a scaled sinusoidal equation to model fusiform shapes. A single spring is attached between the central
control point and the midpoint vector between the extreme control points of the Bezier action curve. Care is taken to
stabilize local coordinates for each muscle vertex to enable glitch-free skin deformation. The character’s polygonal
mesh is smooth-skinned using a two-layered approach: first to the joints, and then to the muscle vertices. Lastly
we show how different prominent muscles can be reasonably approximated with the proposed fusiform model.
A typical 4000-vertex character skinned with sixty four 72-vertex muscles is able to run on an average CPU at
60-80 fps. Intuitive tools have been developed to aid the process of muscle creation, muscle shaping, dynamics
simulation, as well as assignment of skin weights for joints and muscles. Our main contribution is the simplified
dynamics driven curved action-axis, which enables economical and expressive muscle animation. This opens up
new levels of realism for real-time characters in games and interactive media.
We have created a demo program for you to have a better understanding of how the system described in the paper works and also to have a good feel of the performance. Here is a quick reference for the Demo Section to help you navigate:
This section is intended to give you a better understanding of the underlying representations of the muscles, as explained in the full paper.
1) To see the quadratic Bezier action curve with dynamics simulation (For Sec. 3.1. of full paper)
Hide the skin mesh (Press F5)
Hide the muscle meshes (Press F4)
Show the Bezier action curve and control points (Press F2)
NOTE: Simulation will slow down in this mode because line/curve drawing is significantly slower than polygon drawing.
These are what the spheres represent:
Red spheres: Pmid
Green spheres: Pconst
Yellow spheres: Porg and Pins
Notice how the red spheres move towards the green spheres when the Fighter is moving.
2) To see the up-vector axes (For Sec. 3.2. of full paper)
Hide the skin mesh (Press F5)
Hide the muscle meshes (Press F4)
Then show the up-vector coordinate axis (Press F3)
For each coordinate axis shown, the red arrow represents the local x-axis, the green arrow represents the local y-axis and the blue arrow represents the local z-axis. The local y-axis is taken to be the up-vector used in the calculations of the local coordinate frame for each control ring of on the Bezier action curve.
We have included some global multipliers in this demo so that you can change them to see how exactly each attribute affects the overall look of the muscle dynamics and skin deformation.
1) Change the size of the muscles (For Sec. 3.3. of full paper)
Increase or decrease the size of the muscles to see how the skin is affected by the muscle size.
To decrease the stiffness, press 1
To increase the stiffness, press 2
To reset the stiffness, press 3
The image on the right is taken from a character with muscle size multiplier increased to the max.
2) Change the stiffness of the muscle jiggle (For Sec. 3.5. of full paper)
Increase the stiffness of the muscle jiggle to see muscles that vibrates faster. This can be used for more creatures with very strong and tight muscles. Lowering the stiffness will cause the muscles to oscillate slower and lag behind in motion. This could be used for ghostly/fluid creatures.
To decrease the stiffness, press Q
To increase the stiffness, press W
To reset the stiffness, press E
We could have made the muscle jiggle for the Fighter a lot more obvious but we decided to tone down the jiggling effects so that it looks more natural for a human being. For characters such as dinosaur or dragon which has huge muscular thighs, the jiggling effect can be exaggerated much more.
3) Change the damping of the muscle jiggle
(For Sec. 3.5. of full paper)
If you increase the stiffness multiplier to the max, you will probably notice that the muscles vibrates continuously, even when the Fighter has stopped moving. This is where the damping comes in handy. Increasing the damping multiplier will result in faster rate of energy dissipation, thus stopping the continuous vibration faster. Decreaing the damping with low stiffness will cause the muscles to lag behind.
To decrease the damping, press A
To increase the damping, press S
To reset the damping, press D
The image on the left is taken from a character with low damping and stiffness. You can see the thigh lagging behind in action.
4) Change the weighting to the muscles
(For Sec. 4.2 and 4.3. of full paper)
In the demo, the muscles overshoot the skin sometimes but that is expected. The skin is only partially weighted to the muscles and thus will not follow the muscles entirely unless the weights to the muscles are 1. Change the weighting to the muscles to see how it affects the skin deformation.
To decrease the weighting to muscles, press Z
To increase the weighting to muscles, press X
To reset the weighting to muscles, press C
The image on the left is taken from a character with very high muscle weight (thus very little joint weight).
We have created this video section to show you some of the settings and results that are obtained in our system. Here is a quick reference for the Video Section to help you navigate:
We have prepared a muscle dynamics video which shows our muscle system with and without dynamics for comparison.
This video shows our muscle system with and without muscle dynamics for comparison. The skin of the character jiggles realistically when the dynamics are turned on.
These videos are recorded to show you the different deformations that our system can achieve by changing the muscle settings. You can try out these settings yourself in the demo to see the effects in real-time.
1) Normal Character With Only Skeletal Deformation
This shows a normal character without using our muscle system. The skin is only smooth skinned to the animated joints.
2) Heavy Muscular Character (The Hulk)
This is what this system is all about: muscles! This shows a hulky character all beefed up with huge muscles.
Size: 2.6
Stiffness: 1.0
Damping: 2.5
Muscle Weight: 6.7
3) Skinny Character (Gollum)
This shows a skinny character with really thin underlying muscles.
Size: 0.1
Stiffness: 1.5
Damping: 3.0
Muscle Weight: 4.0
4) Elastic Character (The Jellyman)
We decided to have fun with the system and adjusted the dynamics settings to bizarre values. This caused the muscles to lag behind and restore its shape slowly. This rubber-band deformation can be used for fluid-like monster creatures.