Table Of Contents / Quick Links

Paper and Video
Demo Applications
SRC in X3DOM 1.6
SRC in X3DOM 2.0 and later
Writer Source Code


Within the past few years, the X3DOM framework has rapidly evolved to a powerful 3D visualization framework. The convenient handling of medium-sized and large 3D data sets became possible because X3DOM introduced several new, experimental binary container nodes, starting with ImageGeometry, followed by BinaryGeometry and PopGeometry [2,3].

Having learned various lessons from past experimental binary container implementations, the X3DOM team is now taking the next step with the Shape Resource Container(SRC) project [1]. The ultimate goal is to have a flexible yet highly efficient format for progressive transmission and compositing of arbitrary 3D asset data, including meshes, textures, and arbitrary vertex attributes. Furthermore, the fixed 1:1 mapping between a number of X3D geometry nodes and the number of downloads needed to fetch their data is finally overcome: with SRC, geometry or texturing nodes may refer to a specific mesh inside a binary SRC file. This allows, in the extreme case, that all mesh data of a scene is stored in a single binary file.

As we have designed SRC with a very generic and long-term design in mind, we hope that the X3DOM nodes involved in the processing of SRC data, as well as the introduction of respective fields for existing nodes, are considered as candidates for standardization in X3D 4.0.


  • [1] M. Limper, M. Thöner, J. Behr, D. W. Fellner: "SRC - a streamable format for generalized web-based 3D data transmission", Proceedings of ACM Web 3D 2014, pp. 35-43
  • [2] J. Behr, Y. Jung, T. Franke, T. Sturm: "Using Images and Explicit Binary Container for Efficient and Incremental Delivery of Declarative 3D Scenes on the Web", Proceedings of ACM Web 3D 2012, pp. 17-25
  • [3] M. Limper, Y. Jung, J. Behr, M. Alexa: "The POP Buffer: Rapid Progressive Clustering by Geometry Quantization", Computer Graphics Forum (Proceedings of Pacific Graphics 2013), to appear

Paper and Video

Links below provide you with a preprint of the conference paper [1], along with a supplementary video. The definitive version is available at the ACM digital library.

paper slides video

Demo applications

For this demos, a very basic SRC loader has been implemented inside the X3DOM 1.6 framework. Meshes were converted using the InstantReality aopt tool. Click on one of the following thumbnail images to launch the corresponding demo application. The UI is fairly simple:

  • You can rotate the model by holding the left mouse button and moving the mouse.
  • You can zoom in and out by holding the right mouse button and moving the mouse up and down.
Have fun! :-)

Simple Testing Scene (X3DOM 1.6)

A scene with a sphere, some triangles and a model of Suzanne.

Bloodhound SSC model (X3DOM 1.6)

This is a large CAD model of a supersonic rocket car.

SRC in X3DOM 1.6

With version 1.6, X3DOM comes with a very basic SRC implementation. This implementation is using a very limited feature set, and its main purpose is to ease the transition from applications using the experimental X3DOM binary containers (BinaryGeometry, PopGeometry, ImageGeometry) to applications using SRC.

With InstantReality's AOPT tool, arbitrary X3D geometry data can be converted to an SRC-conformant format. SRC conversion is triggered using the 'Y' flag. Options are given as a string of comma-separated key-value pairs, with the value always given in brackets after the key. The following options of the converter are supported to by the X3DOM 1.6 implementation for rendering:

Parameter Name Default Value Meaning
nodeType The type of the nodes inside the scene (or sub-graph) that should be converted. Can also be an abstract type. For X3DOM 1.6, this must be a Geometry node type (e.g., "IndexedFaceSet" or "LineSet").

For example, the following AOPT command line can be used to translate all geometry nodes within a scene to separate SRC files:

aopt -i testingScene.x3d -Y "nodeType(Geometry)" -x testingScene-SRC.x3d

To try the conversion yourself, you can find the example file here. You can also check the result, used in an example X3D scene.

SRC in X3DOM 2.0 and later

With X3DOM 2.0, which is currently under development, the following AOPT options can be used to create ExternalGeometry or ExternalShape nodes with SRC containers:

X3D-related conversion parameters

Parameter Name Default Value Meaning
nodeType The type of the nodes inside the scene (or sub-graph) that should be converted. Can also be an abstract type. If no type is specified, or if an empty string is given, all Shape nodes are processed.
nodeName The name (DEF) of a nodes inside the scene that holds the sub-graph to be converted. If no name is specified, or if an empty string is given, the whole scene is processed.
sharedSRCs Specifies whether a single, shared SRC files should be created for each of the sub-graphs to be processed (true), or if there should be one SRC file per ExternalShape or ExternalGeometry node that is created (false). The default behavior, if the flag is not specified, can be described as follows: If you select a node type inheriting from X3DBoundedObject, such as "Scene", "Group" or "Transform", a shared SRC will be created for each of those sub-graphs. Otherwise, if you select a node type that represents either Geometry or Texture, a separate SRC will be created for each selected node.
collapseGraph false If specified as true, each of the selected sub-graphs is entirely replaced by a single ExternalShape node. This way, the ExternalShape node can be employed in a similar fashion like inline nodes. Beware, however, that all nodes outside of Shape nodes (e.g., Transforms or Lights) are completely discarded from the selected sub-graphs. The value of this option has no effect if the selected node type is not inheriting from X3DBoundedObject (for example, if it is a Geometry or Texture node type).
tagParentGroups false Mainly for aopt-internal use. If parameter is true, the SRC exporter additionally attaches an X3D metadata string element to the target X3D node's parent group, pointing to the respective SRC file.

Data encoding and compression parameters

Parameter Name Default Value Meaning
encodingPreset default Specifies a preset for all encoding parameters. Currently, the following presets are available:
  • default - Default 32 bit floating-point encoding of all vertex attributes
  • CMP1 - "Compact" encoding, using 16/8/16/8 bit unsigned integer coordinates for vertex positions/normals/texture coordinates/colors
resolveIndices false Specifies whether indices should be resolved, for explicit non-indexed rendering.

Writer Source Code

Besides the closed source implementation, which is part of the InstantReality aopt tool, there is also a publicly available writer for SRC files. Beware, however, that the current state of the implementation is still in an experimental state, and might therefore be subject to changes within the near future. It might also be possible that the writer code will be developed on an open source collaboration platform within the near future. Until then, you can find the very basic writer code here.

Special thanks go to the creators of picojson, for providing the JSON-related functionality used in the SRC writer.