Building and installing Smartbody on Archlinux

Recently I've discovered Smartbody, this software bundles a lot of different and complex features for animating human characters, provides things like locomotion, steering, object manipulation, lip syncing, gazing, nonverbal behavior and retargeting in real time. It even has Kinect suppor working on Linux! Here's a video demostrating a reaching parameterized animation, but there are a bunch more on their website.

That was the good, but here is the great. This software is developed at the USC Institute for Creative Technologies and it's provided free and open, under a LGPL license.
This is so amazing, and I've been dreaming so long for a software like this that is mandatory for me to try it.

So hands on, these are the steeps that took me to get it running, since the building process was a bit complicated on my Arch box, I've documented it.

1.- Download the latest Linux SDK package.

2.- It comes with activemq-cpp-library-3.8.3 included in the package, you have to extract, build, and install it first. Doing ./configure and make install.

3.- Then I had to install xerces-c using pacman.

4.- I also had to install boost-numeric from the Arch Linux User Repository, using the standard way of installing those packages.

5.-Then I was getting a protobuf version conflict, seemed that the one I had installed using pacman was not compatible, so I had to delete the following list of packages using pacman: pidgin pidgin-otr pidgin libpurple libgadu protobuf-c protobuf. I wasn't really using pidgin anyway.

6.- Next I had to download protobuf-2.4.1 sources, then building and istalling them.

7.- I also had to install ode from pacman.

8.- At this point I was getting an error printing thigs like: "previous declaration ‘off64_t gzseek64..".
I tracked the error to the zlib.h file included in the package. Ther is a block of code starting like:

if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0  

And then a block of variable definitons, just below there is another block starting like this:

if !defined(ZLIB_INTERNAL) && _FILE_OFFSET_BITS-0 == 64 && _LFS64_LARGEFILE-0  

And then the definicion of the same variables. It's pretty clear that one or the other block is intended to be executed, but for some reason in my machine both are executed, so the definition of the variables happen twice. I just commented on of the blocks and continued to the next step.

9.- At this point I was pretty lost because I was having lots of problems linkin Ogre. I was so clueless that I even had to post in the official forum. I recieved a fast response from the forum administrator, pointing that Ogre is not the only way of rendering the 3D scenes, and in Linux version is disabled by default. So I decided to exclude Ogre from the building process. You can easily do this by setting to FALSE the paremeter BUILD_OGRE that is located on the CMakeLists.txt file under the sbgui folder of the project, on line 19. The sbgui folder holds the code for the GUI and displaying things code.

10.- At this point I passed the building and linking stage and the software successfully installed on my pc. There was just a last thing to do, when I executed ./sbgui it wasn't starting telling that I could not link the activemq library. I had installed it before, but it was installed under /usr/local/lib directory, and that directory was not listed in the environment variable Linux uses to search for librares. For adding it you just have to append the it to the LDLIBRARYPATH environment variable like this:

export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib  

Finally everything was running fine and smooth, I' ve just given a fast look to the tool, but in the next days I want to gave a more detailed look to it, I'm specially interested in the Irrlicht integration feature.

SmartyBody running

The tool has lots of options and things to learn, it comes with some examples and detailed documentation, so there is a lot to learn and experiment from here, I'll be reporting here my experiments as long as my free time allows me to, I maybe will also tweeting related stuff. There is more to come! :)