It seems like there are so many different ways of achieving a given animation effect with Blender; I was wondering if there are any best practices or standards for structuring models and animations for use in video games (or in general). This structure seems really important for video games in particular because it informs much of the design of the model handling code.
One of the questions that I’m grappling with is when to use a separate mesh object instead of adding to an existing mesh. Also when to parent objects to other meshes and bones. I know there is a big difference between skinned and rigid models (e.g. a robot), here are some observations that I’ve made while experimenting with manipulating Blender models using XNA via FBX export:
For skinned models, using a single mesh object with an armature and vertex bone weights is straightforward and works with the XNA skinned model sample code.
I was able to get a rigid model animation working by using a skinned approach (a single mesh object, but with separated pieces each having 100% weights to their own bones.) I felt this was a hacky technique though and it forces you to use a skin shader…
I tried to get a rigid model to work with the pieces as separate mesh objects, and there are lots of ways to do the animation in Blender but none that easily worked in my game code:
animate the meshes directly - Blender FBX export doesn’t include the mesh animation data
parent the meshes to bones in an armature - The XNA model loader code drops the mesh-bone relationships. It seems like it would be possible to workaround this and fix them though. Also the vertices needed to be weighted to a dummy bone because the XNA loader tries to normalize the bone weights when it sees bones in the model.
parent all the meshes to the root bone, and assign all the vertices in each mesh weights to the appropriate bone (but this is just similar to the rigid-model-as-skinned approach, you need to use a skin shader to get it to work)
Anyway, I just want to make sure I build the model and animations in Blender as uncompromisingly as possible, and then adjust my game code to workaround the limitations.
Thanks for any advice!