COBDump3 trueSpace file converter for ActiveWorlds Version 3

COBDump3 (download here ) provides the ability to convert trueSpace binary COB object and scene files into RenderWare RWX script files. COBDump3 supports the ActiveWorlds 3.0 RWX extensions (such as Prelight vertex colors, and Collision). Refer to AW 3.0 help , under Other Topics / COB Support for a description of these features. When COBDump3 uses ActiveWorlds 3.0 RWX extensions, it uses the #! comment convention, which allows the rwx objects that it creates to "work" in ActiveWorlds version 2.2; however, the 3.0 extensions will not be applied.

A new feature in this version of COBDump allows you to create an animation sequence (key frame sequence) in trueSpace, and then convert the animation to a LifeForms format SEQ file that ActiveWorlds can use for avatar animation.

Contents of the distribution zip file

COBDump3.zip contains the COBDump3 program, this help file, and several sample trueSpace objects illustrating some of the special features:

Running COBDump3

To run COBDump3, start it with the working directory set to where the COB files to be converted are located. You may also optionally provide command line parameter(s) to specify the COB file name, and the conversion method (Rwx or Animation) - in this case, only the file specified is converted, and then COBDump exits - so use in this manner is batch-file friendly. When using without command line arguments, enter the COB file name (extension ".cob" is optional, but if you want to specify a trueSpace scene file, you must enter the extension ".scn"). Then select the output type by entering the highlighted letter, and press Enter. COBDump will do the conversion. Rwx and Animation conversions are output to .rwx and .seq files with the same root name as the file being converted. Header and Image conversions are output to the screen.

Header and Image output type in COBDump3

Header output is mostly for debugging purposes - to help identify which trueSpace chunk records are in a particular file. Image output will help identify which jpeg file(s) will be needed to render the object correctly in ActiveWorlds.

Creating avatars using trueSpace

To create avatars in trueSpace, follow the instructions in the ActiveWorlds COB Support help file. Included in the COBDump3 zip distribution file is a sample avatar (cobav3c.cob) made of different colored limbs (easier identification - and easier to create and test animations). The heirarchy in this file is an example of how ActiveWorlds and COBDump3 expect the avatar to be created. Note the special name tagging (aw_pelvis, etc.) which is used to identify body parts in the avatar for animation sequences. Also note that the axes for limbs are now AT THE JOINT (different from ActiveWorlds version 2 trueSpace avatars, and from COBDump version 2). To signal that a particular trueSpace avatar is AW version 3 format, use the aw_avatar_v3 name (see the example file). Note that ActiveWorlds FULLY supports this format of trueSpace avatar natively (as well as previous "version 2" style avatars). You do not need to convert the avatar to RWX unless you have some other reason to do so - such as hand tuning a part that you can't get right in trueSpace.

Building SEQ animation files using trueSpace and COBDump3

To create your own SEQ animation files for avatars in ActiveWorlds.com , you can use trueSpace (from Caligari ) and COBDump3 . The methods outlined below allow you to manually create animations, by setting location and rotation values for individual limbs. To make the trueSpace user interface for animation more intuitive, you may use Inverse Kinematics and Bones, as well as several animation-creation plugins (see Caligari's home page).

Assuming you have trueSpace 3.1 or 4.x (untested on previous trueSpace versions), download COBDump3, create a new directory, and unzip it. In COBDump3.zip, you will find COBDump3.exe - the program that converts trueSpace Key Frame animations into LifeForms SEQ files, usable by the ActiveWorlds browser. There are also some sample .cob files which you can use as prototypes for building your own animation sequences.

All of the sample animations are based on the avanim.cob file - it is a blank framework object (looks like an avatar) that you can use to build animations. Start trueSpace, and open avanim.cob. It appears similar to the sample avatar that was distributed with previous versions of COBDump - but it's not! It will not work as an avatar - the group and polygon labels are moved around to make it easier to build animations. To create an animation, use this file, apply the animations with the Key Frame Editor, then save with a new name. Below, we go through each of the other sample animation sequences included in the COBDump3 zip file - describing exactly how they were made.

First, let's define the axes. As in AW, the "X" axis goes from Left (larger negative values) to Right (larger positive values). The "Y" axis goes from Down (larger negative values) to Up (larger positive values). The "Z" axis goes from Back (behind the avatar's back - larger negative values) to Front (the direction the avatar is looking, straight forward - larger positive values). The easiest way to picture the axes is to pretend you are standing right behind the avatar, facing the same direction. Note that the Z and Y axes are switched from AW to trueSpace, but COBDump3 switches them back. You create the animation to look correct in trueSpace, then COBDump3 converts it so that AW will animate it correctly. Also note that as you click and change the Key Frames in the KFE you can watch the joint movement on the object - and UNDO if you move things in the wrong direction.

Second, we need to define the time unit. AW uses LifeForm animations at the rate of 30 frames per second. To make trueSpace consistent with this, right click on the Animation PLAY tool (or the red PLAY button in the Key Frame Editor) and select the base rate as NTSC - which uses 30 frames per second. This means that in the Key Frame Editor, the avatar will be in the position specified by the key frame at '30' on the time line after one second, in the position specified by the key frame at '60' after two seconds, etc.

Also, let's discuss interpolation. trueSpace and LifeForms expect you to specify the animation as a series of static frames. They will then interpolate the frames in between, so that the rotation and position values change smoothly from one specified key frame to the next. In this way, you only need to specify key frames at points in the animation where direction or rotation changes. In the first example below, for example, we want to raise an arm from the side of the avatar to pointing straight forward. All we need to do is specify a starting key frame (frame #0), a key frame where the arm is fully raised (frame #60 - so it takes two seconds to raise the arm), and an ending key frame (frame #120 - so it takes an additional two seconds to lower the arm). The LifeForms code in the ActiveWorlds browser fills in the remaining keyframes, making it appear a smooth, fluid motion. trueSpace will occasionally interpolate in a way we don't want (see the avanimFlex and avanimMoveTurn examples below) - say we tell the avatar to turn halfway around, then to turn back. trueSpace really doesn't have any way of knowing that you want to turn clockwise the first time, then CONTINUE to turn clockwise, rather than turning counter-clockwise back. To tell trueSpace exactly what you want, you may need to insert helper key frames immediately before or after the ones you create to tell trueSpace (and LifeForms) to NOT interpolate that section. In the avanimMoveTurn example below, we have the avatar walk forward, turn around, walk back, then turn to its original position. Without adding in these extra 'helper' key frames, the animation code tries to interpolate the avatars rotations (at the end of each walk sequence) into the walk, so you see the avatar walking forward while turning. By adding a key frame at the end of each walk, BEFORE the turn, and specifying that the avatar is still facing forward (or backward), you can have the animation code keep the movement or rotation value from changing.

Let's start with a simple animation that causes the avatar to raise its left arm from its side, until it is pointing straight forwards (from the context of the avatar), and then lowering the arm again until it is where it started. Checking our axis information (above), we find that we are rotating the left arm at the shoulder, around the X axis - draw a line from left to right (X-axis) through the shoulder joint, then treat that as pinning the arm at the joint, so that the arm can only rotate around the line. Here are the steps:

Now that you have created and saved the avanimX.cob sequence, let's use COBDump3 to convert it to a seq file that is usable by ActiveWorlds: To make avanimX.seq available in your world:

Here are the steps necessary to make all the other sample animations included in COBDump3. The steps are the same as above, with changes ONLY to the part where you edit the key frames. To start with a "clean" avanim.cob after creating an animation, you may either delete the previous object and reload avanim.cob, or you may use the avanim.cob file from the previous animation you created, and (using the KFE) right click and delete the Animation section(s).

To make your avatar twist its arm 90° while at its side (that is, rotating it around the Y axis), and producing avanimY.seq:

To make your avatar point its arm straight to the left (that is, rotating it around the Z axis), and producing avanimZ.seq:

Now, we will move both arms, as well as "child" chunks of each upper arm, to produce a muscle "flex" animation - avanimFlex.seq:

In addition to moving individual "body parts" of an avatar, you can also move and/or rotate the WHOLE avatar. To do this, simply select the aw_pelvis chunk in the KFE, and perform rotations or movements on it.

To make your avatar move forward then back to the starting spot (moving along the avatar's Z axis), and producing avanimMoveFwd.seq:

To make your avatar slide to the left then back to the starting spot (moving along the avatar's X axis), and producing avanimMoveLeft.seq:

To make your avatar levitate up then back to the starting spot (moving along the avatar's Y axis), and producing avanimMoveUp.seq:

To make your avatar turn in a full circle in place (rotating along the avatar's Y axis - note Y and Z switched again), and producing avanimTurn.seq:

To make your avatar move forward, then turn a half circle in place, then walk back to the starting spot, then turn another half circle (returning it to the original orientation and location), and producing avanimMoveTurn.seq: