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):
Note how the "+" operator naturally combines the individual expressionsCode: Select all
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.
a
andb
, yielding a new composite expressionc
.
A slightly more complicated example:Similar to the "+" operator, theCode: Select all
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.
cross_fade()
function in the above example is actually a way to construct a new composite expression from its child expressionswalk
andrun
.
You'll hear more about this soon.

Here is a screenshot of the new teleporter stations in map BpWxBeta: