So I went over the explanation very carefully. Here are some questions/unclear points.
First, when you do the Rigid Bind, I presume you manually assigned specific vertices to specific joints? If so, it may be worth mentioning what was done in Maya here before exporting.
Next:
You may already noticed the one cluster is marked as "RigidBind" ( check its UserData ), it is the real cluster that describes how joint1 will affect/deform the geometry. |
When you say "it is the real cluster" the world 'real' here seems a bit vague. Maybe that sentence could be rephrased to be a bit more clear.
So if user moves joint3 even more after Figure 2, the final position should be sum of Figure 2 and the deformation value from this new movement. |
"sum of Figure 2" again seems a bit sloppy and vague with the words.
But most important is this part:
This won't be explicitly discussed in most graphics theory of rigid binding because it is simply an combination of binding and parenting, but most 3D software do implement rigid binding this way. There is no exception for FBX, so we add compensation cluster to imitate this behavior. That's why joint1 and joint2 will have two clusters corresponding with each of them, since joint4 do not really participate in the rigid binding, it does not influence any vertices, there is no need for joint3 to have a compensate cluster.
|
You say "so we add compensation cluster to imitate this behavior" but you don't really say how it imitates it. I think it would be more clear if you explained how the compensation works. Piecing together everything you said, my understanding is "A compensation cluster for a given joint, is a deformer to influence the vertices bound to its child joint(s), so they inherit its position accordingly." Is this correct?
This raises a question for me though. Suppose a given joint (call it joint A) has dozens of child joints, all rigidly bound to certain vertices. Will the compensation cluster for joint A apply to all of these vertices all the way down the tree? Or just to vertcies of its own child joints?
Your description of the associate model seems pretty clear, actually. The only slightly confusing part is the FBX file snippet:
This is also reflected in FBX file, the following object-property connection describe it: ;Model::joint1, SubDeformer:: C: "OP",740700896,701364304, "SrcModelReference" ;Model::joint2, SubDeformer:: C: "OP",740703088,701360656, "SrcModelReference"
|
So, the FBX file has to keep track of if an associate model is being used? Why is it called "SrcModelReference" and not "associate model"? What if no associate model is given in the file?
Overal, its a little confusing in some spots, but I think it helped me quite a lot with my understanding.