Raycasting based auto-rigging method for humanoid meshes
Romain LOPEZ
Christophe POIREL
Rigging
Biped Armature
AutoRigging
Similar Works
Frankenrig
Christian Miller
Okan Arikan
Don Fussell
Symposium on
Interactive 3D
Graphics and Games
(I3D) 2010
Similar Works
Skeleton Extraction from a Mesh for Easy Skinning Animation
Martin Madaras
Roman Durikovic
Tomas Agoston
Tomoyuki Nishita
13th International
Conference on
Human and
Computer - HC 2010
Similar Works
Pinocchio
Ilya Baran & Jovan Popovi ´c
SIGGRAPH 2007
The method
•
•
It’s in two parts:
2D body-mapping of the mesh.
3D raycasting to center the bones.
Tools used : Blender, Python
Body mapping :
Silhouette
Why a body mapping?
Armature:
Legs
Arms
Head
Torso
Human point of view
Anybody can identify the differents body parts of a mesh.
It’s more difficult for a computer…
Computer point of view
It’s a 3D points cloud.
How to simplify the mesh?
Creating a 2D projection
Using a grid in front of the mesh:
A ray is cast through each hole in the grid.
A a ray hits the mesh, we keep the instersection point.
Silhouette
Each intersection point is put on the same plane:
silhouette
Requirement: all limbs must be separated and visible.
Outlining
Final silhouette
Only the outlining points are necessary to identify the limbs.
How to find them?
First step
The lower slice with four points matches the legs.
Navigation
Paths
We link the points regarding three paths.
What for?
Finding the legs
We go through the middle path, from point to point, keeping the max height.
Finding the arms
We save the legs and remove them.
Among the remaining points, the edges are the arms.
The points along the edge of the legs are the hips.
Starting point
We calculate the line equation between the arm and the hip.
If there’s a point between them on the line, it’s the starting point.
Y = A*X + B
Finding the arm pits
We increase ‘b’ in the line equation.
At each step, we look for the closest point to the line.
The point ends up being « stuck » in the arm pit.
Finding the arm
The points between the hip and the arm pit are stored and removed.
Starting with the arm pit, from point to point, we reach the point with the same abscissa as the arm pit.
Finding the head
We remove the arms, and the remaining points are the head.
Result
Here is a body mapping.
Now, how to place the bones using it?
Raycasting
Placing the bones
Entry points
Provided by the body mapping.
The arm
We start in the arm.
The arm pit is the height limit, the stop point.
How to use these points to place the bones?
Raycasting
From the entry point, inside the slice, we cast rays in all directions.
Inside view
We keep the closest intersection points from the entry point.
Projection
The rays are cast from the entry point.
Polygon
A polygon is made of the intersection points.
How the find its center?
Barycenter
Each point has weight depending on the distance to its closest neighbour.
Therefore, for this slice, the bone will go through the barycenter.
Step by step
From the barycenter we go down the limb.
Again, at each slice, we cast rays to find the next barycenter.
Stop condition
The algorithm stops when it’s outside the mesh.
Then it goes back in the opposite direction.
N.B. : There’s no hand rigging for now.
Stop condition
We stop when we reach the arm pit.
Bone path
The barycenters found at each step are candidates for the joint positions.
Bone path
The joints positions will be used to place the bones.
Shoulder
The shoulder is found by casting a ray in the opposite direction of the arm path.
It’s placed half way of the intersection point.
What about he other limbs ?
Leg
Hip
The hip is on the vector of the path at an anatomical ratio of the leg length.
All the points are found
Placement de l’armature
Armature ratios
Head
Head
Foot
Foot
Final result
Motion capture linking
The rest position
It’s the initial position of the armature in the motion capture data.
From this position, rotations will be applied frame by frame.
Our goal
Here’s the rigged character.
We want to put its armature in rest position while moving the mesh.
Method
Using any frame to cancel its rotations, so it will be back in rest position.
Method
We modify this frame to place fit the rigged armature, by applying rotations, translations and scalings.
Then we bind this frame’s armature to the mesh. This way the mesh will be moved with the bones.
Method
Then, we cancel the rotations so the armature is back in rest position.
We apply the mesh transformation.
Then, again, armature is linked the mesh.
Method
This way we can link mocaps to our rigged character in order to animate it.
Conclusion
3788 faces
8.8 seconds
Results
8820 faces
13.1 seconds
Results
1425 faces
5.2 seconds
Results
Future works
Enhancing the shoulder positionning.
Enable the user to improve the bones placement.
Questions?
Romain LOPEZ : r-l@laposte.net
Christophe POIREL : c.poirel@gmail.com