Raycasting based auto-rigging method for humanoid

advertisement

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

Download