230 likes | 387 Views
A Simple Method for Extracting the Natural Beauty of Hair. Ken-ichi Anjyo, Yoshiaki Usami, Tsuneya Kurihara Presented by Chris Lutz. “How many roads must a man walk down…”. Presentation Overview. The “Dr. B” presentation style:
E N D
A Simple Method for Extracting the Natural Beauty of Hair Ken-ichi Anjyo, Yoshiaki Usami, Tsuneya Kurihara Presented by Chris Lutz “How many roads must a man walk down…”
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-2pi-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 y-threshold and pore location) • (d) Paul Mitchel would be proud
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
More Math Stuff • i(t) = d2i/dt2 = ci ui F • i(t) = d2i/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-2in+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) / (2k3d)
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 lighter-colored hair, just to see what it looked like.