A Simple Method for Extracting the Natural Beauty of Hair

advertisement
A Simple Method for Extracting
the Natural Beauty of Hair
“How many roads must a man
walk down…”
Ken-ichi Anjyo, Yoshiaki Usami, Tsuneya Kurihara
Presented by Chris Lutz
Presentation Overview
• The “Dr. B” presentation style:
– I’ll just read the first sentence of each
paragraph and try to wing it.
– Next, I’ll write some vocab on the board.
– Finally, I’ll scribble down some incomplete
matrices and run out of time.
• (I’m assuming Dave can take a joke.)
• Man, it’s late. Wow.
Real Presentation Overview
(It’s not all that much better, really)
• How hair is actually represented and how it
is allowed to move
– WHAM! Whole lotta math comin’ atchya
• Dynamic behaviors
– Coordinate system
– Inertia and force fields
• Rendering Techniques & Results
Philosophy and Caveats
• This paper is concerned (oddly enough)
with the “natural beauty” of hair.
• To that end, the authors sacrifice some
realism:
– Physically-based simulation
– Collision detection between hair & body as
well as hair & other hair
– Shadowing of hair onto itself
• In a sense, they’re after pretty pictures
Modeling Process Overview
• 1. Create a model of a head
• 2. Define an ellipsoidal hull
– A rough approximation, yes, but not too bad
– It’s faster for collisions & pore placement
• 3. Calculate hair bending (cantilever beam)
• 4. Cut and style as desired
– Essentially, “blow-dry” the hair by applying
various directional forces
Not So Touchably Soft
• Hair is modeled as a
series of segments
connected at bending
points
• Apply some force to
the beam and watch it
deform
• d2y/dx2 = -M/(E*I)
– E: Young’s Modulus
– I: 2nd momentum of area
Get Volume Through Math
• Bending by “sequentially averaged concentrated
loads”
• Mi = -||g||d(1k-i+1p + 1k-ip)/2 = -||g||d(k-i+1)2/2
– g: force on the hair
– 1..k: number of segments in the hair
– d: segment length
• Displacement of node yi = (-1/2)*(Mi/E*I)*d2
• 2D: define a new vector ei of magnitude yi
– ei = pi-2pi-1 + yi
– pi = (d/||ei||)ei + pi-1
• New node pi = (d/||ei||)ei + pi-1
3D Bending
• Set up coordinate
system
• Use 2D deformation
formulas along both
a0 (x) and a2 (z) axes
• The deflectional
vector is is then just
y1a1 + y2a2
Avoiding the Issue of Hair
Piercing the Skull
• Since collision detection using the actual
head model is hard, revert to using an
ellipsoidal representation
• Check every new pi for collision
– If the new pi collides with the head, move it to
a “close” point on the plane defined by pi-2, pi-1,
and pi
– Which way do you move it?
The Taming of the ’Do
• (a) Initial conditions:
zero-g bed-head
• (b) Gravity kicks in
• (c) Apply external
forces (blow-dry) the
hair & cut (define ythreshold and pore
location)
• (d) Paul Mitchel
would be proud
Other Hip Styles
The Answer, My Friend...
• So we want to add wind; that means
keeping track of inertia and applied forces
• Again, some realism issues:
– Hair is modeled as rigid segments connected
with flexible joints
– Hair-to-hair collisions & friction is not modeled
in a physically correct manner
• Use a pseudo force-field and solve
differential equations
Single Hair Dynamics
• Set up an initial polar
coordinate system like
the one to the right
• Track the projection of
the hair onto the  and
 planes
Plane Definitions
More Math Stuff
• i(t) = d2i/dt2 = ci ui F
• i(t) = d2i/dt2 = ci vi F
• Variables:
– ci: reciprocal number of the inertia moment of si
– ui: (1/2)||si||
– vi: half of segment si projected onto  plane
– F & F: the respective force components
Still More Math Stuff
• Given in-1 and in
• in+1 = in+1-2in+in-1 = (t)2ciuiF
• Similar thing for in+1
– Outer loop is segment number I
– Inner loop is time loop n
• By selectively manipulating the ci’s, you
can simulate frictional effects
• You can also manipulate joint stiffness
Hey Look! A Dab of Reality!
• We should try and keep track of the inertia
moment of hair
– kd: length of hair (k segments of length d)
– : line density
• IS = (1/3)(kd)2
• Ii = (/3i)k3d2
• Putting this in for (t)2ciui results in
(3(t)2i) / (2k3d)
A Bouncy Hold All Day Long
• (a) 10,000 hairs of
length <= 18
• (b) F = (-200, 0, 0),
10th frame
• (c) F = (-20, -250, 0),
15th frame
• (d) 20th frame shows
the effects of the force
(wind) shift
Pseudo-Force Fields
• Again, hairs could
pierce the skull (bad)
• Define a pseudo-force
field to replace the
specified force for
hairs close to the head
• Make this PsFF
ellipsoidal to make it
easier
Pseudo-Force Field Definition
• F: original user-specified force (wind)
• Di: segment direction of si defined in terms of the
ellipsoid
– E(p): Di = (Ex(pi), Ey(pi), Ez(pi))
– Ex, Ey, Ez: partial derivatives of polynomial
• For some value (|| <= 1):
– If (Di, F) < ||Di||||F|| then si is facing “into” F
– If si is near the head, replace F with iF
– (near pore) 0 <= i <= 1 (end of hair)
• Ellipsoidal representation won’t always look good
Lighting: Silky & Shiny
• Diffuse term is
neglected
• Instead of polylines,
assume the hair is
cylindrical
• s(P) = ks(1-(T,H)2)n/2
– n: specular exponent
– ks: reflection coeff.
• Close to Phong
shading
Rendering & Time Measures
• Use z-buffer algorithm to render the hair &
linearly interpolate colors across segments
(oversample if hairs are thin)
• 20,000 hairs with <= 20 segments: 50 sec
for modeling, “several” for rendering on a
SG Iris Power Series w/ VGX gfx board
• “The image with a different camera angle
was obtained almost in real-time”
Split Ends (Closing Issues)
• If you define (complicated) regional forces,
you could create almost any hairstyle, right?
• It seems hard to add any human touches,
e.g. ponytails or dreadlocks.
• In all honesty, when would anyone really
care about the exact physics of hair?
• It would be nice to have a shot of lightercolored hair, just to see what it looked like.
Download