'Lo. I’m working on a small computer game as the sole programmer and artist, and have developed a basic 3D engine from scratch for the purpose. All content is produced using Blender.
I came to a nasty realization yesterday: I cannot get armature, bone weights, and animation actions out of Blender in an open, standardized format!
COLLADA support is currently rather poor, and apparently doesn’t even have a maintainer (so issues won’t be fixed). Multiple actions are just outright not supported (they won’t appear in the exported COLLADA file). Armatures are exported in a manner that loses data: bones in Blender have a head and tail, but when they’re exported to COLLADA, they’ll simply have a 4x4 transformation matrix. You can see the effect this has by exporting a scene with an armature to COLLADA, and then importing that exported scene: Most bones are affected in some manner (usually the armature stays functional, but the visual size of some bones may change). It’s obviously not possible, in general, to extract the original translation/rotation/scale from the 4x4 matrix (it’s possible for specific matrices, but not in general). For my own engine, I’d much rather have the original translation/rotation/scale/heads/tails than a 4x4 matrix from which I then have to make a best-effort attempt to extract meaningful data.
Supposedly, the FBX exporter does at least manage to export all animation actions. However, the FBX format is proprietary, subject to change at any moment, etc, etc. I’m not about to start working with proprietary formats!
The other formats that Blender supports are either proprietary, or don’t actually appear to support one or more types of required data (X3D doesn’t support armatures, OBJ doesn’t support armatures or animation, etc).
I could write a python plugin to try to scrape all the information I need and dump it into a format that I control, but as someone that’s attempted to write and maintain a few plugins for Blender, I realize I don’t have time to continually maintain plugins for an API that changes (breaks) on every incremental update. This is an opinion shared by several people I work with who’ve also tried to maintain their own plugins - an API that changes frequently, in a language that obviates any kind of static checking, is simply too much of a maintenance burden for any of us to handle. If there was a C++ API, we’d try to use that, but there isn’t.
I don’t mean this message to sound hostile, but what are my options, realistically? I’m quite amazed and distressed that I can’t get my data out of an open source program in a sane way!