Animation Basics Rigging Basic 1
Hello
This is Park Joo-Yeong, and I am teaching you about the basics of 3D animation
This time, you will learn about rigging
Rigging is the process of creating the skeleton of a character or object
in order to allow them to move
A skeleton allows the animator
to control the character
So rigging is like setting up controller of sorts
In other words
you are preparing to put the character in motion
In Maya, you first create a skeleton within the character model
then connect the two
to become able to apply movements
The connecting process is called binding
The controller
also has to be intuitive
in order for the animator to easily utilize it
Through this lesson
you will understand the basic concept of rigging
and some important techniques
I will help you learn
how to bring your characters to life
Now, let's turn on Maya
Creating a Basic Skeleton
Today we will create
a skeleton rig
that can make a character move
Maya uses both the terms
'joint' and 'skeleton'
First, let's take out
the teddy bear we created before
To make this teddy bear move
we are going to give it joints
in the arms, hips, legs, and head
And also the tail
To create a skeleton
first view the model from the front
And set the menu to the Rigging menu set
Now the menu bar should show the Skeleton option
Click Skeleton-Create Joints
and click anywhere on the workspace
This rig is too big
It should have a radius of about 0.1
This single joint
is going to be the root joint
and be placed in the model's center
I'll set this as the root
Even though the joint radius is 0.1
it's still too big
I made the teddy bear
way too small
In Maya, a side on this cube
is the size of a single square on the grid
which is 1 square centimeter
So this teddy bear is about one cubic centimeter large
Let's scale it up
to 20 times the size
What I just did is I scaled this bear up by 20 times
and froze the transformation
The Freeze Transformation tool
can also be found in the Channel Box
Right click, select Freeze
And you can choose from Translate, Rotate, and Scale
Right now I'm going to click All
and the transformation is frozen
like this
But now the teddy's arm
has turned black
This has happened
because I mirrored the limbs by setting Scale X to -1
Right now it's fine
but freezing it turns the model inside out
So you have to select these
and select Modeling-Mesh Display Reverse
All of these planes have a front and a back
So the front side is white, and the back side is black
If you put a texture on, the front side will be textured
but the back side will still be black
If I select Mesh Display Reverse
the polygon looks weird
even with Smooth Mesh Preview on
Back to the model
Now the rig looks small enough
Make sure the root is at the model's center
Now copy & paste the rig
to the center
of the character's waist
Until now, I have copied
using Edit-Duplicate
but the keyboard shortcut is Ctrl+D
Now, if I press 4
you can see the rig that's inside the model
If you press 5 or 6, it will become invisible
You can click the X-ray joints button
to make joints always invisible
Also, normally joints
should be placed on the model's wires
But the wires are only visible right now if you press 4
So if you look here
next to the View tab
in Shading
there is an option called Wireframe on Shaded
Press this
Now paste another rig
There's a rig on the waist
and press Ctrl+D
to paste another one on the neck
Now take 'root1' in the Overview
and make it a child joint of 'root'
and 'root2' will be a child joint of 'root1'
I'm going to change root1's name to spine
and change root2 to neck
This is the teddy bear's spine, sort of
It looks like this
And now
we're going to make the limbs
Let's change to the Rigging menu set
and select Skeleton-Create Joints again
There will be two bones each
let's start from the arms
Select the points
where you think joints should be
Make sure to change the axis orientation
from world to object
The upper joint
will be arm1_Left
and the lower one arm2_Left
The last will of course be arm3_Left
The arms should be symmetrical
So press Ctrl+D to copy a joint
then press Ctrl+G
and set Scale X to -1
But
actually it's better
to just make one from scratch
Click Create Joint
Select the group of joints we just made
and click Isolate Select
and you can see the joints
Click the new joint while pressing V
This function is called point snap or vertex snap
The new joint
will snap to the joint axis
How do you do that again?
Press and hold V
and click on the joint with the mouse wheel
Press Ctrl+G
and just like before
add it as a child joint
Unlike when I created the other arm
the axis orientation is set to world
If you look closely, this joint
has its wires aligned with the bone
But this joint's wires
aren't aligned with the bone
In this situation, select Skeleton-Orient Joint
and click Apply in the Options box
Now the joint is reoriented
Rather than the joint
being oriented with the world
it should be oriented with the local axis
You can learn more about this
when you get to professional rigging
This time we're learning the basics
so I won't go too deep into that
Now let's change the joint names again
In rigging
it's important to name the joints
because you can get confused
as the number of joints increase
Which is why you should change the joint names
as you create them
Now let's rig the legs
I'll rig the legs while viewing from the side
We don't need the other parts right now
So I'll select all the existing joints
You can see there is a Layers menu on the right
Click Layers from the Display tab
and create a layer out of the selected joints
Clicking on the rightmost icon
will create a new layer
that includes everything currently selected
You can turn layers on and off
I created a layer to hide these joints
so I'll name the layer 'hide'
Now click Skeleton-Create Joints again
and select a point on the upper part of the leg
about where the leg begins
Another where the knee joint will be
And another where the foot is
That's it for the leg
It's important to rig legs
so that there is a slight bend on the knee
That is because later on
we're going to add a controller called IK
which will only work if this joint
is slightly bent by default
Then Ctrl+D to copy
and let's paste it onto the other leg
Name this joint leg1_Left
There are various ways
such as MEL scripts
that you can use to more conveniently name joints
But that isn't the priority right now
At the start, you should try naming them
one by one, to help get a hang of things
The toe is toe_Right
Now let's turn the hide layer back on
Lastly, select the neck joint
Press Ctrl+D and drag
and add the new joint as a child to neck
I'm going to name it 'head'
I won't make separate joints for the ears
Now what you have to do
is take the left and right arm
and make them child joints of spine
leg_Left and leg_Right
go under the root joint
And that is the entire skeleton
But creating the skeleton is only the first step
Now we have to attach the model data
to this skeleton
When a joint moves
the model has to be attached to the skeleton
for the model to actually move
Like this, for example
So how do you do that?
First select the root joint
Click the bear group while holding Shift
and it will show the whole group
Press Ctrl, select the group
then drag down while holding Shift
We don't want to select the body group
so click while holding Ctrl to unselect it
Now from the menu bar
open the options box for Skin-Bind Skin
The options here are important
Bind to: Joint hierarchy
Here you can only see the root joint right now
but binding to the joint hierarchy means that selecting the root joint
will automatically select all of its child joints
For the other options
Bind method: Geodesic Voxel
Skinning method: Dual quaternion
Normalize weights: Post
And set Max influences to 3
and click Apply
Now if you look at the Channel Box
for the modeling data
you can see that there's an indication
that the values are locked
So they are bound to the joints now
When you move a joint
the model moves along with it
but it also becomes deformed where it shouldn't be
We now have to adjust that
Wait, I made a mistake
I left out the tail
To add a tail joint
select Skin-Unbind skin
to unbind the model
You will also see that in the Inputs node
there is a lot of history
that has accumulated
Select Edit-Delete by type-History
If this object has that much history
so will all the other ones
Select all of them and go to the Edit menu
These objects are still bound right now
Binding means to connect
the skeleton with the model
So if you delete the history
of a bound object, it will be unbound
If you want to avoid that
you can select Non-Deformer History instead
Once you do that, the only history left
will be this one called skinCluster
which is the one that indicates that this object is bound
So, by selecting the objects
with history data
in their Inputs node
and selecting [Edit]-[Delete by Type]-[Non-Deformer History]
all of the unnecessary data
will be deletedw
Now I'm going to make one more joint for the tail
in order to weight map it
Create one bone for the tail
and add it under the root joint
If you select the tail
then select root while pressing P
It will set the joint you click
as the parent of the selected joint(s)
Associating objects like this is in fact called
parenting an object
The child object
is selected first, then choose the parent
Kind of like finding a home for the object
So, hold P and click to add child joints
If you select a parented object and press Shift+P
it will be unparented
So it's the child object
that either joins or leaves the parent
So the tail is now parented
Let's name it 'tail'
tail1 and tail2
Select tail1 and the tail model
The menus in the menu bar
can also be accessed by pressing the spacebar
while the mouse is within the viewport
They will be displayed in this Hotbox
So it can be quicker to look for the menu you want
from the Hotbox instead of the menu bar
Just like before
select [Skin]-[Bind Skin]
and now the tail moves like this
Skinning a Model to a Skeleton - Skin Weight
Now let's get into proper binding
First, we have to adjust the skin weights
For example
The bear's head
should only receive influence
from the movement of the head and neck joints
and not from any other joints
Let's select this vertex
Now go to
[Windows]-[Component Editor]
and there will be a Smooth Skins tab
You can view here
how many joints are influencing
this one vertex
Only the neck joint should be shown here
but you can see the arm and spine joints here as well
The numbers on this row
will always add up to 1
So 1 is the total amount of weight
As you can see
the neck joint has 0.43 weight
That is the most influence out of the three
but arm1_Left and spine shouldn't have any weight at all
What we have to do here is change neck's value to 1
Selecting one vertex
and double clicking it
will select the entire skin
All of these vertices
only need to be influenced by neck
So in the Component Editor
enter 0 for all of the joints shown
except for the neck joint
and they will disappear
They lose influence on the head skin
The head looks better now
So this is how you modify skin weights
Weight is a value between 0 and 1
that decides how much
the movement of each joint
influences a certain vertex
compared to other joints
Now the head
should work as intended
Let's try lifting this arm
The body skin follows the arm's movement
The body skin has nothing to do with the arms
Right click to isolate the body
Select the body skin
The body only has to be influenced
by the root, spine, and neck joints
Let's get rid of the arms and legs
Now it acts normally
It's working as intended
Now we have to adjust the arm's skin weight
It's a pain to keep editing weights this way
So let's set a keyframe
for this arm joint
And at frame 20
lift the arm about this much
You can see now
that the arm slightly distorts
That doesn't look good
Let's check the skin weight for this vertex
It has spine as an influence
Root is also
influencing the arm
Let's get rid of this
Now
let's turn the animation on
The arm looks better now
Delete these keyframes
Now let's do the same
with the elbow joint
This looks somewhat unnatural
We're going to adjust the elbow
Hide everything except
the arm joints and model
Now let's select the 'elbow' of the arm
and add a loop
Select a vertex
and double click the one next to it
Now a vertex loop has been selected
If you look at the Component Editor
The joints here
are named arm1_Left, arm2_Left, and arm3_Left
arm1 and arm2
should have 0.5 weight each
arm3 shouldn't be an influence
And for the loop
that is right above the elbow loop
arm1 should have 0.8 weight
and arm2 about 0.2
The lower loop is the reverse
arm1 is 0.2, and arm2 is 0.8
arm3 shouldn't have any weight
The other vertices
that are on the upper part of the arm
should be weighted completely on arm1
But if you try to select them
it doesn't work
because in Maya, joints are selected
by a higher priority than modeled skins
To solve this
first select the skin
and turn off isolation
Turning it on again will show only the skin
Now that the vertices can be selected
enter 1 for arm1
I think for this loop
0.9 will make it look better
The distal part as well
Enter 1 for arm2's weight
This loop should be weighted 0.1 to 0.9 as well
Now if we press 3
The arm looks better now
I think this part
should also receive some influence
from arm1, about 0.02
Let's do 0.03 instead
arm2 has 0.7 weight
Having a very slight amount of weight
on arm2_Left, for example about 0.03
makes the arm look better
Cute
Let's get rid of the keyframes again
And do the same thing again for the legs
Let's try lifting this leg
It looks unnatural
This is because the leg skin is also being influenced
by the root joint
and the joints
on the other side, the right leg
Leave only the left leg joints
Now, let's remove
all of the keyframes for this upper joint
and select the knee joint
Give a keyframe at 0 frames
The legs are thicker
so it's harder to weight the legs properly
But let's try it anyway
Select the vertex loop
at the same height as the knee
The foot joint doesn't need to be an influence here
Give 0.5 to leg1 and leg2
Get rid of foot_Left as well
0.2 to leg1_Left and 0.8 to leg2_Left
That seems to work
The same for the loop above the knee
Set foot_Left's weight to 0
0.75 to leg1, 0.25 to leg2
1 to leg1, 0 to leg2
Now group select the lower vertices
and get rid of the foot joints
1 to leg2, and 0 to leg1
toe_Left also gets zero weight
If we look at the way it moves now
it still looks somewhat awkward
If we look at the loop here
Oops
leg2 has all of the weight
Entering these values one by one
takes way too much time
Especially because this model is round overall
looking at the numbers doesn't tell you much
In that case, right click
and select the Paint Skin Weights Tool
You can see all of the joints
that are influencing this skin
Areas with heavy influence are colored white
and areas with little influence black
So that's how the weight map works
Right now, we should select Smooth
with Opacity at 0.5
Let's decrease the brush size a bit
Now paint while holding B to paint with a smooth brush
Do the same for leg2_Left
and that's about it for the legs
The leg looks nice now
Now for the final part of the leg
We have to adjust the foots' weights again
I just deleted all the influence
from the foot joints
and now moving the joint doesn't do anything
You can also see from the Component Editor
that whatever vertex you select
it doesn't have foot_Left as an influence
Let's select
Paint Skin Weights Tool again
and select foot_Left
Set Opacity to about 0.2
and also set Value to 0.2
and paint the foot
Shape the weight map
by carefully painting
only on the places
where you want the skin
to follow this joint's movement
Once you're finished
give a finishing touch with Smooth
Now, if I press 3
it looks pretty good
Now let's select a vertex
Good, foot_left is there
0.5, 0.5, and 1
But this one, unfortunately
ended up having a weight total of 1.208
instead of 1
Most of the other vertices are probably like this
The total value of weights
must add up to 1
So we should go to
[Skin]-[Normalize Weights]
and click Enable Weight Normalization
Huh?
The skin now receives
a weight total of more than 1
Within Maya, the program will adjust for the weight total
if it is larger than 1, so the original shape can be maintained
But if you export the weight map to another program
the model will end up like this
Selecting Normalize Weights
lets the program
automatically adjust the weight total to 1
Now whichever vertex you select here
the total value will be 1
The legs look nice and adorable
So do the arms
And the head
The last thing to do
is adjust the waist
But now that I look at it
there's not much to adjust here
But just in case
let's try moving the waist joint
Now that I move it like this
I can see that something is off
Select the waist
First let's select
the vertices where the joint is
and weight each influence by 0.5
For the loop below that
0.8 and 0.2
And the loop below that
1 for the root joint
And you can do the opposite for the upper loop
0.2 for root and 0.8 for spine
The topmost loop
we can just enter 1 for spine
This should look good enough
Let's get rid of the keyframes
You don't need to weight the tail
Now apply what we did
to the left arm and leg, to the right
Think of it as a review session
Now we have finished
basic skinning
for a simple model
But these joints are not enough
to animate a character
It's not impossible
but there is a method
that makes the animating process much easier
so that's what we will do next time
It's called rigging
What we did this time is also a part of the rigging process
but we also have to add controllers
in order to make
the joints easy to control for the animator
Let's go over what we learned today
We created a skeleton
and attached it to our model
using a function called Smooth Binding
We also learned two ways
of adjusting the weight values
Next time, you will learn how to put controllers on the skeleton
so that the character can be controlled intuitively
Creating a Basic Skeleton Head skeleton Change radius to adjust joint size Place root joint at model's center Scale model to adjust size
[Modeling]-[Mesh Display Reverse] to reverse vertices Copy & paste joints to quickly place joints
Ctrl+D to copy & paste joints; rename joint root1 to spine, and root2 to neck
Ctrl+D and Ctrl+G, enter -1 for Scale X
Leg skeleton Click [Skeleton]-[Create Joints] to create leg joints Ctrl+D to copy & paste to other leg
Select neck joint and copy & paste to head Select arm joints & connect to spine, connect leg joints to root
Select root, then click bearGR while holding Shift [Skeleton]-[Create Joints] to create tail joint
Select tail and root, press P to parent tail
Binding & Weighting a Model Adjusting head weights Select vertex, [Windows]-[General Editors]-[Component Editor]-[Smooth Skins]
Setting an influence's weight to 1 removes all other influences Enter 0 for all other influences except neck
Adjusting arm & leg weights Set keyframe at 0 frames, lift arm at 20 frames Removing influence from spine & root adjusts weight
Select loop at where elbow is Left leg should only be influenced by leg1, leg2, foot, and toe_Left
Adjusting foot weight Select Paint Skin Weights Tool, select foot_Left
Paint vertices where foot joint should be an influence Use Smooth to smooth out weight map, make sure Total value is 1
Use Normalize Weights to adjust all vertices' weight total to 1