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.
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: