Skip to content

Commit 8022566

Browse files
committed
make sure to export bind poses for all bones
including bones that are not stored in the skinned mesh
1 parent 9cb3825 commit 8022566

File tree

1 file changed

+9
-2
lines changed

1 file changed

+9
-2
lines changed

Assets/FbxExporters/Editor/FbxExporter.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -755,6 +755,8 @@ private bool IsBone(Transform t, Dictionary<Transform, int> bones){
755755
return false;
756756
}
757757

758+
private Dictionary<SkinnedMeshRenderer, Transform[]> SkinnedMeshToBonesMap = new Dictionary<SkinnedMeshRenderer, Transform[]> ();
759+
758760
/// <summary>
759761
/// Export bones of skinned mesh, if this is a skinned mesh with
760762
/// bones and bind poses.
@@ -837,6 +839,7 @@ private bool ExportSkeleton (SkinnedMeshRenderer skinnedMesh, FbxScene fbxScene)
837839
}
838840

839841
// Get bindposes
842+
SkinnedMeshToBonesMap.Add (skinnedMesh, boneList);
840843
var boneToBindPose = new Dictionary<Transform, Matrix4x4>();
841844
for (int boneIndex = 0, n = boneList.Length; boneIndex < n; boneIndex++) {
842845
var unityBone = boneList [boneIndex];
@@ -986,8 +989,12 @@ protected bool ExportBindPose (SkinnedMeshRenderer skinnedMesh, FbxNode fbxMeshN
986989
fbxPose.SetIsBindPose (true);
987990

988991
// assume each bone node has one weighted vertex cluster
989-
for (int i = 0; i < skinnedMesh.bones.Length; i++) {
990-
FbxNode fbxBoneNode = MapUnityObjectToFbxNode [skinnedMesh.bones[i].gameObject];
992+
Transform[] bones;
993+
if (!SkinnedMeshToBonesMap.TryGetValue (skinnedMesh, out bones)) {
994+
return false;
995+
}
996+
for (int i = 0; i < bones.Length; i++) {
997+
FbxNode fbxBoneNode = MapUnityObjectToFbxNode [bones[i].gameObject];
991998

992999
// EvaluateGlobalTransform returns an FbxAMatrix (affine matrix)
9931000
// which has to be converted to an FbxMatrix so that it can be passed to fbxPose.Add().

0 commit comments

Comments
 (0)