The structured data associated with each vertex in a mesh can be customized. Any arbitrary floating point data can be attached, and assigned to be interpreted as a one of a fixed set of rendering properties at runtime. Not all types of attributes can be exported with all data formats; see below for limitations. All vertices in any given document have the same data format as each other. Adding a new attribute to a document with existing geometry will assign default values to all vertices for the newly added attribute(s). Removing an attribute from a document with existing geometry will delete all vertex data associated with the attribute being removed. Attributes are interpreted for rendering and editing as follows: • Every vertex always has three floating point components to represent its position in 3D space. This cannot be modified in the vertex format, although additional position attributes can be added. An attribute with the Position type and exactly 3 components can be edited in the inspector with the vector position widget. • If a Normal attribute with at least 3 components is present, it will be interpreted as a normal vector for lighting calculations. If there are multiple normal attributes, the first listed one will be used. An attribute with the Normal type and exactly 3 components can be edited in the inspector with the vector direction widget. • If a Color attribute with at least 3 components is present, it will be interpreted as a vertex color and used for rendering. If the attribute has a fourth component, it will be interpreted as an alpha value. If multiple color attributes are present, only the first one is used for rendering. An attribute with the Color type and any number of components can be edited in the inspector with the color picker, though components beyond the 4th can only be edited numerically. • If a Texture Coordinate attribute with at least 2 components is present, it will be interpreted as U/V coordinates in texture space. If there are multiple Texture Coordinate attributes, the first listed one will be used. • If a Bone Index attribute and a Bone Weight attribute are both present, they will be interpreted together to associate vertices with bones in the mesh's armature, if any. Bone Index attributes will be editable as integers, and Bone Weight attributes with exactly 4 components will be editable with relative adjustment sliders. When attributes are automatically interpolated during edit operations that involve subdivision, Bone Index and Bone Weight attributes will not be averaged, and will be assigned the full value of one side or the other depending on which is closer. • Texture Index attributes will be editable as integers, but currently have no effect on rendering. When attributes are automatically interpolated during edit operations that involve subdivision, Texture Index attributes will be assigned the full value of one side or the other depending on which is closer. • Tangent and Unspecified attributes currently have no effect on rendering or any special editing properties. When exporting meshes, vertex attributes may be automatically remapped to fit the format being exported. Current export formats behave as follows: Obj: The first Texture Coordinate attribute with at least 2 components, if any, will be exported with vt lines in the output. The first Normal attribute with at least 3 components, if any, will be exported with vn lines in the output. No other attributes are included in exported obj data. glTF (text or binary): Currently, all glTF exports will include the following attributes: • POSITION, set to vertex's primary position. • TEXCOORD_0, set to the first Texture Coordinate attribute found, or default values of {0, 0} if not present. • NORMAL, set to the first Normal attribute found, or default values {0, 0, 1} if not present. • COLOR_0, set to the first Color attribute found, or default values {1, 1, 1, 1} if not present. If an armature is present and the "Include bones" checkbox was selected at export time, the following attributes will also be included: • JOINTS_0, set to the first Bone Index attribute found, or default values of {0, 0, ...} if not present. • WEIGHTS_0, set to the first Bone Index attribute found, or default values of {1, 0, 0, ...} if not present. Stem3D MeshData: Currently, exported vertex format behavior is equivalent to glTF. Additional formats, options, and possibly custom exporters may be added in the future.