Documente Academic
Documente Profesional
Documente Cultură
Web FindBestStuff
com
Copyright © 2007
FindBestStuff
The Human Head site celebrated its first anniversary
(last month) languishing, unused and aging, on my
hard drive. My personal thanks to Wade Acuff and
Patrick Miller for making it possible to be bring it
back online after its five month hiatus.
theory overview modeling theory approaches process setup NURBS polys/subds texturing animation
resources features close-up reference/links gallery pics and movies
copyright Andrew Camenisch | 2001
The Human Head site celebrated its first anniversary
(last month) languishing, unused and aging, on my
hard drive. My personal thanks to Wade Acuff and
Patrick Miller for making it possible to be bring it
back online after its five month hiatus.
Though the majority of the most powerful and engaging characters in animation
history have been little more than circles and squares, all characters are simply
an abstraction of reality. Abstracting someone else's abstraction is the root of
cliche. An understanding of reality then is the foundation for new ideas and fresh
perspectives and creative character design. In short, study from life! That is the
approach this tutorial takes.
The "how" of modeling, however, is best shown with timelapse movies or picture
tutorials. I have neither the time nor the interest at this time to create a step-by-
step, "click here next" tutorial for modeling the head; neither would it contribute to
the scores already available on the web and in books. More valuable, I think, is a
discussion of theory and process with emphasis on the question "why."
Incidentally, a large portion of the information on this site is in text form with
illustrations to clarify when needed. As a constantly expanding resource, this site
would benefit greatly from user feedback since the meaning of words and
phrases are easily confused and, from the author's perspective, difficult to
control.
This site is not currently anywhere near what it should be to merit its
presumptuous / ambitious title; however, for now, I hope it serves well as a
starting point for some users and an opportunity for further exploration and
discovery for others.
Please respect my ownership and do not copy text or illustrations from this site without written consent. Thanks.
Parameterizationthe Where and the How
"The most commonly overlooked aspect of a model is its topology."
1|2|3
Ultimately, there are two factors that should determine the flow of a
model's parameterization:
1|2|3
Please respect my ownership and do not copy text or illustrations from this site without written consent. Thanks.
Parameterizationthe Where and the How
Natural Lines
1|2|3
Wrinkles
Temporary wrinkles are those that that come and go with particular
facial movement. Some of these wrinkles are key to identifying facial
expressions. The parameterization of a head model should plan for
wrinkles that will be modeled into the blend (morph) shapes when setting
up the head for animation.
For Example
The most prominent of wrinkles, the smile/shout
wrinkle around the mouth, is commonly
overlooked in the modeling of youthful heads,
because the crease is typically not visible in the
expressionless base shape and the artist simply
overlooks the fact that it will be needed later in
modeling the target shapes (check out most head
modeling tutorials on the web). Thoughtlessly
extending the concentric circle parameterization
of the mouth region, also contributes to improper
structure for defining the mouth wrinkle. (I've been
there and done that...)
rollover
I'm not sure who owns the Self-Portrait with Grey Felt Hat
copyright on this picture.
If anyone happens to know,
please email me.
Langer's Lines
A stab wound inflicted with an ice pick or a similar weapon with a conical
blade will leave a slit in the skin, not a round puncture as might be
expected (a bit more info on stab wounds and Langer's Lines). The
direction of a slit varies between different areas of the body but remains
fairly consistent from person to person. Langer's lines map the direction
of slits across the body and are used in surgery to guide incisions: cuts
along Langer's Lines heal better leaving less scarring.
1|2|3
Please respect my ownership and do not copy text or illustrations from this site without written consent. Thanks.
Parameterizationthe Where and the How
Identifying and resolving problem areas.
1|2|3
Since the factors (the shape and motion of the surface) that
influence topology are independent of each other, there are certain
regions on the human head where they demand conflicting structures.
One example region is the promontory of the cheekbone.
Suggested workflow:
Make several copies of a drawing/photograph of your
character.
Copy the lines from both pictures onto a third picture and
begin connecting the lines that seem to flow into each other
to form what Bay Raitt refers to as Edge Loops.
1|2|3
Please respect my ownership and do not copy text or illustrations from this site without written consent. Thanks.
Modeling Paradigms Compared
Common approaches to modeling the head
1|2|3
1|2|3
Please respect my ownership and do not copy text or illustrations from this site without written consent. Thanks.
Modeling Paradigms Compared
The Pros and Cons
1|2|3
1|2|3
Please respect my ownership and do not copy text or illustrations from this site without written consent. Thanks.
Modeling Paradigms Compared
The Recommended Workflow: NURBS to poly to subd
1|2|3
2) NURBS allow for hull selection and pick walking (using the
arrow keys to move to adjacent CVs; very useful when the
serial relationship between two points is not clear);
Please respect my ownership and do not copy text or illustrations from this site without written consent. Thanks.
Preparing to Model
Downloading reference material or creating your own
Stand as far away from the subject as your lens will allow. This will
flatten the head, eliminating much of the perspective in the photo,
preparing it for its destination: the orthographic view. A lot of distortion in
a model can result from using a perspective-filled photo as reference in
an orthographic view!
Use lighting that is clear but also accentuates the forms of the face.
Make sure your light setup works for both the front and profile view of
the head (see next point). Don't use a flash!
Don't rotate the subject in front of the camera, but instead orbit the
camera around the subject. The subject should remain stationary; this
will ensure that shadows on the face are consistent between the front
and profile views, which makes identifying and aligning features between
the two views much easier.
Make sure you get a TRUE profile. A slight turn of the head can throw off
your proportions.
Make sure the up and down tilt of the head is consistent between front
and profile views. (The forward tilt of the head in the Natalie Portman
"front view" below required her profile to be rotated slightly.)
You may find it helpful to draw points or a grid on the subject's face to
streamline the surface construction process later on the computer.
This may be obvious, but I find it easier to align the two photos in
Photoshop and cropping them to identical sizes before importing them
into the 3d package, instead of aligning them in the 3d package.
For your convenience, here are photos to be used as on-
screen reference that I either took myself or found on the
web.
Please respect my ownership and do not copy text or illustrations from this site without written consent. Thanks.
Patchwork Strategies
Comparing NURBS patch designs
1|2
(For more information about these principles and for other things to
consider, read Tom Capizzi's page on network strategies found in his
Head Surfacing Tutorial.)
1) The isoparms flowing from the top of the wing of the nose
flow back and around the cheek terminating in the jaw.
Consequently, the crease in the cheek that occurs when
sneering or smiling can only be faked. Instead, the isoparms
should flow along the surface detail whose shape actualy
flows from the top of the nose lobe, down around the corner of
the mouth and into the chin.
Click here for another view of this model showing the strategy
for the entire head.
1|2
Please respect my ownership and do not copy text or illustrations from this site without written consent. Thanks.
Patchwork Strategies
The NURBS ear and the rules of stitching
1|2
The ear is like a face within a face. The complexity, variation and
uniqueness of each ear is nothing short of amazing. Unfortunately many
CG heads fail at depicting a believable, realistic ear. I think the main
reason for this is simply a lack of good reference (it's very difficult to
examine one's own ears in a mirror) and lack of priority (rarely do we
notice ears; is it worth the time to do it right?). The ear modeled in
NURBS is further complicated by the limitation inherent to that paradigm
in depicting complex shapes. Stitching multiple patches, however, offers
a solid way of depicting human ears. Before discussing patchwork
strategies for the ear, we need to go over a few guidelines for stitching.
2) for all other patches, observe this principle: always stitch all
the enslaved edges of a patch before stitching the master
edge(s) of that patch. This will ensure that all corners meet at
the proper place without overlapping or dragging.
tangentCVWin.mel by JS
hullTangencyWin.mel by Jeffrey Wilson
mAlignCvs.mel by Matthew Gidney
mMidPointCvs.mel by Matthew Gidney
mPlanar Cvs.mel by Matthew Gidney
pickVertexC.mel by Matthew Gidney
pickvertex.mel by Becky Chow
1|2
Please respect my ownership and do not copy text or illustrations from this site without written consent. Thanks.
The Relationship
How Polgons and Subdivision Surfaces "Get Along"
1.
2.
Subdivision surfaces expect regular spacing between edges.
For example, the shape of the two objects above appear
identical. However, placing your mouse over the image
reveals that the extra edge around the middle of the second
shape creates a bump on the subdivision surface. John
Feather explains why, as well as elaborating on problem #1,
in this thread from the Mirai Bulletin Board. The practical
implication of this problem is that fine wrinkles on the face that
appear and disappear cannot be built into the model unless
the surrounding resolution is equally high.
3.
Maya Tip:
Because subdivision surfaces can slow down interactivity
while modeling, I setup my workspace with two perspective
modeling views one showing only the poly proxy and the other
displaying only the subd surfaces (use the Show menu of
each view panel). To view the poly control mesh in shaded
view, apply a material to it, but be sure to turn off its "Primary
Visibility", etc. attributes in the Render Stats section of its
Attribute Editor so that it won't render. Most modeling is then
accomplished while the poly view is maximized; a quick tap of
the space bar allows me to check progress on the subd
surface.
theory overview modeling theory approaches
process setup NURBS polys/subds texturing animation
resources features close-up reference/links
gallery pics and movies
Please respect my ownership and do not copy text or illustrations from this site without written consent. Thanks.
Attacking Stretching part 1
Mapping UVs
1|2|3
Michael Koch
A UV is a mapping coordinate that determines the relationship between the pixel of a texture and its relative
position on a surface. Unlike NURBS, which have "built-in", uneditable UVs, polygonal surfaces offer the modeler
control over the UV setup.
Generating and setting up mapping coordinates for the polygonal head model can be very tedious, given the
caverns of the nostrils, mouth, and ears and the mountainous topography of the nose, brow, and ears.
Furthermore, the head must contend with the problem of mapping a 2D image to a 3D "spherical" object, which is
puzzle that has plagued cartographers ever since the debunking of the flat earth theory. The Great Globe Gallery
offers a look at various mapping solutions. The method most commonly applied to mapping the head is a
modified Mercator Projection. The Mercator map offers several advantages for the 3D artist:
2) It is whole--no divisions in mapping coordinates, minimizing seams, (see Lundgren's multi-planar solution for
comparison) and
3) It is conformal.
Conformal mapping preserves the angles of the features. For example, if you paint an eyebrow, scar, wrinkle,
etc. at a certain angle on the texure, the feature will retain this angle once mapped onto the object (For
comparison, imagine the variation in the actual route delineated, if a straight line were drawn connecting L.A. and
Rio de Janeiro on the following maps: Gnomonic, Globe, and Mercator).
Methods
Spherical, cylindrical, cubic, and planar mapping are different approaches to the same goal: generating mapping
coordinates for a surface. Determining which to use in a given situation depends on which will generate a map
that is closest to the final goal, requiring the least amount of tweaking. Spherical mapping, in my opinion, doesn't
deal with the caverns and mountains of the head as predictably as cylindrical mapping does and therefore
requires more adjustment to approximate a modified Mercator projection. Cylindrical mapping, though, doesn't
generate proportional UVs in some areas; for instance, compressing the top of the skull.
spherical cylindrical
Simply mapping the model, however, generates a UV map with many overlapping UVs in the mouth, ears, and
nose regions. As a solution, the Maya Rendering Courseware suggests generating UVs for a human head model
using the following process:
Averaging vertices is a way of "smoothing out" the model, flattening raised areas and raising sunken areas by
averaging the distance between vertices. This, of course, makes the head much more ball-like and reduces the
amount of overlapping in the critical regions.
spherical cylindrical
There are a few problems, however, with this general "smoothing out." Averaging vertices modifies the relative
placement of vertices, distributing them more evenly across the model. It is important, as we'll see later, that the
relative size and shape of each face of the poly mesh remain consistent between the UV set and the actual
model--as much as possible. A solution, therefore, is to use averaging vertices selectively and locally on the ear,
nose, mouth, brow, and chin/neck regions.
spherical cylindrical
Maya offers an iterative action called "relax UVs" that performs the same smoothing effect as "average vertices",
but on UVs. Mapping the original head model and then applying "relax UVs" on the mouth, nose, ears, etc. can
result in a UV map identical to one generated by the "duplicate/average/transfer" method. In conclusion, whether
you map the raw model and relax UVs, or you duplicate the model, average vertices, map it and then transfer the
UVs--it's completely up to you. : )
1|2|3
Please respect my ownership and do not copy text or illustrations from this site without written consent. Thanks.
Attacking Stretching part 2
Tweaking UVs
1|2|3
rollover
rollover
1|2|3
Please respect my ownership and do not copy text or illustrations from this site without written consent. Thanks.
Attacking Stretching part 3
Painting textures with corrective distortion
1|2|3
The Process
Set up 3D procedural textures that fairly convincingly
depict different aspects of the skin surface: pimples,
moles, glyphics, discolorations, stubble, freckles, dry
skin, etc. Convert each of these to an image file.
Notice the corrective distortion in the examples below
(based on this imperfect UV map).
freckles pimples
1|2|3
Please respect my ownership and do not copy text or illustrations from this site without written consent. Thanks.
Modeling Blendshapes
A few things to consider
1|2
Examples:
The eyebrows should glide over the eyebone
as muscles pull them up in surprise. Notice the
downward pull on the hairline and compare this
to Square's demonstration of the forehead
wrinkle setup in Final Fantasy (Production>CG
Animation>8).
1)
Tip: when looking in the mirror, make use of pimples, moles and
pockmarks to analyze motion of skin. The messier the face, the better. :)
Case study: Smiling, one of the broadest movements of the face, pulls
the muzzle out, up, and back, tucking it up under the cheeks which rise
slightly in the y axis but also push out in the z and x. Abstracted, the line
of motion is like a sweep that pivots around the middle of the nose
(notice how the movement of the skin fades out as it approaches the
nose).
2)
4)
2) moving the blendshape slider up and down to see whether the skin
glides over underlying bone, or if the bone appears to collapse
underneath (you can only really detect this when viewing the blend in
motion)
By the way, you should definitely make your blendshape a target of the
base mesh early in the modeling stage, so that this kind of testing can
be done at each stage of its modeling.
5)
6)
Model and place the teeth in the skull before attempting to model
blendshapes for mouth movement (obviously, the same thing goes for
the eyes). The teeth, as part of the skull, serve to push the mouth out.
Smiling pulls the lips back around the teeth tightening the skin in that
region. A toothless smile is still obviously toothless even if the mouth is
kept closed because of the missing support of the substructure!
when trying to select vertices around the mouth in wireframe view, look
at the mouth from inside out so vertices don't get lost in rest of the head;
or turn on backface culling, or turn off "double sided" in the model's
attribute editor, or select faces of the mouth region and Show>Isolate
Select>View Selected.
use the "f" key to focus on selected components -- makes it much easier
to determine placement of adjacent vertices
1|2
Please respect my ownership and do not copy text or illustrations from this site without written consent. Thanks.
Blendshapes and Misc.
Considerations in setting up a model for facial action
1|2
levator close/
eye x x
palpebrae open
side
orbicularis
eye squeeze x x
oculi
and squint
elevator
nose/
labii sneer x x
mouth
superioris
zygomatic
mouth smile x x
major
orbicularis
mouth pucker x x
oris
orbicularis
mouth mmm... x x
oris
orbicularis
mouth protrude x x
oris
depressor
bottom lip
mouth labii x
down
inferioris
mouth open
jaw open
forehead surprise x x
eyebrow furrowed x x
nose sneer x x
chin cry/frown
mouth pucker
Misc [total: 5]
1|2
Please respect my ownership and do not copy text or illustrations from this site without written consent. Thanks.
Just Pictures
A small image and QTVR library of the facial features.
Sorry for bad lighting and blur on some of these; I hope to redo them
when I have more time.
The Head
The Eye
The Mouth/Nose
The Ear
books
dvds
Final Fantasy -
The Spirits
o
The Human Face Within
BBC Square Pictures o Foooooo
downloads
visual reference
people
Peter Levius
tutorials
information
broken links
this site
featured on:
Please respect my ownership and do not copy text or illustrations from this site without written consent. Thanks.
Showcase
Human Heads of the Web (and one monkey)
Andrew
Camenisch
Alceu
Baptistão
John Feather
Pasha Ivanov
Michael Koch
Louis
Lefebvre &
Pascal
. . . [models]
Savignac . . . [textures]
Ulf Lundgren
René Morel
Caleb "Cro"
Owens
Marco Patrito
Francois
Rimasson
Michel Roger
Steven
Stahlberg
If you know someone who should be in this gallery feel free to let me know.
Please respect my ownership and do not copy text or illustrations from this site without written consent. Thanks.
//
// Alias|Wavefront Script File
// MODIFY THIS AT YOUR OWN RISK
//
// Creation Date: Jan 9, 1998
// Author: js
//
// Description:
// Type: tangentCVWin <-- creates a window to use this script
// interactively. Basically it's a way of moving surface cv's
// to help create tangency.
//
// Notes: it's really helpful for corners where 3 or more surfaces come
// together and you need to keep tangency between those surfaces.
//
// Example:
// For a corner where 4 surfaces come together: while in CV component
// selection mode select the 4 cv's which are on the corners of each
// surface and press the "cv's that move" button (you should have done
// the "tangentCVWin" command before this). Then select the surrounding
// cvs and press the "cv's that don't" button. Then press the "Make cv's
// tangent" button at the bottom of the window - this will move those
// first cv's so their xyz position is an average of all the other cv's
// you select.
//
// Input Arguments:
// None.
//
// Return Value:
// None.
//
string $objs[1];
$objs = `ls -sl`;
string $result[1];
int $counter = 0;
string $u[1];
string $v[1];
tokenize ($sets[0], ":", $u);
tokenize ($sets[1], ":", $v);
clear ($tmp2);
clear ($sets);
int $umin;
int $umax;
int $vmin;
int $vmax;
$umin = $u[0];
if (size($u[1]) != 0 )
{
$umax = $u[1];
}
else
{
$umax = $umin;
}
int $vmin = $v[0];
if (size($v[1]) != 0)
{
$vmax = $v[1];
}
else
{
$vmax = $vmin;
}
columnLayout topCVWindowLayout;
rowColumnLayout
-nc 2
-cw 1 200
-cw 2 200
cvRowColumnLayout;
setParent topCVWindowLayout;
button -w 400 -l "Make cv's tangent!!" makeTangentButton;
}
}
//hullTangencyWin.mel: created by Jeffrey Wilson, 09.26.00
//This script is based off of tangentCVWin script created
//by js @ A|W 01.09.98
//
//edited by Jeffrey Wilson 09.26.00
// fix conflicts with tangencyCvWin.mel
//
//
//This script will allow you generate tangency at a surface
//seam or multiknot through the selection of the seam hulls
//and the hulls adjacent to the seam.
//
//usage: hullTangency
// (This will bring up the Surface Seam Continuity
// window)
// Load the cv hulls into the window:
// select a single hull at the seam
// press Seam Hull 1 Button
// select the corresponding seam
// (if multiknot, no need to select another hull)
// press Seam Hull 2 Button
// select adjacent hull to Seam Hull 1
// press Tangency Hull 1
// select adjacent hull to Seam Hull 2
// press Tangency Hull 2
// Execute "Create Tangency Along Seam"
// (If the seam twists, execute the Untwist Seam button)
//
string $objs[1];
$objs = `ls -sl`;
string $result[1];
int $counter = 0;
string $u[1];
string $v[1];
tokenize ($sets[0], ":", $u);
tokenize ($sets[1], ":", $v);
clear ($tmp2);
clear ($sets);
int $umin;
int $umax;
int $vmin;
int $vmax;
$umin = $u[0];
if (size($u[1]) != 0 ){
$umax = $u[1];
}
else{
$umax = $umin;
}
int $vmin = $v[0];
if (size($v[1]) != 0){
$vmax = $v[1];
}
else{
$vmax = $vmin;
}
undo makeHullTangents;
$in = size($tangentCVs1);
for ($i = 0; $i < size($tangentCVs1); $i++){
$in--;
$cvPos1 = `xform -q -ws -t $tangentCVs1[$i]`;
$cvPos2 = `xform -q -ws -t $tangentCVs2[$in]`;
$avgX = ($cvPos1[0] + $cvPos2[0])/2;
$avgY = ($cvPos1[1] + $cvPos2[1])/2;
$avgZ = ($cvPos1[2] + $cvPos2[2])/2;
//print ("position of tangency1 " + $cvPos1[0] + " " + $cvPos1[1] + " " + $cvPos1[2] + "\n");
//print ("position of tangency2 " + $cvPos2[0] + " " + $cvPos2[1] + " " + $cvPos2[2] + "\n");
//print ("avg position of seams " + $avgX + " " + $avgY + " " + $avgZ + "\n");
//print ("diff between points " + ($cvPos1[0] - $cvPos2[0]) + " " + ($cvPos1[1] + $cvPos2
[1]) + " " + ($cvPos1[2] + $cvPos2[2]) + "\n");
if (size($seamCVs1) > 0){
move $avgX $avgY $avgZ $seamCVs1[$i];
}
if (size($seamCVs2) > 0){
move $avgX $avgY $avgZ $seamCVs2[$in];
}
}
}
if ( $numberOfCvs < 3) {
print("mAlign(): You must pick at least 3 Cv's to align \n");
return;
}
float $CVPin1[3] = `xform -q -worldSpace -t $parents[0]`;
float $CVPin2[3] = `xform -q -worldSpace -t $parents[1]`;
if ( $numberOfCvs < 4) {
print("mPlanarCvs(): You must pick at least 4 Cv's to align \n");
return;
}
float $CVPin1[3] = `xform -q -worldSpace -t $parents[0]`;
float $CVPin2[3] = `xform -q -worldSpace -t $parents[1]`;
float $CVPin3[3] = `xform -q -worldSpace -t $parents[2]`;
// next resolve the points onto the plane via the normal
// this script allows users to pick out all the vertex based
// on vertex color range, from a complex polyset.
// for instance, to pick out all the dark colored vertex,
// just put dark gray in color box, and give it a 10% percentage range.
// the script will automatically pick the darkest shaded vertex.
//to install:
//Copy "pickVertexC.mel" into your /maya/x.x/scripts folder.
//Copy "pickVertexCIcon.bmp" to your /maya/x.x/prefs/icons folder.
select -cl;
for ($i = 0; $i < $jv; $i++ )
{
select -add ($vtc[$i]);
}
text -label " double click on color box to change seed color. ";
text -label " it will pick all the vertex within the seed color range. ";
text -label " 100% will let you select all the vertex with every color.";
rowColumnLayout -numberOfColumns 2
-columnWidth 1 10 -columnWidth 2 240;
text - label " ";
colorSliderGrp -enable 1
-cw 1 80 -cw 2 30 -cw 3 100
-label "starting color"
-rgb 0.5 0.5 0.5
slider1;
setParent ..;
rowColumnLayout -numberOfColumns 1
-columnWidth 1 400;
floatSliderGrp -enable 1
-field 1
-value 0
-cw 1 180 -cw 2 40 -cw 3 100
-label "% range from the seed vertex color "
-min 0
-max 100
-precision 1
slider2;
setParent ..;
rowColumnLayout -numberOfColumns 2
-cw 1 120 -cw 2 60;
text -label "press here to select ";
button -label "select"
-height 30
-command "pc"
button1;
setParent ..;
rowColumnLayout -numberOfColumns 2
-cw 1 120 -cw 2 120;
text -label " ";
button -label "close window"
-height 30
-align "center"
-command ("deleteUI pickcolr ");
showWindow;
}
proc pc( )
{
select -cl;
for ($i = 0; $i < $jv; $i++ )
{
select -add ($vtc[$i]);
}
proc mkwin ()
{
text -label " double click on color box to change seed color. ";
text -label " it will pick all the vertex within the seed color range. ";
text -label " 100% will let you select all the vertex with every color.";
rowColumnLayout -numberOfColumns 2
-columnWidth 1 10 -columnWidth 2 240;
text - label " ";
colorSliderGrp -enable 1
-cw 1 80 -cw 2 30 -cw 3 100
-label "starting color"
-rgb 0.5 0.5 0.5
slider1;
setParent ..;
rowColumnLayout -numberOfColumns 1
-columnWidth 1 400;
floatSliderGrp -enable 1
-field 1
-value 0
-cw 1 180 -cw 2 40 -cw 3 100
-label "% range from the seed vertex color "
-min 0
-max 100
-precision 1
slider2;
setParent ..;
rowColumnLayout -numberOfColumns 2
-cw 1 120 -cw 2 60;
text -label "press here to select ";
button -label "select"
-height 30
-command "pc"
button1;
setParent ..;
rowColumnLayout -numberOfColumns 2
-cw 1 120 -cw 2 120;
text -label " ";
button -label "close window"
-height 30
-align "center"
-command ("deleteUI pickcolr ");
showWindow;
}