Error message

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

Model Archive Format for X3D

Recently there has been discussion about the suitability of various 3D formats as an archive format, especially for models. There are formats that have been around a long time (OBJ, FBX, X3D), those that are optimized for delivery (glTF), those that are widely used in existing tool chains (OBJ and FBX), plus a number of other criteria and formats including tool-specific (Blender, Maya, etc.). The most widely used format is FBX and any format that seeks to supplant it needs to offer at least as much capability as that one.

Of the formats mentioned above, only X3D is ISO standardized. glTF is also standardized by Khronos. Vince has pointed out that glTF is not an archive format in that the file contains data in a format that allows it to get into the GPU with minimal processing and doesn't include capabilities to store models as currently created (quads), nor CAD structures.

I have been thinking about what is required for X3D to be the model archive format. It has most of the capabilities, so they would need to be appropriately bundled with the necessary additional features and labeled something that makes it easy for people to understand what it is. X3D has an Interchange profile that was intended to be used for modeling. It is missing some important features (e.g., CAD) for it as it exists to serve this purpose.

So what is needed in a model archive format?

It is important to note that models exist to be imported into a scene (or sub-scene). The models may contain animation, but this key-frame animation that indicates what part of the model needs to be where at various relative time values. Models do not contain a run-time or interactive component. Neither do they contain lighting or environmental effects (backgrounds, fog, etc.). These features are added in the scene rather than to the model.

The current state of modeling creates a quad-mesh as the surface geometry of the object. The model is animated either as multiple meshes (rigid body animation) or (much more frequently) as skin deformations due to joint movement. Faces or other highly deformable surface with a fixed underlying structure are animated as morphs using morph targets. [The target is a linear combination of a basis set and the animation is the path to get from existing to target.] Textures are created and applied to the model. This whole process is in a loop so that the final product is right.

The textures are generally not "glued" to the model. That happens when the model is imported to the run-time engine (usually Unity or Unreal for interactive uses, or a rendering application (e.g., Renderman) for film). The importing process also triangulates the mesh because that is what is needed by the GPUs.

A note on animation: FBX has established the standard (by use) of a single master timeline for all animations. Individual animations may occupy just a portion of that timeline. For example, the master timeline may be something like:

[0-2] Run cycle
[2-3] Jump up
[3-4] Jump down
[4-5] Jump cycle
[5-6] Stand to squat
[6-7] Squat to stand
...

What would be required for a Model Profile.

A Model Profile needs to provide archive support for all of the ways people model, texture and other appearance, and animate.

  1. 3D geometry capabilities
    1. Triangles
    2. Quads
    3. CAD (NURBS, CAD structures)
  2. Appearance capabilities
    1. Image texture
    2. Advanced texturing (bump, emmisive, occlusion, etc.)
    3. Physically Based Rendering
  3. Animation capabilities
    1. Single timeline
    2. Skin/joint motion
    3. Morphing & Morph targets

Defining the Model Profile for X3D would require some new features (e.g., Advanced texturing, morph targeting) and revision of some existing capabilities (e.g., animation). I will be looking into this futher and will be a topic for future blog posts.