[x3d-public] If your Transform does not include center you are smoke

Joe D Williams joedwil at earthlink.net
Fri Oct 24 08:17:40 PDT 2025


Hi Vincent,
The X3D Transform includes a center value. The main idea is that noticing that many DCCs do not include a center in Transform, only translation, rotation, and scale. 
When you define a skeleton and do not have a Joint center value, then the alternative is to position the Joint nodes using translation, meaning that the Joint nodes are not positioned absolutely relative to 0 0 0 but relative to the first Joint in the hierarchy, which might be0 0 0, and then relative to the immediate parent. So the first Joint is set relative to 0 0 0 then the remaining joints are positioned relative to its parent joint.  
   
So, for HAnim and X3D,we can locate every Joint center relative to 0 0 0 (translation value 0 0 0 for every Joint), then when we rotate a joint to make some motion the Joint being rotated operates as expected, with the Joint and its children rotating around the Joint center. Having a Joint center allows the hierarchy to do the work of positioning the animated Joint node and its children directly. Thus, for HAnim using Joint node that incudes a center, all you need to do is use translation and rotation of the root Joint to control the entire skeleton, and use appropriate Joint center rotations to control pose for the skeleton. 
   
This does not happen like this if no Joint center. What to do?
The only recourse seems to be that the the animator has to program the translation and rotation of each Joint for each frame.
The hierarchy is encoded into the skeleton but it serves comparatively little value. 

When we try to import and reuse a skeleton,such as from BVH, the first thing is noting that the tool probably did not know about center (of rotation) parameter. 
If the skeleton joint locations are defined by nested transforms with no center, just translations, then the skeleton joint location is are coded as relative to its parent joint. So, first we have to expand the transforms to find the actual location of each Joint relative to 0 0 0. Otherwise,if we just use the given translation value for center, the skeleton is distorted and will not work. 

For the ISO certification, it is simple. If the tool Transform does not include a center field then there is way to define an ISO-defined HAnim Humanoid skeleton and no chance for easy reuse of animations. If the tool only uses a hierarchy of translations, then any change to the joint locations renders that animation practically useless. 

To me, the addition of the center field in a Transform makes reusable animations possible and shows the wisdom and expert knowledge of the folks who wrote the spec for Transform. Study it, the center value makes animation based on hierarchies easy. With the center, the humanoid animation is easy and intuitive. Without center, animation of a hierarchy is chaotic 

Thanks for more fun with HAnim and Transform center,
Joe



-----Original Message-----
From: Extensible 3D (X3D) Graphics public discussion <x3d-public at web3d.org>
Sent: Oct 24, 2025 4:18 AM
To: X3D-Public <x3d-public at web3d.org>
Cc: Vincent Marchetti <vmarchetti at kshell.com>
Subject: Re: [x3d-public] If your Transform does not include center you are smoke

I agree with (almost) everything here, notably the importance of using a well chosen value of the center field of a Transform node, in the interest of making the X3D file more readable and more amenable to high level validation, in the sense that we can rely on the graphics engines performing the calculation of nested transforms reliably, so there is a direct relation between the user-defined geometry and the values of the transforms.

However, I disagree with the statement that X3D files that don’t define a ‘center’ value are not ISO-conformant. The ISO document identifies a default value of each of the fields in Transform node, so that even an empty usage of Transform (in XML encoding)



is ISO-conformant.

I post this because I think it’s important to remember that ISO-conformance is just a necessary condition for an X3D file (or X3D authoring tool) to be correct, but not a sufficient condition. Your original comment is essentially pointing out that using only the default value of “center” makes generating correct output more difficult; conversely, using a well-chosen value of “center” is a aid to generating correct output.

Vince Marchetti





> On Oct 23, 2025, at 2:16 PM, Joe D Williams via x3d-public wrote:
>
> Looking at the x3D Transform node, please notice it has a center field. If you are animating complicated stuff, like HAnim, if the Transform(s) you are using to build the model does not include the 'center' attribute, you are not ISO conformant and have little chance of being able to use an animation built using one skeleton and transported to another skeleton.
> In fact,you will have no success in using an animation designed for HAnim on a model that does not use Transform(s) that do not include a center value.
>
> The 'secret' is that the center value allows the hierarchy to do the skeleton animation work instead of having to set both Joint rotation and position each frame. For people working on avatar animations, using the center will literally free their brain to do some real creative and innovative animation work.
>
> So here is how the simple Transform without center has to operate:
>
> First, please notice that all Joint nodes in the HAnim model are positioned using the center value, the distance from 0 0 0 to the Joint location.
> The value for translation is left at default 0 0 0.
> This results in a skeleton with effective Joint locations dimensioned by the absolute distance from skeleton 0 0 0.
> Now the skeleton Joint locations are specified absolutely with respect to skeleton 0 0 0, not relative to a parent Joint. (Important)!
>
> So for HAnim you will end up with the avatar skeleton defined by Joint centers, each which when set correctly in the hierarchy results in realistic expected behaviours,.
> That is, if the the shoulder joint is rotated, the child structures of the arm, such as elbow and hand joints will follow as expected with no need to deal with their locations. This is because the hierarchy is doing the work of positioning the structures.
> So, the center value provides a center of rotation location for the Transform and children, which,when a rotation is applied to the parent, then all children will rotate around the center value. The skeleton can be moved using root node translation and rotation and the skeleton can be posed using only a set of Joint rotation values. The hierarchy does all the work in positioning children of the Joint being rotated.
>
> If the transform you are using does not have a center field, then you are using a legacy tool that depends totally on the author to operate the skeleton and you must use various tricks to move the skeleton parts since you are not using the hierarchy to control movements, you are doing all the moving yourself.
>
> So, if your Transform does not include a center value, this is what happens.
> Now the position of the Joint has to be set by a series of Transforms using translation values.
> For example for the first joint in the hierarchy, the Joint is positioned using Transform translation and the Joint is set relative to the model 0 0 0.
> Now the second Joint in the hierarchy is positioned using a child Transform with a translation value to move the second Joint location to a position relative to the first Joint. When the skeleton is set up this way then animation is accomplished by providing both translation and rotation values for each Joint for each frame. The hierarchy does none of the work and the designer has to keep track of each joint location and each joint rotation at each frame.
>
> So, there is more, but a main idea is that First, if your Transform does not include a center field, then you are not ISO conformant. Second, you need to do do a lot more work to move the skeleton as expected because you are not using the hierarchy to do the main work of skeleton animation. Third,there islittke chance that animation provided for one skeleton will transport to another unless they are very close in dimensions.
>
> Thanks and Best Regards,
> Joe
>
>
>
> _______________________________________________
> x3d-public mailing list
> x3d-public at web3d.org
> http://web3d.org/mailman/listinfo/x3d-public_web3d.org


_______________________________________________
x3d-public mailing list
x3d-public at web3d.org
http://web3d.org/mailman/listinfo/x3d-public_web3d.org





More information about the x3d-public mailing list