Error message

  • Deprecated function: Array and string offset access syntax with curly braces is deprecated in include_once() (line 20 of /home/drbiz/public/
  • Deprecated function: implode(): Passing glue string after array is deprecated. Swap the parameters in drupal_get_feeds() (line 394 of /home/drbiz/public/

Purpose of X3D - Animation

This is one in a series examining the purpose of X3D - where is it's niche in the electronic ecosystem and what function does it perform. The series also looks at where X3D needs to evolve to best serve the ecosystem. This post looks at animation. It was motivated by issues involving deformable skins that are needed to animate non-mechanical models.

X3D's animation system is based on that from VRML and the extent of capabilities in the late 1990's. Much has changed since then and not just hardware. Industry standard practices have emerged in the modeling and animation of models, especially characters.

Setting up bones for animation

Complete skeleton

Simple vertex weight assignment with color map

Once the model is created, the current practice is to identify the bones and joints, a process known as rigging. During this process weights are assigned to each model vertex that indiates how much the model moves in response to the rig moving  . At this point the model is ready to be animated. In actual practice, there are loops and loops of development refining the model, refining the rig, etc. all to meet the requirements of the various project directors.

Animation result from simple vertex weight assignments

The model is animated by manipulating the various joints to properly go through the desired motion. Characters almost always have a "walk" animation. Other frequently performed animations are jump, squat, sway (for trees), and flight (for birds). All of these animations are performed on the joints. The modeling programs (e.g., Blender, Maya) all support this style of modeling and animation. The skin (model's surface) stretches and moves smoothly throughout the animation in a "life-like" manner. Mechanical animation tends to use rigid parts (e.g., rods, wheels). These models can be rigged and animated, but it is frequently more efficient to perform simplier animation (e.g., keyframe). X3D supports rigid keyframe animation with it's various interpolators. There is also a CoordinateInterpolator that can perform smooth animations on a skin, but it does not handle vertex weighting.

There are a number of animation techniques. They are well described in Tony Parisi's book Programming 3D Application with HTML5 and WebGL in Chapter 5 "3D Animation". The section Animating Characters with Skinning is particularly relevant to the proceeding discussion.

Once the model is complete, rigged, and fully animated; the developer needs to save it to a file. The standard file format used today is FBX. This is an Autodesk proprietary file format. Autodesk provides reader & writer libraries in C++ and Python to accessing the file, but the format belongs to them and is not public. This is not good for long-term archival of models and represents an niche that X3D can fill. In order for X3D to fill this niche, the standard needs to include all of the important modeling, texturing, rigging, and animation capabilities that are currently supported by FBX. The standard modeling tools (Maya and Blender) use FBX as an exchange format. This allows the use of a limited set of certain standardized capabilities, including triangle meshes, standard texturing methods, and the rigging and animation discussed above. X3D provides extensive support for various geometry nodes. X3D may alread provide sufficient support for texturing as most of that is done during scene integration. There is no current support in X3D for rigging or skin animation. There is significant work that needs to be done there.

In designing the new nodes for X3D it is important to note that the animation (and hence rig) is independent of the skin. Different skins (aka models) can have the same animation as long as the rigging (bones, joints, and weights) are the same for both models. Therefore, a (new) node for a rig cannot contain the model. It is probably better to set up animation node that includes a rig, a model, and the animation as three separate entities.