Академический Документы
Профессиональный Документы
Культура Документы
Layout:
Damla Elmasli , Karim Biri
01
Concept
Par t
01 _Creation Process
02 _The Charaters
02.1.
01 _ Creation Process
1 _Where do you find inspiration for the poses? Where do you
start ?
Picture 01 _2
Picture 01 _1
Picture 01 _8
Picture 01 _8
02 _ The Characters
2.01 _Regis the bat
10
11
12
13
14
15
16
17
18
19
20
21
02
Modelling
Par t
01 _ Regis Part
02 _ Stinson Part
03 _ Gary Part
04_ Gaston Part
05_ Pi Part
06_ Amanda Part
01 _ Regis
Before attempting this model ensure you have a grasp of the
basic commands in Maya with special emphasis on Move, Rotate,
Scale and navigating around the model in the active viewport.
Also ensure that you understand how to change between Face,
Vertex and Edge mode using keyboard commands or Right
clicking.
The
was that
this nature
Very
2D
This
in
These
Maya
This will create the mirrored half on the left of the model. We
will now only model the right hand side and the changes will
be reflected in the left..
To create the mouth shape run a split (ALT + X) from the center
out to the right, then down and back to the center. Select faces
inside this area and call edit polygons>extrude face. Push the
mouth area into the mesh. To create the basic leg shape select
Picture 01 _3
sketch.
much prefer
The
acteristics in
could
tures that
3D. For
Photoshop
model an outline in
Maya. Instead I
To
use
Maya
as my core modeller
These
are:
and used it to
Extrude
command
using
the bottom most face and use Extrude, Move (W) and Rotate
(E). Change to a Quad view (use the icon on the left hand side
of the screen). Now tweak the mesh into the body shape shown
by moving vertices around one by one. Using the Quad view
sometimes helps the get a nice shape from all angles.
Picture 01 _4
27
Switch back to the Quad view. Now take some time and teak the
model until you have the shape shown. You can tweak faces,
edges and vertices to your preference.
Picture 01 _7
Picture 01 _8
Picture 01 _9
Picture 01 _10
Select the whole ear and use average vertices to smooth out
the shape. Then using deform>soft modification you can pull out
the end of the ear shape. There are several Magnet plug-ins
that can help with this.
Picture 01 _11
Picture 01 _12
Picture 01 _8
28
29
To create the toes select one of the faces at the end of the leg.
Extrude outwards several times, each time adjusting the size and
position of the face using Move, Rotate and Scale.
Run a split down the center of each toes and turn it under the
foot before it goes up the body. This is because we want more
geometry in the toe area but not further up the leg and body.
Use Average vertices to smooth out the toes a little. Tweak the
toes into the claw-like shape shown.
Picture 01 _13
Picture 01 _14
30
Picture 01 _15
Picture 01 _16
Picture 01 _18
Shape the bottom of the wing into points thinking about the
anatomy of a bat and where the bones will be placed.
Picture 01 _19
Select the faces of the wing and Extrude them out to make
the wing three dimensional. Make the area at the top thicker
by selecting a line of vertices and dragging them outwards as
shown. Tweak the end of the wing to be ready to extrude
fingers.
Picture 01 _20
31
Using soft modification pull the end of the wing out and into
the correct shape. I used 2D reference throughout this project
to refer to it as needed.
Delete the relevant faces at the end of the wing then select the
wing and the fingers together. Use Polygons>combine to make
the objects into one object. Using Edit Polygons>Merge vertices
attach each finger to the wing.
Picture 01 _21
Picture 01 _23
Move the wing into position next to the body. Select the body
and the wing and use Polygons>combine.
Picture 01 _25
Picture 01 _27
Picture 01 _45
Picture 01 _22
32
Tweak the overall shape to suit. Add more splits where the
bones of the wing drop to the points. As this is a cartoon Bat
the anatomy is not accurate so you need to build the wing as
per the reference you are given.
Picture 01 _24
Picture 01 _26
Picture 01 _28
33
Picture 01 _29
Picture 01 _30
34
Look at the model from the back and start to get the areas like
the shoulder to be as close to the reference image as possible.
Change from Single perspective view to Quad view over and
over again.
At this stage you can turn off connect poly shape and mirror
the mesh into a full symmetrical model. Use Polygons>mirror
geometry.
Picture 01 _33
Picture 01 _31
Picture 01 _32
Picture 01 _35
Picture 01 _34
Picture 01 _36
35
Picture 01 _37
Picture 01 _39
Picture 01 _38
Picture 01 _40
36
37
02 _ Stinson
38
39
Starting in Maya create a basic cube. Split the cube around the
centre axis, back to front. You can do this with a loop split or
by hand with the split polygon tool (CTRL + X)
Picture 02 _1
Switch to Quad View and check the shape from all angles. Select
faces and move them as needed.
Picture 02 _2
40
Tweak the shape of the cube into the barrel body of the bird
from the reference image. Stay in vertex mode and work
around the model getting a rough shape.
Picture 02 _3
Select the faces that make up the entire left hand side (as you
are looking at it) of the model. Delete these.
Picture 02 _4
Call the connect poly shape script and mirror the mesh over.
This will need to be turned off and on during the modelling. It
is fine to delete the left half on occasions and simply re-call the
script.
Picture 02 _5
Check the mesh from all sides and tweak if needed. Try to get
as smooth a shape as possible with minimal polygons.
Picture 02 _6
Picture 02 _7
Ensure that the faces arcs around to form the neck. The shape
has to roughly conform to the neck area and you can tweak
it into shape as you move further into the modelling.
Picture 02 _8
41
Using rotate, position the top most face. Each time you extrude
a face you need to rotate the face a little more to form the
curve in the neck.
Picture 02 _9
Picture 02 _11
As you come out at the front of the model decrease the size of
the polygon face. This is where the beak tapers to the end.
Picture 02 _10
42
Picture 02 _12
Picture 02 _13
Picture 02 _15
Picture 02 _14
Picture 02 _16
43
Remove the connect poly shape half of the model and check
around for any odd vertices.
Picture 02 _17
Picture 02 _19
Picture 02 _18
44
Picture 02 _20
Picture 02 _21
Picture 02 _22
Once you have reached the bottom of the leg you can Extrude
backwards then forwards to create the beginning of the toes.
The Bird has a backwards facing toe/claw so do this one first.
Picture 02 _23
Picture 02 _24
45
Rotate and tweak the from face of the foot to make the next
extrusion more accurate.
Picture 02 _25
Picture 02 _26
46
Picture 02 _27
Picture 02 _29
We can leave the feet for now and move back up to the beak.
Select some of the faces underneath the beak and at the top
of the neck. Extrude these out four or five times. Tweak the
individual vertices in to the shape shown. Make the inside slightly
concave as shown.
Picture 02 _31
Picture 02 _28
Picture 02 _30
Picture 02 _32
47
Refine the shape of the beak more. Look at the model from the
side to get the beak profile just right.
Picture 02 _33
Select the group of faces shown. This area will become the eye
socket.
48
Picture 02 _37
Picture 02 _35
Select the faces inside the beak and extrude downwards forming
the area for the tongue to sit. DO the same in the upper portion
of the beak to form the roof of the mouth.
Picture 02 _34
Picture 02 _36
Picture 02 _39
Picture 02 _38
Picture 02 _40
49
Look back to your reference and then review the eye from
several angles.
Picture 02 _41
Picture 02 _42
50
Place the teeth and tongue into the beak and take a look at
the model in perspective mode. Tweak the overall head shape
to suit. This is quite close to the desired look at this stage.
Picture 02 _43
Picture 02 _44
Make another set of teeth to use for the top of the beak. Either
copy the bottom set or load up a new set. Position them in the
beak as shown.
Picture 02 _45
Add more loops around the top of the head where the beak
meets the head. Adjust individual polygons to get a ridge in the
mesh.
Picture 02 _46
The next stage is to create the wings. Select the faces that make
up the shoulder area. Extrude them once then smooth the area
with average vertices. Delete the faces as shown and leave a
gap ready to join the finished wing.
Picture 02 _47
Create a cube and position it next to the gap in the body mesh.
Scale it down to suit. Select the face farthest from the body and
Extrude outwards. Using Move and Rotate create the start of
the wing shape including a joint.
Picture 02 _48
51
Picture 02 _49
Picture 02 _51
Select all the faces that are on the lower side of the wing
structure so far. Extrude these downward several times. Take
some time now using average vertices and tweaking to get the
structure of the wing accurate. The more accurate this portion
is the better the wing will look. Use the images shown here and
the reference images to guide you.
Picture 02 _50
52
Using the Split polygon tool cut more geometry into the wing
to help define the feather shape. Work along each feather and
shape the wing as you go along. Use soft modification when
needed. Keep the triangles down to a minimum or have none
at all if possible.
Picture 02 _53
Keep pulling back from the model and reviewing the overall
shape of the wing against your reference image and against
the body mesh.
Picture 02 _52
Picture 02 _54
Select the body and the wing and combine them. Attach the
wing to the body using a combination of merge vertices and
by creating new polygons.
Picture 02 _55
Check the overall shape of the bird from all angles. Use Soft
modification as needed to refine the shape.
Picture 02 _56
53
Go back to the foot area and select faces on one side. Extrude
out to form the start of a talon or claw. Move, Rotate and
Scale as needed. Make the claw bulbous then taper of to a
point as shown.
Picture 02 _57
Picture 02 _59
Picture 02 _61
Select the faces that form the claw then copy them. Create
a copy and attach it to the foot. Tweak the foot to suit the
reference.
Picture 02 _58
54
Picture 02 _63
At this stage you can try a very simple render to get a feel for
the overall shape. To do this make sure you have saved the
maya file. Create smooth version of your model (Smooth). Add
a basic light and hit RENDER.
Picture 02 _60
Picture 02 _62
Picture 02 _64
55
Some final details. Extrude out some tail feathers as shown. This
image show the smoothed version.
Picture 02 _65
Look at the smooth verison and see if there are any issue in
the mesh that need to be rectified. If so, go back to the saved
unsmoothed version and correct them.
Picture 02 _66
56
Picture 02 _67
Picture 02 _69
Picture 02 _71
Picture 02 _70
Picture 02 _72
Picture 02 _68
57
03 _ Gar y
58
59
Draw the face out until the distance is roughly twice the
height.
Picture 03 _1
Picture 03 _2
60
Picture 03 _3
Select the face at the front of the cube and extrude it outwards.
This will form the bulk of the torso.
Picture 03 _4
Picture 03 _5
Picture 03 _6
Keep checking from all angles to ensure you are getting the
overall bulky shape required for an Elephants body.
Picture 03 _7
Shape the spine and front of the model as shown. The spine is
slightly raised.
Picture 03 _8
61
Remove the mirrored half if needed and refine the leg shape.
Pay special attention to the rear leg and begin to form the
basic shape.
Picture 03 _9
62
Picture 03 _13
Picture 03 _11
Picture 03 _10
Look at the model from all sides in several views to get a feel
for the silhouette.
Picture 03 _12
Start to shape the front and back legs into the basic quadruped
shape as shown.
Picture 03 _15
Picture 03 _14
Picture 03 _16
63
Picture 03 _17
Picture 03 _19
Picture 03 _18
64
Look at the model from all sides in several views to get a feel
for the silhouette.
Picture 03 _21
The next step is to create a trunk and mouth. Select the mouth
area as shown and extrude inwards. Tweak as shown.
Picture 03 _20
The trunk area can be extruded slightly above the new mouth
geometry.
Picture 03 _22
Picture 03 _23
Picture 03 _24
65
Select the front faces on the trunk and extrude out further
using move and rotate after each extrude.
Picture 03 _25
Look at the model from all angles including top down to get the
required shape for the trunk. To aid with UV mapping the trunk
will be created straight instead of hanging down.
Picture 03 _26
66
Picture 03 _27
Tweak the shape of the head a little as the trunk gets larger.
Picture 03 _28
Picture 03 _29
As the trunk reaches full length begin to scale the faces down
with each extrusion.
Picture 03 _30
Picture 03 _31
At the very end of the trunk extrude the nostrils back into the
mesh. Tweak the vertices to get a rounded, bulbous tip. Extrude
a little way into the trunk to give the nostrils some depth.
Picture 03 _32
67
The overall trunk should look like this image with indentations
along the length.
Picture 03 _33
Picture 03 _34
68
Now to add some details to the top of the head extrude a bump
(or small hump) above the eye area. This can be smoothed out
but the effect is to raise the geometry on each side of the head
so dont flatten it out too much with smooth.
Picture 03 _35
Look at the shape of the head from a few angles to get the
core shape right.
Picture 03 _36
Picture 03 _37
Picture 03 _38
Picture 03 _39
Picture 03 _40
69
Next add some detail to the feet. Start with the rear foot.
Picture 03 _41
Picture 03 _42
70
Picture 03 _43
Picture 03 _44
Now select a face at the bottom side of the foot and extrude
out a toe nail. It may take 5 or 6 extrusions to do it and lots
of minor tweaking.
Picture 03 _45
Picture 03 _47
Do this to create all the toes on the foot. Then using Average
Vertices and tweaking to sculpt the foot into the required
shape.
Picture 03 _46
Picture 03 _48
71
Repeat the entire process for the front foot or if you wish select
the front foot and copy it whole. Paste it back in and add it to
the mesh after removing the old foot. Use Combine to join them
back again.
Now work around the whole mesh and selectively add geometry
with either spilt polygon or extrude if needed. Tweak as you
go.
Picture 01 _53
Picture 03 _49
Picture 03 _51
72
Picture 01 _55
Picture 01 _23
Make sure that the shape of the front and rear legs match
your concept. Although there is very little difference in bones
structure the two legs are very unique and need to be correct
against the concept.
Look at the shape of the head from a few angles to get the
core shape right.
Picture 01 _54
Picture 03 _50
Now to add some details to the top of the head extrude a bump
(or small hump) above the eye area. This can be smoothed out
but the effect is to raise the geometry on each side of the head
so dont flatten it out too much with smooth.
Picture 01 _56
Picture 03 _52
73
Delete the faces on the head where the ear will be placed.
Select the Elephant and the ear and Combine them.
Picture 01 _57
Picture 01 _58
74
Picture 01 _59
Picture 01 _61
Picture 01 _63
Picture 01 _60
Picture 01 _62
Picture 01 _64
75
Picture 01 _65
Use a basic poly cube to create the teeth. Start with a cube
extrude out and up into a curved shape as shown. Add more
geometry and shape it into teeth.
Picture 01 _67
Picture 01 _69
Picture 01 _71
Picture 01 _68
Picture 01 _70
Picture 01 _72
Picture 01 _66
76
77
Picture 01 _73
78
79
04 _ Gaston Par t
80
81
Picture 04 _1
Picture 04 _3
Picture 04 _4
Picture 04 _5
Now select the top face and extrude it along the y-axis
Picture 04 _2
82
Picture 04 _7
Picture 04 _6
Picture 04 _8
83
Select the side face between the head and torso. This is the
base
Keep extruding.
Select the face for the eye socket and extrude it.
Picture 04 _13
Picture 04 _9
Picture 04 _15
Picture 04 _11
Picture 04 _12
Add new edges on the front of the face. We will need these
for eye sockets and the mouth cavity.
Picture 04 _14
Select the
inwards.
faces
around
the
mouth
area
and
extrude
Picture 04 _16
Picture 04 _10
84
85
Add new detail to the corner of the mouth. Also add a new
edge
loop that cuts through the eye socket. And tweak it to make
it rounder.
Select the faces at the bottom of the torso. This is the base
character`s leg.
Picture 04 _17
Picture 04 _18
86
Picture 04 _19
Picture 04 _21
Keep extruding until you have a leg that has both bottom and
upper parts .
Picture 04 _20
Picture 04 _22
Picture 04 _23
Picture 04 _24
87
Get back to the leg and add new edge loops to make the
leg
have rounder adding volume. Extrude new faces from the
ankle
Picture 04 _25
Add a new edge loop that starts from the belly area to the
foot.
Picture 04 _26
88
Tweak
form.
Picture 04 _27
Add new edge loops on the side of the head. Select new
faces and extrude them to create the ear.
Picture 04 _28
Turn your camera to the front and add more detail at the
front
side of the ear.
Picture 04 _29
Now you need to add more detail around the eyes. Also
create a sphere and place it properly in the eye socket.
This is important to create good looking eye socket and
eye lids
Picture 04 _30
Now tweak the eye area to fit over the sphere properly.
Picture 04 _31
Picture 04 _32
89
Picture 04 _33
Picture 04 _35
Picture 04 _34
90
Picture 04 _37
Picture 04 _36
Picture 04 _38
Picture 04 _39
Tweak the vertices to give the lips fuller form. Also flow of the
edges around the mouth should be as uniform as possible.
Picture 04 _40
91
Picture 04 _41
Picture 04 _42
92
Picture 04 _43
Picture 04 _44
Picture 04 _45
Move your camera back and review the teeth and gums.
Look for visual issues. Do they fit right, are they proportional,
is the curvature of the teeth and gums right, etc.
Picture 04 _47
Select your model. Add detail around the lips by adding edge
loops.
Picture 04 _46
Picture 04 _48
93
Picture 04 _49
Picture 04 _51
Picture 04 _50
94
95
05 _ Pi Par t
96
97
We start with a cube. After creating the cube delete the face
that is on the x axis of the scene.
Picture 05 _1
Picture 05 _3
Picture 05 _2
98
Picture 05 _5
Add one edge loop that cuts through the side of the model.
And apply average vertices to smooth it down little bit.
Picture 05 _4
Picture 05 _6
Picture 05 _7
Picture 05 _8
99
Picture 05 _9
Picture 05 _10
100
Picture 05 _11
Now we can start adding the claw. Select the face at the
bottom of the leg that is facing front.
Picture 05 _13
Picture 05 _12
Picture 05 _14
Picture 05 _15
For the back part of the claw select the back face and split
in
two. Extrude one of the faces as you did with front piece.
Once you have a compelling shape, seperate the finished toe
and duplicate it. Move to the side and place it very close to
the
Picture 05 _16
101
Tweak the details around the claw and toes to give it a rounder
look.
Picture 05 _17
Picture 05 _19
Picture 05 _21
Picture 05 _23
Picture 05 _20
Picture 05 _22
Picture 05 _24
Now add more edges to the sides and edge loops to the
top of the toes.
Picture 05 _18
102
103
Start adding edge loops and more details until you have
enough faces that you can use for the bases of feathers.
Select
faces that look down and start extruding them one by one
to create the basic shapes of the feathers. We are focusing on
Picture 05 _29
Picture 05 _25
104
Picture 05 _31
Picture 05 _27
Select all the faces and extrude the basic wings shape.
Add Edge loops that cut through the thin side of the wing
Picture 05 _30
Picture 05 _26
Make sure the ends of the feathers have a good pointy tip
feel.
Picture 05 _32
Picture 05 _28
105
Picture 05 _33
Picture 05 _34
Picture 05 _35
106
Picture 05 _36
Once you have attached the beak you can start adding details
to the head. First thing is to define where the eyes are. Since
this is an owl , eyes are on the front of the head. Select the
polygon in the front of the head and extrude inward. At this
point smooth subdivide your model to get more detail and
makes the forms smoother.
Picture 05 _37
Picture 05 _39
Now you will attach the beak to the head. The beak does
not need to be merged with the model at this point.
Picture 05 _38
Picture 05 _40
107
Select the faces on the side of the head and extrude them one
by one to get the feathers on the side.
Picture 05 _41
Picture 05 _42
108
Turn your view and move down the back of the torso. Select
the faces and extrude them for the tail.
Picture 05 _43
Picture 05 _44
Create a sphere primitive and put them into the eye sockets.
Picture 05 _45
Before final smoothing make sure that all the objects that need
to be attached to the body are merged properly like the
wings.
Picture 05 _46
Picture 05 _47
Picture 05 _48
109
110
111
07 __Spider
05
Amanda
Par
Par
t t
112
113
Start with a cube and delete the face that is closest to the origin
of the scene
Picture 07 _1
Mirror it.
Scale the edge loops up from the last operation. Move the edge
loop towards the front of the head.
Picture 07 _3
Picture 07 _5
Check out the below picture to see how it should look from side.
The loops are parallel to eachother.
Picture 07 _2
114
Picture 07 _4
Picture 07 _7
Now add more edge loops to the neck area. Tweak until you
have a rough body shape that is close to the design.
Picture 07 _6
Picture 07 _8
115
First add edge loops to the mouth area. Now select the faces
that will the be the mouth opening and extrude them inward.
Extrude and tweak until the shape of the mouth is satisfying.
Picture 07 _9
Picture 07 _11
Check it out from the side view and make sure that the edge
of
the mouth goes half way to the head.
Picture 07 _13
Now to create a better ring loop around the mouth use the
knife tool.
Picture 07 _15
Mirror your model and check out the head and mouth
from multiple angles. You should have clean rings and a rough
form.
Picture 07 _10
116
Picture 07 _12
Picture 07 _14
Picture 07 _16
117
Picture 07 _17
Now create edge loops that will split eye sockets from both
directions. Select the neighbouring faces and extrude them.
Picture 07 _19
Select the faces on the front of the head and extrude them to
form eye sockets.
Picture 07 _18
118
Picture 07 _21
Picture 07 _23
Mirror and merge your model. Since the spider has eyes in
the middle,. you need to have the both sides to be able to form
those shapes properly.
Picture 07 _20
Picture 07 _22
Picture 07 _24
119
Add more edge loops and use average vertices to smooth your
form. Make sure that the bases for the eye sockets are as
circular as
possible.
Picture 07 _25
Now select the faces of the first group of the eye sockets and
extrude them and tweak them until you have proper sockets.
Picture 07 _27
Picture 07 _26
120
Picture 07 _29
Apply similar steps to the front sockets to create holes that can
be used to hold a round eye sphere.
Picture 07 _28
Picture 07 _30
Picture 07 _31
Picture 07 _32
121
Undo.
Picture 07 _33
You can make the last extrusion outward with this one. Since
the eye is so small you can use it to as a replacement
for a sphere.
Picture 07 _35
Picture 07 _34
122
Picture 07 _36
Picture 07 _37
Picture 07 _38
Picture 07 _39
Make sure that they sit right in the holes. You can tweak the
lids to create a better grasp around the spheres.
Picture 07 _40
12 3
Picture 07 _41
Picture 07 _43
Picture 07 _45
Duplicate and place them at the tip. Make sure that they have
different scales and rotations.
Picture 07 _42
124
Picture 07 _44
Picture 07 _47
Duplicate the leg with spikes and place them near the body.
Picture 07 _46
Picture 07 _48
125
Picture 07 _49
Delete the top faces that are facing toward the body from the
legs. Now use append polygon and vertex snapping to create
merging faces.
Picture 07 _51
Delete the corresponding faces from the body. Add new edge
loops to add more detail. Tweak the holes so that they are
pretty close to the shape of the upper parts of the legs. You
need to make sure that they have the same number of vertices
on both sides. Otherwise you would create alot of uneven
merged parts and polygons which is undesired.
Picture 06 _56
Picture 07 _50
126
Picture 07 _52
Picture 07 _54
127
03
UVMapping
Par t
01 _Uv Mapping
a Character in Maya
Picture 01 _2
4_ Switch to the Front view and select the Owl. In the Planar
Projection Options, click Project. The UVs in the UV Texture Editor
should now look like Figure 4. Now the Owl UVs are a single
UV shell. (Picture 01_4)
Picture 01 _5
Picture 01 _4
Picture 01 _1
Picture 01 _6
Picture 01 _7
Switch to the Rendering menu set. Select the Owl and choose
Lighting/Shading > Assign New Material > Lambert.
(Picture 01_5)
6_ In the Attribute Editor that opens, click the checker box next
to Color. (Picture 01_6)
7_ In the Create Render Node window that opens, click on File.
This will create a File texture node and connect it to the color
attribute of the Lambert shader. (Picture 01_7)
131
Picture 01 _11
Picture 01 _14
Picture 01 _12
Picture 01 _10
Picture 01 _13
11_ Now, in the UV Texture Editor, click the Cut UVs button.
(Picture 01_11)
12_ Also check the View Texture Borders button. (Picture 01_12)
13_ Now the seam shows up thicker on the Owl. (Picture 01_13)
132
133
16_ Now, let's separate the wings into two pieces-front and back.
We will do this with the help of a very useful command: Select
Contiguous Edges. Select an edge on the crest of the wing and
choose Edit Polygons > Selection > Select Contiguous Edges.
I recommend creating a Shelf button for this command.
(Picture 01_16)
Picture 01 _17
Picture 01 _18
Picture 01 _20
Picture 01 _16
Picture 01 _19
Picture 01 _21
135
Picture 01 _23
Picture 01 _25
27_ Press the Align UVs Left button. This aligns all selected UVs
vertically with the leftmost UV in the selection. (Picture 01_27)
Picture 01 _27
Picture 01 _22
Picture 01 _24
Picture 01 _26
137
Picture 01 _29
Picture 01 _31
Picture 01 _34
Picture 01 _33
30_ Open the Unfold UVs option box and set the options to how
they appear in Picture 01_30. Hit apply.
Picture 01 _30
Picture 01 _32
Picture 01 _35
138
139
36_ Similarly to the wings, reproject the bottoms of the feet. First
separate the bottoms of the feet from the tops of the feet, so
they are easier to select. Then go to Face selection mode in the
UV Texture Editor, select the faces for the bottoms of the feet and
do a Planar projection from the bottom view.
Picture 01 _37
Picture 01 _39
Picture 01 _40
Rescale the feet UVs so that the checkers are approximately the
same size as they are on the body. (Picture 01_36)
Picture 01 _36
Picture 01 _38
Picture 01 _41
37_ Now reproject the tops of the feet from the top view. Rescale
the UVs again to match the size of the checkers.
(Picture 01_37)
38_ Following the procedure outlined in the last five steps,
reproject the feathers on top of the Owl's head from the front
view and the back view. Rescale appropriately. (Picture 01_38)
39_
140
41_ We are finally ready to move all the UV shells into the
upper left quadrant and finalize our UV map. Luckily, there is a
command in Maya that will help us do this quickly and easilyLayout UVs.
Select the Owl in Object mode and, in the UV Texture Editor,
choose Polygons > Layout UVs > Options. Set the options to what
they are in Figure 41 and hit Apply. (Picture 01_41)
141
42_ All the UV shells should now fit neatly into the 0 to 1 texture
space. Feel free to press the Apply button several times-you will
get different results every time. Find the layout you like!
Picture 01 _43
45_ The UVs have now been exported to an image file and the
texturing process can begin. (Picture 01_45)
Picture 01 _45
When you are satisfied with the layout, select all the UVs and
scale them down slightly. This way there will be a small border
between the edge of the texture map and the UV shells.
(Picture 01_42)
43_ We are finished UV Mapping! Take a final look at the Owl.
Notice that all the checkers are square and approximately
the same size. This means that this is a good UV map with no
significant texture stretching.
Open the file owlUVs.ma to see the finished UVs on the Owl.
(Picture 01_43)
44_ The last step in the UV mapping process is to export the UVs
to an image file, so that textures could be painted underneath
the UVs in your favorite graphics application.
Select the Owl in Object mode. In the UV Texture editor, choose
Polygons > UV Snapshot.
Set the Options to approximately as they appear in Picture
01_44 depending on the setting you prefer, and hit OK.
Picture 01 _42
142
Picture 01 _44
143
144
14 5
04
Textur ing
Par t
_Regis Part
_Gary Part
_Pi Part
_Oscar Part
_Amanda Part
_Stinson Part
_Gaston Part
01 _ Regis Par t
0 1.1 _Bat
In Maya, select the body of the bat and go to Window>UV
Texture Editor Picture 01.1 _1.
Picture 01.1 _1
Picture 01.1 _2
150
Invert the color of the layer ( Ctrl+i ) and set the blending mode
to Multiply > Picture 0 1.1 _8.
Picture 01.1 _3
Picture 01.1 _5
Picture 01.1 _7
Picture 01.1 _4
Picture 01.1 _6
Picture 01.1 _8
151
With a smooth brush, paint a soft area around the eyes and
nose with the same color you used in these areas
Picture 0 1.1 _12 and Picture 0 1.1 _13.
Paint the area of the legs with a darker gray ( #888784 ) >
Picture 0 1.1 _14 and Picture 0 1.1 _15.
Use the opacity of the layer to make it more or less visible >
Picture 0 1.1 _9.
Picture 01.1 _9
Paint the main areas of the body with the predominant color of
each area. Remember to keep each area on a separate layer.
On the bat, lets paint these parts with the following colors:
lips - #6b6a69
eyes and nose - #5c5b5a
tip of the wings - #575655
ears - #d6b69c
inside the mouth - #c79191
front part of the wings - #b7b6b5
Picture 0 1.1 _10 Picture 0 1.1 _11.
152
153
Apply a strong gaussian blur on these layers > Picture 0 1.1 _18.
and Picture 0 1.1 _19.
Apply the Pattern Overlay effect on the belly layer. Set the Blend
mode to Color Burn. Select the clouds pattern. Change the scale
and opacity as you wish > Picture 0 1.1 _20 and Picture 0 1.1 _21.
Apply an Outer Glow effect on the stripes. Set the blend mode
to Normal and select a desaturated red ( #cc9999 ). Adjust the
color as you wish. Then apply a Bevel and Emboss effect. Set
the Depth to 1%, the size to 5 px and the Soften to 3 px > Picture
0 1.1 _23 , Picture 0 1.1 _24 and Picture 0 1.1 _25.
On a new layer, paint a brown ( #998282 ) area around the
ear > Picture 0 1.1 _26.
Apply the Pattern Overlay effect on the wings layer. Set the
Blend mode to Color Burn. Select the clouds pattern. Change the
scale and opacity as you wish > Picture 0 1.1 _27.
Paint a red ( #d57f93 ) area on he belly and adjust the layer
opacity to have a very light effect > Picture 0 1.1 _28.
With a very dark red ( #6f555c ) paint the bone area on the
wings > Picture 0 1.1 _29.
Apply the Pattern Overlay effect on the new layer. Set the Blend
mode to Soft Light. Select the wrinkle pattern. Change the scale
and opacity as you wish > Picture 0 1.1 _30.
15 4
155
15 6
157
Select the layer with the tip of the wings and apply a Pattern
Overlay effect. Set the Blend mode to Soft Light. Select the metal
landscape pattern >
Now create a new layer and paint the torso, ears and wings
areas with a solid color. Set the fill of the layer to 0% and apply
a Pattern Overlay effect on it. Set the Blend mode to Soft Light.
Select the clouds pattern. Change the scale and opacity as you
wish > Picture 0 1.1 _32 and Picture 0 1.1 _33.
Picture 01.2 _1
Picture 01.2 _3
Some areas will not have a bump effect and, because of that,
we can remove the layers related to these areas.
In this case we'll remove the face features and lips ( but keep the
basic color ), the inside part of the mouth, the light color of the
wings and the basic color of the ear > Picture 0 1.2 _3.
Picture 01.1 _32
Picture 01.2 _2
A thing that makes the bump map creation easiest is the number
of layers. Merge the layers you created for some areas. You
may use the shortcut Ctrl+E to merge layers > Picture 0 1.2 _4.
Desaturate the layers to have a PB image. You can do it on
the entire image ( go to Image > Mode > Grayscale ) or layerby-layer ( press Ctrl+Shift+U to desaturate the layer ) > Picture
Picture 01.2 _4
0 1. 2 _Bat Bump
The bump map is a black and white image that defines which
area is raised and which is not.
We'll use the color map as base to create the bump map, so the
bump effect matches the color. Open the color file >
Picture 0 1.2 _1.
Fill the background of the texture with a black color (#000000)
> Picture 0 1.2 _2.
158
159
0 1.2 _5.
Use adjustment layers of levels to contrast each part of the
image to create the final bump texture. You can paint some
areas to have a different result. In this case, some areas around
Picture 01.2 _5
Picture 01.2 _6
160
161
02 _ Elephant Par t
162
163
0 2.1 _Elephant
In Maya, select the body of the elephant and go to Window>UV
Texture Editor Picture 02.1 _1.
Picture 02.1 _1
Invert the color of the layer ( Ctrl+i ) and set the blending mode
to Multiply > Picture 02.1 _8.
Picture 02.1 _5
Picture 02.1 _3
Picture 02.1 _7
Picture 02.1 _4
Picture 02.1 _8
Picture 02.1 _6
165
Paint the main areas of the body. Use a dark blue ( #5e78a7
) to paint the legs, belly, tail and the tip of the trunk. Paint the
inside part of the mouth with a light brown ( #af6c5f ). With a
dark brown ( #7a6d72 ), paint each nail > Picture 02.1 _10. and
Picture 02.1 _11.
Picture 02.1 _11
With a darker blue ( #af6c5f ), paint the eye area and the
part above the head. Use the same color to paint the stronger
wrinkles on the trunk > Picture 02.1 _12 and Picture 02.1 _13.
Picture 02.1 _9
Use the same dark blue ( #af6c5f ) to paint the trunk and use
the layer opacity to define a subtle result > Picture 02.1 _14.
Duplicate the layer where you painted the lips and apply a
gaussian blur on it. This will give a smooth area around the lips
> Picture 02.1 _15.
Picture 02.1 _15
Select a dark blue ( #4f6385 ) and paint the area of the back
> Picture 02.1 _16.
Apply the Pattern Overlay effect on the backlayer. Set the Blend
mode to Soft Light. Select the clouds pattern. Change the scale
and opacity as you wish Picture 02.1 _17 and Picture 02.1 _18.
Select a pink tone ( #ffa8aa ) and paint the belly area and
the trunk bottom area. Use the layer opacity to define the final
result > Picture 02.1 _19.
166
167
168
Apply the Pattern Overlay effect on the new layer. Set the Blend
mode to Soft Light. Select the clouds pattern. Change the scale
and opacity as you wish Picture 02.1 _20 and Picture 02.1 _21.
Apply the outter glow effect on the nails layer. Select a very
dark blue ( #1d3351 ). Set the Blend mode to normal >
Picture 02.1 _22 and Picture 02.1 _23.
169
Apply the Pattern Overlay effect on the pink area of the ear. Set
the Blend mode to Soft Light. Select the clouds pattern. Change
the scale and opacity as you wish > Picture 02.1 _25.
Now create a new layer and paint the torso, ears and head
areas with a solid color. Set the fill of the layer to 0% and apply
a Pattern Overlay effect on it. Set the Blend mode to Soft Light.
Select the clouds pattern. Change the scale and opacity as you
wish > Picture 02.1 _26 and Picture 02.1 _27
Right click on the layer and select "Group into New Smart
Object" > Picture 02.1 _28.
Apply a gaussian blur filter on the result layer > Picture 02.1
_29.
0 2 . 2 _Elephant Bump
The bump map is a black and white image that defines wich
area is raised and which is not.
We'll use the color map as base to create the bump map, so the
bump effect matches the color. Open the color file >
Picture 02.2 _1.
Fill the background of the texture with a black color (#000000)
> Picture 02.2 _2.
Some areas will not have bump effect and, because of that, we
can remove the layers related to these areas.
In this case we'll keep just the lips, the trunk, the ears stripes, the
dark area on the back and the nails> Picture 02.2 _3.
A thing that makes the bump map creation easiest is the number
of layers. Merge the layers you created for some areas. You
may use the shortcut Ctrl+E to merge layers >Picture 02.2 _4.
170
171
Picture 02.2 _1
Picture 02.2 _3
Picture 02.2 _2
Picture 02.2 _4
Picture 02.2 _6
Picture 02.2 _8
172
173
03 _ Owl Par t
174
175
0 3.1 _Owl
In Maya, select the body of the owl and go to Window>UV
Texture Editor > Picture 03.1 _1.
176
Picture 03.1 _1
Picture 03.1 _3
Picture 03.1 _2
Picture 03.1 _4
Picture 03.1 _6
Picture 03.1 _8
17 7
Use the opacity of the layer to make it more or less visible >
Picture 03.1 _9.
Now paint the stripes on the wings and tail. Use a dark yellow
( #a3970b ), a dark gray ( #585865 ) and a pure white ( #fffff
) > Picture 03.1 _14.
With a very dark brown ( #4b4340 ), paint the legs and feet
then select a dark gray ( #585865 ) and paint the nails >
Picture 03.1 _15.
Picture 03.1 _15
Picture 03.1 _9
178
Apply the Pattern Overlay effect on the belly layer. Set the Blend
mode to Soft Light. Select the clouds pattern. Change the scale
and opacity as you wish > Picture 03.1 _16. and Picture 03.1 _17.
Still on the Layer Style window, apply the Inner Glow effect.
Change the Blend Mode to Normal, set the color to a light green
tone ( #a7a741 ) and change the size to give more volume to
the belly > Picture 03.1 _18 anda Picture 03.1 _19.
179
180
Apply the Pattern Overlay effect on the legs layer. Set the Blend
mode to Soft Light. Select the metal landscape pattern. Change
the scale and opacity as you wish Picture 03.1 _20 and
Picture 03.1 _21.
Apply the Pattern Overlay effect on the back layer. Set the Blend
mode to Soft Light. Select the clouds pattern. Change the scale
and opacity as you wish Picture 03.1 _22 and Picture 03.1 _23.
181
Picture 03.2 _1
Picture 03.2 _2
182
Picture 03.2 _5
Picture 03.2 _7
Picture 03.2 _6
Picture 03.2 _8
Picture 03.3 _3
Picture 03.4 _4
183
Picture 03.2 _9
18 4
185
Picture 03.3 _1
Picture 03.3 _3
A thing that makes the bump map creation easiest is the number
of layers. Merge the layers you created for some areas. You
may use the shortcut Ctrl+E to merge layers > Picture 03.3 _4.
Picture 03.3 _2
Picture 03.3 _4
186
Picture 03.3 _6
187
04 _ Oscar Par t
188
189
0 4.1 _Rhino
In Maya, selec the body of the rhino and go to Window>UV
Texture Editor > Picture 04.1 _1.
Picture 04.1 _1
Picture 04.1 _7
Invert the color of the layer ( Ctrl+i ) and set the blending mode
to Multiply > Picture 04.1 _8.
Picture 04.1 _2
190
Picture 04.1 _4
Picture 04.1 _6
Picture 04.1 _8
191
Select the area around the horn and fill it with a gradient from
a dark color ( #636173 ) to a lighter one ( #b9b5c8 ) >
Picture 04.1 _14 and Picture 04.1 _15.
Use the opacity of the layer to make it more or less visible >
Picture 04.1 _9.
Picture 04.1 _9
Paint the main areas of the body with the predominant color of
each area. Remember to keep each area on a separate layer.
Paint the legs and feet with a dark desaturated blue ( #5b6072
). Select a lighter tone of this color ( #62677b ) and paint the
eyes area and nose. Use an even lighter tone ( #6e748a ) to
paint the tip of the tail and the inside part of the ears. Use a
light violet ( #ad9bae ) to paint the belly. With a darker tone of
this violet ( #695e6f ) paint the lips and the inside part of the
mouth > Picture 04.1 _10 and Picture 04.1 _11.
192
193
Apply the Pattern Overlay effect on the horn layer. Set the Blend
mode to Color Dodge. Select the clouds pattern. Change the scale
and opacity as you wish > Picture 041 _16 and Picture 04.1 _17.
194
On the base of the horn and above the lips, paint a smooth
area with a dark and desaturated blue ( #777d93 ) > Picture
04.1 _18 and Picture 04.1 _19.
Apply the Pattern Overlay effect on the layer. Set the Blend
mode to Soft Light. Select the wrinkles pattern. Change the scale
and opacity as you wish > Picture 04.1 _22 and Picture 041_23
195
Open the blending options of the ears layer and apply the
Gradient Overlay effect. Set the first color to a dark blue
( #3d3a52 ) and the second to a light blue ( #c9c6d8 ) >
Picture 04.1 _24 and Picture 04.1 _25.
196
Still on the Layer Style window, add the Inner Glow effect. Set
the Blend mode to normal. Select a solid color ( #5d5875 ) and
add some noise to it > Picture 041 _26 and Picture 04.1 _27
Using a light blue color ( #a2a6b5 ) paint the area around the
ears > Picture 04.1 _28.
With a dark blue color ( #64697d ) paint the tip of the ears
> Picture 04.1 _29. Apply the Pattern Overlay effect on the belly
layer. Apply the Pattern Overlay effect on the belly layer. Set the
Blend mode to Color Burn. Select the clouds pattern. Change the
scale and opacity as you wish > Picture 04.1 _30 and Picture
04.1 _31.
197
We'll use the color map as our base to create the bump map,
so the bump effect matches the color. Open the color file >
Picture 04.2 _1.
Fill the background of the texture with a black color
( #000000 ) > Picture 04.2 _2.
Picture 04.2 _4
Picture 04.2 _6
Some areas will not have our bump effect and, because of that,
we can remove the layers related to these areas.
In this case we'll remove the inside part of the mouth, the head
details ( eyes, nostrils etc... ), the tail and the pink part of the
belly> Picture 04.2 _3.
Picture 04.2 _3
Picture 04.2 _5
Picture 04.2 _7
One thing that makes the bump map creation easiest is the
number of layers. Merge the layers you created for some
areas. You may use the shortcut Ctrl+E to merge layers >
Picture 04.2 _4.
Desaturate the layers to have a grayscale image. You can do
it on the entire image ( go to Image>Mode>Grayscale ) or layerby-layer ( press Ctrl+Shit+U to desaturate the layer ) > Picture
04.2 _5.
198
199
05 _ Amanda Par t
200
201
0 5.1 _Spider
In Maya, select the body of the spider and go to Window>UV
Texture Editor > Picture 05.1 _1.
Picture 05.1 _1
Picture 05.1 _7
Invert the color of the layer ( Ctrl+i ) and set the blending mode
to Multiply > Picture 05.1 _8.
Create a new layer below and fill it with a desaturated red
color ( #9d5768 ).
Picture 05.1 _2
202
Picture 05.1 _4
Picture 05.1 _6
Picture 05.1 _8
203
204
Select a dark red tone ( #72172d ) and paint the wires on the
top of the head and on the back of the spider > Picture 05.1 _12.
and Picture 05.1 _13.
Picture 05.1 _9
205
Select the dark brown tone again ( #5c4448 ) and paint the
area around each eye. With a light red tone ( #a55b66 ), paint
the four reliefs near the eyes > Picture 05.1 _16 and
Picture 05.1 _17.
206
Paint the lips with a purple tone ( #895d6e ) and the inside part
of the mouth with a dark purple tone ( #67384b ) >
Picture 05.1 _18. and Picture 05.1 _19.
Select a very dark brown color ( #302224 ) and paint the tip
of the legs > Picture 05.1 _20. and Picture 05.1 _21.
207
208
blend mode to normal and set the solid color to a dark purple
( #734e5c ). On the same layer, apply a pattern overlay effect.
Set the blend mode to Soft Light and select the wrinkles pattern
> Picture 05.1 _28 , Picture 05.1 _29 and Picture 05.1 _30.
Now create a new layer and paint the torso and leg areas
with a solid color. Set the fill of the layer to 0% and apply a
Pattern Overlay effect on it. Set the Blend mode to Soft Light.
Select the clouds pattern. Change the scale and opacity as you
wish > Picture 05.1 _31 and Picture 05.1 _32
Picture 05.1 _31
209
We'll use the color map as a base to create the bump map, so
the bump effect matches the color. Open the color file >
Picture 05.2 _1.
Picture 05.2 _4
Picture 05.2 _6
Picture 05.2 _2
Picture 05.2 _5
A thing that makes the bump map creation easiest is the number
of layers. Merge the layers you created for some areas. You
may use the shortcut Ctrl+E to merge layers > Picture 05.2 _4.
Picture 06.3 _1
210
211
06 _ Stinson Par t
212
213
Picture 06.1 _3
Picture 06.1 _7
Picture 06.1 _5
0 6.1
In Maya, select the body of the tucan and go to Window>UV
Texture Editor Picture 06.1 _1.
Picture 06.1 _1
Invert the color of the layer ( Ctrl+i ) and set the blending mode
to Multiply Picture 06.1 _8.
Picture 06.1 _2
Picture 06.1 _4
Picture 06.1 _8
Picture 06.1 _6
214
215
Create a new layer below and fill it with a light red color (
#d93a1f ).
Paint the head areas with its predominant color: the beak
with yellow ( #e1a40b ), the area over the beak with a darker
yellow ( #bb8c41 ), the eye area with gray ( #9f7979 ), the stoke
of eye area with a dark red ( #980707 ) and the inside part of
the mouth with a light red ( #c68080 ) Picture 06.1 _15. , Picture
06.1 _16.
Picture 06.1 _15
216
217
Select a yellow tone ( #e2c30b ) and paint the feet and the
begining of the legs. Use a darker tone ( #ac933a ) to paint the
bottom part of the feet Picture 06.1 _17. , Picture 06.1 _18.
Picture 06.1 _17
218
Use a dark red ( #b41710 ) to paint the top front part of the
wings Picture 06.1 _19. , Picture 06.1 _20.
Picture 06.1 _19
219
Select the layer you painted the area over the beak and apply
an Inner Glow effect. Change the blend mode to normal and set
the solid color to black ( #000000 ). On the same layer, apply a
pattern overlay effect. Set the blend mode to Normal and select
the wrinkles pattern Picture 06.1 _25. , Picture 06.1 _26. , Picture
06.1 _27.
On the beak layer, apply a pattern overlay effect. Set the blend
mode to Screen and select the clouds pattern Picture 06.1 _28. ,
Picture 06.1 _29.
Select the layer for the gray eye area and apply an Inner
Glow effect. Set the blend mode to normal and select a solid
dark red ( #790000 ) Picture 06.1 _30. , Picture 06.1 _31.
220
221
Now create a new layer and paint the torso and wing areas
with a solid color. Set the fill of the layer to 0% and apply a
Pattern Overlay effect on it. Set the Blend mode to Soft Light.
Select the clouds pattern. Change the scale and opacity as you
wish Picture 06.1 _32. , Picture 06.1 _33.
Picture 06.1 _32
0 6.2 _Bump
The bump map is a black and white image that defines which
area is raised and which is not.
We'll use the color map as a base to create the bump map, so
the bump effect matches the color. Open the color file
Picture 06.2 _01.
Some areas will not have a bump effect and, because of that,
we can remove the layers related to these areas.
In this case we'll remove the feet and the yellow part of the
leg, the eye area and the brown area near the beak Picture
06.2 _03.
222
22 3
07 Gaston Par t
224
225
Picture 07.1 _3
Picture 07.1 _5
Picture 07.1 _7
0 7.1
In Maya, select the body of the Gaston and go to Window>UV
Texture Editor Picture 07.1 _1.
Picture 07.1 _2
Invert the color of the layer ( Ctrl+i ) and set the blending mode
to Multiply Picture 07.1 _8.
Double click on the Background layer. This will open a window
to change the name and other properties of the layer. Click
"Ok". This will unlock the layer and let you modify this layer
Picture 07.1 _6. , Picture 07.1 _7.
Picture 07.1 _6
Picture 07.1 _8
226
227
Paint the main areas of the body with the predominant color
of each area. Remember to keep each area on a separate
layer. Paint the area around the eyes with a dark blue color (
#233e52 ), the lips with a little darker tone ( #2a4050 ), the inside
part of the mouth with a dark purple ( #92586c ), a light beige
( #ceb792 ) on the hand nails and a dark brown ( #45413b ) on
the feet nails Picture 07.1 _12. , Picture 07.1 _13.
Create some blue ( #3f596e ) stains on the head, arms and back
Picture 07.1 _14. , Picture 07.1 _15.
Picture 07.1 _14
Picture 07.1 _9
228
229
Paint the belly area with a light beige ( #d7bd91 ). Use a much
lighter tone ( #f8e3c1 ) to paint the area near the mouth and a
redish tone ( #d79891 ) to paint the bottom part of the belly
Picture 07.1 _20 , Picture 07.1 _21.
2 30
Paint the palm of the hands with a dark brown color ( #6b6459)
Picture 07.1 _22 , Picture 07.1 _23.
2 31
Use the same dark brown color ( #6b6459 ) to paint the legs
and feet Picture 07.1 _24 , Picture 07.1 _25.
Picture 07.1 _24
Paint the inside part of the ears with a red tone ( #964e59)
Picture 07.1 _26 , Picture 07.1 _27.
Picture 07.1 _26
In the area around the eyes, paint the area near the eyes
with a black color ( #000000 ) and some details around the
eyes with a lighter blue ( #344e60 ) and with the Dodge tool
Picture 07.1 _28.
2 32
On the hands nails layer, apply an Outer Glow effect. Set the
blend mode to normal and set the solid color to a dark brown
( #4c463d ) Picture 07.1 _29. , Picture 07.1 _30.
2 33
On the hand nails layer, apply an Outer Glow effect. Set the
blend mode to normal and set the solid color to a very dark
brown ( #24221e ) Picture 07.1 _31. , Picture 07.1 _32.
Picture 07.1 _31
Select the layer of the inside part of the mouth, apply an Inner
Glow effect. Set the blend mode to normal and set the solid color
to a dark blue ( #2d4252 ) Picture 07.1 _33. , Picture 07.1 _34.
Picture 071 _33
Open the blending options of the lips layer and apply the Inner
Glow effect. Set the blend mode to normal and the solid color
to a dark blue ( #1d394b ). Still on the Layer Style window, add
the Pattern Overlay. Set the Blend mode to Soft Light and select
the wrinkles pattern Picture 07.1 _35. , Picture 07.1 _36. , Picture
07.1 _37.
Now create a new layer and paint the torso, arms and legs
area with a solid color. Set the fill of the layer to 0% and apply
a Pattern Overlay effect on it. Set the Blend mode to Soft Light.
Select the clouds pattern. Change the scale and opacity as you
wish Picture 07.1 _38. , Picture 07.1 _39.
Picture 07.1 _32
234
2 35
A thing that makes the bump map creation easiest is the number
of layers. Merge the layers you created for some areas. You
may use the shortcut Ctrl+E to merge layers 07.2 _04.
Picture 07.2 _04
0 7.2 _Bump
The bump map is a black and white image that defines which
area is raised and which is not.
Some areas will not have a bump effect and, because of that,
we can remove the layers related to these areas.
We'll use the color map as a base to create the bump map, so
the bump effect matches the color. Open the color file
08.2 _01.
In this case we'll remove the blue back area, the belly colors,
the dark brown area on the legs and feet, the inside part of
the mouth and nails 07.2 _03.
2 36
2 37
05
Rigging
Par t
00 _Introduction
14 _Additional stuff
01 _Preparing model
02 _Placing bones
NN - Finalizing
03 _Control Icons
04 _Spine Rig
05 _Tail Rig
06 _Leg Rig
07 _Foot Rig
08 _Arm Rig
09 _Hand Rig
10 _Connection Between Rig Modules
11 _Body Skin Binding
12 _Addional Deformation Pass
13 _Facial Rig
00 _INTRODUCTION
The job of a 3d animator wouldn't be possible without prior
study of the characteristics that will form part of the character
and of course the relative setup for the animation. Preparing
a character setup for animation is the role of a character
setup artist, also named a "Rigger" or Character/Creature TD
(Technical Director).
As a Rigger, it's important to work very closely with the modelers
to check the correct number of edge loops in critical junctions
and to make the applicable changes for deformations to work
properly on the geometry of the character.
In this chapter the main problematic variables in the development
of a character setup will be analyzed, as well as methods which
may alleviate these problems, and allow for a way in which
to acquire greater versatility in adapting to different types of
extreme positions.
This will include making the rig more robust as well as ensuring
that all the module pieces work fine and connect properly.
THE G OA L
Picture 00 _2
Picture 00 _3b
Setting the work flow is more useful than estimated. I often use
the Hotbox to switch between tools and to switch off a few
unnecessary items (e.g. help bar and status line) as this increases
your working time.
This you a bigger viewport size and your mind is focused on
your rig.
Another preferred suggestion is to set the Maya Project folder
before starting anything.
or to Set a Project:
File ---> Project ---> Set (and choose the path)
(Picture 3-3b)
Picture 00 _3
241
Picture 00 _4
for
for
for
for
geometry;
group;
locators;
joint,
Picture 00 _8
CUSTOM SHELVES
NAM I N G C O N V E N T I O N S
To move or rotate a selected object press "w" (move shortcut
key) or "e" (rotate shortcut key). To change between world or
local transformation hold the relative keyboard key, click and
hold LMB on your object and use the mouse to change the
object type
I recommend that you use a very short name for your object,
but not too short such as "ff_ff_rt_ctl" .
Naming conventions for the character prefix used in this book:
BT00 = BAT Character;
BD00 = Bird Character;
EL00 = Elephant Character;
GA00 = Gaston Character;
OW00 = Pi_Owl Character;
RA00 = Rabbit Character;
RH00 = Rhino Character;
SP00 = Spider Character;
242
Picture 00 _9
To do this:
double click on the name of your geometry in the channel box
(top on the right) and rename it.
Or you can automatically add a prefix for all selected objects if
you press the space bar to use the Hotbox and then.
Modify ---> Prefix Hierarchy Names ---> than enter a prefix
with underscore and press ok (Picture 00_6)
Picture 00 _6
S PAC E A N D C O O R D I N AT E SYS T E M A X I S
Gimbal Lock
Picture 00 _11
Picture 00 _7
Gimbal Lock is an issue that occurs when two rotation axis' are
pointing in the same direction, making it impossible to direct as
required.
The Outliner is a window (or a panel) with a full list of every
object, node, animation curve or other aspects, all which are the
components of the scene.
The Hypergraph is very useful in order to see the connections
within the input and output between nodes.
These windows are fundamental for a character rigger.
To Open :
Window --> Hypergraph or Outliner. (Picture 00_13)
Picture 00 _13
Picture 00 _12
Pivot
Another important aspect is the "pivot" that defines the center
point (in most instances) for transformation.
In Maya you can change the pivot point to where you want
it to be, using the Euler world coordinate system. This is really
useful during the rigging process (see rigging process section).
Select an object and press "e" to enter into the translate tool
(transformation), press "insert", the shape of the manipulator
will change and this will allow for movement of the pivot point
anywhere!
To exit out of the pivot edit mode press insert
again.(Picture 00_11)
NOD E A N D H I E R A R C H Y
244
24 5
Picture 01 _2b
Picture 01 _3b
Cleanup Geometry
- Place the model at the origin of the axis and not under
negative Y. The front of your model should be facing the positive
Z axis. Remember to place the model in a completly symmetrical
position. This position is best
as this makes it simpler to mirror items for bones, controls and
for facial shaping. (Picture 01 _1)
(Picture 01 _4)
Picture 01 _04
Picture 01 _1
Picture 01 _2
Picture 01 _03
246
247
Picture 01 _05
Picture 01 _07
(fast):
Picture 01 _10
xform -cp;
// run this line for center pivot
polyNormalPerVertex -ufn true; // set the normal pointing outside the
geometry
makeIdentity -apply true -t 1 -r 1 -s 1 -n 0; // run this line for freeze
transformations
delete -ch;
// run this line for delete history
select -cl;
// run this line for clear the selections
(Picture 01 _9)
Picture 01 _09
Edit Polygons ---> Normal ---> Set to Face ---> Option (uncheck
the user normal box);
Or in MEL:
Edit ---> Delete by Type ---> History;
(Picture 01 _8)
(Picture 01 _6)
Picture 01 _06
group -w;
Picture 01 _08
If you run this Mel in the script editor for the first time then
you will be able to repeat these commands only by selecting
a geometry and pressing "G". Remember that you can put this
script in your custom shelf.
press "Create new layer" button (in the panel under the channel
box) ---> select your geometry or group of geometry ---> click
with RMB ---> Add Selected Object
(Picture 01 _11)
Picture 01 _11
Use this procedure for all the geometry that you require.
Now create a group in which to contain all the geometry and
thereafter create a subgroup for objects that are made up
by different parts (for example a subgroup with eye and pupil
geometry):
select geometry and in the Hotbox:
Modify ---> Freeze transformations ---> Option ---> Freeze
Transform
(check all the first three boxes) ---> Apply;
248
modify ---> Group ---> Option ---> World and Origin enabled
---> Apply
(Picture 01 _10)
249
Or in MEL:
createDisplayLayer -name "layer1" -number 1 -empty;
Picture 02 _03
02 _PLACING BONES
Click 4 times with LMB to place three bones on the left leg.
(Picture 02 _4)
Picture 02 _04
in Mel:
joint -n first_JNT -p -3 0 4 ;
// joint creation line (x y z origin value)
(Before using any Maya tool remember to Reset the tool option
to the default setting) (Picture 02 _2) (Picture 02 _3)
Picture 02 _02
If the joints displayed are too big or small you can change the
size using the Hotbox:
Display ---> Joint Size ---> Custom (change size moving the slider).
(Picture 02 _5)
250
251
Picture 02 _05
With this visual mode you can see if your joints are place
correctly inside your geometry. (Picture 02 _7)
Picture 02 _07
Joint Orientation
Picture 02 _10
Joint tool:
Set the option with the same setting that we have used at the
creation : ZYX Orientation, +Y for secondary axes, it's possible
that the secondary axes is different than +Y, find the right axis
and make you sure that:
- Z axes pointing in direction of the next joint;
- Y axes is perpendicular and positive to the Z axes;
- X is positive.
(Picture 02 _11)
Picture 02 _08
Picture 02 _11
253
Select your single joint or the root of the chain (automatic joint
orientation of the child node)
Picture 02 _14
Picture 02 _16
Function then fill the left prefix ("L_") used for naming joints,
in the second text field the right side prefix ("R_") and press
Mirror...
(Picture 02 _18) (Picture 02 _19)
Picture 02 _12
Picture 02 _18
Picture 02 _15
Picture 02 _13
Picture 02 _19
(Picture 02 _16)
Mirroring Joint
joint -e -zso -oj zyx -sao yup first_JNT; // joint orientation command
We have now placed all the middle and left side joints (your
character's left not yours!). Now it is time to duplicate our joints
for the right hand side of the character.
Once you have completed mirroring the joints turn off the "Local
Rotation Axes" option.
Now create a Display Layer for your joint chains using the same
In Mel;
25 4
255
Picture 02 _21
Picture 02 _22
Minimal Shape
This is only a test, remember to save a separate file for this!
Picture 02 _23
When you are almost positive that your joints are in the right
place and have a nice basic deformation return to the previous
file (mirrored joint file) and start the next chapter :)
25 6
257
Edit the control point of your curve and when satisfied you can
override the colour with two techniques:
Side Colour
Different coloured controls must at all times be created for the
left side (e.g. blue or green), right side (e.g. red) and middle (e.g.
yellow). The usage of colour variation is effective in animation
for recognition purposes.
-
create or add a Display Colour Layer for the control
(e.g. GA00_L_ctl_DSP) and change the colour of that layer
(automatically override by the colour of the layer).
-
manually override the colour of your control (remember
that you are only able to use one technique at a time).
In the past chapter you have already learned how to make a
display layer and add your object to the layer.
Now we will learn how to manually override the colours:
//Remember :
//Color Index 17 is Yellow;
//Color Index 13 is Red;
//Color Index 6 is Blue
A simple example :
-
-
write in the script editor :
parent -r -s nurbsCircleShape2 nurbsCircle1;
-
Rigging procedure
Every Rigger has a library of control icons that are used in
every rigging procedure. I recommend that you create an icon
for your control shape.
Create a folder that contains a single file for every control
shape (e.g. box.ma , sphere.ma, cross.ma, hand.ma , foot.ma.).
Each file contains a single object which is then properly named
(but without a prefix) and placed in the origin of the world
axes.
When you require a new control object you have only to
import that file with the rig prefix. (Great!)
(Picture 03 _07)
// This script parent all the shape node of an objects to another object
collector.
// select the shape collector then objects to drain all the shapes of all
the objects secondary selected
// run "dls_drainShape;"
258
259
Picture 03 _07
Picture 03 _08
Picture 03 _10
Picture 03 _12
-pr "C:/mycontrols/box_ctl.
Picture 03 _09
Picture 03 _11
(Picture 03 _08)
You can choose any nurbs shape for your control icon.
(Picture 03 _12)
260
261
-
Select the control and the new locator and press "p" (for
parent) (Picture 04 _02b)
Picture 04 _01
Picture 04 _02
Picture 04 _02b
-
Rename your control properly (e.g. GA00_spine_0_CTL
) resize the proportion correctly (not too large nor too small).
Create a new file with only the spine chain and the geometry for
reference. each time we start a new rig module its preferable
to work on it separately. (Picture 04 _01)
-
Snap your controls to the joint: select your control switch
to move the tool mode and then hold key "v" and move your
control to the relative joint (e.g. GA00_spine_0_fk_JNT)
Repeat this procedure for all four controls for your chain.
Now you have four controls named:
-
-
-
-
GA00_spine_0_CTL
GA00_spine_1_CTL
GA00_spine_2CTL
GA00_spine_3_CTL
-
Duplicate your base spine chain and rename your joints
with "fk" suffix (e.g. GA00_spine_0_JNT renamed to GA00_spine_
0_fk_JNT and so on...);
-
Create a Nurbs primitive circle (or load your custom
spine control shape) (Picture 04 _02)
262
-
Create ---> Locator and rename with "_LOC" suffix (e.g.
GA00_spine_3_LOC)
-
Snap to the relative control spine and freeze
transformations (Modify ---> freeze transformations)
263
Picture 04 _03
Picture 04 _06
Picture 04 _04
//This script creates a locator parent of a selected object and is named
based on a selection
string $listobj[] = `ls -sl`;
// find selection name
string $name =`substring $listobj[0] 0 ((size($listobj[0]))-3)`;
//
spaceLocator -n ($name+"LOC");
// create locator
parentConstraint -n temp $listobj[0] ($name+"LOC");
//
snap to the ctl
delete temp;
//
parent $listobj[0] ($name+"LOC") ;
//
parent ctl to loc
select -cl;
// clear selection
Now:
-
Select GA00_spine_3_LOC than shift select GA00_spine_
2_LOC and press "p" to make the first selection child of the
second;
-
LCO ,
-
Click on CV curve Tool ---> Options ---> Curve Degree 2,
Knot Spacing uniform;
-
Click four times, pointing to the origin of each four joints
chain. (Picture 04 _05) (Picture 04 _06)
-
Select the curve and hold RMB to go in to "Control
Vertex Selection Mode" (Picture 04 _07)
Picture 04 _07
Picture 04 _05
-
Repeat for GA00_spine_1_CTL and GA00_spine_1_fk_JNT,
GA00_spine_2_CTL and GA00_spine_2_fk_JNT, GA00_spine_3_
CTL and GA00_spine_3_fk_JNT.
26 4
265
- Select one CV point at a time and hold "v" to move and snap
to the relative joint;
(e.g.
"GA00_M_spine_guide_0_LOC"
guide_0_UPV" )
-
Return to "Object Mode" and rename your curve properly
(e.g. GA00_spine_CRV);
-
Duplicate your curve (with CTRL+D) ;
-
Rename the duplicated curve with a "_upv" prefix (e.g.
GA00_spine_upv_CRV)
-
move "upv" curve +3 in translation of X axis and freeze
transformation. Remember that the offset curve needs to be
placed on the side of the main rotation angle (e.g. If your spine
mainly rotates on the "x" axis, the offset is in the negative "x"
position).
-
locator
-
locator
"GA00_M_spine_
Picture 04 _11
Picture 04 _10
Picture 04 _09
(Picture 04 _08)
Picture 04 _08
-
select the motion path node (rename it properly, e.g.
"GA00_M_spine_crv_0_MPT") , and thereafter, select U Value
attribute and with RMB click on "delete selected".
(Picture 04 _11)
-
Create a joint (remember the use of the Joint Creation
Tool in the past chapter) and name it correctly , (I never tired of
emphasising this) (e.g. "GA00_M_spine_crv_0_JNT" and so on...).
-
Create a locator for each cluster and place in the right
position using snap again (remember to rename locator with
suffix "_LOC" and "_upv_LOC").
Create ---> Locator.
-
Select the created joint and the base curve than press:
Animate ---> Motion Paths ---> Attach to Motion Path ---> Option,
deactivate "follow" option. (Picture 04 _10)
266
267
For Example :
Picture 04 _12b
Picture 04 _13
Picture 04 _14
GA00_M_spine_crv_0_MPT.Uvalue = 0;
GA00_M_spine_crv_1_MPT.Uvalue = 0.33;
GA00_M_spine_crv_2_MPT.Uvalue = 0.66;
GA00_M_spine_crv_3_MPT.Uvalue = 0.99;
now create the upvector locator (Create ---> locator) . This is the
object that our joint will look at for the twisting motion.
this is the same procedure that we have used for the joint but
not using the "upv" locators and the "upv" curve. Remember the
name convention and put the same U value that you have set
for the joint's motion path.
now aim the rotation of every joint to point to the next joint
(the last joint has no aim) and use the upv locator for "World
Up Object".
-
Select GA00_M_spine_crv_0_JNT shift select GA00_M_
spine_crv_1_JNT;
-
Constraint ---> Aim ---> Options, "Maintain Offset" checked,
World Up Type "Object Up" then fill the World Up Object input
text with the name of the relative upv locator.
(Picture 04 _12)
Picture 04 _12
-
Select the control, shift select the locator and add parent
constraint.
-
Lock and Hide "rotations" transformation of your
controls.
268
Picture 04 _15
Our first controls are driven by two joints and by default the
weight of this parenting is 50%.
-
Select the first elastic control and press CTRL+a to open
the attributes panel;
-
Attributes ---> Add Attributes ---> Option name "FktoElastic",
type "Float" minimum value to 0 and maximum to 1, default value
to 0.
(Picture 04 _15) (Picture 04 _16)
Picture 04 _18
-
Select the first joint of the fk chain and shift select the
relative joint on the base chain (e.g. GA00_M_spine_0_fk_JNT
and GA00_M_spine_0_JNT);
-
press Constrain ---> Parent ---> Option, All translations
and rotations;
-
Select the first joint of elastic chain and shift select the
same joint on the base chain that you have selected before;
-
press Constrain ---> Parent ---> Option, All translations
and rotations.
-
correctly rename the constraint (e.g. GA00_M_spine_0_
JNT_PRC).
Picture 04 _17
Picture 04 _16
270
271
Picture 04 _19
Picture 04 _20
distance/GA00_M_spine_1_squash_DMNShape.distance) *2 )-1);
GA00_M_spine_2_JNT.scaleX = (((GA00_M_spine_2_squash_hold_DMNShape.
distance/GA00_M_spine_2_squash_DMNShape.distance) *2 )-1);
GA00_M_spine_2_JNT.scaleZ = (((GA00_M_spine_2_squash_hold_DMNShape.
distance/GA00_M_spine_2_squash_DMNShape.distance) *2 )-1);
Some clean up
For example, with this expression when the value of the distance
is 3, both the value of "scaleX" and"scaleZ" are 1 otherwise
when the value of the distance is more than 3 the values of the
scale is proportionally less.
"GA00_M_spine_0_CTL" and
"GA00_M_spine_1_CTL"
complete, now repeat this process with:
is
now
"FktoElastic" to "1".
272
-
Properly Rename the three objects created (e.g. "GA00_
M_spine_0_squash_start_LOC",
"GA00_M_spine_0_squash_end_LOC", "GA00_M_spine_0_squash_
DMN");
Picture 04 _21
-
parentConstraint "GA00_M_spine_0_squash_start_LOC" to
"GA00_M_spine_0_CTL";
-
parentConstraint "GA00_M_spine_0_squash_end_LOC" to
"GA00_M_spine_1_CTL";
-
Repeat this procedure but this time you must rename
these objects to "GA00_M_spine_0_squash_hold_DMN", "GA00_
M_spine_0_squash_start_hold_LOC", "GA00_M_spine_0_squash_
end_LOC", snap to the relative joint but this time do not parent
to the controls.
you can automatically hide this entire object with the following
Mel line :
hide "*_LOC" "*_UPV" "*_CLS" "*_crv*_JNT" "*_fk*_JNT";
This process is really long and repetitive and a good idea is to
make a script that automatically completse the job for us :D...but
this is not a dream and is possible to do... (Picture 04 _22)
-
Select all these new objects and the parent them under
"notrasf" group.
Open the Expression Editor and add this line:
GA00_M_spine_0_JNT.scaleX = (((GA00_M_spine_0_squash_hold_DMNShape.
distance/GA00_M_spine_0_squash_DMNShape.distance) *2 )-1);
GA00_M_spine_0_JNT.scaleZ = (((GA00_M_spine_0_squash_hold_DMNShape.
distance/GA00_M_spine_0_squash_DMNShape.distance) *2 )-1);
GA00_M_spine_1_JNT.scaleX = (((GA00_M_spine_1_squash_hold_DMNShape.
distance/GA00_M_spine_1_squash_DMNShape.distance) *2 )-1);
GA00_M_spine_1_JNT.scaleZ = (((GA00_M_spine_1_squash_hold_DMNShape.
Picture 04 _22
// spine rig
for ($i=0; $i<$jnt; $i++)
{
spaceLocator -n ($namechain+"_guide_"+$i+"_LOC");
parentConstraint -n temp ($namechain+"_"+$i+"_JNT")
($namechain+"_guide_"+$i+"_LOC");
delete temp;
spaceLocator -n ($namechain+"_guide_"+$i+"_UPV");
parentConstraint -n temp ($namechain+"_guide_"+$i+"_LOC")
($namechain+"_guide_"+$i+"_UPV");
delete temp;
move -r -ls -wd $offsetx $offsety $offsetz;
}
Enjoy.
274
curve -n ($namechain+"_CRV") -d 2 -p 0 0 0 -p 1 1 1 -p 2 2 2 -p 3 3 3 -k
0 -k 0 -k 1 -k 2 -k 2;
rename curveShape1 ($namechain+"_CRVShape");
setAttr ($namechain+"_CRVShape.template") 1;
curve -n ($namechain+"_upv_CRV") -d 2 -p 0 0 0 -p 1 1 1 -p 2 2 2 -p 3 3
3 -k 0 -k 0 -k 1 -k 2 -k 2;
rename curveShape1 ($namechain+"_upv_CRVShape");
setAttr ($namechain+"_upv_CRVShape.template") 1;
parent ($namechain+"_upv_CRV")($namechain+"_notrasf_GRP") ;
parent ($namechain+"_CRV")($namechain+"_notrasf_GRP") ;
for ($i=0;$i<$jnt;$i++)
{
select -r ($namechain+"_CRV.cv"+"["+$i+"]") ;
newCluster " -n ($namechain+\"_CLS\") -relative -envelope 1";
rename ($namechain+"_CLSHandle") ($namechain+"_"+$i+"_CLS");
pointConstraint ($namechain+"_guide_"+$i+"_LOC") ($namechain+"_
"+$i+"_CLS");
select -r ($namechain+"_upv_CRV.cv"+"["+$i+"]") ;
newCluster " -n ($namechain+\"_upv_CLS\") -relative -envelope 1";
rename ($namechain+"_upv_CLSHandle") ($namechain+"_"+$i+"_upv_
CLS");
pointConstraint ($namechain+"_guide_"+$i+"_UPV") ($namechain+"_
"+$i+"_upv_CLS");
parentConstraint -mo -weight 1 ($namechain+"_guide_"+$i+"_LOC")
($namechain+"_guide_"+$i+"_UPV");
}
// controls creation
for ($i=0; $i<$jnt; $i++)
{
circle -n ($namechain+"_"+$i+"_CTL") -nr 0 1 0 -r .8 -d 3 -tol
0.01 -s 4 -ch 0;
parentConstraint -skipRotate x -skipRotate y -skipRotate z -n
temp ($namechain+"_guide_"+$i+"_LOC") ($namechain+"_"+$i+"_CTL") ;
delete temp;
parentConstraint ($namechain+"_"+$i+"_CTL") ($namechain+"_"+$i+"_
fk_JNT") ;
scaleConstraint ($namechain+"_"+$i+"_CTL") ($namechain+"_"+$i+"_
fk_JNT") ;
makeIdentity -apply true -t 1 -r 1 -s 0 -n 0 ($namechain+"_"+$i+"_
CTL");
setAttr ($namechain+"_"+$i+"_CTLShape.overrideEnabled") 1;
setAttr ($namechain+"_"+$i+"_CTLShape.overrideColor") 17;
setAttr -lock true -keyable false ($namechain+"_"+$i+"_CTL.tx");
setAttr -lock true -keyable false ($namechain+"_"+$i+"_CTL.ty");
setAttr -lock true -keyable false ($namechain+"_"+$i+"_CTL.tz");
}
// controls ELASTIX creation
for ($i=0; $i<$jnt; $i++)
{
circle -n ($namechain+"_"+$i+"_elx_CTL") -nr 0 0 1 -r .8 -d 3
-tol 0.01 -s 4 -ch 0;
parentConstraint -skipRotate x -skipRotate y -skipRotate z -n
temp ($namechain+"_guide_"+$i+"_LOC") ($namechain+"_"+$i+"_elx_CTL") ;
delete temp;
select ($namechain+"_"+$i+"_elx_CTL");
group -n ($namechain+"_"+$i+"_elx_GRP");
parentConstraint ($namechain+"_"+$i+"_elx_CTL") ($namechain+"_
guide_"+$i+"_LOC");
parentConstraint ($namechain+"_"+$i+"_CTL") ($namechain+"_"+$i+"_
elx_GRP") ;
makeIdentity -apply true -t 1 -r 1 -s 0 -n 0 ($namechain+"_"+$i+"_
elx_CTL");
setAttr ($namechain+"_"+$i+"_elx_CTLShape.overrideEnabled") 1;
setAttr ($namechain+"_"+$i+"_elx_CTLShape.overrideColor") 21;
rx");
ry");
rz");
$div = (1/($jnt-1));
select -cl;
for ($i=0; $i<$jnt; $i++)
{
joint -n ($namechain+"_crv_"+$i+"_JNT")-p 0 0 0;
setAttr ($namechain+"_crv_"+$i+"_JNT.radius") 2;
select ($namechain+"_crv_"+$i+"_JNT") ($namechain+"_CRV");
pathAnimation -n ($namechain+"_"+$i+"_MPT") -fractionMode true follow false ;
cutKey -cl -t ":" -f ":" -at "u" ($namechain+"_"+$i+"_MPT");
setAttr ($namechain+"_"+$i+"_MPT"+".uValue") ($i*$div);
polyCube -n ($namechain+"_"+$i+"_jnt_REF") -w 0.6 -h 1 -d 1 -sx 1
-sy 1 -sz 1 -ax 0 1 0 -tx 1 -ch 0;
setAttr ($namechain+"_"+$i+"_jnt_REFShape.template") 1;
setAttr ($namechain+"_"+$i+"_jnt_REFShape.primaryVisibility") 0;
parentConstraint ($namechain+"_crv_"+$i+"_JNT") ($namechain+"_
"+$i+"_jnt_REF");
connectAttr -f ($namechain+"_crv_"+$i+"_JNT.scale")($namechain+"_
"+$i+"_jnt_REF.scale");
select -cl;
spaceLocator -n ($namechain+"_"+$i+"_UPV");
scale 0.25 0.25 0.25;
select ($namechain+"_"+$i+"_UPV") ($namechain+"_upv_CRV");
pathAnimation -n ($namechain+"_"+$i+"_upv_MPT") -fractionMode true
-follow false ;
cutKey -cl -t ":" -f ":" -at "u" ($namechain+"_"+$i+"_upv_MPT");
setAttr ($namechain+"_"+$i+"_upv_MPT"+".uValue") ($i*$div);
parent ($namechain+"_crv_"+$i+"_JNT") ($namechain+"_notrasf_
GRP");
if ($i>0)
{
select -r ($namechain+"_crv_"+$i+"_JNT");
select -add ($namechain+"_crv_"+($i-1)+"_JNT") ;
aimConstraint -mo -weight 1 -aimVector 1 0 0 -upVector 0 1
0 -worldUpType "object" -worldUpObject ($namechain+"_"+$i+"_UPV");
}
// constraint creation
parentConstraint ($namechain+"_crv_"+$i+"_JNT")($namechain+"_
"+$i+"_JNT") ;
parentConstraint ($namechain+"_"+$i+"_fk_JNT") ($namechain+"_
"+$i+"_JNT") ;
// expressions and connections creation
addAttr -ln ("FKtoElastic") -at double -min 0 -max 1 -dv 0
275
($namechain+"_"+$i+"_elx_CTL");
setAttr -e -keyable true ($namechain+"_"+$i+"_elx_CTL.
FKtoElastic");
expression -s ($namechain+"_"+$i+"_JNT_parentConstraint1."+$namec
hain+"_"+$i+"_fk_JNTW1 \= 1-"+$namechain+"_"+$i+"_JNT_parentConstraint1."+
$namechain+"_crv_"+$i+"_JNTW0")
-o ($namechain+"_"+$i+"_JNT_parentConstraint1")
-ae 1 -uc all ;
connectAttr -f ($namechain+"_"+$i+"_elx_CTL.FKtoElastic")
($namechain+"_"+$i+"_JNT_parentConstraint1."+$namechain+"_crv_"+$i+"_
JNTW0");
select -cl;
}
// parenting
select ($namechain+"*_UPV") ($namechain+"*_CLS") ($namechain+"*_REF")
($namechain+"*0_fk_JNT") ($namechain+"_guide"+"*_LOC");
select -add ($namechain+"_notrasf_GRP") ;
parent;
hide ($namechain+"*_UPV") ($namechain+"*_CLS");
for ($i=$jnt;$i>1;$i--)
{
parent ($namechain+"_"+($i-1)+"_CTL") ($namechain+"_"+($i-2)+"_CTL");
}
select -r ($namechain+"_0_CTL");
select -add ($namechain+"_ROOT_GRP") ;
parent;
select -r ($namechain+"*_elx_GRP");
select -add ($namechain+"_ROOT_GRP") ;
parent;
hide "*_LOC" "*_UPV" "*_CLS" "*_crv*_JNT" "*_fk*_JNT";
select -cl;
// Squash spine
for ($i=0;$i<($jnt-1);$i++)
{
distanceDimension -sp 1 1 1 -ep 2 2 2 ;
rename distanceDimension1 ($namechain+"_"+$i+"_distance_DMN");
rename locator1 ($namechain+"_"+$i+"_squash_start_LOC");
rename locator2 ($namechain+"_"+$i+"_squash_end_LOC");
parentConstraint ($namechain+"_"+$i+"_elx_CTL")($namechain+"_"+$i+"_
squash_start_LOC");
parentConstraint ($namechain+"_"+($i+1)+"_elx_CTL")($namechain+"_"+$i+"_
squash_end_LOC");
expression -s ($namechain+"_"+$i+"_JNT.scaleX = (((1/"+$namechain+"_
"+$i+"_distance_DMNShape.distance) *2 )+1)") -o "" -ae 1 -uc all ;
expression -s ($namechain+"_"+$i+"_JNT.scaleZ = (((1/"+$namechain+"_
276
GA00_M_tail_1_squash_DMNShape.distance) *2 )-1);
GA00_M_tail_2_JNT.scaleX = (((GA00_M_tail_2_squash_hold_DMNShape.distance/
GA00_M_tail_2_squash_DMNShape.distance) *2 )-1);
GA00_M_tail_2_JNT.scaleZ = (((GA00_M_tail_2_squash_hold_DMNShape.distance/
GA00_M_tail_2_squash_DMNShape.distance) *2 )-1);
-
Duplicate the main base chain and rename it with the
suffix "_dyn_JNT"(e.g. "GA00_M_spine_0_dyn_JNT");
-
Select GA00_M_spine_CRV and press:
-
Hair ---> Make Selected Curves Dynamic
(Picture 05 _01)
Picture 05 _01
A little summary of the Spine Rig (same as Tail rig but without
dynamics) :
-
Create a duplicate of the main base chain renamed with
the prefix "_fk_JNT";
-
-
Create a duplicate of the main base chain renamed with
the prefix "_elx_JNT";
-
Make the controls and build the curve to drive the
"Elastic mode" chain;
-
Make connections between the two chains ("FK mode"
and "Elastic Mode");
A similar expression can be used for the connections between
the two systems.
GA00_M_tail_0_JNT_pointConstraint1.GA00_M_tail_0_fk_JNTW2
tail_0_JNT_pointConstraint1.GA00_M_tail_0_elx_JNTW1;
GA00_M_tail_1_JNT_pointConstraint1.GA00_M_tail_1_fk_JNTW2
tail_1_JNT_pointConstraint1.GA00_M_tail_1_elx_JNTW1;
GA00_M_tail_2_JNT_pointConstraint1.GA00_M_tail_2_fk_JNTW0
tail_2_JNT_pointConstraint1.GA00_M_tail_2_elx_JNTW1;
GA00_M_tail_3_JNT_pointConstraint1.GA00_M_tail_3_fk_JNTW0
tail_3_JNT_pointConstraint1.GA00_M_tail_3_elx_JNTW1;
= 1- GA00_M_
= 1- GA00_M_
= 1- GA00_M_
= 1- GA00_M_
These are the expressions that I use for the Squash and
Stretch;
GA00_M_tail_0_JNT.scaleX = (((GA00_M_tail_0_squash_hold_DMNShape.distance/
GA00_M_tail_0_squash_DMNShape.distance) *2 )-1);
GA00_M_tail_0_JNT.scaleZ = (((GA00_M_tail_0_squash_hold_DMNShape.distance/
GA00_M_tail_0_squash_DMNShape.distance) *2 )-1);
GA00_M_tail_1_JNT.scaleX = (((GA00_M_tail_1_squash_hold_DMNShape.distance/
GA00_M_tail_1_squash_DMNShape.distance) *2 )-1);
GA00_M_tail_1_JNT.scaleZ = (((GA00_M_tail_1_squash_hold_DMNShape.distance/
This tool creates two new nodes: "hairSystem" node and "follicle"
node and one additional curve that is directly connected to the
"elastic mode" curve (e.g. "GA00_M_spine_CRV").
-
rename the new curve properly with a "dyn_CRV" suffix
(e.g "GA00_M_spine_dyn_CRV");
-
rename the hairSystem node properly with "_HIR" suffix
(e.g. "GA00_M_spine_HIR");
-
change some settings on the "follicle node" Shape node:
Point Lock ---> Base.
If you want you can override the Dynamics stiffness from here
and put an appropriate value (e.g. 0.5 or 0.7)
27 7
(Picture 05 _02)
Picture 05 _04
Picture 05 _05
Picture 05 _06
Picture 05 _02
-
Select the first "dyn" joint and the last (e.g. "GA00_M_
spine_0_dyn_JNT" and "GA00_M_spine_3_dyn_JNT") and for the
third choice select the dynamic curve (e.g. GA00_M_spine_dyn_
CRV).
-
Now create an Ik Spline for the "dyn_JNT" joints chain :
Skeleton ---> IK Spline Handle Tool ---> Option, uncheck Auto
Create Curve. (Picture 05 _03) (Picture 05 _04)
Picture 05 _03
278
-
Select all new objects ;
-
Dyn joint chain , ikhandle, dyn curve and the hair node
and parent them under "notrasf" group;
-
For our last step create a parent locator for the first
tail control ("GA00_M_tail_0_CTL") and rename it correctly (e.g.
"GA00_M_tail_root_LOC");
-
Create a new control using a circle shape. Snap it's
position then freeze transformations and rename it "GA00_M_
root_CTL";
-
LOC";
Parent
"GA00_M_root_CTL"
under
"GA00_M_tail_root_
-
parentContrain now "GA00_M_tail_0_CTL" to the "GA00_
M_root_CTL".
You are able with these attributes to drive the main chain in
3 different modes: FK , Elastic and Dynamic and obviously you
can blend between these.
(Picture 05 _06)
279
Picture 06 _02
Picture 06 _04
The method used for this rig is similar to the other modules rig
that we have already done for the spine and the tail, but in this
procedure we create an additional system to drive our leg joint
chain : with an IK handle mode.
What we need to do to drive our leg chain?
-
-
280
-
Create a locator for each cluster and place it correctly
using "snap" again
-
Directly connect the locators and relative clusters using the
connections editor (the locator must drive the relative cluster).
-
ParentConstrain the "offset" locator with the relative
"guide" locator with the "maintain offset" option enabled.
-
Create a joint for each base joint chain
-
Orient the joint with the same axes to that of the base
joint chain
-
Connect the joint to the curve using motionPath, delete
the default U Value and set it to match the position of the
relative base joint
-
Repeat the "motion path" process using a new locator
"upv" for each "on curve" joint on the offset curve.
(Picture 06 _05)
281
Picture 06 _05
-
Create a parent locator for each control or use the
"parent_loc" script to speed up the process.
-
Create a hierarchy from the last FK LOC to the first (e.g.
GA00_R_foot_fk_LOC children of GA00_R_knee_fk_LOC and also
GA00_R_knee_fk_LOC children of GA00_R_ankle_fk_LOC );
{
string $list[] = `ls -sl -fl`;
/
/
create a list of object
parentConstraint -n temp $list[1] $list[0];
/
/
snap to the children
delete temp;
//
makeIdentity -apply true -t 1 -r 1 -s 1 -n 0 $list[0];
//
freeze
transformation
parentConstraint $list[0] $list[1];
/
/
parentConstraint
select -cl;
//clear selection
}
// END
//----------------
-
ParentConstrain the fk controls and the fk joints (the
controls drive the bones) (Picture 06 _07) (Picture 06 _08)
Picture 06 _07
(It may be an idea to add this little useful utility to your custom
TD shelf)
-
select the knee control
-
create a parent locator
-
parentConstraint the new locator maintaining the offset
to the first control
-
parentConstraint the new locator maintaining the offset
to the last control
Now your control will have the same proportional distance
between the two controls if those controls are then translated.
At the end:
-
Naming convention is obviously fundamental.
-
Clean the channel to get rid of unuseful transformations
(keep the rotation attribute for the last "elx" control)
-
For more in depth instructions use the spine procedure,
Picture 06 _08
Picture 06 _09
Picture 06 _11
Picture 06 _12
- Press "insert". Now press "v" to snap the effector node to the
last joint (Picture 06 _13)
Picture 06 _13
Picture 06 _10
Start with :
-
Duplicate the main chain and rename it properly with
"_IK" suffix (e.g. GA00_L_femur_ik_JNT, GA00_L_tibia_a_ik_JNT),
remember to keep the orient axis to equal that of the original
joint chain.
-
Create an IK handle node using IK Handle Tool: Skeleton
---> IK Handle Tool ---> Options,
Current Solver "ikRPsolver",
"Autopriority" checked.
-
Click with the LMB on the first "IK" labeled joint and
select the last joint minus one to create the handle (remember
to rename it properly with the suffix "_IKH"). (Picture 06 _09)
(Picture 06 _10) (Picture 06 _11)
28 4
This is a little trick to leave the rotation of the last joint free
because we need to use that rotation to solve "the candy effect"
issue in the binding procedure for this character.
.
-
Open the Outliner (I tend to have this on the left side of
my viewport) and select the effector node that is the children of
the first joint used for the IK handle.
(Picture 06 _12)
285
-
Create a locator to drive the IK handle. Snap it to the
last joint used for the IK handle, rename it correctly (e.g. "GA00_
leg_ik_LOC") and freeze transformations.
-
Parent the IK handle under the locator.
-
Create a parent locator for the pole vector control and
pointContraint (constraint the parent locator only in translation
with the ik handle loc ) maintaining offset.
(Picture 06 _14)
Picture 06 _14
-
Create an attribute on "GA00_L_leg_ik_ikn_LOC" called
"leg_scale" (with a default value of "1");
-
Connect this new attribute to every "ScaleZ" attribute (e.g
"GA00_L_leg_ik_ikn_LOC.leg_scale" and "GA00_L_femur_ik_JNT.
scaleZ", etc...)
-
Create a locator to drive the base joint (for future leg
module connections). Snap the locator to the first joint used for
the ik handle, and rename it properly (e.g. "GA00_leg_base_ik_
LOC"). Freeze transformations again .
-
ParentConstrain the first joint to that locator.
Pole Vector
"GA00_L_femur_JNT"
and
"GA00_L_
"GA00_L_femur_JNT"
and
"GA00_L_
"GA00_L_femur_JNT"
and
"GA00_L_
-
parentConstraint
femur_elx_JNT";
-
parentConstraint
femur_fk_JNT;
-
parentConstraint
femur_ik_JNT;
Picture 06 _17
Picture 06 _15
The pole vector control now follows the foot locator in translation
and not in rotation. This allows the animator to maintain control
of the character and knee joint. We have now completed
the IK Mode , ready for the next step: connecting the different
rigging systems to the base leg chain.
286
287
-
Connect "GA00_L_leg_root_LOC.ik" to "GA00_L_femur_
JNT1.W0"
-
Connect "GA00_L_leg_root_LOC.fk" to "GA00_L_femur_
JNT.W1"
-
Connect "GA00_L_leg_root_LOC.elastic" to "GA00_L_
femur_JNT.W2" (Picture 06 _18)
Picture 06 _19
Picture 06 _20
Picture 06 _24b
Picture 06 _18
-
Parent under "notrasf_GRP" (not parent constrain)
-
"fk_JNT" chain hierarchy
-
"_JNT" chain hierarchy
-
"elx_JNT" chain hierarchy
-
the two curves used in elastic rig mode
-
all the "_CLS" clusters
-
all the locator and the locator "offset" and "_UPV"
drive the two curves
-
GA00_L_knee_ik_LOC
-
all the distanceDimension and relative locator
- Parent under "root_GRP"
-
GA00_L_leg_ik_ikn_GRP
-
GA00_L_leg_root_LOC
that
We will now parent and group several of the objects from our
three systems in order to create an ordered node hierarchy.
-
Group all the "_elx_CTL" rename the new group with this
name "GA00_L_rig_elx_GRP"
-
Parent "GA00_L_rig_elx_GRP" under "GA00_L_leg_root_
LOC";
-
Parent under "GA00_L_leg_root_LOC" the locator called
"GA00_L_femur_ik_LOC";
-
Create a parent group for "GA00_L_leg_ik_ikn_LOC"
name it corractly (e.g "GA00_L_leg_ik_ikn_GRP").
-
ParentConstraint that group ("GA00_L_leg_ik_ikn_GRP")
to "GA00_L_leg_root_LOC"
-
Connect using the connection editor "GA00_L_leg_ik_
ikn_LOC.ik" tp the "W0" of the previous parentConstraint.
(Picture 06 _19)
-
Create or import a control shape for the "rigging system
driver", for example I often use an handle shaped control.
-
Rename it to "GA00_L_leg_root_CTL"
-
Select all the transformation attributes then RMB, select
"Lock and Hide Selected"
(Picture 06 _24b)
288
289
-
Snap this control to the position of the first joint of the
leg and parent under "GA00_L_leg_root_LOC". The value of the
transformations for this control do not matter because it is used
only for visual reference and to switch between rig systems. It
will not used to move or rotate anything. (Picture 06 _24)
Picture 06 _25
-
-
-
"IK";
"FK";
"Elastic";
(Picture 06 _25)
290
is
fundamental
to
Picture 06 _24
-
Create an "Enum" type attribute called "IK_FK_Elastic"
and name the enum name with :
-
Select the driver attribute ("IK_FK_Elastic") and press "Load
Driver";
-
Select the driven attributes ("IK","FK","Elastic") and press
"Load Driven"; (Picture 06 _27)
Picture 06 _27
Picture 06 _26
"Maya has special driven keys that link one attribute value
to another. In regular animation keys, an attribute has values
keyed to times in the Time Slider. For a driven key, an attribute
has values keyed to the value of a driving attribute. A change
in a driver attribute alters the value of the driven attribute. For
instance, you can set driven keys to make a door open when
a person walks in front of the door. An attribute can be driven
by multiple attributes. For instance, you can make a muscle
bulge when an elbow rotates. You can make the muscle bulge
even more when the wrist rotates. "
-
Select "IK" option on "GA00_L_leg_root_CTL.IK_FK_Elastic"
attribute (keep the Driven Key Window open);
-
-
-
-
"GA00_L_leg_root_LOC.IK" to 1;
"GA00_L_leg_root_LOC.FK" to 0;
"GA00_L_leg_root_LOC.Elastic" to 0;
291
Picture 06 _28
Picture 06 _21
Picture 06 _22
Picture 07 _01
Picture 06 _29
Great! The first driven key is now ready. Repeat the same
procedure for FK and Elastic.
Done :) Now we can control our three rigging systems using
only one animatable attribute.
Note
If you want you can drive the visibility of the different controls
for clarity in your scene and make easier for the animators.
Simply connect the value of "IK" in our "GA00_L_leg_root_LOC"
to the main visibility or shape visibility attribute of each control
("GA00_L_knee_ik_CTL", GA00_L_leg_ik_ikn_LOC);
Do the same for the other rig system :) (Picture 06 _21)
292
-Create a single file with the leg rig (only the 2 groups: "no_
trasf_GRP" and "root_GRP"), import another copy and rename
it with "_R_" named.
File ---> Import;
Modify ---> Search Replace.
(Picture 06 _22) (Picture 06 _23)
The foot rig must be flexible and needs to allow the animator to
move different pivot points in order to achieve a good pose.
The foot receives the forward animation from the leg and drives
the movement of the leg in inverse kinematics ("IK Mode").
Reverse Foot technique
I usually use the reverse foot technique for his part of the rig.
The idea is to create an additional joint chain to drive the base
foot chain. This time, the new joint chain is complete different in
hierarchy from the first and is not a duplicate like the spine or
leg rig.
Start by connecting the toe joint to the ball joint and the ball
joint to the ankle :
For our Gaston character:
-
Select "GA00_L_foot_pinkie_a_JNT" shift select "GA00_L_
toe_JNT", press "p" to parent;
-
Select "GA00_L_foot_Index_a_JNT" shift select "GA00_L_
toe_JNT", press "p";
-
Select "GA00_L_foot_Thumb_a_JNT" shift select "GA00_L_
toe_JNT", press "p";
293
-
Select "GA00_L_toe_JNT" shift select "GA00_L_ankle_JNT",
press "p".
Picture 07 _03
Picture 07 _06
Perfect! Now the Reverse foot chain ("RF") will correctly drive
the base foot chain :), it is difficult and tedious directly animate
the joint we therefore need to create a control icon to drive
the foot rig.
Picture 07 _02
-
Create or import a new control for the foot. Freeze it
to the foot joint position and rename it. (e.g. "GA00_L_foot_CTL"), I
usually use a foot shaped nurbs curve.
The pivot of the foot control must be in the middle of the foot..
(Picture 07 _05)
Picture 07 _05
Now create the "reverse foot" joint chain using the joint creation
tool for our Gaston character:
-
Skeleton ---> Joint Tool (use the same placement options
was used in previous chapters);
-
Click on the heel of the foot (use the figure to aid in
understanding the joint position) ;
-
Click for a second time directly opposite our first joint (in
the approximate location of the tip of our character's longest
toe);
-
Create the next joint in the same location as our ball
joint (created earlier);
-
Our final joint must be placed in the same position as the
ankle joint. This position is very important.
Remember to rename the new joint chain correctly (e.g. "GA00_
L_heel_rf_JNT", "GA00_L_ball_rf_JNT", "GA00_L_ankle_rf_JNT").
- Temporarily hide the joint chain (select the RF joint chain and
press "CTRL+H") (Picture 07 _03)
Picture 07 _04
-
Parent the "GA00_L_rf_heel_JNT" under the control, the
main joint of the reverse foot system. This control fully drives
translations and rotations.
-
-
-
-
-
-
Directly connect (using connection editor window) the
"ankle_rot" attribute to "GA00_L_rf_ankle_JNT.rotateX";
-
Now connect "ball_swing" with "GA00_L_rf_ball_JNT.
rotateY";
-
"ball_rot" with "GA00_L_rf_ball_JNT.rotateX";
-
"heel_rot" with "GA00_L_rf_heel_JNT.rotateX".
-
"heel_swing" with "GA00_L_rf_heel_JNT.rotateY".
Now we will tackle the toes:
294
295
-
Create a new shape for the toe control, e.g. A circle.
-
Rename it as "GA00_L_toe_CTL";
-
Delete the construction history and place the control
inside the shape of the foot and set the pivot to correspond to
the joint that collect all the toes (e.g. "GA00_L_ball_JNT") ;
-
create a parent locator for
"GA00_L_toe_LOC"
"GA00_L_toe_CTL" called
-
parentConstrain the locator translations to the translations
of GA00_L_ball_JNT, and move this control under "notraf_
GRP";
Now add the toes control. Every toe joint will be driven in
rotation and spread attributes.
-
-
-
-
Picture 07 _09
toe control:
-f GA00_L_toe_CTL.pinkie_rot GA00_L_foot_pinkie_a_JNT.rotateX;
-f GA00_L_toe_CTL.pinkie_rot GA00_L_foot_pinkie_b_JNT.rotateX;
-f GA00_L_toe_CTL.pinkie_rot GA00_L_foot_pinkie_c_JNT.rotateX;
-f GA00_L_toe_CTL.pinkie_rot GA00_L_foot_pinkie_d_JNT.rotateX;
-f GA00_L_toe_CTL.pinkie_spread GA00_L_foot_pinkie_a_JNT.
(Picture 07 _08)
Picture 07 _08
GA00_L_foot_index_a_JNT.scaleX
GA00_L_foot_index_a_JNT.scaleY
GA00_L_foot_index_b_JNT.scaleX
GA00_L_foot_index_b_JNT.scaleY
GA00_L_foot_index_c_JNT.scaleX
GA00_L_foot_index_c_JNT.scaleY
-
Select the translations in the attribute editor then lock
and hide using RMB ---> Lock and Hide. (Picture 07 _07)
Picture 07 _07
296
connectAttr
connectAttr
connectAttr
connectAttr
connectAttr
rotateY;
//
-f
-f
-f
-f
-f
-f
-f
-f
GA00_L_toe_CTL.thumb_rot GA00_L_foot_thumb_a_JNT.rotateX;
GA00_L_toe_CTL.thumb_rot GA00_L_foot_thumb_b_JNT.rotateX;
GA00_L_toe_CTL.thumb_rot GA00_L_foot_thumb_c_JNT.rotateX;
GA00_L_toe_CTL.thumb_rot GA00_L_foot_thumb_d_JNT.rotateX;
-f
GA00_L_toe_CTL.thumb_spread
GA00_L_foot_thumb_a_JNT.
GA00_L_toe_CTL.index_rot GA00_L_foot_index_a_JNT.rotateX;
GA00_L_toe_CTL.index_rot GA00_L_foot_index_b_JNT.rotateX;
GA00_L_toe_CTL.index_rot GA00_L_foot_index_c_JNT.rotateX;
GA00_L_toe_CTL.index_rot GA00_L_foot_index_d_JNT.rotateX;
-f
GA00_L_toe_CTL.index_spread
GA00_L_foot_index_a_JNT.
=
=
=
=
=
=
1
1
1
1
1
1
*
*
*
*
*
*
(1/
(1/
(1/
(1/
(1/
(1/
GA00_L_foot_index_a_JNT.scaleZ);
GA00_L_foot_index_a_JNT.scaleZ);
GA00_L_foot_index_b_JNT.scaleZ);
GA00_L_foot_index_b_JNT.scaleZ);
GA00_L_foot_index_c_JNT.scaleZ);
GA00_L_foot_index_c_JNT.scaleZ);
GA00_L_foot_pinkie_a_JNT.scaleX
scaleZ);
GA00_L_foot_pinkie_a_JNT.scaleY
scaleZ);
GA00_L_foot_pinkie_b_JNT.scaleX
scaleZ);
GA00_L_foot_pinkie_b_JNT.scaleY
scaleZ);
GA00_L_foot_pinkie_c_JNT.scaleX
scaleZ);
GA00_L_foot_pinkie_c_JNT.scaleY
scaleZ);
(1/
GA00_L_foot_pinkie_a_JNT.
(1/
GA00_L_foot_pinkie_a_JNT.
(1/
GA00_L_foot_pinkie_b_JNT.
(1/
GA00_L_foot_pinkie_b_JNT.
(1/
GA00_L_foot_pinkie_c_JNT.
(1/
GA00_L_foot_pinkie_c_JNT.
GA00_L_foot_thumb_a_JNT.scaleX
GA00_L_foot_thumb_a_JNT.scaleY
GA00_L_foot_thumb_b_JNT.scaleX
GA00_L_foot_thumb_b_JNT.scaleY
GA00_L_foot_thumb_c_JNT.scaleX
GA00_L_foot_thumb_c_JNT.scaleY
1
1
1
1
1
1
=
=
=
=
=
=
*
*
*
*
*
*
(1/
(1/
(1/
(1/
(1/
(1/
GA00_L_foot_thumb_a_JNT.scaleZ);
GA00_L_foot_thumb_a_JNT.scaleZ);
GA00_L_foot_thumb_b_JNT.scaleZ);
GA00_L_foot_thumb_b_JNT.scaleZ);
GA00_L_foot_thumb_c_JNT.scaleZ);
GA00_L_foot_thumb_c_JNT.scaleZ);
"Thumb_scale"
"Index_scale"
"Pinkie_scale"
-
Connect "Thumb_scale" to GA00_L_foot_thumb_a_JNT.
scaleZ;
-
Connect the same "Thumb_scale" to GA00_L_foot_thumb_
b_JNT.scaleZ;
297
-
Now connect "Thumb_scale" to GA00_L_foot_thumb_c_
JNT.scaleZ;
Picture 07 _10
Picture 07 _14
Picture 07 _11
-f
GA00_L_toe_CTL.pinkie_scale
GA00_L_foot_pinkie_a_JNT.
-f
GA00_L_toe_CTL.pinkie_scale
GA00_L_foot_pinkie_b_JNT.
-f
GA00_L_toe_CTL.pinkie_scale
GA00_L_foot_pinkie_c_JNT.
- Click and hold on the the right arrow of the control node,
select ---> Single ---> all_rot; (Picture 07 _13)
Picture 07 _13
-
Click on the left arrow to connect the link on the "Plus
Minus" node input1D attribute and select input1D[n] ---> [0]
(Picture 07 _14)
This node receive as input a number of different attribute's
values and returns a result based on the choose Operation
(Sum,Subtract,Average).
-
Click on the left arrow to connect the link on the "Plus
Minus" node input1D attribute and select input1D[n] ---> [1]
-
Select now with the same procedure Output1D and
connect to the rotate X value of each index joint.
(Picture 07 _16)
-
Select the new node ("GA00_L_toe_Index_PMA") and
the toes control ("GA00_L_toe_CTL") and press "Input and Output
298
299
Picture 07 _16
searchReplaceNames
searchReplaceNames
searchReplaceNames
searchReplaceNames
searchReplaceNames
"_DMN1"
"_JNT1"
"_UPV1"
"_CLS1"
"_CRV1"
"_DMN"
"_JNT"
"_UPV"
"_CLS"
"_CRV"
"all";
"all";
"all";
"all";
"all";
-
Change the colour of the foot control shape to red
(colour convention for the right side) .
Picture 08 _01
Note:
The controls created using the "Brute force procedure" are
flipped and if you try to rotate using local axis they will move
in the opposite direction. To solve this issue you can fix it by
recreating all the controls without using Scale set to "-1" or use
global rotation axis.
Done, Enjoy :)
Different character foot
-
Create another two "PlusMinusAverage" node for the
other two toes and repeat the same procedure (thumb and
pinkie).
Picture 07 _18
Now that you have understood the procedure you can repeat
it for the "all_scale" attribute and connect the "scaleZ" value of
all the toe's joints.
(Picture 07 _17)
Picture 07 _17
-
rename this group with "GA00_R_leg_foot_rig_GRP" and
change the value of "ScaleX" to "-1";
-
Use the "search and replace" utility under Modify --->
Search and Replace Names. Fill the text field with search for
"_L_" and replace with "_R_" with "hierarchy" option .
Does this sound familiar? :) You would be right if you thought this
was the same procedure used for create the leg rig. Although
this has already been covered in earlier chapters, let us now
summarize the basic steps to create the base arm chains.
In Mel:
select -r GA00_R_arm_hand_rig_GRP ;
searchReplaceNames "_L_" "_R_" "hierarchy";
300
-
Duplicate the main chain and rename properly with
"_IK" suffix (e.g. "GA00_L_humerus_ik_JNT",
"GA00_L_elbow_ik_JNT"), remember to keep the axis orientation
equal to the original joints chain.
-
-
Click with the LMB on the first "IK" labelled joint and
select the last joint minus one to create the handle (remember
to rename it properly with the suffix "_IKN").
Picture 08 _02
Note:
This expression is based on my orient joint setting. If you have
set it up differently you may have to use a different rotation
"Elastic Mode" for the arm
-
Open the Outliner and select the effector node that is the
child of the first joint used for the IK handle and snap to the last
joint (pressing "v");
-
Create a curve that matches your number of joints using
the CV curve tool. Snap the cv points to the joints.
-
Create a locator to drive the IK handle. Snap it to the
last joint used for the IK handle, and rename properly (e.g.
"GA00_arm_ik_LOC"). Freeze transformations and parent the IK
handle under the locator;
-
Duplicate the main curve and offset it in the "Y" axes.
Create "offset upvector" curve and "Clusterize" both.
(Picture 08 _03)
-
Create a control to drive your main guide locator on the
first curve. Remember to delete history and freeze transformations
before parenting . (e.g GA00_R_arm_elx_0_CTL)
-
Directly connect the last wrist "elx" joint (only rotations) to
the wrist "elx" control. (Picture 08 _04)
Picture 08 _04
Picture 08 _03
-
Create a locator to drive the base joint, snap it to the
first joint used for the IK handle, and rename it properly (e.g.
"GA00_arm_base_ik_LOC"). Freeze transformations again .
-
-
Directly connect the last wrist "ik" joint's rotations to the
wrist "ik" locator control.
-
Create a parent group for the locator called "GA00_
arm_base_ik_GRP"
-
Create a circle (or whatever you want) to control the
shape. Snap the shape to the locator by pressing and holding
"v". Rename the shape properly and freeze the transformations
(e.g. "GA00_L_arm_ik_CTL").
The locators control the position of our arm(wrist).
Pole Vector
-
Create or import a control. Snap it to the knee then
move it in the 'z' axis enough to create a 45 degree angle
between the base of the IK handle and the position of the
control object (pole vector) .
-
-
Select the new control. Shift select the Ik handle and in
the menu:
-
(Picture 08 _02)
302
-
Create an attribute on
"arm_scale" (with a default value
-
Connect this new attribute
"GA00_L_arm_ik_CTL.arm_scale"
scaleZ", etc...)
"GA00_L_arm_ik_CTL" called
of "1");
to every "ScaleZ" attribute (e.g
and "GA00_L_elbow_ik_JNT.
Remember:
-
Create a locator for each cluster and place in the right
position using snap.
-
Directly connect the locators and relative clusters using the
connections editor (the locator must drive the relative cluster).
-
Now ParentConstrain the "offset" locator with the relative
"guide" locator with the "maintain offset" option enabled.
-
Create a joint for each base joints chain and orient them
with the same axes of the base joint chain.
-
Connect the joint to the curve using motionPath. Delete
the default U Value and set yours to match the position of the
relative base joint
GA00_L_ulna_ik_JNT.rotateZ = GA00_L_arm_ik_CTL.rotateX/2;
-
Repeat the "motion path" process using a new locator
"upv" for each "on curve" joint on the offset curve;
Now the rotation of the ulna joint is half the rotation of the
wrist.
-
Duplicate your base spine chain and rename your
joints with the "fk" suffix (e.g. GA00_R_humerus_JNT renamed to
GA00_R_humerus_fk_JNT and so on...).
-
Orient the joint with the same axes as the base joint
chain.
-
Create a Nurbs primitive circle (or load your custom "FK"
arm control shape), name it properly and snap it to the first
joint (base of the arm)
-
Create a Nurbs primitive circle (or load your custom "FK"
arm control shape), name it properly and snap it to the elbow
joint (elbow)
-
arm control shape), call that properly and snap to the last joint
(wrist)
-
Create a parent locator for each controls or for a fast
procedure you can use the "parent_loc" script
-
Create a hierarchy from the last FK LOC to the first (e.g.
. GA00_R_wrist_fk_LOC children of GA00_R_elbow_fk_LOC and
also GA00_R_elbow_fk_LOC children of GA00_R_humerus_fk_
LOC );
-
Picture 08 _06
We have already done the fix for the "IK mode". For the FK the
procedure is:
-
Parent "GA00_L_wrist_fk_LOC" under "GA00_L_elbow_
fk_CTL";
-
Create a parent group the "GA00_L_ulna_fk_CTL" called
"GA00_L_ulna_fk_GRP". Snap the pivot of that group to the same
position as the control.
-
Break the connection of the "rotateY" value on the
"GA00_L_ulna_fk_JNT" by pressing RMB on the rotateY in the
attributes panel and press "break connetion";
(Picture 08 _05b)
-
Connect the value of "IK" "FK" and "Elastic" to all the the
weight values of the related parentConstraint and scaleConstraint
on our base joint chain;
-
all the "_CLS" clusters;
-
all the locator and the locator "offset" and "_UPV" that
drive the two curves.
-
GA00_L_knee_ik_LOC;
-
the IKH node;
-
GA00_L_arm_ik_ikn_GRP;
-
-
-
-
-
Create or import a control shape for the "rigging system
driver", for example, I often use a handle shaped control and
snap it to the position of the first joint of the arm and parent
under "GA00_L_arm_root_LOC";
Start with:
-
Rename it "GA00_L_arm_root_CTL";
-
Select all the transformation attributes then RMB, select
"Lock and Hide Selected";
-
Group all the "_elx_CTL" rename the new group with this
name "GA00_L_arm_rig_elx_GRP";
-
Create an "Enum" type attribute called "IK_FK_Elastic"
and fill the enum name with :
-
parentConstrain "GA00_L_humerus_JNT" and "GA00_L_
humerus_elx_JNT";
-
parentConstrain "GA00_L_humerus_JNT" and "GA00_L_
humerus_fk_JNT;
-
parentConstrain "GA00_L_humerus_JNT" and "GA00_L_
humerus_ik_JNT;
-
Parent "GA00_L_rig_arm_elx_GRP"
arm_root_LOC";
-
-
-
-
scaleConstrain
humerus_ik_JNT;
"GA00_L_humerus_JNT"
and
"GA00_L_
-
Attributes ---> Add Attributes ---> Option name "Elastic",
type "Float" minimum value to 0 and maximum to 1, default value
to 0.
-
Connect "GA00_L_arm_root_LOC.ik" to "GA00_L_humerus_
JNT1.W0"
-
Connect "GA00_L_arm_root_LOC.fk" to "GA00_L_humerus_
JNT.W1"
-
Connect "GA00_L_arm_root_LOC.elastic" to "GA00_L_
humerus_JNT.W2"
Picture 08 _05b
-
Parent the locator
"GA00_L_arm_root_LOC";
under
"GA00_L_
"GA00_L_humerus_ik_LOC"
under
-
Create a parent group of "GA00_L_arm_ik_CTL" and
rename it (e.g"GA00_L_arm_ik_ctl_GRP");
-
ParentConstrain that group ("GA00_L_arm_ik_ctl_GRP") to
"GA00_L_arm_root_LOC";
-
Connect using the connection editor "GA00_L_arm_root_
LOC.ik" to "W0" of the previous parentConstraint
-
parent GA00_L_humerus_fk_LOC under GA00_L_arm_
root_LOC;
-
-
-
-
-
"IK";
"FK";
"Elastic";
-
Select the new control ("GA00_L_arm_root_CTL") and
click and hold RMB and press "Set Driven Key..." to open the
window.
-
Select the driver attribute ("IK_FK_Elastic") and press "Load
Driver".
-
Select the driven attributes ("IK","FK","Elastic") and press
"Load Driven".
-
Select "IK" option on "GA00_L_arm_root_CTL.IK_FK_Elastic"
attribute (keep the Driven Key Window open).
-
-
-
-
"GA00_L_arm_root_LOC.IK" to 1.
"GA00_L_arm_root_LOC.FK" to 0.
"GA00_L_arm_root_LOC.Elastic" to 0.
305
Picture 09 _02
Picture 09 _03
-
Connect all the shape visibility attributes of each rig
control to the relative attribute on "GA00_L_arm_root_LOC ";
Picture 09 _01
Picture 08 _07
-
Parent under the "GA00_L_fingers_LOC"
"GA00_L_hand_index_middle_GRP";
The hand rig is mainly based on the finger rig and the wrist
movement is based on its own free movement or on the arm
orientation.
-
Start with creating two locators, one on the middle hand
joint and one in the wrist position, freeze transformations and
rename correctly (e.g. "GA00_L_fingers_LOC" and "GA00_L_
wrist_LOC");
-
Select the root joint of the index joint chain and the
middle finger root joint chain and create a parent group, snap
the pivot to the middle hand joint (e.g. "GA00_L_hand_index_
middle_GRP");
-
Select the root joint of the pinkie finger and create
another group, rename correctly and snap the pivot of the
group in the same position as that of the wrist locator (e.g.
"GA00_L_hand_pinkie_GRP") ;
-
Change the pivot of the root joint of the pinkie finger to
the same position as that of the wrist.
-
Create a parent group of the thumb root joint and snap
it to the wrist locator, rename it correctly (e.g. "GA00_L_hand_
thumb_GRP") (Picture 09 _02)
306
-
LOC";
Parent
under
"GA00_L_wrist_LOC"
the
group
"GA00_L_fingers_
-
Freeze the translations of the entire parent group of the
fingers;
We have created a hierarchy for these fingers with the wrist.
Now the control to drive the hand:
-
Create a shape for the finger control and the main
hand/wrist control, snap to the better position and freeze
transformations, rename it correctly. (e.g. "GA00_hand_CTL"
"GA00_index_CTL" "GA00_middle_CTL" "GA00_pinkie_CTL" "GA00_
thumb_CTL");
-
Change the pivot of main "hand" shape to the Wrist
locator;
-
307
-
Create three attributes on each finger control to drive
the rotations of each finger joint. (e.g."index_a_rot" , "index_b_
rot", "index_c_rot" )
In Mel:
// index attributes
addAttr -ln index_a_rot -at double GA00_index_CTL;
setAttr -e -keyable true GA00_index_CTL.index_a_rot;
addAttr -ln index_b_rot -at double GA00_index_CTL;
setAttr -e -keyable true GA00_index_CTL.index_b_rot;
addAttr -ln index_c_rot -at double GA00_index_CTL;
setAttr -e -keyable true GA00_index_CTL.index_c_rot;
// middle attributes
addAttr -ln middle_a_rot
setAttr -e -keyable true
addAttr -ln middle_b_rot
setAttr -e -keyable true
addAttr -ln middle_c_rot
setAttr -e -keyable true
// pinkie attributes
addAttr -ln pinkie_a_rot
setAttr -e -keyable true
addAttr -ln pinkie_b_rot
setAttr -e -keyable true
addAttr -ln pinkie_c_rot
setAttr -e -keyable true
addAttr
setAttr
addAttr
setAttr
addAttr
setAttr
addAttr
setAttr
// roll attr
-
Create two more controls on each finger in order to
drive the spread and the scale of each of the finger controls.
(e.g. "index_spread" "index_scale");
-
create an additional attribute on the thumb and the
pinkie to drive the palm side. (e.g. "thumb_palm" "pinkie_palm");
- Finally, create a "roll" attribute on each finger (e.g. "thumb_
roll")
Like the feet, the procedure for animating the fingers is almost
the same. As an example, "Thumb_a_rot" and "hand_global_rot"
is connected with a plusMinusAverage node to the "GA00_L_
hand_thumb_a_JNT" , and so on for the other finger rotation
attributes:
-
Create a "plusMinusAverage" node. In order to create
this, open the Hypershade Window, Create ---> General Utilities
---> Plus Minus Average and rename it correctly as"GA00_L_
hand_Index_PMA", using the "sum" option.
-
Select the new node ("GA00_L_hand_Index_PMA") and
the index finger ctrl ("GA00_L_index_CTL") and press "Input and
Output Connections" in the Hypershade windows.
-
Click on left arrow to connect the link on the "Plus Minus"
node input1D attribute and select input1D[n] ---> [0].
-
Now select the "index_rot" on the left node ("GA00_L_
index_CTL").
//
-
Click on the left arrow to connect the link on the "Plus
Minus" node input1D attribute and select input1D[n] ---> [1].
(Picture 09 _05)
-
Using the same procedure Output1D, now select and
connect to the rotate X on "GA00_L_hand_index_a_JNT".
Repeat the same procedure for each finger control.
in Mel:
308
It will insert the two adder attributes and finally, the boosted
attribute and the script will create and automatically connect
the new plusMinusAverage node and the attributes :)
//
// adder booster
global
proc
booster_add_attr
(string
$boosterattr,
$boosteraddattr,string $boostedattr,string $type)
{
string $boosterattr;
// thumb attributes
addAttr -ln thumb_a_rot -at double GA00_thumb_CTL;
setAttr -e -keyable true GA00_thumb_CTL.thumb_a_rot;
addAttr -ln thumb_b_rot -at double GA00_thumb_CTL;
setAttr -e -keyable true GA00_thumb_CTL.thumb_b_rot;
addAttr -ln thumb_c_rot -at double GA00_thumb_CTL;
setAttr -e -keyable true GA00_thumb_CTL.thumb_c_rot;
//
Picture 09 _05
string
string $boosteraddattr;
string $boostedattr;
$basename = `basenameEx($boostedattr)`;
string $stripnamex = `substring $basename 0 (size($basename)-3)`;
string $stripname = ($stripnamex+$type+"_");
createNode plusMinusAverage;
rename plusMinusAverage1 ($stripname+"PMA");
connectAttr -f $boosterattr ($stripname+"PMA.input1D[0]");
connectAttr -f $boosteraddattr ($stripname+"PMA.input1D[1]");
connectAttr -f ($stripname+"PMA.output1D") $boostedattr;
}
// End
Enjoy :)
309
-
Connect manually "GA00_index_CTL.index_spread" to
"GA00_L_hand_index_a_JNT.rotateY";
-
"GA00_middle_CTL.middle_spread"
to
"GA00_L_hand_
middle_a_JNT.rotateY";
-
"GA00_pinkie_CTL.pinkie_spread"
to
"GA00_L_hand_
pinkie_a_JNT.rotateY";
-
"GA00_pinkie_CTL.thumb_spread"
to
"GA00_L_hand_
thumb_a_JNT.rotateX";
-
Connect manually "GA00_index_CTL.index_roll" to "GA00_
L_hand_index_a_JNT.rotateZ";
-
"GA00_middle_CTL.middle_roll" to "GA00_L_hand_middle_
a_JNT.rotateZ";
-
"GA00_pinkie_CTL.pinkie_roll" to "GA00_L_hand_pinkie_
a_JNT.rotateZ";
-
"GA00_pinkie_CTL.thumb_roll" to "GA00_L_hand_thumb_
a_JNT.rotateX";
Squash and stretch for fingers
=
=
=
=
=
=
1
1
1
1
1
1
*
*
*
*
*
*
(1/
(1/
(1/
(1/
(1/
(1/
GA00_L_hand_index_a_JNT.scaleZ);
GA00_L_hand_index_a_JNT.scaleZ);
GA00_L_hand_index_b_JNT.scaleZ);
GA00_L_hand_index_b_JNT.scaleZ);
GA00_L_hand_index_c_JNT.scaleZ);
GA00_L_hand_index_c_JNT.scaleZ);
GA00_L_hand_middle_a_JNT.scaleX
scaleZ);
GA00_L_hand_middle_a_JNT.scaleY
scaleZ);
GA00_L_hand_middle_b_JNT.scaleX
scaleZ);
GA00_L_hand_middle_b_JNT.scaleY
scaleZ);
GA00_L_hand_middle_c_JNT.scaleX
scaleZ);
GA00_L_hand_middle_c_JNT.scaleY
scaleZ);
(1/
GA00_L_hand_middle_a_JNT.
(1/
GA00_L_hand_middle_a_JNT.
(1/
GA00_L_hand_middle_b_JNT.
(1/
GA00_L_hand_middle_b_JNT.
(1/
GA00_L_hand_middle_c_JNT.
(1/
GA00_L_hand_middle_c_JNT.
GA00_L_hand_pinkie_a_JNT.scaleX
scaleZ);
GA00_L_hand_pinkie_a_JNT.scaleY
scaleZ);
GA00_L_hand_pinkie_b_JNT.scaleX
scaleZ);
GA00_L_hand_pinkie_b_JNT.scaleY
scaleZ);
GA00_L_hand_pinkie_c_JNT.scaleX
scaleZ);
GA00_L_hand_pinkie_c_JNT.scaleY
(1/
GA00_L_hand_pinkie_a_JNT.
(1/
GA00_L_hand_pinkie_a_JNT.
(1/
GA00_L_hand_pinkie_b_JNT.
(1/
GA00_L_hand_pinkie_b_JNT.
(1/
GA00_L_hand_pinkie_c_JNT.
(1/
GA00_L_hand_pinkie_c_JNT.
310
scaleZ);
GA00_L_hand_thumb_a_JNT.scaleX
GA00_L_hand_thumb_a_JNT.scaleY
GA00_L_hand_thumb_b_JNT.scaleX
GA00_L_hand_thumb_b_JNT.scaleY
GA00_L_hand_thumb_c_JNT.scaleX
GA00_L_hand_thumb_c_JNT.scaleY
1
1
1
1
1
1
*
*
*
*
*
*
(1/
(1/
(1/
(1/
(1/
(1/
GA00_L_hand_thumb_a_JNT.scaleZ);
GA00_L_hand_thumb_a_JNT.scaleZ);
GA00_L_hand_thumb_b_JNT.scaleZ);
GA00_L_hand_thumb_b_JNT.scaleZ);
GA00_L_hand_thumb_c_JNT.scaleZ);
GA00_L_hand_thumb_c_JNT.scaleZ);
-
Connect "GA00_thumb_CTL.thumb_palm"
hand_thumb_GRP.rotateX";
to
"GA00_L_
-
Connect "GA00_thumb_CTL.pinkie_palm"
hand_pinkie_GRP.rotateX";
to
"GA00_L_
Final connections:
-
Parent
-
Create a parent group of the "GA00_hand_CTL" called
"GA00_hand_root_GRP"with the same pivot as the wrist locator;
-
Create a parent locator of the "GA00_hand_GRP" called
"GA00_hand_root_LOC".
booster_add_attr
("GA00_middle_CTL.middle_scale","GA00_hand_CTL.global_
scale", "GA00_L_hand_middle_a_JNT.scaleZ");
booster_add_attr
("GA00_middle_CTL.middle_scale","GA00_hand_CTL.global_
scale", "GA00_L_hand_middle_b_JNT.scaleZ");
booster_add_attr
("GA00_middle_CTL.middle_scale","GA00_hand_CTL.global_
scale", "GA00_L_hand_middle_c_JNT.scaleZ");
-
pointConstrain "GA00_hand_root_LOC" to "GA00_L_wrist_
JNT" keeping the offset option turned "on";
booster_add_attr
("GA00_pinkie_CTL.pinkie_scale","GA00_hand_CTL.global_
scale", "GA00_L_hand_pinkie_a_JNT.scaleZ");
booster_add_attr
("GA00_pinkie_CTL.pinkie_scale","GA00_hand_CTL.global_
scale", "GA00_L_hand_pinkie_b_JNT.scaleZ");
booster_add_attr
("GA00_pinkie_CTL.pinkie_scale","GA00_hand_CTL.global_
scale", "GA00_L_hand_pinkie_c_JNT.scaleZ");
-
LOC";
booster_add_attr
("GA00_thumb_CTL.thumb_scale","GA00_hand_CTL.global_
scale", "GA00_L_hand_thumb_a_JNT.scaleZ");
booster_add_attr
("GA00_thumb_CTL.thumb_scale","GA00_hand_CTL.global_
scale", "GA00_L_hand_thumb_b_JNT.scaleZ");
booster_add_attr
("GA00_thumb_CTL.thumb_scale","GA00_hand_CTL.global_
scale", "GA00_L_hand_thumb_c_JNT.scaleZ");
-
aimConstrain "GA00_hand_GRP" to "GA00_L_ulna_JNT"
keeping the offset option turned "on" and using the world up
type "vector"option;
parentConstrain "GA00_L_hand_JNT" to "GA00_L_wrist_
-
Create a new "boolean" type attribute on "GA00_L_
hand_CTL" called "hand_orient" and connect with the "W0"
weight value of the aim constrain on "GA00_hand_GRP";
-
start by breaking the connection on "GA_L_ulna_fk_JNT.
rotateZ"
open the expression editor and replace the old expression with
this new one:
GA00_L_ulna_ik_JNT.rotateZ = (GA00_L_hand_CTL.rotateX+GA00_
L_ulna_fk_CTL.rotateY)/2;
GA00_L_ulna_fk_JNT.rotateZ = (GA00_L_hand_CTL.rotateX+GA00_
L_ulna_fk_CTL.rotateY)/2;
Repeat for the right hand side.
Let's go to the next connection. (Picture 10 _02)
Connection Foot - Ankle
Picture 10 _02
-
Create a parent group of all the "GA00_L_foot_CTL"
called "GA00_L_foot_ctl_GRP" ;
-
parentConstrain "GA00_L_foot_ctl_GRP" to the "GA00_L_
tibia_c_fk_CTL" "GA00_L_tibia_c_elx_CTL";
-
Create a driven key between "GA00_L_leg_root_CTL.
IK_FK_Elastic" and the "W0" weight ("elx" ctl) and "W1" weight ("fk"
ctl) :
-
When "IK_FK_Elastic" is set to "IK" set "W0" "W1" to "0";
-
to "1";
-
then else "IK_FK_Elastic" is set to "Elastic" set "W0" to "1"
and "W1" to "0"; (Picture 10 _03)
Picture 10 _03
When the leg rig is in "IK" the foot control needs to become the
driver of the "GA00_L_leg_ik_ikn_GRP". This group is already
controlled by the leg root locator in "FK mode" and "Elastic
Mode" by a parentConstraint but we need to create another
one to drive the "IK mode" rig :
-
parentConstraint "GA00_L_leg_ik_ikn_GRP" to the last
joint of the reverse foot ankle and create a driven key to drive
the weight value. Turn it on when When "IK_FK_Elastic" is set to
"IK" and turn off when (value of "0") in "FK" and "Elastic".
-
Create a "float" type attribute called "leg_scale" with
a default value of "1" on "GA00_L_foot_CTL" and connect using
connections editor with the same name attribute on "GA00_R_
leg_ik_ikn_LOC";
Now we can control the scale value of the leg using the foot
ctrl :)
-
For future binding parent the "GA00_L_ball_JNT" to
the "GA00_L_ankle_JNT", this connection does not break our
previous connections.
Repeat for the other leg (right side).
Connection Legs - Hip
First create a control shape for the hip and the pelvis and place
with its pivot in the same position of the root control as the
spine locator. Freeze transformations and rename properly (e.g.
"GA00_M_pelvis_CTL" "GA00_hip_CTL"). Create a parent locator
for these two controls.
-
Picture 10 _05
-
parentContrain "GA00_R_leg_root_LOC" with "GA00_R_
pelvis_LOC" and "GA00_L_leg_root_LOC" with "GA00_L_pelvis_
LOC", the hip locator must drive the leg root locators;
Good now the two leg rig are connected to the pelvis :)
Connection Spine - Hip
-
parentContraint "GA00_M_spine_0_elx_CTL" to "GA00_M_
pelvis_CTL" and the "GA00_M_spine_0_CTL" with "GA00_hip_CTL";
-
Hide the shape of "GA00_M_spine_0_elx_CTL" and "GA00_
M_spine_0_CTL". Rename these two controls with the "_oCTL"
suffix ("old control"). We do not need those anymore.
(Picture 10 _04)
Picture 10 _04
Import the two rig module of the left and right legs.
-
Create another two locators. Snap one to the left leg
root locator and the other to the right leg root locator. Freeze
transformations and rename "GA00_L_hip_LOC" and "GA00_R_
hip_LOC";
-
Put "GA00_pelvis_LOC" under "GA00_hip_CTL" , "GA00_L_
hip_LOC" and "GA00_R_hip_LOC" under "GA00_M_pelvis_CTL"
(Picture 10 _05)
312
313
-
parentContrain "GA00_M_tail_guide_SHP" to "GA00_M_
spine_0_JNT";
-
Import the tail rig module and parentContraint "GA00_
M_tail_root_LOC" to the "GA00_M_pelvis_CTL" whilst maintaining
the offset.
-
Create a nurbs semi sphere and change the shape so
that it approximately fits the bottom part of Gaston. Rename it
with "GA00_M_tail_guide_SHP";
-
In the Render Stats panel tab turn off the "Primary
Visibility" option of our sphere. We don't want to render this
object; (Picture 10 _07)
Picture 10 _09
objects;
-
Create a control shape for the shoulder. Snap it to the
arm root locator. Freeze transformations and rename properly
(e.g. "GA00_L_shoulder_CTL"). Repeat for the other sides.
-
Hide the shape of "GA00_M_tail_0_CTL" . Rename it with
the "_oCTL" suffix ("GA00_M_tail_0_oCTL"). We do not need these
anymore.
-
Create a parent locator of the two controls named
"GA00_L_shoulder_ctl_LOC"
and
"GA00_R_shoulder_ctl_LOC"
respectively. (Picture 10 _11)
Picture 10 _11
Picture 10 _06
Picture 10 _07
Start with:
-
Create two locators called "GA00_L_shoulder_LOC" and
"GA00_R_shoulder_LOC". Snap each respectively to "GA00_
L_arm_root_LOC" and "GA00_R_arm_root_LOC".
Freeze the
transformations;
-
Create parent groups with the same pivot as these two
shoulder locators and rename them as "GA00_L_shoulder_loc_
GRP" and "GA00_R_shoulder_loc_GRP";
-
Create a nurbs semi sphere "GA00_M_chest_guide_SHP",
and place it at the origin of the chest joint. Use a radius value
to calculate the position of the two shoulder locators;
(Picture 10 _10)
Connection Arm - Shoulder - Spine
Picture 10 _10
Constraints:
-
parentConstrain
"GA00_L_shoulder_CTL";
"GA00_L_shoulder_loc_GRP"
the
-
parentConstrain "GA00_L_shoulder_LOC" to the "GA00_L_
shoulder_CTL";
Import the file with the arm rigs (left and right sides).
-
geometryConstrain "GA00_L_shoulder_loc_GRP" to the
"GA00_M_chest_guide_SHP";
-
parentContrain "GA00_L_arm_root_LOC" to the "GA00_L_
shoulder_LOC";
-
-
Connect this new attribute to the
parentContraint on "GA00_L_shoulder_LOC".
-
parentContrain "GA00_M_chest_guide_SHP" to "GA00_M_
spine_2_JNT" (chest joint);
-
On the Render Stats panel tab turn off the "Primary
Visibility" option of our sphere. We don't want to render these
314
to
"W0"
of
the
-
Create a new "boolean" attribute on "GA00_L_shoulder_
CTL" called "hand_follow".
-
Create a parent group of the "GA00_L_arm_ik_CTL"
called "GA00_L_arm_ik_ctl_GRP".
-
parentContrain "GA00_L_arm_ik_ctl_GRP" to the "GA00_
L_shoulder_CTL".
-
Connect "hand_follow" value with the
parentContraint on "GA00_L_arm_ik_ctl_GRP".
"W0"
of
the
-
Create two joints called "GA00_L_shoulder_JNT" and
"GA00_R_shoulder_JNT" place near the "GA00_L_shoulder_LOC"
and "GA00_R_shoulder_LOC" respectively.
(Picture 10 _21)
Picture 10 _13
-
"GA00_R_arm_root_LOC.ScaleZ" to "-1" value;
-
"GA00_R_arm_ik_ctl_GRP" the value for "ScaleX" and
"ScaleZ" to "-1";
Here we will only connect the head joint to the neck rig because
later we will add the full head facial setup for Gaston.
(Picture 10 _15)
Picture 10 _15
Chest Control
Picture 10 _21
-
Parent the two parent locator of the shoulder controls
("GA00_L_shoulder_ctl_LOC"
and
"GA00_R_shoulder_ctl_LOC")
under "GA00_M_chest_CTL" ; (Picture 10 _14)
Picture 10 _13
-
Parent the new chest control "GA00_M_chest_CTL" under
"GA00_M_spine_1_CTL".
-
parentConstrain these two joints to the respective shoulder
locator (e.g. "GA00_R_shoulder_JNT" constrained to "GA00_R_
shoulder_LOC");
-
CTL".
-
Create a group called "GA00_notrasf_shoulder_GRP" and
parent under "GA00_R_shoulder_JNT" "GA00_R_shoulder_JNT" ,
"GA00_R_shoulder_loc_GRP" and "GA00_L_shoulder_loc_GRP"
-
Turn off the visibility of the "GA00_M_spine_2_CTL" shape
and give it a "_oCTL" suffix (e.g. "GA00_M_spine_2_oCTL"). This is
not animatable now; (Picture 10 _13)
Parent
-
joint.
-
Rename "GA00_M_spine_3_CTL" to "GA00_M_neck_CTL"
and "GA00_M_spine_3_elx_CTL" to "GA00_M_neck_elx_CTL";
-
Unhide "GA00_M_chest_guide_SHP";
-
Hide "GA00_M_chest_guide_SHP" and turn off the visibility
of the two shoulder locators.
Note:
If you have used the "brute force" procedure to duplicate the
right hand side arm rig and hand rig you may need to change
the value of "ScaleZ" and "ScaleX" for some groups or locators. If
at creation some constraints cause "flipping" of the entire hand
module rig.
For example, in my rig, I have changed :
-
parentContrain "GA00_head_loc_GRP" to the "GA00_M_
neck_elx_CTL";
-
geometryConstrain "GA00_head_loc_GRP" to "GA00_M_
chest_guide_SHP";
-
parentContrain "GA00_head_LOC" to the "GA00_M_neck_
elx_CTL"; (Picture 10 _16)
316
Done! :)
317
Picture 10 _16
Picture 10 _17
-
parent
body_CTL";
"GA00_squash_hold_GRP"
under
Picture 10 _19
"GA00_local_
-
Create an additional shape called "GA00_name_SHP",
parent under "GA00_global_body_CTL";
This object will collect different attributes to setup some preference
for Gaston, such as turning the visibility of the controls on and
off, etc...
-
Create "boolean" type attributes on "GA00_name_SHP"
called "L_arm_ctl_vis", "L_leg_ctl_vis", "R_arm_ctl_vis", "R_leg_ctl_
vis", "M_spine_ctl_vis", "M_tail_ctl_vis";
-
Connect each attribute to the respective "visibility" attribute
shape. If the visibility attribute of that control is already connected
you can use the "Lod visibility" attribute of each control. (Picture
10 _18)
-
Create a "boolean" type attribute called "free_neck" on
"GA00_M_neck_elx_CTL";
-
Connect the "free_neck" attribute to the "W0" value of
the parentConstraint of the "GA00_head_LOC";
-
parentConstrain "GA00_M_head_a_JNT" to the "GA00_
M_neck_elx_CTL";
-
Hide "GA00_M_chest_guide_SHP"
"GA00_head_LOC";
and
the
shape
of
Now we can control all the movement of the neck and head
of Gaston. Enjoy!
Global Controls Rig
-
-
-
-
-
-
:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Create a group of all the squash system "hold" objects
for the tail (e.g. "GA00_M_tail_0_squash_start_hold_LOC" "GA00_
M_tail_0_squash_end_hold_LOC" "GA00_M_tail_0_squash_hold_
DMN") and rename it "GA00_squash_hold_GRP";
318
Picture 10 _18
-
Create a group called "GA00_notrasf_GRP" and another
one "GA00_root_GRP";
Cleanup
select "*_CTL";
319
Picture 10 _24
Picture 11 _03
job
an
aid
the
select
select
select
select
select
//
-tgl
-tgl
-tgl
-tgl
-tgl
GA00_R_hand_pinkie_a_JNT ;
GA00_M_tail_0_JNT ;
GA00_L_shoulder_JNT ;
GA00_R_shoulder_JNT ;
GA00_body_GEO ;
-
Now press Skin ---> Bind Skin ---> Smooth Bind with
options , reset the tool and use the default setting ---> Bind Skin.
(Picture 11 _02)
Picture 11 _02
Picture 11 _01
Spine: ("GA00_M_spine_0_JNT");
-
JNT");
Shoulders:
("GA00_L_shoulder_JNT","GA00_R_shoulder_
-
Fingers:
("GA00_L_hand_pinkie_a_JNT",
"GA00_L_
hand_middle_a_JNT",
"GA00_L_hand_index_a_JNT",
"GA00_
L_hand_thumb_a_JNT"
and
"GA00_R_hand_pinkie_a_JNT",
"GA00_R_hand_middle_a_JNT","GA00_R_hand_index_a_JNT",
"GA00_R_hand_thumb_a_JNT");
That's it.....
Gooooood!! finally we have finished the full body rig!! well
done!!
Ready for the body mesh skin binding! (Picture 10 _25)
Picture 10 _25
Start with:
-
Turn Gaston's geometry layer into "selectable" mode, press
the button in the display layer panel; (Picture 11 _03)
320
Tail ("GA00_M_tail_0_JNT");
In Mel:
//
select
select
select
select
select
select
select
select
select
select
select
select
select
Skin ---> Edit Smooth Skin ---> Paint Skin Weights Tool;
-r GA00_L_femur_JNT ;
-tgl GA00_R_femur_JNT ;
-tgl GA00_M_spine_0_JNT ;
-tgl GA00_L_humerus_JNT ;
-tgl GA00_M_head_a_JNT ;
-tgl GA00_R_humerus_JNT ;
-tgl GA00_L_hand_pinkie_a_JNT ;
-tgl GA00_L_hand_middle_a_JNT ;
-tgl GA00_L_hand_index_a_JNT ;
-tgl GA00_L_hand_thumb_a_JNT ;
-tgl GA00_R_hand_thumb_a_JNT ;
-tgl GA00_R_hand_index_a_JNT ;
-tgl GA00_R_hand_middle_a_JNT ;
(Picture 11 _04)
321
Picture 11 _04
Picture 11 _14
Brush
You can choose the size of your paint brush, the radius and the
opacity. When you are painting you can press and hold "b" key
button use the MMB (scrolling) to change the radius.
-
Stroke
Paint Weights
When we use this paint tool a "Paint Skin Weights Tool" panel will
be appear automatically on the right of your viewport.
(Picture 11 _09)
Picture 11 _09
Influence
In this panel all the joints which are bound to our smooth
skinned geometry are listed. They will be sorted alphabetically
order or by hierarchy.
If you have correctly named all your skeleton joints it should not
be hard for you to find the selection that you want.
The "Toggle Weights on Selected" button is really useful if you
want to keep and hold the value of one or more joints when
you use the "Smooth" paint operation.
322
32 3
Picture 11 _13
Picture 11 _14
When you are satisfied with your painted left side weights you
can easily mirror (if you have a good uv map, no overlapping
) to the right side using "Mirror Skin Weights Tool":
-
Skin ---> Edit Smooth Skin ---> Mirror Skin Weights with
option box , mirror across "YZ" and "positive" direction.
(Picture 11 _07) (Picture 11 _08)
Use the "Smooth" paint operation to fix and obviously smooth the
influence between joints. (Picture 11 _12) (Picture 11 _13)
Picture 11 _07
Picture 11 _12
-
Skin ---> Edit Smooth Skin ---> Prune Small Weights with
option box. Choose the more appropriate value for your scene;
(Picture 11 _15)
Picture 11 _15
Picture 11 _08
324
325
Picture 12 _03
Picture 11 _06
Picture 11 _05
-
Create two nurbs sphere object and place them in
the positions shown in the picture. Freeze transformations and
rename them "GA00_L_femur_SCL " and "GA00_R_femur_SCL ";
-
parentConstrain these two objects to the relative femur
joint "GA00_L_femur_JNT"; (Picture 12 _02)
Picture 11 _06
Picture 12 _02
-
Select the body mesh and the "GA00_R_femur_SCL " and
press in the menu:
Deform ---> Create Sculpt Deformer with option , mode "flip" ,
inside mode "ring",
Max Displacement value "0.100", Dropoff Distance value "0.6".
(Picture 12 _03) (Picture 12 _01)
326
327
-
Hide the two sculpt spheres and parent under "notrasf"
group;
Done! You can also add more sculpt objects to maintain, for
example, the volume of the arm. (Picture 12 _04)
Picture 12 _04
Picture 12 _07
-
Create a joint and place it in the middle of the belly,
rename it "GA00_belly_JNT";
Picture 12 _09
-
Import a control shape like the knee pole vector control
and snap it to the locator. Move +2 in "translateZ"
and then
freeze transformations and rename it "GA00_belly_CTL";
-
Create a parent locator of that control. Freeze the
transformations and rename it properly "GA00_belly_LOC";
-
Parent the belly control, "GA00_belly_CTL", under "GA00_
belly_LOC".
-
Parent "GA00_belly_JNT" under
(Picture 12 _06)
"GA00_belly_CTL";
Picture 12 _06
-
Use the paint skin tool to paint the weight of the belly
joint; (Picture 12 _08)
Picture 12 _08
Picture 12 _05
328
329
In this window first select the set and then click on the belly
control to add it. (Picture 12 _11)
Picture 12 _12
Picture 12 _11
-
Change the value of Low Bound to "0" and High Bound
to "2". Then place the Nonlinear deformer at the base of
Gaston, the same place as the "GA00_nonlin_base_CTL";
(Picture 12 _14) (Picture 12 _15)
Picture 12 _16
Picture 12 _14
Some connections:
Picture 12 _15
-
Connect the "GA00_nonlin_top_CTL.translateY" with the
value "factor" of the squash Nonlinear deformer;
-
Connect the "GA00_nonlin_top_CTL.rotateY" attribute with
"twist1.endAngle";
-
Connect the "GA00_nonlin_base_CTL.rotateY" attribute
with "twist1.startAngle";
-
Connect the "GA00_nonlin_top_CTL.translateX" attribute
with "bend1.curvature";
Start with:
-
Create two controls with a shape similar to the picture
and put one at the base of Gaston and the other a little
bit above to the head. Freeze transformations and rename it
respectively "GA00_nonlin_base_CTL" and "GA00_nonlin_top_CTL";
(Picture 12 _12)
-
Deform ---> Create Nonlinear ---> Squash
(Picture 12 _13)
-
Connect the "GA00_nonlin_top_CTL.translateZ" attribute
with "bend2.curvature";
-
Create a new "boolean" type attribute on GA00_name_
SHP called "nonlinear_ctl_vis" and connect with the shape
visibility of the two Nonlinear controls.
Picture 12 _13
-
Parent the "GA00_nonlin_base_CTL"
control of Gaston ("GA00_local_body_CTL");
under
the
local
Done :)
(Picture 12 _17)
-
Repeat the same process to create the two bends (the
second one rotated of -90 degree on the Y axes) and a twist
Nonlinear deformer;
In the Outliner the hierarchy will appear like this:
(Picture 12 _16)
330
331
Picture 12 _17-18
Picture 13 _02
13 _Facial Rig
Picture 12 _20
Picture 13 _01
Picture 13 _03
Picture 12 _21
Picture 12 _19
-
Parent "GA00_mvp_CTL" under "GA00_global_body_CTL".
-
Add this new control to the selection set ("GA00_body_
controls_SET");
Remember you can only use this control to change the rotation
point of Gaston at the beginning of your animation because
if you alter it more than once you will have weird global
movements.
-
Connect "GA00_mvp_CTL" translations to the "Rotate Pivot"
attribute in the "GA00_local_body_ctl_LOC" and directly connect
the rotations to the rotation of the locator.
-
Eye animation rig : aiming
animation;
-
Eye Blink setup;
-
Eyebrow animation rig ;
-
Jaw animation rig ;
-
Mouth animation rig;
-
Tongue animation rig;
-
Ear animation rig;
of
the
eye
and
pupil
-
Create a parent locator for left and right eye controls
called respectively "GA00_R_eye_LOC" and "GA00_L_eye_
LOC", place both under "GA00_M_eye_aim_CTL", freeze the
transformations. (Picture 13 _04)
Picture 13 _04
Eyes Setup
333
Select the pupil's vertex of the left eye mesh and press:
-
Create a parent group of "GA00_L_eye_GEO", rename it
"GA00_L_eye_GRP";
-
Select the left eye control "GA00_L_eye_CTL" shift select
the "GA00_L_eye_GRP" and press:
Constrain ---> Aim with "maintain offset" option enabled
and "none" with world up type. (Picture 13 _07)
Picture 13 _07
Picture 13 _05
Picture 13 _06
33 4
expression
editor
window,
add
new
335
GA00_R_eye_LOC.translateX = - GA00_L_eye_LOC.translateX;
- Connect "GA00_M_eye_aim_CTL.cross_eyed" to "GA00_L_eye_
LOC.translateX";
This "cross_eyed" attribute drives the position of the both eye
locators allowing for the eyes to reach both cross eyed and
wall eyed positions. (Picture 13 _08)
-
Add this new joint to the skin cluster deformer. Select the
joint and shift select the mesh :
Skin ---> Edit Smooth Skin ---> Add Influence with option box. Set
"Lock Weights"on and default weight value "0";
(Picture 13 _10)
Picture 13 _12
Picture 13 _10
Picture 13 _08
-
Paint the weight of this new joint using "Paint Skin Weight
Tool", rotate the "X" joint value to reach the upper blink position
of the mesh vertex point; (Picture 13 _11)
Picture 13 _13
Picture 13 _11
Blink animation setup
-
Add four "float" type attributes called "L_ublink" "R_ublink"
"L_lblink" "R_lblink", these attribute will drive the rotation "X" of
our blink joint;
Picture 13 _09
-
create another joint in the same position as the previous
and rename it "GA00_L_lblink_JNT";
-
add it to the skin cluster and paint the weight to reach
the lower blink position;
(Picture 13 _12) (Picture 13 _13)
-
Now select
"GA00_R_ublink_JNT" "GA00_R_lblink_JNT"
and use the "Mirror Joint Tool" to duplicate those new joints.
-
You don't have to repaint the weights because these can
be mirrored symmetrically to the other side.
To do this use "Mirror Skin Weights" and Tadaaa its done :)
-
Create two new attributes called "L_blink_orient" "R_
blink_orient";
-
Connect "L_blink_orient" with "GA00_L_ublink_JNT.rotateZ"
and "GA00_L_lblink_JNT.rotateZ";
Next step:
336
337
-
Connect
"R_blink_orient"
with
"GA00_R_ublink_JNT.
rotateZ" and "GA00_R_lblink_JNT.rotateZ";
-
Select all the blink joints and create a parent group
called "GA00_blink_jnt_GRP";
Picture 13 _16
-
SFM";
Picture 13 _21
Now if you move this new "s" shaped handle you can create
cool eyebrow expressions, "sad" and "angry".
-
ParentConstrain "GA00_blink_jnt_GRP" to the "GA00_M_
head_a_JNT";
-
with this tool open, use shift+CTRL to add a vertex to
the membership. Select the two vertices in the middle of the
eyebrow; (Picture 13 _22)
Picture 13 _17
Picture 13 _22
Picture 13 _20
Eyebrows Setup
Picture 13 _18
-
Duplicate "GA00_L_eyebrow_a_SFM" and rename with
"GA00_L_eyebrow_b_SFM";
-
Assign a different set of mesh vertices for this new
deformer using:
Deform ---> Edit Membership Tool
(Picture 13 _21)
338
-
Add two float type attribute called "L_eyebrow_a" and
"L_eyebrow_b" with a minimum value of "-1", a maximum of "1",
and default of "0" to the "GA00_face_CTL".
-
Create a drivenkey using the first attribute to drive the
"GA00_L_eyebrow_a_SFM" position in the space for a "sad"
position and "angry" position. Remember that you have to drive
the transformations translations and rotations of the handle:
339
-
"L_eyebrow_a" set to "0" , "GA00_L_eyebrow_a_SFM" set
all transformations to zero.
Picture 13 _24
Picture 13 _28
-
Create a parent locator of "GA00_jaw_CTL" called "GA00_
jaw_ctl_LOC" (Picture 13 _26) (Picture 13 _27)
-
"L_eyebrow_a" set to "-1" , "GA00_L_eyebrow_a_SFM" set
to your chosen "sad" position;
Picture 13 _26
-
"L_eyebrow_a" set to "1" , "GA00_L_eyebrow_a_SFM" set
to your chosen "angry" position;
-
"L_eyebrow_b" set to "0" , "GA00_L_eyebrow_b_SFM" set
all transformations to zero.
-
"L_eyebrow_b" set to "-1" , "GA00_L_eyebrow_b_SFM" set
to your chosen "sad" position;
Picture 13 _27
-
"L_eyebrow_b" set to "1" , "GA00_L_eyebrow_b_SFM" set
to your chosen "angry" position;
-
With these two controls you can create different cool expressions
:)
Repeat this process for the other eyebrow. Duplicate the control
to the other side create a duplicate copy and change the pivot
manually to the right eyebrow vertex point.
(Picture 13 _23)
-
add this joint to the skin cluster (with the same procedure
that we have already used for the blink system) and paint the
weight; (Picture 13 _25)
Mouth Setup
Picture 13 _25
Picture 13 _23
-
Hide the shape of both the jaw control and joint
locators;
-
Select the lower gum and the teeth and create a group
called "GA00_l_mouth_obj_GRP". ParentConstrain to the "GA00_
M_jaw_a_LOC" locator.
-
Create a "boolean" type attribute for "GA00_jaw_CTL"
called "teeth_vis" and connect the visibility attributes of the teeth
and gum geometry.
Gaston now can now move the jaw but he cannot do any
phonemes. We need to improve the mouth controls.
Picture 13 _29
(Picture 13 _28)
Jaw Setup
Start with:
-
create a joint called "GA00_M_jaw_a_JNT" and place
"anatomically-cartoony" correct. Remember to not rotate the joint
but only move the position using "insert" on your keyboard;
-
Create a parent locator called "GA00_M_jaw_a_LOC".
Look at the picture to locate the position where I placed that
joint: (Picture 13 _24)
3 40
-
Import a new control for the jaw. This time I shall use a
triangle shaped control. Place in the same position as the jaw
locator and freeze the transformations. Rename it as "GA00_
jaw_CTL";
3 41
-
side;
-
Create a parent locator for each joint and freeze
transformations; (Picture 13 _30)
Picture 13 _30
This surface will be the guide for the movement of our parent
locators of the mouth joints.
Some connections:
-
geometryConstrain each joint's parent locators to the
guide surface (every "rmouth_LOC" and "lmouth_LOC" with
"GA00_mouth_guide_SHP").
In Mel:
In Mel:
-
Select all "_umouth" controls and create a parent group
called "GA00_umouth_ctl_GRP";
//
select -r GA00_body_GEO ;
select -add "*mouth*_JNT";
skinClusterInfluence 1 "-ug -dr 4 -ps 0 -ns 10 -lw true -wt 0";
//
-
Paint every right mouth joint influence using "Paint Skin
Weight Tool". When you are satisfied with one side, mirror the
weight map to the other side; (Picture 13 _33) (Picture 13 _34)
//
select "*mouth*_LOC";
$list = `ls -sl`;
for ($item in $list)
{
geometryConstraint -weight 1 GA00_mouth_guide_SHP $item;
}
//
Picture 13 _31
-
Select all "_lmouth" controls and create a parent group
called "GA00_lmouth_ctl_GRP";
-
ParentConstrain "GA00_lmouth_ctl_GRP" to the "GA00_M_
jaw_a_JNT" head joint;
-
Unhide "GA00_mouth_guide_SHP";
-
Select "GA00_M_head_a_JNT" "GA00_M_jaw_a_JNT" and
shift select the guide geometry "GA00_mouth_guide_SHP".Add a
skin deformer to that surface;
Picture 13 _33
At this point the translations are not in the zero position, This is
not a problem.
-
Create a nurbs sphere control for each locator. Freeze
transformations and rename it properly (e.g. "GA00_L_lmouth_
0_CTL"); (Picture 13 _31)
-
ParentConstrain "GA00_umouth_ctl_GRP" to the "GA00_
M_head_a_JNT" head joint;
-
Paint the weights of the two bones to that guide surface;
(Picture 13 _35) (Picture 13 _36)
Picture 13 _35
-
parentConstrain every locator, maintaining offset with
relative controls.
-
In Mel:
//
select "*mouth*_LOC";
$list = `ls -sl`;
-
Create a nurbs guide surface. Change the shape as
shown and rename "GA00_mouth_guide_SHP";
Remember that the area of this guide surface MUST BE very
close to the joints position. (Picture 13 _32)
Picture 13 _32
Picture 13 _34
Picture 13 _36
3 42
3 43
Set all the top vertices of the nurbs surface's head joint influence
to "1", the middle to "0.7", set jaw joint influence to "1" for all the
bottom vertecies and "0.3" for the middle vertecies.
When you move the jaw control, the guide shape follow the
movement and the mouth joint we also follow.
-
-
ParentConstrain and scaleConstrain each joint to the
relative tongue controls; (Picture 13 _38)
Picture 13 _38
"GA00_L_ear_dyn_CRV" ;
-
Parent
group;
-
Create an IK spline handle using the new dynamics
curve. Rename the IK handle to "GA00_L_ear_dyn_HIK";
(Picture 13 _41)
-
Lock and hide the useless attributes on the mouth controls
e.g. the "translateZ, "rotationY" and rotationZ" and all the scale
values.
"GA00_tongue_GEO"
under
"GA00_geo_GRP"
Picture 13 _41
Done.
Ears Setup
-
Create a parent locator for the main tongue root control
"GA00_tongue_root_CTL" and rename it "GA00_tongue_root_ctl_
LOC";
-
Place the ear joints chain. Orient the chain. Rename all
the joints e.g. "GA00_L_ear_a_JNT". (Picture 13 _40)
Picture 13 _40
-
Create a joint chain. Orient the joint and rename properly
(e.g. "GA00_tongue_a_JNT","GA00_tongue_b_JNT",etc... )
(Picture 13 _37)
Picture 13 _37
-
Select the main tongue joints ("GA00_tongue_a_JNT") shift
select the tongue geometry and add a smooth skin deformer.
-
-
Create a circle control for each joint of the "FK" chain
and also one for each cluster.
(Picture 13 _39)
-
Create a parent locator for the first joint of the tongue
chain. Freeze transformations and rename it in
"GA00_tongue_root_LOC";
-
Import a "handle" shaped control (like the arm or leg
root controls). Place in the same position as the tongue locator.
Rename it "GA00_tongue_root_CTL" and freeze transformations;
-
Parent "GA00_tongue_root_LOC" under "GA00_tongue_
root_CTL";
-
Create a nurbs circle control for each joint of the tongue
chain except the first and the last. Freeze transformations and
rename it "GA00_tongue_a_CTL" "GA00_tongue_b_CTL", etc.. ;
3 44
-
Import or create a handle control for the left ear. Snap
it to the base of the first ear joint. Freeze transformations and
rename it "GA00_L_ear_CTL";
Picture 13 _39
-
Create two duplicates of the left ear chain and rename
them with the "_fk_JNT" and "_dyn_JNT"suffix;
-
Create a curve with the CV point in the same positions
and numbers as the "_dyn" joints chain. Rename it "GA00_L_
ear_CRV";
-
Create clusters for each CV point of your "GA00_L_ear_
CRV".Curve using "cluster curve" tool. Rename them properly;
-
-
Create a parent locator for all the controls, and rename
them properly;
-
-
CTL;
-
Parent "GA00_L_ear_b_crv_LOC" under GA00_L_ear_
b_CTL;
-
CTL;
(Picture 13 _42)
Picture 13 _42
ear_b_JNT_parentConstraint1.GA00_L_ear_b_fk_JNTW0;
GA00_L_ear_c_JNT_parentConstraint1.GA00_L_ear_c_dyn_JNTW1 = 1 - GA00_L_
ear_c_JNT_parentConstraint1.GA00_L_ear_c_fk_JNTW0;
GA00_L_ear_d_JNT_parentConstraint1.GA00_L_ear_d_dyn_JNTW1 = 1 - GA00_L_
ear_d_JNT_parentConstraint1.GA00_L_ear_d_fk_JNTW0;
//
Picture 13 _44
-
Create a "float" type attribute called "dyn_to_FK" on the
main "GA00_L_ear_CTL" ear control;
-
Connect the "GA00_L_ear_CTL.dyn_to_FK" attribute to
each "W0" weight of every main joint of the base chain.
-
Hide all the new locators and the IK spline handle, the
two curve and the hair system;
Some connections:
-
parentConstrain "GA00_L_ear_CTL" to "GA00_L_ear_a_
dyn_CLS";
-
parent
-
-
-
-
-
Duplicate the rig for the right side, using this process or the
"brute force" method :)
Select both ear's base chain joints and add as influence to the
main body smooth skin. Paint the weights.
-
GRP"
Select all the "eye", "face", "jaw", "mouth", "tongue" and ear
controls and create a new control set for the face called
"GA00_face_controls_SET".
(Picture 13 _45)
It's done.
-
parentConstrain "GA00_L_ear_b_CTL" to "GA00_L_ear_
b_fk_JNT";
-
parentConstrain "GA00_L_ear_d_CTL" to "GA00_L_ear_
d_fk_JNT";
Chain connections:
3 46
-
parentConstrain "GA00_L_ear_CTL" to "GA00_L_ear_a_
fk_JNT";
//
GA00_L_ear_a_JNT_parentConstraint1.GA00_L_ear_a_dyn_JNTW1 = 1 - GA00_L_
ear_a_JNT_parentConstraint1.GA00_L_ear_a_fk_JNTW0;
GA00_L_ear_b_JNT_parentConstraint1.GA00_L_ear_b_dyn_JNTW1 = 1 - GA00_L_
-
-
-
-
-
-
-
Picture 13 _43
-
parentConstrain "GA00_L_ear_d_crv_CTL" to "GA00_L_
ear_d_dyn_CLS";
Insert this line into the animation expression editor to change the
weighting of all the "fk" to "1" and automatically the weight the
"dyn" joints chain to "0" on the parentConstraint of main joints
chain:
-
Create a new "boolean" type attribute on "GA00_name_
SHP" called "facial_ctl_vis" and connect all the visibility attributes
of every face controls.
-
parentConstrain "GA00_L_ear_c_crv_CTL" to "GA00_L_
ear_c_dyn_CLSe";
-
ParentConstrain each joint of the main chain to the "_fk"
and the "_dyn" joints chain;
-
Add all the new facial joints to the "_jnt_DSP" display
layer set.
(Picture 13 _43)
-
parentConstrain "GA00_L_ear_b_crv_CTL" to "GA00_L_
ear_b_dyn_CLS";
jaw_a_LOC" and snap the pivot point to the same position as the
jaw joint.
(Picture 13 _44)
-
-
-
"GA00_jaw_ctl_LOC";
"GA00_face_CTL";
"GA00_L_ear_LOC"" and "GA00_R_ear_LOC";
-
CTL";
-
-
Picture 13 _45
14 _Additional Stuff
Picture 14 _03
Picture 14 _02
0;
0;
0;
0;
0;
0;
0;
0;
0;
0;
0;
0;
0;
0;
0;
0;
0;
0;
3 49
setAttr
setAttr
setAttr
setAttr
setAttr
setAttr
setAttr
setAttr
setAttr
setAttr
setAttr
setAttr
setAttr
setAttr
"GA00_L_umouth_1_CTL.translateY"
"GA00_L_umouth_0_CTL.translateY"
"GA00_M_umouth_0_CTL.translateY"
"GA00_R_umouth_0_CTL.translateY"
"GA00_R_umouth_1_CTL.translateY"
"GA00_R_umouth_2_CTL.translateY"
"GA00_R_umouth_3_CTL.translateY"
"GA00_M_lmouth_0_CTL.translateY"
"GA00_L_lmouth_0_CTL.translateY"
"GA00_L_lmouth_1_CTL.translateY"
"GA00_L_lmouth_2_CTL.translateY"
"GA00_R_lmouth_2_CTL.translateY"
"GA00_R_lmouth_1_CTL.translateY"
"GA00_R_lmouth_0_CTL.translateY"
setAttr
setAttr
setAttr
setAttr
setAttr
setAttr
setAttr
setAttr
setAttr
setAttr
setAttr
setAttr
setAttr
setAttr
setAttr
setAttr
setAttr
setAttr
setAttr
setAttr
setAttr
"GA00_jaw_CTL.translateZ" 0;
"GA00_jaw_CTL.rotateX" 0;
"GA00_L_umouth_3_CTL.rotateX"
"GA00_L_umouth_2_CTL.rotateX"
"GA00_L_umouth_1_CTL.rotateX"
"GA00_L_umouth_0_CTL.rotateX"
"GA00_M_umouth_0_CTL.rotateX"
"GA00_R_umouth_0_CTL.rotateX"
"GA00_R_umouth_1_CTL.rotateX"
"GA00_R_umouth_2_CTL.rotateX"
"GA00_R_umouth_3_CTL.rotateX"
"GA00_M_lmouth_0_CTL.rotateX"
"GA00_L_lmouth_0_CTL.rotateX"
"GA00_L_lmouth_1_CTL.rotateX"
"GA00_L_lmouth_2_CTL.rotateX"
"GA00_R_lmouth_2_CTL.rotateX"
"GA00_R_lmouth_1_CTL.rotateX"
"GA00_R_lmouth_0_CTL.rotateX"
"GA00_jaw_CTL.rotateY" 0;
"GA00_jaw_CTL.rotateZ" 0;
"GA00_jaw_CTL.teeth_vis" 1;
0;
0;
0;
0;
0;
0;
0;
0;
0;
0;
0;
0;
0;
0;
0;
0;
0;
0;
0;
0;
0;
0;
0;
0;
0;
0;
0;
0;
0;
0;
select -cl;
}
}
int $base_mouth = `scriptJob -kws -e "SelectionChanged" GA00_base_mouth`;
//end
350
-
Open the animation expression editor and go to :
Select Filter ---> By Script Node Name
-
-
Picture 14 _05
Now, each time you open this scene Maya will automatically run
this ScriptJob. (Picture 14 _04)
Picture 14 _04
Change the position of the mouth controls using the script editor
window, make a note of the Mel command that we are used
by Maya to make these changes. (Picture 14 _05)
Now create a script job (see Maya help for more information
about this Mel command).
"GA00_M_umouth_0_CTL.translateY" .15;
"GA00_M_lmouth_0_CTL.translateY" -.1;
"GA00_M_lmouth_0_CTL.rotateX" -50;
"GA00_L_umouth_1_CTL.translateY" -.3;
"GA00_L_umouth_1_CTL.translateX" -.25;
"GA00_L_lmouth_1_CTL.translateX" -.8;
"GA00_L_lmouth_1_CTL.translateY" .3;
"GA00_L_lmouth_0_CTL.translateY" 0.2;
"GA00_L_lmouth_2_CTL.translateX" -.32;
"GA00_R_umouth_1_CTL.translateY" -.3;
"GA00_R_umouth_1_CTL.translateX" .25;
"GA00_R_lmouth_1_CTL.translateX" .8;
"GA00_R_lmouth_1_CTL.translateY" .3;
"GA00_R_lmouth_0_CTL.translateY" 0.2;
"GA00_R_lmouth_2_CTL.translateX" .32;
"GA00_M_umouth_0_CTL.rotateX" -90;
"GA00_jaw_CTL.rotateX" -32;
351
Picture 14 _06
(1/
GA00_R_hand_middle_a_JNT.
(1/
GA00_R_hand_middle_a_JNT.
(1/
GA00_R_hand_middle_b_JNT.
(1/
GA00_R_hand_middle_b_JNT.
(1/
GA00_R_hand_middle_c_JNT.
(1/
GA00_R_hand_middle_c_JNT.
GA00_R_hand_middle_a_JNT.scaleX
scaleZ);
GA00_R_hand_middle_a_JNT.scaleY
scaleZ);
GA00_R_hand_middle_b_JNT.scaleX
scaleZ);
GA00_R_hand_middle_b_JNT.scaleY
scaleZ);
GA00_R_hand_middle_c_JNT.scaleX
scaleZ);
GA00_R_hand_middle_c_JNT.scaleY
scaleZ);
GA00_L_hand_middle_a_JNT.scaleX
scaleZ);
GA00_L_hand_middle_a_JNT.scaleY
scaleZ);
GA00_L_hand_middle_b_JNT.scaleX
scaleZ);
GA00_L_hand_middle_b_JNT.scaleY
scaleZ);
GA00_L_hand_middle_c_JNT.scaleX
scaleZ);
GA00_L_hand_middle_c_JNT.scaleY
scaleZ);
(1/
GA00_L_hand_middle_a_JNT.
(1/
GA00_R_hand_pinkie_a_JNT.
(1/
GA00_L_hand_middle_a_JNT.
(1/
GA00_R_hand_pinkie_a_JNT.
(1/
GA00_L_hand_middle_b_JNT.
(1/
GA00_R_hand_pinkie_b_JNT.
(1/
GA00_L_hand_middle_b_JNT.
(1/
GA00_R_hand_pinkie_b_JNT.
(1/
GA00_L_hand_middle_c_JNT.
(1/
GA00_R_hand_pinkie_c_JNT.
(1/
GA00_L_hand_middle_c_JNT.
GA00_R_hand_pinkie_a_JNT.scaleX
scaleZ);
GA00_R_hand_pinkie_a_JNT.scaleY
scaleZ);
GA00_R_hand_pinkie_b_JNT.scaleX
scaleZ);
GA00_R_hand_pinkie_b_JNT.scaleY
scaleZ);
GA00_R_hand_pinkie_c_JNT.scaleX
scaleZ);
GA00_R_hand_pinkie_c_JNT.scaleY
scaleZ);
(1/
GA00_R_hand_pinkie_c_JNT.
GA00_L_hand_pinkie_a_JNT.scaleX
scaleZ);
GA00_L_hand_pinkie_a_JNT.scaleY
scaleZ);
GA00_L_hand_pinkie_b_JNT.scaleX
scaleZ);
GA00_L_hand_pinkie_b_JNT.scaleY
scaleZ);
GA00_L_hand_pinkie_c_JNT.scaleX
scaleZ);
GA00_L_hand_pinkie_c_JNT.scaleY
scaleZ);
(1/
GA00_L_hand_pinkie_a_JNT.
(1/
GA00_L_hand_pinkie_a_JNT.
(1/
GA00_L_hand_pinkie_b_JNT.
GA00_R_hand_thumb_a_JNT.scaleX
GA00_R_hand_thumb_a_JNT.scaleY
GA00_R_hand_thumb_b_JNT.scaleX
GA00_R_hand_thumb_b_JNT.scaleY
GA00_R_hand_thumb_c_JNT.scaleX
GA00_R_hand_thumb_c_JNT.scaleY
1
1
1
1
1
1
(1/
GA00_L_hand_pinkie_b_JNT.
352
=
=
=
=
=
1
1
1
1
1
*
*
*
*
*
(1/
(1/
(1/
(1/
(1/
GA00_L_hand_index_a_JNT.scaleZ);
GA00_L_hand_index_a_JNT.scaleZ);
GA00_L_hand_index_b_JNT.scaleZ);
GA00_L_hand_index_b_JNT.scaleZ);
GA00_L_hand_index_c_JNT.scaleZ);
(1/
GA00_L_hand_pinkie_c_JNT.
(1/
GA00_L_hand_pinkie_c_JNT.
GA00_L_hand_thumb_a_JNT.scaleX
GA00_L_hand_thumb_a_JNT.scaleY
GA00_L_hand_thumb_b_JNT.scaleX
GA00_L_hand_thumb_b_JNT.scaleY
GA00_L_hand_thumb_c_JNT.scaleX
GA00_L_hand_thumb_c_JNT.scaleY
=
=
=
=
=
=
1
1
1
1
1
1
*
*
*
*
*
*
(1/
(1/
(1/
(1/
(1/
(1/
GA00_L_hand_thumb_a_JNT.scaleZ);
GA00_L_hand_thumb_a_JNT.scaleZ);
GA00_L_hand_thumb_b_JNT.scaleZ);
GA00_L_hand_thumb_b_JNT.scaleZ);
GA00_L_hand_thumb_c_JNT.scaleZ);
GA00_L_hand_thumb_c_JNT.scaleZ);
GA00_R_hand_index_a_JNT.scaleX
GA00_R_hand_index_a_JNT.scaleY
GA00_R_hand_index_b_JNT.scaleX
GA00_R_hand_index_b_JNT.scaleY
GA00_R_hand_index_c_JNT.scaleX
GA00_R_hand_index_c_JNT.scaleY
=
=
=
=
=
=
1
1
1
1
1
1
*
*
*
*
*
*
(1/
(1/
(1/
(1/
(1/
(1/
GA00_R_hand_index_a_JNT.scaleZ);
GA00_R_hand_index_a_JNT.scaleZ);
GA00_R_hand_index_b_JNT.scaleZ);
GA00_R_hand_index_b_JNT.scaleZ);
GA00_R_hand_index_c_JNT.scaleZ);
GA00_R_hand_index_c_JNT.scaleZ);
=
=
=
=
=
=
*
*
*
*
*
*
(1/
(1/
(1/
(1/
(1/
(1/
GA00_R_hand_thumb_a_JNT.scaleZ);
GA00_R_hand_thumb_a_JNT.scaleZ);
GA00_R_hand_thumb_b_JNT.scaleZ);
GA00_R_hand_thumb_b_JNT.scaleZ);
GA00_R_hand_thumb_c_JNT.scaleZ);
GA00_R_hand_thumb_c_JNT.scaleZ);
GA00_M_tail_0_JNT.scaleX = (((GA00_M_tail_0_squash_hold_DMNShape.distance/
GA00_M_tail_0_squash_DMNShape.distance) *2 )-1);
GA00_M_tail_0_JNT.scaleZ = (((GA00_M_tail_0_squash_hold_DMNShape.distance/
GA00_M_tail_0_squash_DMNShape.distance) *2 )-1);
GA00_M_tail_1_JNT.scaleX = (((GA00_M_tail_1_squash_hold_DMNShape.distance/
GA00_M_tail_1_squash_DMNShape.distance) *2 )-1);
GA00_M_tail_1_JNT.scaleZ = (((GA00_M_tail_1_squash_hold_DMNShape.distance/
GA00_M_tail_1_squash_DMNShape.distance) *2 )-1);
GA00_M_tail_2_JNT.scaleX = (((GA00_M_tail_2_squash_hold_DMNShape.distance/
GA00_M_tail_2_squash_DMNShape.distance) *2 )-1);
GA00_M_tail_2_JNT.scaleZ = (((GA00_M_tail_2_squash_hold_DMNShape.distance/
GA00_M_tail_2_squash_DMNShape.distance) *2 )-1);
GA00_M_tail_0_JNT_pointConstraint1.GA00_M_tail_0_fk_JNTW2
tail_0_JNT_pointConstraint1.GA00_M_tail_0_elx_JNTW1;
GA00_M_tail_1_JNT_pointConstraint1.GA00_M_tail_1_fk_JNTW2
1-
GA00_M_
1-
GA00_M_
tail_1_JNT_pointConstraint1.GA00_M_tail_1_elx_JNTW1;
GA00_M_tail_2_JNT_pointConstraint1.GA00_M_tail_2_fk_JNTW0
tail_2_JNT_pointConstraint1.GA00_M_tail_2_elx_JNTW1;
GA00_M_tail_3_JNT_pointConstraint1.GA00_M_tail_3_fk_JNTW0
tail_3_JNT_pointConstraint1.GA00_M_tail_3_elx_JNTW1;
1-
GA00_M_
1-
GA00_M_
GA00_M_spine_0_JNT_parentConstraint1.GA00_M_spine_0_fk_JNTW1
spine_0_JNT_parentConstraint1.GA00_M_spine_crv_0_JNTW0;
GA00_M_spine_1_JNT_parentConstraint1.GA00_M_spine_1_fk_JNTW1
spine_1_JNT_parentConstraint1.GA00_M_spine_crv_1_JNTW0;
GA00_M_spine_2_JNT_parentConstraint1.GA00_M_spine_2_fk_JNTW1
spine_2_JNT_parentConstraint1.GA00_M_spine_crv_2_JNTW0;
GA00_M_spine_3_JNT_parentConstraint1.GA00_M_spine_3_fk_JNTW1
spine_3_JNT_parentConstraint1.GA00_M_spine_crv_3_JNTW0;
1-GA00_M_
1-GA00_M_
1-GA00_M_
1-GA00_M_
GA00_L_humerus_elx_JNT.scaleY = (((GA00_L_arm_humerus_squash_hold_DMNShape.
distance/GA00_L_arm_humerus_squash_DMNShape.distance) *2 )-1);
GA00_L_humerus_elx_JNT.scaleZ = (((GA00_L_arm_humerus_squash_hold_DMNShape.
distance/GA00_L_arm_humerus_squash_DMNShape.distance) *2 )-1);
GA00_L_elbow_elx_JNT.scaleY = (((GA00_L_arm_elbow_squash_hold_DMNShape.
distance/GA00_L_arm_elbow_squash_DMNShape.distance) *2 )-1);
GA00_L_elbow_elx_JNT.scaleZ = (((GA00_L_arm_elbow_squash_hold_DMNShape.
distance/GA00_L_arm_elbow_squash_DMNShape.distance) *2 )-1);
GA00_L_ulna_elx_JNT.scaleY
=
(((GA00_L_arm_ulna_squash_hold_DMNShape.
distance/GA00_L_arm_ulna_squash_DMNShape.distance) *2 )-1);
GA00_L_ulna_elx_JNT.scaleZ
=
(((GA00_L_arm_ulna_squash_hold_DMNShape.
distance/GA00_L_arm_ulna_squash_DMNShape.distance) *2 )-1);
GA00_L_humerus_ik_JNT.scaleX = 1 * (1/ GA00_L_humerus_ik_JNT.scaleZ);
GA00_L_humerus_ik_JNT.scaleY = 1 * (1/ GA00_L_humerus_ik_JNT.scaleZ);
GA00_L_elbow_ik_JNT.scaleX = 1 * (1/ GA00_L_elbow_ik_JNT.scaleZ);
GA00_L_elbow_ik_JNT.scaleY = 1 * (1/ GA00_L_elbow_ik_JNT.scaleZ);
GA00_L_ulna_ik_JNT.scaleX = 1 * (1/ GA00_L_ulna_ik_JNT.scaleZ);
GA00_L_ulna_ik_JNT.scaleY = 1 * (1/ GA00_L_ulna_ik_JNT.scaleZ);
GA00_R_humerus_elx_JNT.scaleY = (((GA00_R_arm_humerus_squash_hold_DMNShape.
distance/GA00_R_arm_humerus_squash_DMNShape.distance) *2 )-1);
GA00_R_humerus_elx_JNT.scaleZ = (((GA00_R_arm_humerus_squash_hold_DMNShape.
distance/GA00_R_arm_humerus_squash_DMNShape.distance) *2 )-1);
GA00_R_elbow_elx_JNT.scaleY = (((GA00_R_arm_elbow_squash_hold_DMNShape.
distance/GA00_R_arm_elbow_squash_DMNShape.distance) *2 )-1);
GA00_R_elbow_elx_JNT.scaleZ = (((GA00_R_arm_elbow_squash_hold_DMNShape.
distance/GA00_R_arm_elbow_squash_DMNShape.distance) *2 )-1);
GA00_R_ulna_elx_JNT.scaleY
=
(((GA00_R_arm_ulna_squash_hold_DMNShape.
distance/GA00_R_arm_ulna_squash_DMNShape.distance) *2 )-1);
GA00_R_ulna_elx_JNT.scaleZ
=
(((GA00_R_arm_ulna_squash_hold_DMNShape.
distance/GA00_R_arm_ulna_squash_DMNShape.distance) *2 )-1);
353
=
=
=
=
=
=
GA00_L_foot_pinkie_a_JNT.scaleX
scaleZ);
GA00_L_foot_pinkie_a_JNT.scaleY
scaleZ);
GA00_L_foot_pinkie_b_JNT.scaleX
scaleZ);
GA00_L_foot_pinkie_b_JNT.scaleY
scaleZ);
GA00_L_foot_pinkie_c_JNT.scaleX
scaleZ);
GA00_L_foot_pinkie_c_JNT.scaleY
scaleZ);
1
1
1
1
1
1
*
*
*
*
*
*
(1/
(1/
(1/
(1/
(1/
(1/
GA00_L_foot_index_a_JNT.scaleZ);
GA00_L_foot_index_a_JNT.scaleZ);
GA00_L_foot_index_b_JNT.scaleZ);
GA00_L_foot_index_b_JNT.scaleZ);
GA00_L_foot_index_c_JNT.scaleZ);
GA00_L_foot_index_c_JNT.scaleZ);
(1/
GA00_L_foot_pinkie_a_JNT.
(1/
GA00_L_foot_pinkie_a_JNT.
(1/
GA00_L_foot_pinkie_b_JNT.
(1/
GA00_L_foot_pinkie_b_JNT.
(1/
GA00_L_foot_pinkie_c_JNT.
(1/
GA00_L_foot_pinkie_c_JNT.
35 4
GA00_L_foot_thumb_a_JNT.scaleY
GA00_L_foot_thumb_b_JNT.scaleX
GA00_L_foot_thumb_b_JNT.scaleY
GA00_L_foot_thumb_c_JNT.scaleX
GA00_L_foot_thumb_c_JNT.scaleY
=
=
=
=
=
1
1
1
1
1
*
*
*
*
*
(1/
(1/
(1/
(1/
(1/
GA00_L_foot_thumb_a_JNT.scaleZ);
GA00_L_foot_thumb_b_JNT.scaleZ);
GA00_L_foot_thumb_b_JNT.scaleZ);
GA00_L_foot_thumb_c_JNT.scaleZ);
GA00_L_foot_thumb_c_JNT.scaleZ);
GA00_R_femur_elx_JNT.scaleY = (((GA00_R_leg_femur_squash_hold_DMNShape.
distance/GA00_R_leg_femur_squash_DMNShape.distance) *2 )-1);
GA00_R_femur_elx_JNT.scaleZ = (((GA00_R_leg_femur_squash_hold_DMNShape.
distance/GA00_R_leg_femur_squash_DMNShape.distance) *2 )-1);
GA00_R_tibia_a_elx_JNT.scaleY = (((GA00_R_leg_tibia_a_squash_hold_DMNShape.
distance/GA00_R_leg_tibia_a_squash_DMNShape.distance) *2 )-1);
GA00_R_tibia_a_elx_JNT.scaleZ = (((GA00_R_leg_tibia_a_squash_hold_DMNShape.
distance/GA00_R_leg_tibia_a_squash_DMNShape.distance) *2 )-1);
GA00_R_tibia_b_elx_JNT.scaleY = (((GA00_R_leg_tibia_b_squash_hold_DMNShape.
distance/GA00_R_leg_tibia_b_squash_DMNShape.distance) *2 )-1);
GA00_R_tibia_b_elx_JNT.scaleZ = (((GA00_R_leg_tibia_b_squash_hold_DMNShape.
distance/GA00_R_leg_tibia_b_squash_DMNShape.distance) *2 )-1);
GA00_R_foot_index_a_JNT.scaleX
GA00_R_foot_index_a_JNT.scaleY
GA00_R_foot_index_b_JNT.scaleX
GA00_R_foot_index_b_JNT.scaleY
GA00_R_foot_index_c_JNT.scaleX
GA00_R_foot_index_c_JNT.scaleY
=
=
=
=
=
=
1
1
1
1
1
1
*
*
*
*
*
*
(1/
(1/
(1/
(1/
(1/
(1/
GA00_R_foot_index_a_JNT.scaleZ);
GA00_R_foot_index_a_JNT.scaleZ);
GA00_R_foot_index_b_JNT.scaleZ);
GA00_R_foot_index_b_JNT.scaleZ);
GA00_R_foot_index_c_JNT.scaleZ);
GA00_R_foot_index_c_JNT.scaleZ);
GA00_R_foot_pinkie_a_JNT.scaleX
scaleZ);
GA00_R_foot_pinkie_a_JNT.scaleY
scaleZ);
GA00_R_foot_pinkie_b_JNT.scaleX
scaleZ);
GA00_R_foot_pinkie_b_JNT.scaleY
scaleZ);
GA00_R_foot_pinkie_c_JNT.scaleX
scaleZ);
GA00_R_foot_pinkie_c_JNT.scaleY
scaleZ);
(1/
GA00_R_foot_pinkie_a_JNT.
(1/
GA00_R_foot_pinkie_a_JNT.
(1/
GA00_R_foot_pinkie_b_JNT.
(1/
GA00_R_foot_pinkie_b_JNT.
(1/
GA00_R_foot_pinkie_c_JNT.
(1/
GA00_R_foot_pinkie_c_JNT.
GA00_R_foot_thumb_a_JNT.scaleX
GA00_R_foot_thumb_a_JNT.scaleY
GA00_R_foot_thumb_b_JNT.scaleX
GA00_R_foot_thumb_b_JNT.scaleY
GA00_R_foot_thumb_c_JNT.scaleX
GA00_R_foot_thumb_c_JNT.scaleY
1
1
1
1
1
1
=
=
=
=
=
=
*
*
*
*
*
*
(1/
(1/
(1/
(1/
(1/
(1/
GA00_R_foot_thumb_a_JNT.scaleZ);
GA00_R_foot_thumb_a_JNT.scaleZ);
GA00_R_foot_thumb_b_JNT.scaleZ);
GA00_R_foot_thumb_b_JNT.scaleZ);
GA00_R_foot_thumb_c_JNT.scaleZ);
GA00_R_foot_thumb_c_JNT.scaleZ);
GA00_M_spine_0_JNT.scaleX
=
(((GA00_M_spine_0_squash_hold_DMNShape.
distance/GA00_M_spine_0_squash_DMNShape.distance) *2 )-1);
GA00_M_spine_0_JNT.scaleZ
=
(((GA00_M_spine_0_squash_hold_DMNShape.
distance/GA00_M_spine_0_squash_DMNShape.distance) *2 )-1);
GA00_M_spine_1_JNT.scaleX
=
(((GA00_M_spine_1_squash_hold_DMNShape.
distance/GA00_M_spine_1_squash_DMNShape.distance) *2 )-1);
GA00_M_spine_1_JNT.scaleZ
=
(((GA00_M_spine_1_squash_hold_DMNShape.
distance/GA00_M_spine_1_squash_DMNShape.distance) *2 )-1);
GA00_M_spine_2_JNT.scaleX
=
(((GA00_M_spine_2_squash_hold_DMNShape.
distance/GA00_M_spine_2_squash_DMNShape.distance) *2 )-1);
GA00_M_spine_2_JNT.scaleZ
=
(((GA00_M_spine_2_squash_hold_DMNShape.
distance/GA00_M_spine_2_squash_DMNShape.distance) *2 )-1);
GA00_M_spine_1_JNT_orientConstraint1.GA00_M_spine_1_fk_JNTW1 = 1 - GA00_M_
spine_1_JNT_orientConstraint1.GA00_M_spine_crv_1_JNTW0;
GA00_M_spine_2_JNT_orientConstraint1.GA00_M_spine_2_fk_JNTW1 = 1 - GA00_M_
spine_2_JNT_orientConstraint1.GA00_M_spine_crv_2_JNTW0;
GA00_M_spine_0_JNT_orientConstraint1.GA00_M_spine_0_fk_JNTW1 = 1 - GA00_M_
spine_0_JNT_orientConstraint1.GA00_M_spine_crv_0_JNTW0;
GA00_L_femur_ik_JNT.scaleX = 1 * (1/ GA00_L_femur_ik_JNT.scaleZ);
GA00_L_femur_ik_JNT.scaleY = 1 * (1/ GA00_L_femur_ik_JNT.scaleZ);
GA00_L_tibia_a_ik_JNT.scaleX = 1 * (1/ GA00_L_tibia_a_ik_JNT.scaleZ);
GA00_L_tibia_a_ik_JNT.scaleY = 1 * (1/ GA00_L_tibia_a_ik_JNT.scaleZ);
GA00_L_ear_c_JNT_parentConstraint1.GA00_L_ear_c_dyn_JNTW1 = 1 - GA00_L_
ear_c_JNT_parentConstraint1.GA00_L_ear_c_fk_JNTW0;
GA00_L_ear_d_JNT_parentConstraint1.GA00_L_ear_d_dyn_JNTW1 = 1 - GA00_L_
ear_d_JNT_parentConstraint1.GA00_L_ear_d_fk_JNTW0;
// End
GA00_L_ulna_ik_JNT.rotateZ = (GA00_L_hand_CTL.rotateX+GA00_L_ulna_fk_CTL.
rotateY)/2;
GA00_L_ulna_fk_JNT.rotateZ = (GA00_L_hand_CTL.rotateX+GA00_L_ulna_fk_CTL.
rotateY)/2;
GA00_R_ulna_ik_JNT.rotateZ = (GA00_R_hand_CTL.rotateX+GA00_R_ulna_fk_CTL.
rotateY)/2;
GA00_R_ulna_fk_JNT.rotateZ = (GA00_R_hand_CTL.rotateX+GA00_R_ulna_fk_CTL.
rotateY)/2;
GA00_R_eye_LOC.translateX = - GA00_L_eye_LOC.translateX;
GA00_L_ear_a_JNT_parentConstraint1.GA00_L_ear_a_dyn_JNTW1 = 1 - GA00_L_
ear_a_JNT_parentConstraint1.GA00_L_ear_a_fk_JNTW0;
GA00_L_ear_b_JNT_parentConstraint1.GA00_L_ear_b_dyn_JNTW1 = 1 - GA00_L_
ear_b_JNT_parentConstraint1.GA00_L_ear_b_fk_JNTW0;
355
35 6
357
06
Eyeball
Tutor ial
Picture 01 _3
Now it's time to explain the textures we need to get the most
with the fewer procedural textures as we can. Basically we
want to texture its color, bump, whiteness and specular color.
In the color we will have a ramp on top of the color's shading
network to control the overall shade of the iris so we can make
it brighter in the middle and darker in the borders. Connected
to it we will have a "fractal noise" to make the caracteristic iris
veins, a "ramp" to control the color of the "fractal" and another
"ramp" to control the fractal's "ratio".
Next we have a ramp to control the inwards bump of the iris
which, in fact, will bring us the photoreal touch we need to
make this eye look good.
Go back to the "Fractal" node and create another ramp for the
"Color gain" attribute to control the color of the iris and rename
it to something like "rampColor", change the colors to whatever
you like you eye to look like.
360
With the color shading node created now we must make the ramps
share the same "place2dTexture" node as the first ramp called
"Color". To do this we must locate that node in the "hypershade"
window, to make this step easier in the future, rename the
"place2dTexture" node to something like "main2dplacement",
when you are ready click on it and drag it to the "rampRatio"
ramp with the default options and to the "rampColor" the same
way, now they all share the same place2DTexture" so it will be
easier to change their values.
With the color shading network job almost done we can test it,
so apply the "eyeballShaderSG" to the eye and perform a test
render. Oh, the iris looks decent but we forgot a critical step.
Since we are restricting the "coverage" and "translate frame" of
the "place2dTexture" nodes we only have the textures applied
in a small area of our eye, we need to fix this.
Select the ramp called "Color" and click on the "texture" button
in the "defaultColor" slot and create a ramp and rename it
361
Picture 01 _6
Picture 01 _4
Picture 01 _7
Now drag it to the other fractal with the default options and
you are done. Don't forget to rename this "place2dTexture" node
to something like "fractals2dPlacement" so you can find it easily
later.
With this step we have forced the specular color to appear
only at the iris veins so it will look more real. Although this book
covers cartoon characters animation, realistic eyes will make
your character more believable, so this shader is critical for
that.
Ok, now we have a white specular, to be able to control it's color
we will need to create another ramp in the "colorGain" attribute
of the "fractalSpecular" node. So click on the attribute and create
a "ramp" for it and rename it to something like "rampSpecColor"
and make a gradient from Black to the color you want for the
iris color, to black again, this will get a smooth transition and thus
make it more real. Again we want it to appear only in the iris,
so we need to set it's "defaultColor" to black.
This ramp needs to share the "main2dPlacement" so drag it to
the ramp and connect it with the default options.
Now we are about to finish, but we still need to be able
to animate the iris size so the next step will cover the SDK
creation.
Picture 01 _5
As you can imagine, the iris bump is the opposite of the specular
one so we will be doing it the same way. Press on the "texture"
button in the bump slot of the shader and create a "ramp"
for it and rename it to something like "bumpIris". Change its
interpolation type to "U_Ramp", in fact, all the ramps we will
be creating for the eyeball shader will be "U_Ramp", so check
them all.
Delete all the color entries and create a "black to white"
gradient, black on the top, white on the bottom, and change
the interpolation to "spike" to make the gradient smoother in the
white part. This ramp will share the "main2dPlacement" as the
others, so drag that node on top of the "bumpIris" ramp with the
default options and you are done.
Drag also the "pupilColor" ramp to the "defaultColor" of the
"bumpIris" ramp to make sure the bump is smooth in both sides.
We set this range to make "0" the "relax" size of the pupil so you
can always return to this value to get it's normal size.
Now
select
the
"main2dPlacement"
node
and
the
"fractals2dPlacement" node, then open the SDK window in
"Animate->SetDrivenKey->Set->Options". In that window click on
the "load driven" button, then select the "eyeballShaderSG" and
click on the "load driver" button.
In the driver's right side you have all the keyable attributes it
may have, found the "irisSize" attribute and select it.
In the driven's right side you have all of its keyable attributes,
select "U_Coverage" of both the "main2dPlacement" node and
the "fractals2dPlacement" node and click on the "key" button, this
will create the default position of the "irisSize" attribute.
Select the "eyeballShaderSG" by clicking on its name in the driver's
window and chage the "irisSize" attribute to its minimum (-10). Then
select the "main2dPlacement" node and change its "U_Coverage"
363
36 4
365