6.2 Humanoid
Insert the following new fields alphabetically by field name in the interface:
sequence<float[3]> jointBindingPositions [0 0 0] sequence<float[4]> jointBindingRotations [0 0 1 0] sequence<float[3]> jointBindingScales [1 1 1] sequenceString skeletalConfiguration ["BASIC"] {"BASIC", "string"} sequence<float[3]> skinBindingCoords [] sequence<float[4]> skinBindingNormals []
In paragraph 9, remove the first instance of "contain".
Append the following new paragraphs to 6.2:
"The skeletalConfiguration field identifies the skeletal configuration of this model. Any models that share the same skeletalConfiguration value can also share skeletal animation data. The only specific skeletal configuration defined in this specification is the “BASIC” skeletal configuration specified in 4.8.1 Overview. Since the default value of the skeletal configuration is “BASIC”, a humanoid model that specifies a skeletalConfiguration value of “BASIC” shall conform to the restrictive skeletal model specified in 4.8.1 Overview. If the skeletalConfiguration is set to any value other than “BASIC”, the model shall also contain one or more of the five fields that are required for models that are not “BASIC” as described below.
Since the translations and rotations of all the joints is zero at the binding pose, there is no transformation required to calculate the position and normal of the vertices in the local coordinate system of the Joint nodes. Models that contain non-zero values for the translations and rotations of the joint nodes at the binding pose shall also provide the additional fields necessary for the implementation to calculate the positions and normals of the vertices in the local coordinate system of the Joint nodes.
The following five fields provide information needed when the binding pose contains non-zero translations or rotations, as specified in 4.8.2 Modelling of humanoids.
jointBindingPositions
jointBindingRotations
jointBindingScales
skinBindingCoords
skinBindingNormals
Use of these fields apply to models that do not have a “BASIC” skeletalConfiguration value.
These fields specify the appropriate information so that the implementation can calculate the position and normal of the skin vertices in the local coordinate system of each Joint node.
The skinBindingCoords field specifies an array of vertex locations that define the mesh in the binding pose. The same vertex indexing system that is used for the skinCoord field also applies to this field.
The skinBindingNormals field specifies an array of normal vectors that define the mesh normal vectors in the binding pose. The same normal indexing system used for the skinNormal field also applies to this field.
The jointBindingPositions, jointBindingRotations, and jointBindingScales specify three parallel arrays of positions, rotations, and scale values, respectively. These attributes are associated with the array of Joint nodes contained in the joints field. Applying these translation, rotation, and scale attributes to the corresponding Joints maps a skeleton to the binding pose. The location and normal of each vertex in the binding pose is specified in the skinBindingCoord and skinBindingNormal fields, respectively.
These five fields specify the necessary information so that both the skin and the skeleton can be in the same binding pose. Thus, an implementations can calculate the location and normal of each vertex in the local coordinate system of each Joint node, a step required in the skin deformation process.