Is there a specific reason for this? Because this results in a unique set of inverse binds for EACH MESH. So each set of inverse binds is stored with their respective mesh, instead of a global set with the skeleton.

I cannot for the life of me understand why Assimp does this. Why not bake them with the vertices instead, or simply store them somewhere.

<quote>Normally this bind shape matrix is baked into the vertices, either before or during the skinning calculations.</quote>

Binding that into the mesh data is not very clever. For a start, that would remove the ability to instance geometry (i.e. 1 x shin pad geometry, instanced twice for left & right leg, both instances bound to the rig using different weights). Once upon a time, DCC packages would only let you create one bind pose per skeleton. These days they allow for multiple bind poses per skeleton (such that each skinned mesh can be bound with the skeleton in a different position). There are numerous reasons as to why this is useful (although I'll spare you the details). To answer your question, the way assimp stores the bind pose is actually a fairly decent approach if your aim is to support all DCC apps (maya/max/etc). In your case, you only need one bind pose, so there's a little too much data for you liking. The simple way around this would be to write a small tool that loaded the assimp definition, transformed all meshes into world space, and then construct a new bind pose from that (which you can write out to a file for your engine).