Inside Sabertooth
Learn how Sabertooth uses 3ds Max to create 3D interactive projects, including HBO Go’s Game of Thrones interactive experience
  • 1/3
You are here: Forum Home / Autodesk® FBX® / FBX SDK / Skeleton Bind Pose for bones not linked to clusters
  RSS 2.0 ATOM  

Skeleton Bind Pose for bones not linked to clusters
Rate this thread
 
48338
 
Permlink of this thread  
avatar
  • samcake
  • Posted: 13 October 2010 02:32 PM
  • Total Posts: 7
  • Joined: 12 October 2010 07:10 PM

Is there a way to access the original Bind Pose for a Skeleton Node without the Cluster data ?

From a KFbxCluster, i can access the bind pose transform of the bone used when rigging the mesh

KFbxXMatrix lClusterGlobalInitPosition;
lCluster->GetTransformLinkMatrix(lClusterGlobalInitPosition);

OK cool… but then I have 2 questions:
Q1: where can I find the similar binding pose transform for bones of the skeleton which are not used by any cluster ?
(by bones of the skeleton I mean the KFbxNodes of the hierarchy of nodes used to drive the bone animation for the skinning)
I don’t seem to find that kind of property on a KFbxSkeleton ?

Q2: Is the KFbxNodes used to make the skeleton hierarchy MUST be KFbxSkeleton nodes ?
Or any KFbxNode type is accepted ?

Thanks

S



Replies: 0
avatar
  • nian.wu
  • Posted: 13 October 2010 06:05 PM

For Q1, if one bone is not used by cluster, you can get its global transform from its parent’s global transform and it local transform.

For Q2, the answer is yes. Any node can be used as skeleton. For example, mesh, locator, null object.



Nian Wu
AutoDesk FBX Team

Replies: 2
/img/forum/dark/default_avatar.png

"For Q1, if one bone is not used by cluster, you can get its global transform from its parent’s global transform and it local transform.”

No it’s not what i m looking for, this is giving me the “default” transformation which is not the same as the one used to when doing the rigging with the mesh.
If you take the Humanoid.fbx model, the skeleton transformation by default is going to be a man standing in a waiting pose where has the mesh by default is the man standing up straight with arms horizontal.

THe skeleton in it’s default in that case is not in the binding position when the skeleton was rigged to the mesh.

You can get some of the bone position in that binding pose from the cluster “GetTransformLinkMatrix” call
But what about the bones of the hierarchy which have no CLuster attached to it ?

Ok for q2

THanks

Author: samcake

Replied: 13 October 2010 08:18 PM  
/userdata/avatar/vx3501hqr_small.jpg

Hi, samcake,
If there is no cluster attached to a bone in the hierarchy, that means this bone is not used in the binding.
Then you have to calculate its global transform at binding moment by yourself.
Imagine an hierachy: ParentBone->ChildBone, if ParentBone participated in the binding, but ChildBone did not, then there should be a cluster attached to ParentBone, but no any cluster attached to ChildBone.
From the parent cluster you can call “GetTransformLinkMatrix” to get the global transform of ParentBone at binding moment, then you can calculate the global transform of the ChildBone at binding like this: 
ChildGlobalAtBinding = ParentGlobalAtBinding * ChildLocal.
I think this is what Nian means in his answer to Q1. It depends on which parent global transform you are using, the default one or the one at binding, then you can get corresponding global transform of Child.

BTW, you can also get global transform at binding from pose nodes of KFbxPose, each pose node are corresponding to the mesh or the binding bones. But if the bone does not participate the binding, I think it won’t have corresponding pose node in the bindpose too.
But in one case, if there is a corrupted FBX file which store the bindpose info of a bone, but lost its cluster, then you can still get its global transform at binding from KFbxPose.

Author: Jiayang Xu

Replied: 17 October 2010 04:12 PM