SmartBody : SmartBody Architecture

A SmartBody simulation consists of a scene, one or more characters, one or more pawns, and a number of assets, including animations, skeleton hierarchies, sounds, geometric meshes and textures, among others. Characters are controlled by a set of specialized controllers, which control various aspects of movement, such as idle posturing, facial animation, locomotion, gesturing, movement under physics and so forth. Every SmartBody object, such as a character, pawn, scene, motion or skeleton, has an associated set of dynamic attributes, which can be queried and changed in order to calibrate various features, or to toggle them on or off. SmartBody can be controlled directly through the underlying C++ interface, or through a high level scripting interface in Python. SmartBody can respond to Behavior Markup Language (BML) commands as a means to control and coordinate the behaviors of one or more characters.

A SmartBody simulation can either use a real-time clock, or can be set explicitly by an outside source.

SmartBody can connect to and receive messages from other cooperating components through the use of the Virtual Human Message system (VHMessage). The VHMessage system is an asynchronous messaging system that is built atop the ActiveMQ framework.

 

Character Controllers

The main focus of SmartBody is on the control and display of a virtual character. Each character has a set of controllers that operate together to perform various behaviors and functions for the character. The current group of controllers is:

ControllerPurpose
World offset controllerControls the position and orientation of the character in the 3D space
Posture schedulerSchedules idle postures (standing, sitting, etc.)
Parameterized animation controllerControls animations, blends, states and transitions between animation states.
Motion graph controllerControls animations made using the motion graph.
Basic locomotion controllerControls the locomotion of the  character by using basic animation that moves but does not animate the character.
Single-animation locomotion controllerControls the locomotion of a character using a single walk cycle (experimental)
Animation controllerControls other animations (gestures, etc.)
Postprocess controllerHandles IK for footskate cleanup
Hand controllerAdds finger motion to gestures (experimental)
Reach schedulerHandles arm and body movement for reaching/grabbing/touching/pointing motions
Grab schedulerHandles fingers and hand movement for reaching/grabbing/touching/pointing motions, as well as any hand configurations
Breathing controllerHandles breathing of character
Gaze schedulerHandles gaze
Eye saccade controllerHandles saccadic eye movements (fast movements of the eye)
Eyelid controllerControls the eyelid position in response to the movement of the eyeball, or to change the appearance of the character
Head scheduleHandles head movements (nodding, shaking, etc.)
Face controllerControls the movement of the face, including expressions and lip synchronization to speech
Physics controllerHandles physics for character, for ragdoll and dynamic controllers
Noise controllerAdds noise to the joints to simulate shaking and holding effects
Constraint controllerManages positional and rotational constraints for the character.
Motion playerPlayback of motion to override existing character state
Data receiverOverrides character state from a outside source (for puppeteering from a Kinect sensor, for example)
RecorderStores the character state for persistence to a file.

The controllers are executed in sequence, with some controllers overriding values from previous controllers, and others modifying values.

 

SmartBody Components

SmartBody uses a number of 3rd party libraries, including:

 

BOOST (www.boost.org)
FLTK (www.fltk.org)

FLU - FLTK Utility Widgets

SteerSuite (http://http://steersuite.cse.yorku.ca/)

Open Dynamics Engine (http://www.ode.org/)

ActiveMQ (http://activemq.apache.org/)

glew (http://glew.sourceforge.net/)

recast and detour (http://code.google.com/p/recastnavigation/)

zlib (http://www.zlib.net/)

festival (http://www.cstr.ed.ac.uk/projects/festival/)

Ogre (http://www.ogre3d.org/)

Pinocchio (http://www.mit.edu/~ibaran/autorig/pinocchio.html)

PolyVox (http://www.volumesoffun.com/polyvox-about/)