Proposed X3D Profile: Static Model
In the marketplace of file formats for 3D content, X3D has a tremendous advantage over all other formats by nature of its ISO Standardization, openness, and compatibility over 20 years. There are other formats that meet one or more of these features, including OBJ and FBX; however, X3D has not been a dominant or even significant player in the marketplace. I believe that this is a result of not meeting the demands of 3D content production as practiced by professionals in primarily the entertainment industry and availability in software tools, especially Maya and now Blender.
X3D certainly meets the needs of long-term (archive) storage and retrivability. I believe that there are several significant reasons that X3D does not meet the needs of the marketplace. The reasons are:
- The simple versions (profiles) of the format do contain all of the features currently used by 3D content creators.
- The versions (profiles) of the format that do contain all of the features also include a lot of items not needed and/or are difficult to handle.
To rectify this mismatch between market demand and features, I am proposing two new profiles with the potential for others in the future. These are directly matched to marketplace needs and can easily be converted to/from existing and accepted formats such as FBX, OBJ, STEP, glTF, and others. The formats are all model-only based and do not include user interactions, environmentals effects, or imperative operations.
The distinction between the profiles is whether the models are static or animated. At this time the profiles are based strictly on V3.3 nodes; through some obvious extensions can be added. The remainder of this post will deal with the static model profile using X3D V3.3 nodes.
The purpose of this profile is to hold models that are not internally animated. The model as a whole may move, but its component pieces do not. This structure was designed to be an output of digital content creation tools such as Blender, Maya, AutoCad, etc. It does not include structures that are found (collectively) in any of those tools as an output format. It is a superset (in terms of structure support) of OBJ and FBX for static models.
Advantages
As this is a (proposed) X3D format (profile), it is open and has a proven archivable structure. All features are well documented and available for everyone. There are existing conversions between various file formats involving static models - Fraunhofer’s aopt converts from X3D to many standard formats. Khronos has conversion libraries between glTF and FBX/OBJ. It is straight-forward to construct similar libraries between this static model profile and other market formats. Being a static structure, none of the dynamic X3D features that may be incompatible with the other market formats are used, so this represents a simple structure for use by all.
Issues
This format is limited to what is available in X3D V3.3. There is no allowance for physically based rendering (PBR) as that is not handled by X3D. The structure of animated models and the process for creating them differs between market practice and X3D definitions. Future work will be needed to resolve those differences. These structures are also static. While this covers many uses of 3D models, it is not all of them. The animated model profile will handle those.
X3D Nodes in Static Model Format
The following nodes are in this proposed format. No attempt has been made to force all nodes at a specific level of a component into this profile. Some of these nodes may contain fields that are not appropriate or otherwise included. Those fields would be ignored during conversion.
Node | Component |
---|---|
CADAssembly | CAD |
CADFace | CAD |
CADLayer | CAD |
CADPart | CAD |
IndexedQuadSet | CAD |
QuadSet | CAD |
X3DProductStructureChildNode | CAD |
MetadataBoolean | Core |
MetadataDouble | Core |
MetadataFloat | Core |
MetadataInteger | Core |
MetadataSet | Core |
MetadataString | Core |
WorldInfo | Core |
GeoCoordinate | Geodata |
GeoElevationGrid | Geodata |
GeoLocation | Geodata |
GeoMetadata | Geodata |
GeoOrigin | Geodata |
GeoTransform | Geodata |
IndexedFaceSet | Geometry3D |
Group | Group |
Transform | Group |
X3DGroupingNode | Group |
X3DUrlObject | Networking |
Contour2D | NURBS |
ContourPolyline2D | NURBS |
NurbsCurve | NURBS |
NurbsCurve2D | NURBS |
NurbsPatchSurface | NURBS |
NurbsSet | NURBS |
NurbsSweptSurface | NURBS |
NurbsSwungSurface | NURBS |
NurbsTextureCoordinate | NURBS |
NurbsTrimmedSurface | NURBS |
X3DNurbsControlCurveNode | NURBS |
X3DNurbsSurfaceGeometryNode | NURBS |
X3DParametricGeometryNode | NURBS |
Color | Rendering |
ColorRGBA | Rendering |
Coordinate | Rendering |
IndexedLineSet | Rendering |
IndexedTriangleFanSet | Rendering |
IndexedTriangleSet | Rendering |
IndexedTriangleStripSet | Rendering |
LineSet | Rendering |
Normal | Rendering |
PointSet | Rendering |
TriangleFanSet | Rendering |
TriangleSet | Rendering |
TriangleStripSet | Rendering |
X3DColorNode | Rendering |
X3DComposedGeometryNode | Rendering |
X3DCoordinateNode | Rendering |
X3DGeometricPropertyNode | Rendering |
X3DGeometryNode | Rendering |
X3DNormalNode | Rendering |
ComposedShader | Shaders |
FloatVertexAttribute | Shaders |
Matrix3VertexAttribute | Shaders |
Matrix4VertexAttribute | Shaders |
PackagedShader | Shaders |
ProgramShader | Shaders |
ShaderPart | Shaders |
ShaderProgram | Shaders |
X3DProgrammableShaderObject | Shaders |
X3DShaderNode | Shaders |
X3DVertexAttributeNode | Shaders |
Appearance | Shape |
Material | Shape |
Shape | Shape |
TwoSidedMaterial | Shape |
X3DAppearanceChildNode | Shape |
X3DAppearanceNode | Shape |
X3DMaterialNode | Shape |
X3DShapeNode | Shape |
ComposedTexture3D | Texture3D |
ImageTexture3D | Texture3D |
PixelTexture3D | Texture3D |
TextureCoordinate3D | Texture3D |
TextureCoordinate4D | Texture3D |
TextureTransform3D | Texture3D |
X3DTexture3DNode | Texture3D |
ImageTexture | Texturing |
MovieTexture | Texturing |
PixelTexture | Texturing |
TextureCoordinate | Texturing |
TextureTransform | Texturing |
X3DTexture2DNode | Texturing |
X3DTextureCoordinateNode | Texturing |
X3DTextureNode | Texturing |
X3DTextureTransformNode | Texturing |
BoundaryEnhancementVolumeStyle | Volume |
CartoonVolumeStyle | Volume |
ComposedVolumeStyle | Volume |
EdgeEnhancementVolumeStyle | Volume |
OpacityMapVolumeStyle | Volume |
ProjectionVolumeStyle | Volume |
ShadedVolumeStyle | Volume |
SilhouetteEnhancementVolumeStyle | Volume |
ToneMappedVolumeStyle | Volume |
VolumeData | Volume |
X3DVolumeDataNode | Volume |
X3DVolumeRenderStyleNode | Volume |