Site Hosted by:

SourceForge.net Logo

Support This Project

Public release version: 2.0
Development version: 2.2

Versioning details.

Current Features

Exporting and file types:

  • Custom file types used for meshes and animations.
  • Meshes can be static, or deformable and bound to all or a subset of the skeleton.
  • Animations use a skeletal hierarchy and local transformations for every bone at every frame.

Loading files:

  • The library loads and caches animations and meshes by filename.
  • Meshes are broken down into surfaces, which have a texture name, vertices, faces, and a pointer to user defined data.
  • A callback function can be set that can load textures when the mesh is loaded, and set the user data for that surface.
  • Models in animations can be moving, but when the model is loaded, the movement of the root bone is extracted and removed. This information is stored, and can be used to move the frame of the model at the speed the modeler intended or used to scale the speed of the animation.

Setup (initialize):

  • A model is composed of several animations and swappable meshes, but can also contain blends and bone selection masks.
  • Blends are used to calculate a pose, usually from two other poses.
  • One type of blend is an animation player, which is used to keep track of the current time in the animation and can generate a skeletal pose at that time (between two frames).
  • Another type of blend is a blend between blends. When this blend is calculated, it first calculates the two blends it's blending, and then blends those together with a user-defined weight. Since this is a recursive definition, blends can in fact be setup in a hierarchy, and the user only needs to call the top level calculate function.
  • A bone selection mask is a selection of a subset of the entire skeleton. The hierarchy is used to make the selection process simpler. Essentially, all bones are the same selection state as their parent, unless set directly.
  • In addition to being able to calculate a pose from a complex system of blends, the calculate function can be given an optional bone selection mask, which limits the calculations done for that blend to only the subset of bones defined by the selection. This allows you to calculate different parts of a skeleton with different animations.


  • The library doesn't actually draw the model, but provides all of the necessary information for your engine to draw the model.
  • Data is prepared and organized for use in vertex shaders.
  • A pose can be converted to a set of matrix world transformations. (Most shaders like the data like this)
  • Examples are shown that actually draw the model.

Features Under Development

Goal Version 3.0 (versioning...)

  • update Matrix, Vector, and Quaternion
  • add functional documentation for all functions, and get doxygen working
  • make the library build as a DLL instead of static link
  • add a version header to the file formats
  • update load functions to read from a stream, or char buffer instead of just reading from file
  • add a name lookup to index into the world matrices
  • Interface Updates
    • ADDED (6-19-2005): mesh swapping functions
    • ADDED (6-13-2005): and GetFrame() for AnimPlayer
  • make a glsl vertex shader example supermodel implementation replacement
  • make a cg vertex shader example supermodel implementation replacement
  • create a 3D Studio Max export plugin that supports skin for now
  • Demos:
    • converter from adm to obj
    • ogre walk and attack demo
    • eagle fly demo
    • interactive model and animation viewer (create blends etc)
    • duke 1.0 conversion

Future Plans

  • Add support for rigid meshes, Bones Pro, and Physique to the MAX exporter
  • Add support for rigid meshes, and rigid skinning to the Maya exporter
  • Add detailed gui options for the Maya and MAX exporters and make sure the options get saved.
  • Better support for z-up/y-up switching and right/left-handed coordinate system switching during export. Also better support for scaling on export.
  • Add more detailed material exporting support
  • Add binary file types, and overload the load functions to support animadead binary data streams
  • Make a tool for determining binary endianess, and converting the file if necessary
  • Make a tool to convert models and animations from previous versions to the current
  • actually export the animation framerate with the animation (support for framerates is in, it's just always set to 15 fps)
  • add attachment points system
  • add an additive blending option
  • milkshape exporter
  • blender exporter
  • lightwave exporter
  • LOD (can already be done with mesh swapping btw)
    • compute progressive LOD triangle lists, probably provided as an example program, rather than part of the library, so the engine can do it however it prefers to
    • exporter option to generate edge connectivity lists and vertex coincidence lists so that you can do LOD processing easily
  • add automatic blend weight ramping
  • make a blendbase that can do IK
  • use bone names to match animations to meshes instead of indices so that it's more robust
  • allow for explicit name mapping, so you can map an animation with a different naming scheme to a mesh
  • consider generating oriented bounding boxes for use in collision detection
  • allow 3D Studio Max to export NURBS and tesellate them in the exporter
  • make an example using the novodex physics engine that does ragdoll physics
  • make an example program that uses directx instead of opengl
  • plugin for facial expressions
  • plugin for muscle deformations
  • compile useful example program features to plugins

© Copyright 2006 John Butterfield.
All Rights Reserved.