I have implemented skeletal animation in my engine, and I am thinking about ideas to make it faster. Currently I can display one Doom 3 model at 420 FPS. This on a pentium 2.53, so its a little slow.
Since graphics cards are faster for matrix calculations, I tried uploading the bone matrix, transforming every vertex attached to the bone, then getting the result for each. This gained about 10 FPS in a 500 FPS simulation, so the speed gains were pretty negligible, and would probably be even less so on a faster CPU.
The test I am running is transforming 1300 vertices each frame. I have also written implemented smarter updating, so it only transforms vertices attached to bones that have actually moved, but for testing purposes I am updating the whole mesh each frame.
I know it is possible to do this in a vertex program. Since characters usually use one specific texture/shader I don't see a problem with having a special shader written for characters. What would this involve? Are there any other ideas I could try to increase my performance on the CPU? I might even try cycling through the vertices and only updating a limited number of vertices each frame. This would cause visual glitches, but at 100+ FPS I am not sure if it would be very noticable.