Of animation channels, blending and poses

As indicated in my previous post, we continue to make very good progress with the Model Editor, and it looks as if we will not only meet our technical goals, but we can even achieve more than what was originally planned:

While the Model Editor itself is almost complete now, we've also taken the opportunity to improve the underlying model code.

Our latest feature addition was support for animation channels.
Channels allow animations to play only on a subset of the model joints, so that multiple animations can play on different parts of the model at the same time. For example, you can play a walking animation on the legs, an animation for swinging the arms on the upper body, and an animation for moving the eyes on the head.

At the same time, it makes sense to consider animation blending.
Blending means that you can blend from e.g. a "standing idle" animation to "walking", or from "walking" to "running", with an elegant and smooth transition of the legs from one action to the next. Without blending, the legs used to pop from standing still to extended for running with no transition at all. Blending is also fully compatible with channels, that is, you can set different blends for different channels.

Finally, channels and blending give rise to animation poses.
The pose of a model is the result of the combined application of a set of animation sequences at given frame numbers playing in given channels, possibly blended. Poses are especially of technical interest, because they encapsulate all related data and keep it separate from the main model definition (which is "pose agnostic"), thus improving both the code clarity and design, as well as the capability for caching pose-related data.

Once complete, all this functionality will be accessible both from C++ game code as well as from map scripts.

Much of the above has been implemented already, and we're currently focusing on completing the rest.
Implementing this is a lot of fun, too, and now in fact I'm looking forward to get back to work! :cheesy: