Jan 02 2007 | 6:24 am

Hi everyone,

There was some talk a few weeks ago about vertex skinning. Here's a

patch that demos the technique. It's a little hairy, especially the

vertex shader, but it does work. This patch is not completely error

free yet. For some reason the vertex interpolation is squishing

segments together and I haven't figured out why, but I think the idea

still comes across.

Here's how it works:

I've divided the mesh into 5 sections, each controlled by the position

and rotation (modelview matrix without the scale) of a gridshape. I

generated a cylindrical mesh and assigned each vertex to a section

(bone in the vertex skinning terminology) and a weight. The weight

says how much a given vertex is affected by a particular bone.

Getting all this data into a vertex shader is a bit tricky. Here I

put the weights in the texture coordinate matrix and the bone

assignment in the tangents matrix. This choice was for convenience

but is not the only way to do it.

The trickiest part of this whole business is getting the modelview

matrix for each segment ( aka the bone matrices) into the shader. To

conserve space, only the rotation and translation portions of the

matrix are sent which ends up being a 3x4 matrix. In the shader,

these are stored as an array of vec4s. For convenience, I actually

send the transpose of the 3x4 bone matrix so that a row of the matrix

is stored in a single vec4. Again, this isn't the only way to go. In

the shader, I build a modelview matrix from this data and use it to

find a new position for the vertex.

Theoretically, all of this data could be generated in Maya. Maya has

really nice tools for building skins and bones for a mesh, but the

m********* f********* has really lame export facilities. I tried

about half a dozen plugins that supposedly export skin and bone data

but none of them worked. If someone knows how to do this, I would be

most grateful to know how.

Here's the link.

best,

wes