004character Animation Using Skinning
004character Animation Using Skinning
using Skinning
Articulated Character Models
Low-dimensional animation controls
for characters
𝛼0
𝑥0 , 𝑦0
Articulated Character Models
Forward kinematics (FK) describes the positions
of the body parts as a function of joint angles
Body parts are
usually called “bones”
Angles are the low-dimensional control.
𝑥1 , 𝑦1
β0
𝛼0
𝑥0 , 𝑦0
Articulated Character Models
Forward kinematics describes the positions of
the body parts as a function of joint angles
Body parts are
usually called “bones”
Angles are the low-dimensional control.
𝑥1 , 𝑦1
β0
Articulated Character Models
Forward kinematics (FK) describes the positions
of the body parts as a function of joint angles
Body parts are
usually called “bones”
Angles are the low-dimensional control.
Forward kinematics
Inverse kinematics
Images from blog "Simple Inverse Kinematics",
Dave Pagurek, 2017
Animating Characters
How to animate human
characters ?
Animating Characters
How to animate human
characters ?
https://youtu.be/FiEdSVtXIls
Hierarchical Modeling
Very common in modeling articulated characters
Chain up motion in different hierarchy
https://youtu.be/0etry3MVa90
Skinning/Enveloping
Need to infer how skin deforms from bone
transformations.
Most popular technique:
Skeletal Subspace Deformation (SSD), or
simply Skinning
Other aliases
vertex blending
matrix palette skinning
linear blend skinning
SSD/Skinning
Each bone has a deformation of
the space around it (rotation, translation)
Vertices on a bone
Images from Liu, Feng, Ronghua Liang, and Dahai Ye. "Skeleton
Subspace Deformation with Displacement Map."
SSD/Skinning
Each bone has a deformation of
the space around it (rotation, translation)
Transform the
whole arm Rotate forearm
Transform the
skin/vertices Rotate the skin/vertices
Images from Liu, Feng, Ronghua Liang, and Dahai Ye. "Skeleton
Subspace Deformation with Displacement Map."
SSD/Skinning
What if we attach each vertex of the skin
to a single bone ?
Images from Liu, Feng, Ronghua Liang, and Dahai Ye. "Skeleton
Subspace Deformation with Displacement Map."
SSD/Skinning
What if we attach each vertex of the skin
to a single bone ?
Skin will be rigid:
In the middle of a limb,
the skin points follow the bone rotation
Rotate forearm
Images from Liu, Feng, Ronghua Liang, and Dahai Ye. "Skeleton
Subspace Deformation with Displacement Map."
SSD/Skinning
What if we attach each vertex of the skin
to a single bone ?
Skin will be rigid:
In the middle of a limb,
the skin points follow the bone rotation
Rotate forearm
At joints, it will stretch badly
Images from Liu, Feng, Ronghua Liang, and Dahai Ye. "Skeleton
Subspace Deformation with Displacement Map."
SSD/Skinning
What if we attach each vertex of the skin to
a single bone ?
Skin will be rigid:
In the middle of a limb,
the skin points follow the bone rotation
At joints, it will stretch badly
Let’s attach a vertex to many bones at
once!
Images from Liu, Feng, Ronghua Liang, and Dahai Ye. "Skeleton
Subspace Deformation with Displacement Map."
SSD/Skinning
What if we attach each vertex of the skin to
a single bone ?
Skin will be rigid:
In the middle of a limb,
the skin points follow the bone rotation
Rotate forearm
At joints, it will stretch badly
Let’s attach a vertex to many bones at
once!
Skin will be deformed according to a
“weighted combination” of the bones Images from Liu, Feng, Ronghua Liang, and Dahai Ye. "Skeleton
Subspace Deformation with Displacement Map."
SSD/Skinning
What if we attach each vertex of the skin to
a single bone ?
Skin will be rigid:
In the middle of a limb,
the skin points follow the bone rotation
Rotate forearm
At joints, it will stretch badly
Let’s attach a vertex to many bones at
once!
Skin will be deformed according to a
“weighted combination” of the bones Images from Liu, Feng, Ronghua Liang, and Dahai Ye. "Skeleton
Subspace Deformation with Displacement Map."
Vertex Weights
We’ll assign a weight 𝑤𝑖𝑗 for each vertex 𝑝𝑖
for each bone 𝐵𝑗
“How much vertex 𝑖 should move with bone 𝑗 ?”
𝑤𝑖𝑗 = 1 means 𝑝𝑖 is rigidly attached to bone 𝑗
𝑤𝑖𝑗 = 0 means bone 𝑗 has no influence over 𝑝𝑖
Examples
Weight properties
Weights to be non-negative
Sum over all bones to be 1 for each vertex
Vertex Weights cont’d
We’ll assign a weight 𝑤𝑖𝑗 for each vertex 𝑝𝑖
for each bone 𝐵𝑗
“How much vertex 𝑖 should move with bone 𝑗 ?”
𝑤𝑖𝑗 = 1 means 𝑝𝑖 is rigidly attached to bone 𝑗
𝑤𝑖𝑗 = 0 means bone 𝑗 has no influence over 𝑝𝑖
p0
“Skin”
Computing Vertex Positions
Rest (“bind”) pose
Vertex 𝑝0 has weights
𝑤01 = 0.5, 𝑤02 = 0.5
Bone 1: T1 Bone 2: T2
p0
“Skin” Transform by T’1 and T’2
After rotations yields 𝑝01
′
, 𝑝02
′
p’01 p’02
Computing Vertex Positions
Rest (“bind”) pose
Vertex 𝑝0 has weights
𝑤01 = 0.5, 𝑤02 = 0.5
Bone 1: T1 Bone 2: T2
p0
“Skin” Transform by T’1 and T’2
After rotations yields 𝑝01
′
, 𝑝02
′
p0
“Skin” Transform by T’1 and T’2
After rotations yields 𝑝01
′
, 𝑝02
′
p0
After rotations
https://youtu.be/Tl4qTgwQwYw
Super Cool: Automatic Rigging
When you just have some reference skeleton
animation (perhaps from motion capture)
and a skin mesh, figure out the bone
transformations and vertex weights!
Ilya Baran, Jovan Popovic: Automatic
Rigging and Animation of 3D Characters,
SIGGRAPH 2007
Input Output
3D Character
Rigged Character
Pinocchio
Generic Skeleton
Image from Ilya Baran, Jovan Popovic: Automatic Rigging and Animation of 3D Characters,
SIGGRAPH 2007
https://youtu.be/EklzamltEgM