- Home /
Wrong bindPoses with generated mesh
I am trying to import a fbx-file with a skeleton. I got all the data and can import the mesh and bones correctly, this looks like this: The problem occurs when I am trying to add weights and bindposes to the bones. The weights are correct, they deform the excepted vertices, but the mesh is deformed. See this picture: The scales of the bones are all 1 and they are at the correct position. The hierarchy looks roughly like this:
TestObject
-------Hips
--------------L_Thigh
---------------------...
--------------Spine
---------------------...
--------------R_Thigh
---------------------...
-------MeshParent
--------------Mesh
And the code for setting the bindposes like this (simplified):
Transform[] boneTransforms = new Transform[numberOfBones];
Matrix4x4[] bindPoses = new Matrix4x4[numberOfBones];
for(int bi=0;bi<numberOfBones;bi++) {
boneTransforms[bi] = getBoneWithIndex(bi).transform;
bindPoses[bi] = boneTransforms[bi].worldToLocalMatrix* meshObject.transform.localToWorldMatrix;
//Other stuff (setting boneWeights, ...)
}
In every example I found the bindPoses were computed like this, so I am not really sure what I am doing wrong ... Are the bindposes the problem? How do you compute them correctly? Has it something to do with the hierarchy?
Answer by Mindmapfreak · Jun 27, 2016 at 08:21 AM
Ok, the reason was rather dumb:
I get a pointer to each object from my DLL and first generate a GameObject for each pointer, so that parenting can work. Then I import other data for the object, such as position, rotation, scale, name and the mesh-data. The problem was that I set the bindposes when importing the mesh and the parent-objects do not necessarily have their position/rotation/scale set at that time. For this reason the bindposes were not correct at the time the mesh was generated. I changed the order from:
GenerateGameObjectForEachObject();
GetTransformDataAndMeshForEachObject();
to
GenerateGameObjectForEachObject();
GetTransformDataForEachObject();
GetMeshForEachObject();
The code from my original post works as intended.
Your answer
Follow this Question
Related Questions
Unbind a skinned mesh in Unity 2 Answers
Binding a mecanim skeleton to a new mesh 1 Answer
Character Animation Pose Mesh,Animated Pose Mesh 0 Answers
Reset SkinnedMesh pose 1 Answer