Original Post
I was planning to use Doom MD5 models (1 2) for animated stuff in my engine, but I can't figure out how to do the skinning on the GPU in some kind of reasonable fashion. Just a quick recap. We have bones with a transformation associated with them. Each vertex is represented by up to 4 weights. The weights each reference a bone and a weight value; the values sum up to 1. So far so good, this is standard. Here's where it gets messed up. Each weight has its own position. Let's look at what I need to send down to the GPU: 4 * 12 byte position vectors, 2 * 12 byte tangent space vectors, 8 byte tex coords, 4 byte blend indices, 16 byte blend weights. That adds up to 100 bytes per vertex. There is no freaking way I'm using 100 bytes for every single vertex. That's insane. Is there some nice way I can collapse this down to the single position per vertex that is considered normal? I don't know if a weighted average computed beforehand will actually give me correct results or not.