Presentation on theme: "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."— Presentation transcript:
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: –Ill just read the first sentence of each paragraph and try to wing it. –Next, Ill write some vocab on the board. –Finally, Ill scribble down some incomplete matrices and run out of time. (Im assuming Dave can take a joke.) Man, its late. Wow.
Real Presentation Overview 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 (Its not all that much better, really)
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, theyre 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 –Its 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 d 2 y/dx 2 = -M/(E*I) –E: Youngs Modulus –I: 2 nd momentum of area
Get Volume Through Math Bending by sequentially averaged concentrated loads M i = -||g||d( 1 k-i+1 p + 1 k-i p)/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 y i = (-1/2)*(M i /E*I)*d 2 2D: define a new vector e i of magnitude y i –e i = p i-2 p i-1 + y i –p i = (d/||e i ||)e i + p i-1 New node p i = (d/||e i ||)e i + p i-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 y 1 a 1 + y 2 a 2
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 p i for collision –If the new pi collides with the head, move it to a close point on the plane defined by p i-2, p i-1, and p i –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) = d 2 i /dt 2 = c i u i F i (t) = d 2 i /dt 2 = c i v i F Variables: –c i : reciprocal number of the inertia moment of s i –u i : (1/2)||s i || –v i : half of segment s i projected onto plane –F & F : the respective force components
Still More Math Stuff Given i n-1 and i n i n+1 = i n+1 -2 i n + i n-1 = ( t) 2 c i u i F Similar thing for i n+1 –Outer loop is segment number I –Inner loop is time loop n By selectively manipulating the c i 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 I S = (1/3) (kd) 2 I i = ( /3i)k 3 d 2 Putting this in for ( t) 2 c i u i results in (3( t) 2 i) / (2k 3 d)
A Bouncy Hold All Day Long (a) 10,000 hairs of length <= 18 (b) F = (-200, 0, 0), 10 th frame (c) F = (-20, -250, 0), 15 th frame (d) 20 th 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) D i : segment direction of s i defined in terms of the ellipsoid –E(p): D i = (E x (p i ), E y (p i ), E z (p i )) –E x, E y, E z : partial derivatives of polynomial For some value (| | <= 1): –If (D i, F) < ||D i || ||F|| then s i is facing into F –If s i is near the head, replace F with i F –(near pore) 0 <= i <= 1 (end of hair) Ellipsoidal representation wont always look good
Lighting: Silky & Shiny Diffuse term is neglected Instead of polylines, assume the hair is cylindrical s (P) = k s (1-(T,H) 2 ) n/2 –n: specular exponent –k s : 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.