Skip to content

Commit 45c1531

Browse files
committed
add bone weight export test with fbx
1 parent 408c0b1 commit 45c1531

File tree

2 files changed

+8188
-9
lines changed

2 files changed

+8188
-9
lines changed

Assets/FbxExporters/Editor/UnitTests/ModelExporterTest.cs

Lines changed: 73 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -507,14 +507,9 @@ private void CompareMeshComponentAttributes(Mesh mesh, Mesh fbxMesh)
507507
Assert.AreEqual (mesh.tangents, fbxMesh.tangents);
508508
}
509509

510-
[Test]
511-
public void TestSkinnedMeshExport(){
512-
// for now use this cowboy taken from the asset store as the test file
513-
// TODO: find a better/simpler test file
514-
var fbxPath = "FbxExporters/Editor/UnitTests/Models/Cowboy/cowboyMidPoly(riged).fbx";
515-
510+
private void ExportSkinnedMesh(string fileToExport, out SkinnedMeshRenderer originalSkinnedMesh, out SkinnedMeshRenderer exportedSkinnedMesh){
516511
// add fbx to scene
517-
GameObject originalFbxObj = AssetDatabase.LoadMainAssetAtPath("Assets/" + fbxPath) as GameObject;
512+
GameObject originalFbxObj = AssetDatabase.LoadMainAssetAtPath("Assets/" + fileToExport) as GameObject;
518513
Assert.IsNotNull (originalFbxObj);
519514
GameObject originalGO = GameObject.Instantiate (originalFbxObj);
520515
Assert.IsTrue (originalGO);
@@ -526,11 +521,21 @@ public void TestSkinnedMeshExport(){
526521
GameObject fbxObj = AssetDatabase.LoadMainAssetAtPath(filename) as GameObject;
527522
Assert.IsTrue (fbxObj);
528523

529-
var originalSkinnedMesh = originalGO.GetComponentInChildren<SkinnedMeshRenderer> ();
524+
originalSkinnedMesh = originalGO.GetComponentInChildren<SkinnedMeshRenderer> ();
530525
Assert.IsNotNull (originalSkinnedMesh);
531526

532-
var exportedSkinnedMesh = fbxObj.GetComponentInChildren<SkinnedMeshRenderer> ();
527+
exportedSkinnedMesh = fbxObj.GetComponentInChildren<SkinnedMeshRenderer> ();
533528
Assert.IsNotNull (exportedSkinnedMesh);
529+
}
530+
531+
[Test]
532+
public void TestSkinnedMeshExport(){
533+
// for now use this cowboy taken from the asset store as the test file
534+
// TODO: find a better/simpler test file
535+
var fbxPath = "FbxExporters/Editor/UnitTests/Models/Cowboy/cowboyMidPoly(riged).fbx";
536+
537+
SkinnedMeshRenderer originalSkinnedMesh, exportedSkinnedMesh;
538+
ExportSkinnedMesh (fbxPath, out originalSkinnedMesh, out exportedSkinnedMesh);
534539

535540
Assert.IsTrue (originalSkinnedMesh.name == exportedSkinnedMesh.name ||
536541
(originalSkinnedMesh.transform.parent == null && exportedSkinnedMesh.transform.parent == null));
@@ -594,5 +599,64 @@ public void TestSkinnedMeshExport(){
594599
var expWeights = exportedMesh.boneWeights;
595600
Assert.IsNotNull (expWeights);
596601
}
602+
603+
[Test]
604+
public void TestBoneWeightExport()
605+
{
606+
var fbxPath = "FbxExporters/Editor/UnitTests/Models/SimpleMan/SimpleMan.fbx";
607+
608+
SkinnedMeshRenderer originalSkinnedMesh, exportedSkinnedMesh;
609+
ExportSkinnedMesh (fbxPath, out originalSkinnedMesh, out exportedSkinnedMesh);
610+
611+
var origVerts = originalSkinnedMesh.sharedMesh.vertices;
612+
Assert.That (origVerts, Is.Not.Null);
613+
614+
var expVerts = exportedSkinnedMesh.sharedMesh.vertices;
615+
Assert.That (expVerts, Is.Not.Null);
616+
617+
var origBoneWeights = originalSkinnedMesh.sharedMesh.boneWeights;
618+
Assert.That (origBoneWeights, Is.Not.Null);
619+
Assert.That (origBoneWeights.Length, Is.GreaterThan (0));
620+
621+
var expBoneWeights = exportedSkinnedMesh.sharedMesh.boneWeights;
622+
Assert.That (expBoneWeights, Is.Not.Null);
623+
Assert.That (expBoneWeights.Length, Is.GreaterThan (0));
624+
625+
var origBones = originalSkinnedMesh.bones;
626+
var expBones = exportedSkinnedMesh.bones;
627+
628+
for(int i = 0, n = Mathf.Min(origVerts.Length, expVerts.Length); i < n; i++){
629+
bool compared = false;
630+
for (int j = 0; j < n; j++) {
631+
if (origVerts [i] == expVerts [j]) {
632+
// compare bone weights
633+
var origBw = origBoneWeights[i];
634+
var expBw = expBoneWeights [j];
635+
636+
Assert.That (expBw.boneIndex0, Is.EqualTo (origBw.boneIndex0));
637+
Assert.That (expBones[expBw.boneIndex0].name, Is.EqualTo (origBones[origBw.boneIndex0].name));
638+
639+
Assert.That (expBw.boneIndex1, Is.EqualTo (origBw.boneIndex1));
640+
Assert.That (expBones[expBw.boneIndex1].name, Is.EqualTo (origBones[origBw.boneIndex1].name));
641+
642+
Assert.That (expBw.boneIndex2, Is.EqualTo (origBw.boneIndex2));
643+
Assert.That (expBones[expBw.boneIndex2].name, Is.EqualTo (origBones[origBw.boneIndex2].name));
644+
645+
Assert.That (expBw.boneIndex3, Is.EqualTo (origBw.boneIndex3));
646+
Assert.That (expBones[expBw.boneIndex3].name, Is.EqualTo (origBones[origBw.boneIndex3].name));
647+
648+
Assert.That (expBw.weight0, Is.EqualTo (origBw.weight0).Within(0.001f));
649+
Assert.That (expBw.weight1, Is.EqualTo (origBw.weight1).Within(0.001f));
650+
Assert.That (expBw.weight2, Is.EqualTo (origBw.weight2).Within(0.001f));
651+
Assert.That (expBw.weight3, Is.EqualTo (origBw.weight3).Within(0.001f));
652+
653+
compared = true;
654+
break;
655+
}
656+
}
657+
// make sure that each vertex is compared
658+
Assert.That (compared, Is.True, string.Format("Couldn't find matching vertex for: {0}", origVerts[i]));
659+
}
660+
}
597661
}
598662
}

0 commit comments

Comments
 (0)