skinning
play

Skinning CS418 Computer Graphics John C. Hart Simple Inverse - PowerPoint PPT Presentation

Skinning CS418 Computer Graphics John C. Hart Simple Inverse Kinematics Given target point ( x , y ) in position space, (0,0) q ( x , y ) what are the parameters ( q , f ) in configuration f b a space that place the hand on the target


  1. Skinning CS418 Computer Graphics John C. Hart

  2. Simple Inverse Kinematics • Given target point ( x , y ) in position space, (0,0) q ( x , y ) what are the parameters ( q , f ) in configuration f b a space that place the hand on the target point? Use Law of Cosines to find q • d 2 = a 2 + b 2 – 2 ab cos q ( x , y ) d cos q = ( a 2 + b 2 – d 2 )/2 ab (0,0) a q cos q = ( a 2 + b 2 – x 2 – y 2 )/2 ab b a And to find a • cos a = ( a 2 + d 2 – b 2 )/2 ad cos a = ( a 2 + x 2 + y 2 – b 2 )/2 ad ( x , y ) Use arctangent to find b then f • d b b = atan2( y , x ) (0,0) f f = a – b a

  3. Skinning M 2 R ( q 2 ) R ( q 2 ) • Elbow joints don’t look realistic because geometry detaches • Transformation hierarchy: – R ( q 1 ) rotates upper-arm cylinder about its M 1 R ( q 1 ) M 2 shoulder at the origin – M 1 moves upper-arm cylinder from the origin to its position in world coordinates – R ( q 2 ) rotates forearm cylinder about its elbow at the origin – M 2 moves forearm elbow from the origin to the end of the upper-arm cylinder when M 1 R ( q 1 ) its shoulder is based at the origin When q 2  0 the elbow end of the upper-arm • does not align with the elbow end of the forearm

  4. Skinning M 1 R ( q 1 ) M 2 R ( 0 ) • Solution is to interpolate matrices from the undetached coordinate frame into the correctly oriented coordinate frame per-vertex M 1 R ( q 1 ) M 2 R ( 2 / 3 q 2 ) • Let w = 1 M 1 R ( q 1 ) M 2 R ( 1 / 3 q 2 ) M straight = M 1 R ( q 1 ) M 2 R ( 0 ) w = 2/3 M bent = M 1 R ( q 1 ) M 2 R ( q 2 ) w = 1/3 • Distribute (“paint”) weights w on vertices of M 1 R ( q 1 ) forearm cylinder – w = 0 at elbow end – w = 1 after elbow • Transform vertices using M ( w ) = (1 – w ) M straight + w M bent

  5. Build an Elbow glPushMatrix(); glColor3f(0,0,1); glTranslatef(0,-2,0); drawquadstrip(); glPopMatrix(); glPushMatrix(); glColor3f(1,1,0); glRotatef(elbow,0,0,1); glTranslate(0,0,2); drawquadstrip(); glPopMatrix();

  6. Two Coordinate Systems glPushMatrix(); Yellow limb in glColor3f(0,0,1); blue limb’s glTranslatef(0,-2,0); coordinate drawquadstrip(); system glColor3f(1,1,0,.5) glTranslatef(0,4,0); drawquadstrip(); Blue limb in glPopMatrix(); yellow limb’s coordinate glPushMatrix(); system glRotatef(elbow,0,0,1); glColor3f(1,1,0); glTranslatef(0,0,2); drawquadstrip(); glColor3f(0,0,1,.5); glTranslatef(0,0,-4); drawquadstrip(); glPopMatrix();

  7. Interpolate the Transformations for (i = 0; i < 8; i++) { weight = i/7.0; glPushMatrix(); glRotatef(weight*elbow,0,0,1); glTranslate3f(0,0,-3.5+i); drawquad(); glPopMatrix(); }

  8. Interpolate the Vertices glBegin(GL_QUAD_STRIP); for (i = 0; i <= 8; i++) { weight = i/8.0; glColor3f(weight,weight,1-weight); glPushMatrix(); glRotatef(weight*elbow,0,0,1); glVertex2f(-1,-4.+i); glVertex2f(1,-4.+i); glPopMatrix(); } glEnd(/*GL_QUAD_STRIP*/);

  9. Interpolate the Matrices glLoadIdentity(); glGetMatrixf(A); glRotatef(elbow,0,0,1); glGetMatrixf(B); glBegin(GL_QUAD_STRIP); for (i = 0; i <= 8; i++) { weight = i/8.0; glColor3f(weight,weight,1-weight); C = (1-weight)*A + weight*B; glLoadIdentity(); glMultMatrix(C); glVertex2f(-1,-4.+i); glVertex2f(1,-4.+i); } glEnd(/*GL_QUAD_STRIP*/);

  10. Matrix Palette Skinning • Each vertex has one or more weight attributes associated with it • Each weight determines the effect of each transformation matrix • “Bones” – effect of each transformation is described by motion on bone from canonical position • Weights can be painted on a meshed model to control effect of underlying bone transformations (e.g. chests, faces)

  11. Interpolating Matrices • Skinning interpolates matrices by interpolating their elements • Identical to interpolating vertex (aA + bB)p = a(Ap) + b(Bp) positions after transformation a,b = weights A,B = matrices • We’ve already seen problems with p = vertex position interpolating rotation matrices • Works well enough for rotations with small angles • Rotations with large angles needs additional processing (e.g. polar From: J. P. Lewis, Matt Cordner, and Nickson Fong. “Pose space deformation: a decomposition) unified approach to shape interpolation and skeleton-driven deformation.” • Quaternions provide a better way to Proc. SIGGRAPH 2000 interpolate rotations…

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend