Merry Christmas 2011

Dear friends,

first and above all, I wish you all a merry Christmas, and a happy New Year! I hope that everyone is up and well, and has some good and peaceful holidays.

For Cafu, it has been an exciting year that was centered around the development of the new Model Editor (Introduction), which is a component build into CaWE next to the Map Editor, the GUI Editor and the Font Wizard.

The work on the Model Editor is almost complete now, and early in the new year, we will conclude it with a new stable binary release of the Cafu Engine.

There are only two issues left to be implemented before the release:

  • The automatic computation of the tangent-space vectors should be user tweakable. Right now, the Cafu model code implements a very good compromise for computing these vectors, but sometimes you just need a slightly different method, e.g. one that implements the hard, faceted shading that sometimes comes with models that need no smoothing, or the smoothing method should do the averaging computations a bit differently than normally.

  • The other feature has been mentioned in my previous news post Of animation channels, blending and poses:
    It turns out that animation channels, blending and poses are just different ways to apply and combine weights to the individual bones of a model (analogous to the way how weights assign mesh vertices to one or several bones). All this can naturally be described in "expressions" that are easy to write in C++ code, script code, and if necessary even in a graphical editor.
    Here are some examples (they are very abstract pseudo-code though):

    a = AnimExpressionT(Apply the "walking" animation to channel "legs")
    b = AnimExpressionT(Apply the "shooting" animation to channel "torso")
    c = a + b
    Now play "c" on the model.
    Note how the "+" operator naturally combines the individual expressions a and b, yielding a new composite expression c.

    A slightly more complicated example:
    walk  = AnimExpressionT(Apply the "walking" animation to channel "legs")
    run   = AnimExpressionT(Apply the "running" animation to channel "legs")
    shoot = AnimExpressionT(Apply the "shooting" animation to channel "torso")
    c = cross_fade(walk to run) + shoot
    Again, play "c" on the model.
    Similar to the "+" operator, the cross_fade() function in the above example is actually a way to construct a new composite expression from its child expressions walk and run.

    You'll hear more about this soon. :up:

Finally, as we changed the way how GUIs are fixed to models, we recently added new terminal models as well (using the Model Editor, of course ;-) ).
Here is a screenshot of the new teleporter stations in map BpWxBeta: