<div style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:12pt"><p style="margin: 0.1rem 0px; line-height: 1;"> </p>
<p style="margin: 0.1rem 0px; line-height: 1;"><a href="https://mpai.community/wp-content/uploads/2023/10/Technical-Specification-Portable-Avatar-Format-MPAI-PAF-V1.pdf">https://mpai.community/wp-content/uploads/2023/10/Technical-Specification-Portable-Avatar-Format-MPAI-PAF-V1.pdf</a></p>
<p style="margin: 0.1rem 0px; line-height: 1;"> </p>
<p style="margin: 0.1rem 0px; line-height: 1;">This is important HAnim stuff. <br>Some basic concepts of character structure and animation best practice <br>are being defined for the PAF. </p>
<p style="margin: 0.1rem 0px; line-height: 1;"> </p>
<p style="margin: 0.1rem 0px; line-height: 1;">So, let's please figure a way to give some HAnim best practice guidance <br>to the group. </p>
<p style="margin: 0.1rem 0px; line-height: 1;"> </p>
<p style="margin: 0.1rem 0px; line-height: 1;">The HAnim standard was mentioned and followed in several instances but in important ways abandoned. To be commented on below. </p>
<p style="margin: 0.1rem 0px; line-height: 1;"> </p>
<p style="margin: 0.1rem 0px; line-height: 1;">Please recall that the entire reason for x3d is HAnim Humanoid and its environment and the entire purpose of HAnim is authoring transportable Humanoids using transportable animations and interactions. </p>
<p style="margin: 0.1rem 0px; line-height: 1;"> <br>A similar character should be able to fairly easily adapt, or even use directly, animations and interactions that work on a similar model. <br>So, for skeleton-driven animations, this means a standard but customizable skeleton hierarchy and <br>a standard but customizable set of surface feature interaction points. <br>And most importantly, a standardized default pose before animation. <br> <br>First, HAnim proves a realistic skeleton, one that is capable of realistic simulations of realtime stimulus/response interactions with the host environment and other Humanoids. </p>
<p style="margin: 0.1rem 0px; line-height: 1;">That is the main idea, so to have this transportable device, called a Body Model here, that can actually represent a You, we must apply some standrds. </p>
<p style="margin: 0.1rem 0px; line-height: 1;"><br>"7.3 Body<br>7.3.1 Body Model"</p>
<p style="margin: 0.1rem 0px; line-height: 1;"> </p>
<p style="margin: 0.1rem 0px; line-height: 1;">Is: <br>"MPAI adopts the Humanoid animation (HAnim) architecture [9] that gives access to the joint and <br>end-effector hierarchy of a human figure. This allows a model-independent animation of a skeleton <br>and related skin vertices associated with joints and geometry/accessories/sensors of individual <br>body segments and sites." </p>
<p style="margin: 0.1rem 0px; line-height: 1;"> </p>
<p style="margin: 0.1rem 0px; line-height: 1;">Suggestion: <br>Humanoid Animation (HAnim) <br>Great! Abstract, but says a (realistic) hierarchical body composed of Joints for animation, Segments for vizualization geometry, and interaction Sites for sensors or whatever. <br>And maybe a continuous deformable mesh skin. <br> <br>Is:<br>"The actual structure of the HAnim architecture depends on the selected element of the Level Of <br>Articulations (LOA) hierarchy: LOA 1, LOA 2, LOA 3, or LOA 4. All joints of an HAnim figure <br>are represented as a tree hierarchy starting with the humanoid_root joint. For an LOA 1 character, <br>there are 18 joints and 18 segments in the hierarchy."</p>
<p style="margin: 0.1rem 0px; line-height: 1;"> </p>
<p style="margin: 0.1rem 0px; line-height: 1;">Suggestion: Fantastic! <br><a href="https://www.web3d.org/documents/specifications/19774/V2.0/Architecture/concepts.html#BasicSetJointHierarchy4">https://www.web3d.org/documents/specifications/19774/V2.0/Architecture/concepts.html#BasicSetJointHierarchy4 </a></p>
<p style="margin: 0.1rem 0px; line-height: 1;"> </p>
<p style="margin: 0.1rem 0px; line-height: 1;">New Sentence: <br>The HAnim architecture consists of nested transforms called Joint, Segment, and Site. <br>The transform hierarchy is operated by applying rotation to various Joint objects in the hierarchy. <br>The hierarchy is realistic so,for instance, the motion of a shoulder joint will result in the expected motion of the arm and hand child parts. <br>In addition, the character is equipped with a defined set of surface feature <br>landmarks used for viewer, geometry, sensor, and anything x3d. <br>The Site features are certain children of Segment nodes and are animated with the Segment controlled by the parent Joint. </p>
<p style="margin: 0.1rem 0px; line-height: 1;"> </p>
<p style="margin: 0.1rem 0px; line-height: 1;">Is:<br>"The bones of the body are described starting <br>from position (x0,y0,z0) of the root (neck or <br>pelvis)." </p>
<p style="margin: 0.1rem 0px; line-height: 1;"> </p>
<p style="margin: 0.1rem 0px; line-height: 1;">Should be:<br>The Joint center values of the skeleton and the interaction landmarks <br>are x y z dimensioned relative to 0 0 0 at the floor between the feet. </p>
<p style="margin: 0.1rem 0px; line-height: 1;"> <br>This is measured using the standard default before animation pose. <br>The rotation of all Joint objects in default pose is defined at 0 0 1 0 radians; x=y=z=zero degrees. </p>
<p style="margin: 0.1rem 0px; line-height: 1;"> </p>
<p style="margin: 0.1rem 0px; line-height: 1;">Is: <br>"The orientation of a bone attached to the root <br>is defined by (α,β,γ) where α is the angle of the <br>bone with the x axis, and so on. The joint of a <br>bone attached to the preceding bone has a <br>position (x1,y1,z1) determined by the angles <br>(α1,β1,γ1) and the length of the bone." </p>
<p style="margin: 0.1rem 0px; line-height: 1;"> </p>
<p style="margin: 0.1rem 0px; line-height: 1;">Suggetion: </p>
<p style="margin: 0.1rem 0px; line-height: 1;">Bones Not important since the basis for the skeleton is Joint centers, not intersections of bones connecting them. The HAnim hierarchy is based on Joint centers and the orientation and length of a bone is not a data point in operation. <br>Animation of the skeleton and body is all about Joint center rotations. <br>Under the covers it is all about Joint centers so the author must be exposed to Joint centers as the base measurement landmarks and animation vehicles of the body. Although lucky that if rigged right, bone orientation and Joint rotation are same. </p>
<p style="margin: 0.1rem 0px; line-height: 1;"> </p>
<p style="margin: 0.1rem 0px; line-height: 1;">Is: <br>"The Body Model contains:<br>1. Pose composed by: <br>1.1. The position of the root.<br>1.2. The angles of the bones with the <br>(x,y,z) coordinate axes.<br>1.3. The orientation of the body <br>defined by 3 angles."</p>
<p style="margin: 0.1rem 0px; line-height: 1;"> </p>
<p style="margin: 0.1rem 0px; line-height: 1;">Suggestion: <br>The Humanoid Body Model contains: <br>1. Pose composed of: <br>1.1. The default pose prior to animation. <br>This is relaxed attention, facing +z, +y up, and +x to model left. <br>1.2. The 0 0 0 reference location for the model. <br>At the floor, between the feet since all default pose Joint center and surface landmark dimensions <br>are referenced relative to 0 0 0 for default pose. <br>1.3. In the default pose before animation all Joint center transforms are default 0 0 1 0 x=y=z=zero <br>1.4. The Humanoid has two levels of basic complexity. <br>Level 1 uses Segment geometry. <br>Level 2 continuous mesh skin plus Segment geometry. <br>Level 1 Segment geometry is animated directly by the parent Joint. <br>Level 2 skin is animated using weighted value sum from multiple Joint objects. <br>HAnim Displacer node can additively control geometry vertices. </p>
<p style="margin: 0.1rem 0px; line-height: 1;"> </p>
<p style="margin: 0.1rem 0px; line-height: 1;">Is: <br>"2. The standard bone lengths. <br>3. Lengths of the bones of the specific <br>model." </p>
<p style="margin: 0.1rem 0px; line-height: 1;"> </p>
<p style="margin: 0.1rem 0px; line-height: 1;">Suggestion:<br>These are not important in HAnim except figuring Joint center values for default pose. </p>
<p style="margin: 0.1rem 0px; line-height: 1;"> </p>
<p style="margin: 0.1rem 0px; line-height: 1;">Is: <br>4. Surface-related <br>4.1. Surface <br>4.2. Texture <br>4.3. Material <br>4.4. Cloth (an integral part of the model)" </p>
<p style="margin: 0.1rem 0px; line-height: 1;"> </p>
<p style="margin: 0.1rem 0px; line-height: 1;">Suggestion: <br>4. Surface features <br>4.1. Surface can be represented by collections of geometry contained by Segment objects. <br>The geometry can be textured and have complex surface features. <br>Site objects can be decorative or functional geometery, sensors, vieweres, etc. <br>4.2. clothing and accessories can be included in skin geometry, or drawn individually and <br>utilized as segment geometry. </p>
<p style="margin: 0.1rem 0px; line-height: 1;"> </p>
<p style="margin: 0.1rem 0px; line-height: 1;">Artwork: <br>Figure 9. Some Joints of the Body Model. </p>
<p style="margin: 0.1rem 0px; line-height: 1;"> </p>
<p style="margin: 0.1rem 0px; line-height: 1;">Suggestion: <br>OK except that vl5 should be the base of the spine and a vc7 should be present <br>to parent the skull and shoulders. Having the shoulders parented too low on the <br>spine is a handicap. Please show minimum LOA2 skeleton for this. </p>
<p style="margin: 0.1rem 0px; line-height: 1;"> </p>
<p style="margin: 0.1rem 0px; line-height: 1;">Is: <br>"The Body Model is represented in the glTF format and transmitted in the initial Portable Avatar at <br>the beginning of the Avatar-Based Videoconference. <br>The Spatial Attitude of a Body is defined with respect to the global coordinate system defined by<br>the Visual Environment." </p>
<p style="margin: 0.1rem 0px; line-height: 1;"> </p>
<p style="margin: 0.1rem 0px; line-height: 1;">Suggestion: <br>The Body Model skeleton, surface geometry, accessories, and personal animations are <br>represented in various forms including x3d HAnim, various gltf assets, ascii, binary, encripted formats, various image and sound formats contained by the standard Portable Avator package. <br>The Body Model is scaled 1:1 in meters (human scale) aimed at a standard host environment <br>1:1 scale. </p>
<p style="margin: 0.1rem 0px; line-height: 1;"> </p>
<p style="margin: 0.1rem 0px; line-height: 1;">Is: <br>"7.3.2 Body Descriptors<br>Body Descriptors are included in the data set describing the root and joints as:<br>1 Position and Orientation of the root.<br>2 Rotation angles of the joints.<br>The rotation of the head is treated as any other joint.<br> <br>Suggested: </p>
<p style="margin: 0.1rem 0px; line-height: 1;">Body Descriptors are from Default Pose with elements of data set in correct location in the skeleton hierarchy: <br>(1) Joint Center x y z values relative to 0 0 0. <br>(2) Surface Feature Landmarks x y z values relative to 0 0 0. <br>Animation data consisting of Root translation and rotation, Joint rotation, and or special aspects of body pose, geometry motion, sensor interactions may be generated in real time using internal or external (from host) scripts or by internal preprogrammed interpolators. <br> <br>Is: <br>"Figure 10 depicts Roll (rotation around y), Pitch (rotation around y, and Yaw (rotation around z) <br>of a Body" </p>
<p style="margin: 0.1rem 0px; line-height: 1;"> </p>
<p style="margin: 0.1rem 0px; line-height: 1;">Suggested:<br>Figure 10 depicts <br>Pitch (rotation around x), <br>Yaw (rotation around y), and <br>Roll (rotation around z) of a Body. </p>
<p style="margin: 0.1rem 0px; line-height: 1;"> </p>
<p style="margin: 0.1rem 0px; line-height: 1;">Figure 10 is not HAnim. <br>Unclear whether right- or left-hand rule.<br> HAnim is right-hand rule. <br>Axes are mixed up from HAnim. <br> The Figure 10 Body is facing -x,<br> +z to body left, <br> +y up. </p>
<p style="margin: 0.1rem 0px; line-height: 1;">The HAnim Body Model in default before animation pose is: <br>facing +z, <br>up is +y. and <br>+x to body left. </p>
<p style="margin: 0.1rem 0px; line-height: 1;">Please adopt the HAnim std coordinate system, same as default web3d x3d coordinate system. <br> <br>Not so much about x and y, most every system can produce a default skeleton for x and y with +x to viewer's right and Body Model left, and +y up as standard graphing practice. <br>But picking the correct direction for +z, and thus the Body Model default has been a topic for generations. To settle it, just think that relatively, the audience looking at the Body Model is facing -z with minus value increasing with distance and the Body Model is facing +z with plus value increasing with distance. <br>Important that authors honor and even demand this because negative scaling is out for this round <br>and that really didn't fix it anyway. </p>
<p style="margin: 0.1rem 0px; line-height: 1;"> </p>
<p style="margin: 0.1rem 0px; line-height: 1;">For rotation of axes, right-hand rule.<br>Thumb pointed toward + of axis then curl of fingers = + positive rotation. </p>
<p style="margin: 0.1rem 0px; line-height: 1;">When you are facing the body as a viewer, your gaze is toward -z, <br>+x is to your right, and +y is up. <br>The Body gaze is +z, <br>+x is body left, and +y is up. </p>
<p style="margin: 0.1rem 0px; line-height: 1;"> </p>
<p style="margin: 0.1rem 0px; line-height: 1;">It is not a mirror, it is a Body Model looking at you. </p>
<p style="margin: 0.1rem 0px; line-height: 1;">So, Figure 10 needs replacement for consistency. </p>
<p style="margin: 0.1rem 0px; line-height: 1;"> </p>
<p style="margin: 0.1rem 0px; line-height: 1;">Is: <br>"7.3.3 Head Descriptors <br>The Head Descriptors are the angles of: <br>1. Roll: head has moved toward one of the shoulders.<br>2. Pitch: head has moved up and down.<br>3. Yaw: head has rotated left to right (around the vertical axis of the head).<br>These are useful in case when a body-less head is animated." </p>
<p style="margin: 0.1rem 0px; line-height: 1;"> </p>
<p style="margin: 0.1rem 0px; line-height: 1;">Fine, this is like HAnim but not like Figure 10. </p>
<p style="margin: 0.1rem 0px; line-height: 1;"> </p>
<p style="margin: 0.1rem 0px; line-height: 1;">Is: <br>"7.4 Face <br>7.4.1 Face Model" </p>
<p style="margin: 0.1rem 0px; line-height: 1;"> </p>
<p style="margin: 0.1rem 0px; line-height: 1;">Just hoping HAnim facial animation evolving <br>is pretty much the same or slightly advanced. <br> <br>Attached is latest JinScaledL1LOA4 with Sites. <br>To me,this would be the best current example of an HAnim <br>character with Segment Geometry and showing V2 surface <br>feature landmarks. <br>The user code is fairly easy to read in Notepad. <br>Maybe skip the front interface stuff down to HAnimHumanoid <br>to read the loa4 skeleton, then have a look at the complete set of interpolators, routes timers to interpolators, routes interpolators to skeleton joints. In fact, multiple copies, one for each of the animations. <br> <br>View with any x3d tool or even use the X_ite Playground.<br>Just go to </p>
<p style="margin: 0.1rem 0px; line-height: 1;"> <br><a href="https://create3000.github.io/x_ite/playground/?url=https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Models/master/2.0/SimpleInstancing/glTF/SimpleInstancing.gltf">https://create3000.github.io/x_ite/playground/?url=https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Models/master/2.0/SimpleInstancing/glTF/SimpleInstancing.gltf </a></p>
<p style="margin: 0.1rem 0px; line-height: 1;"> <br>then paste this .x3d file in the text area replacing what is there. <br>Future versions of this will have the old, much more pleasing motions as pitch2, yaw2, roll2 animations. </p>
<p style="margin: 0.1rem 0px; line-height: 1;"> <br>Thanks and Best,<br>Joe</p>
<p style="margin: 0.1rem 0px; line-height: 1;"> </p></div>