Report

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 Results 3788 faces 8.8 seconds Results 8820 faces 13.1 seconds Results 1425 faces 5.2 seconds Future works Enhancing the shoulder positionning. Enable the user to improve the bones placement. Questions? Romain LOPEZ : [email protected] Christophe POIREL : [email protected]