Automatic Rigging and Animation of 3D Characters
TL;DR
- Pinocchio
- Input — a static character mesh + a generic skeleton
- Output — adapt skeleton to character and attach it to surface
- Skeleton Embedding
- Discretization
- Distance Field
- Approximate Medial Surface
- Sphere Packing
- Graph Construction
- Reduced Skeleton
- Discrete Penalty Function
- Embedding Refinement
- Discretization
- Skin Attachment — attach skeleton to surface
3. Skeleton Embedding
3.1. Discretization
Distance Field
- constructs a kd-tree to evaluate the exact signed distance to the surface from an arbitrary point
Approximate Medial Surface ?
Pinocchio therefore traverses the octree and for each cell, looks at a grid ( of spacing ) of points on each face of the cell. It then computes the gradient vectors for the cells adjacent to each grid point — if the angle between two of them is or greater, it adds the point to the medial surface sample. We impose the condition because we do not want the “noisy” parts of the medial surface — we want the points where skeleton joints are likely to lie. For the same reason, Pinocchio filters out the sampled points that are too close to the character surface ( within ).
Sphere Packing
- sort the medial surface points by their distance to the surface ( farthest first )
- if a point is outside all previously added spheres
- add the sphere centered at that point whose radius is the distance to the surface
In other words,
- largest spheres are added first
- no sphere contains the center of another sphere
Graph Construction
- add an edge between two sphere centers if the spheres intersect
- add edges between spheres that do not intersect if that edge is well inside the surface and if that edge is “essential”
Precise condition
- the distance from any point of the edge to the surface must be at least half of the radius of the smaller sphere
- the closest sphere centers to the midpoint of the edge must be the edge endpoints
? How to construct a rooted tree on joints
3.2. Reduced Skeleton
- all bone chains are merged ( all degree-two joints, such as knees, eliminated )
It can compute the intermediate joints by taking the shortest path between the endpoints and splitting it in accordance with the proportions of the unreduced skeleton.
3.3. Discrete Penalty Function
- design penalties independently
- learn a proper weighting for a global penalty that combines each term
The Setup
- — penalty function
- — number of “basic” penalty functions
- — weights
- — feature vector to each example embedding
- — -dimensional feature vectors of good embeddings
- — feature vectors of bad embeddings
Maximum Margin
? we want to distinguish between the best “bad” embedding and the best “good” embedding
maximize the optimization margin ( subject to ):
Learning Procedure
3.4. Discrete Embedding
branch-and-bound method
3.5. Embedding Refinement
minimize continuous penalty function sum of penalty functions over the bones + an asymmetry penalty
- — parent function for the unreduced skeleton ( analogous to )
- — penalizes bones that do not fit inside the surface nicely
- too short
- oriented differently from the given skeleton
4. Skin Attachment
Linear Blend Skinning ( LBS ) gives the position of the transformed vertex as
- — position of vertex
- — transformation of the th bone
- — weight of the th bone for vertex
? Suppose we treat the character volume as an insulated heat-conducting body and force the temperature of bone to be 1 while keeping the temperature of all of the other bones at 0. Then we can take the equilibrium temperature at each vertex on the surface as the weight of bone at that vertex.
- — discrete surface Laplacian
- — a vector with if the nearest bone to vertex is and otherwise
- — the diagonal matrix with being the heat contribution weight of the nearest bone
- — the distance from vertex to the nearest bone