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

Joe D Williams joedwil at earthlink.net
Thu Oct 23 11:16:16 PDT 2025


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





More information about the x3d-public mailing list