 |
 |
|

This is an
informal introduction to ACT by Dr Mark Snoswell who designed
ACT and then created it with a small, but hugely talented team.
Here Mark talks about why ACT was created, and how and why it
works the way it does and how it integrates into 3DS Max. Mark
also talks about what you can do with ACT and where ACT could
go in the future.
Hi, I'm Mark Snoswell. When I get a significant new piece of software
I always find it useful to know a bit about how it is designed
and why it works the way it does. This often answers a lot of
questions and makes it much quicker to get into the software -
knowing how and why it was designed the way it is. That's what
I've endeavored to do here - give you an insight into ACT, why
we designed it to work the way it does, and give you a glimpse
of where we might be taking ACT in the future. It's all very exciting!
I have a varied background that includes quite a lot of animation
and so I can talk from first hand experience. What ACT does for
the quality of character animation is truly awesome. Everyone's
reaction is the same when they see their characters skin sliding
over muscles and bones for the first time "That's it…
it's so real… this is what we have been missing!"
Enjoy - and create some truly awesome animations!
|
|

ACT 1.0 is
a solid foundation for everything we can imagine wanting to do
in the future. The vMuscle and vSkin Deformation systems have
their own plugin architectures that are very well thought out.
When we add flat sheet muscles in the future these will seamlessly
integrate into the overall system and work just as you would expect.
There are two UV spaces for vMuscles - the first defines the tendon-muscle
structure of the muscle. The second UV channel defines the parameter
space of the vMuscles. In future versions we will use this a lot
more to implement parametric skin deformation methods that can
push, pull and do sticky skin. We will also be able to do muscle-muscle-skin
interaction as a combined parametric system. We could look at
generating skin automatically and doing skin selection sets automatically.
We already have a powerful, real time, cross section viewer and
editor for vMuscles (available as an unsupported free download
from www.cgCharacter.com). The architecture of ACT is set up so
that when we add things like sheet muscles they will automatically
also work with the cross section viewer and vSkinDeformer systems.
They will also automatically work with out special modifiers like
vSmooth and vmLink.
So - while we are not sure just what features to add next we do
have a long list of really amazing things we know how to do and
we have made sure that the ACT platform can support all of them.
The ACT platform is also about to go cross platform so that in
the very near future you will be able to move your muscle and
skin systems between major 3D systems and possibly even into your
own games and other proprietary environments.
So - get to it and create the best character animations ever seen!…
and show us what you do. You are also invited to join the ACT
team on the cgCharacter forum at http://groups.yahoo.com/group/cgCharacterForum/
and give us your direct feedback. We'd love to discuss just what
features you want added next.
|
|
| |
|
| |
 |
|
Absolute Character
Tools was created because I wanted to do better character animation
- the best character animation ever in fact - and it didn't take
me long to come to same conclusions as other leading character
animators - particularly the big studios. The only way to do better
character animation was to stop faking it and create real people
and creatures. Creatures with a real, biomechanically correct
(well at least believable) skeleton and muscles; and then to have
the muscles all attached to the skeleton and moving correctly;
to add fat and connective tissue; and lastly to have the skin
slide over everything underneath.
In a privately funded venture we created the worlds most accurate
human musculoskeletal system - now available as The Ultimate Human.
But it had over 1200 components - bones, muscles, sinew etc…
The sheer complexity overwhelmed 3DS Max, Maya, Softimage - anything!
We were forced to create our own muscle primitives and later our
own whole skin deformation system… and it had to work very,
very fast - hundreds of times faster than even mesh objects.
After much tuning, re-writing and novel algorithm development
the very first commercial muscle and skin system is now available
- Absolute Character Tools 1.0. Direct feedback indicates that
it's not just the only commercial system available but that it's
probably orders of magnitude faster and feature rich than any
proprietary software out there. So now the broad 3D community
has access to the most unbelievably awesome software for creating
the best character animations possible!
Whether you add just one muscle to an existing character or a
whole set the results are instantly visible - when you see skin
sliding over muscles and bones underneath you are totally blown
away by the degree of realism that is added to your existing animations.
Characters really come to life!
Fundamental Problems - how muscles
move.
We started out thinking that there would be a lot of biomedical
data on how muscles work, where they are attached, how they contract
and interact with each other - we were wrong! How muscles really
work and interact under realistic loads and conditions is almost
a complete mystery to science. There are lots of anatomical illustrations
of dead things. There are heaps of X-Rays of skeletons. There
are a very few x-ray videos and other images of a very few muscles
in action, under very unrealistic conditions.
There are lots of biomechanical measurements on performance. But
it really is a mystery exactly how muscles are moving in action
in living people and animals. It's not even clear how to correctly
model a muscle - Oh, we know their general shape from dissections
(most of the time) and we know their general structure - fibers
running from one end to the other with varying amounts of tendon
at the ends (some times).
Faced with this almost total lack of hard scientific data we created
a virtual muscle (vMuscle) primitive that had all the known properties
of muscles built in and served as a solid foundation for anything
we could imagine wanting to do with these vMuscles. There were
two really big problems - How to make these vMuscles work very
very fast and how to deform them. The speed problem was just a
matter of some very good technical programming - with ACT you
can interact with hundreds of vMuscles in the viewport in real
time!
The deformation is a much harder problem. Knowing that we would
not get it right - and that there probably wasn't any one right
way to deform all muscles we chose to implement a plugin architecture
for the deformation and dynamics of vMuscles. ACT 1.0 comes with
3 different muscle dynamics engines that are both fast and general
purpose. Researchers and programmers can even develop their own
dynamics engines to add to those that come bundled with ACT.
More Problems - how to make muscles
work in Max.
It's not just enough to create a new vMuscle object, it has to
integrate into professional 3D systems like Max - and that's a
real problem! The reason is that all of the core 3D object classes
are rigid - mesh, poly, NURBS. All current 3D base classes start
off as rigid 3D objects. Muscles start off as a deformable organic
shape - with fibers and cross sections. They have a default shape
when you create them - but as soon as you attach then at each
end they become a deformable soft object. This is something that
no 3D architecture was ever designed to cope with!
The vMuscle object class that ACT implements is probably the most
fundamental extension to the current limited set of base 3D objects.
vMuscles are really resolution independent parametric solids.
We just happen to define them with a bunch of points on the surface
arranged so that we know about the fibrous structure of the muscles
also. We also save parameters for things like the muscle tension
and transition from tendon at the ends to muscle in the middle.
We have ensured that vMuscles work like any other of the fundamental
3D object classes - you can apply almost any modifier to them
and things will work as you expect… until you start to deform
the vMuscles. A bend modifier for instance doesn't know what to
do with an object that doesn't have a fixed shape - it works fine
in the modeling phase - it just bends the newly created vMuscle.
The real fun happens when the vMuscle is deformed - then there
is a real problem in deciding if the bend modifier should bend
the "default" creation version of the vMuscle or the
deformed vMuscle. The answer is that it bends the deformed vMuscle
- but this probably won't do anything like what you expect as
the vMuscle deviates more and more from it's default creation
shape.
The solution was that we had to create a set of special plugins
to assist with hand tweaking the animation of vMuscles. You can
use all the normal modifiers in the modeling phase and vMuscles
will do exactly as you expect - you can even collapse the stack
and you will get the resultant vMuscle object! The Max modifiers
also do work with animated vMuscles - but they just don't make
any sense. Although you can set up the vMuscle dynamics engines
to almost always get the desired muscle motion automatically we
had to make hand tweaking very efficient. This is why we have
created special vmLink and vmVLink modifiers. We also created
a vSmooth modifier that lets you change the resolution of a vMuscle
as it goes up the stack.
Muscle Dynamics.
OK - we wanted muscles to interact with each other, the bones,
gravity. We wanted them to behave correctly under tension - to
be floppy when relaxed and hard as steel under tension. We also
wanted to be able to model real biomechanically correct muscles
- which have some truly horrible shapes - nothing like the idealized
long muscle that bulges in the middle!
Apart from science not knowing how muscles really work there's
two fundamental problems we faced: Computers just aren't fast
enough yet to have all those muscles we want interacting with
each other; and we want to work backwards - with muscles moving
with bones and not muscles pulling bones around - this forces
us to approximate how muscles would move based on their attachment
to bones that animators move.
In ACT 1.0 we have included collision and dynamics with cylindrical
bones - this is a fast, first step towards full muscle-muscle
interaction. Full muscle-muscle interaction will require quite
a massive programming effort to do within the current 3D systems
like Max - and it can only be done in a full System that controls
everything. We will get to that in a future version of ACT.
The two main vMuscle dynamics engines that come with ACT are very
fast and very flexible approximations to realistic looking muscle
motion. (The third engine is mainly for backwards compatibility)
They give the Technical Director and animator a huge degree of
flexibility in fine-tuning the automatic deformation of a vMuscle.
You can control the degree of stiffness at each end of a muscle
- to simulate tendon at each end. We have also integrated an analytical,
real time solution for static forces - like gravity. There is
also the bony collision - with cylindrical bones. The static forces
- gravity and collision - have almost no impact on performance.
They also work properly with the tension and fibrous structure
of muscles - so you get more side-to-side motion and less end-to-end
motion. The results are very realistic… and they run in
real time!
Real Dynamics - muscles that flop
and jiggle about.
We have also put in a "preview" dynamics system that
gives very believable muscle dynamics. Muscles will jiggle much
more sideways than along their length. They will also move faster
and less when the muscle tension goes up. The dynamics is also
extremely fast - you get realistic soft object dynamics - with
gravity and collision in real time! But this is just a real time
preview system - to get the awesome performance we have we had
to make the dynamics work with the static forces and collision
on a frame by frame basis - there is no need to pre-calculate
anything! The downside is that you have to play the frames in
sequence. If you want to network render (where individual frames
are sent to different machines) then you will have to use the
Max Point Cache modifier to "capture" the dynamics correctly.
Skin deformation - skin sliding over muscles and bones.
Speed and brand new ways of working. That's what it comes down
to. We had to implement a whole skin deformation system and package
it up as a single Max modifier! Like the muscle dynamics engines
there is not one right way to deform the skin and lots of different
ways you would like to deform skin. For this reason there are
two complete categories of skin deformation engines in the vSkinDeformer
modifier system - 3D and 2D deformers. Again these are plugins
to the modifier so we, and others, can quickly add more. ACT 1.0
comes with 4 different 3D deformer and 2 2D deformer engines.
We needed to make the vSkin deformation system very powerful and
flexible - there is also a lot of user interaction and user interface
with this system. The first thing to note is that it's not just
muscles that we have deforming the skin - it's bones, fat and
connective tissue - vMuscles are great for creating all of these.
For instance when we animate the face we mainly create bones from
vMuscles for the skin to slide over. We made sure that deforming
skin to slide over muscles is very fast and works very well -
this is aided because be know so much about vMuscle structure
- vMuscles are really parametric solids that are resolution independent.
Because the skin deformation system is so broad we added deformation
engines for spheres and general meshes also. Spheres, especially
squashed spheres, are very useful and fast to use as bony knobs
and other skin deformation objects. We also added the ability
to offset the skin from the deforming objects so you can simulate
skin thickness and underlying layers of fat - and everything is
animatable.
2D skin deformation - skin sliding and stretching.
When we started doing realistic character animations with muscles
and bones sliding under the skin easily we discovered that the
next problem we wanted to address was just how the skin stretched
around joints. We wanted a way of accurately, and manually, controlling
the exact degree of skin stretch and slide - without affecting
the beautiful deformation we had over muscles and bones. So we
invented a way of moving the vertices of the skin within the 2D
surface of the skin itself - as long as you have a fairly smooth
and decent UV mapping for any area of skin then the 2D deformation
engines will let you set up automatic (or manual) skin stretching
and motion. There is also a 2D relax that smoothes out uneven
edge stretching by sliding vertices within the skin surface!
This ability to move and slide the deformed skin is also great
for doing animations of skin twitching and pulling - like you
see in a horses rear when it twitches.
A whole Skin Deformation pipeline.
The vSkin Deformer modifier is a complete deformation system pipeline.
The deforming objects and 2D deformations are applied in strict
order. You can also choose exactly which part of the skin any
deformation stage applies to - this is required for some deformation
stages like the 2D methods and will also generally speed everything
up. You can also specify offsets for all the 3D stages.
With all of these options and the prospect of having 10's to hundreds
of deformers for a complex character skin we had to come up with
a completely new user interface. In the vSkinDeformer interface
you can group deformation nodes together, they are color-coded,
you can turn them off and on and move them around. There are tree,
spread sheet and property views all combined into one efficient
interface - that is totally different from anything else you will
have seen in Max or Windows!
Designed to integrate into current workflow.
Being animators ourselves we were acutely aware that ACT had to
fit into the current way character animation worked. It had to
be available as an option to enhance current character animations
- with the flexibility to add just a little or a lot of additional
realism easily… Without significantly altering the way you
work at present. This is one of the main reasons that the vSkinDeformer
does not include a full transform blending system to replace current
skinning systems. You keep using whatever skinning system you
like and add ACT's vSkinDeformer on top of that - adding the subtly
of muscle and bones moving under the skin to your existing animation
methods.
As you use ACT more and more you will want to modify the precise
way you do character skinning - Character skinning can become
much easier and faster as you rely on ACT to both correct and
add more realism to your character's skin motion. But you don't
have to change anything you are doing - you can even set up your
production pipeline so that ACT features are turned off for previews
and early work and are switched on as you require.
There are some technical and performance advantages to be gained
if we rolled a full skinning system into the vSkinDeformer - but
current systems work quite well for what they are intended to
do and our interface would become much more complicated if we
rolled everything into one. We will look at doing this in a future
version - perhaps reading in Skin or Bones-Pro files as an interim
step - so you would just use them to set up your base skinning
and then import that into ACT's vSkinDeformer system for better
performance and improved overall quality.
Some really strange uses for ACT.
We have had some great fun with the new vMuscles and vSkinDeformation
systems - We routinely use vMuscles to model bones for characters.
But there are some truly amazing things you can do that are very
hard with any other software - Like making rubber hoses for engines,
or robots or whatever. These are almost trivial to create and
animate with vMuscles - you can easily have them vibrating with
the built in dynamics! Doing dents and other surface type deformation
special effects is also very easy with ACT. We also routinely
use vMuscles for modeling all sorts of things now - creating the
torso, face, arms and legs of characters for instance. Not only
are the vMuscles sub-object modeling tools very powerful but you
also get excellent mapping and resolution independence. We then
convert to editable poly, mesh or NURBS (vMuscles can be converted
to NURBS surfaces because they are parametric - like NURBS surfaces)
and join the bits together.
Mark Snoswell. Jan 2002.
The ACT Development Team:
Gonzalo Rueda The most awesome Max programmer ever.
Jeff Lim The fastest programmer creating the fastest code ever.
Tim Jones Character animator extraordinaire.
Helen Snoswell. MaxScript programmer, web, accounts, wife and
mum.
Mark Snoswell. Designer and programmer - yes he does some "real"
work too.
|
|