@@ -507,14 +507,9 @@ private void CompareMeshComponentAttributes(Mesh mesh, Mesh fbxMesh)
507
507
Assert . AreEqual ( mesh . tangents , fbxMesh . tangents ) ;
508
508
}
509
509
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 ) {
516
511
// add fbx to scene
517
- GameObject originalFbxObj = AssetDatabase . LoadMainAssetAtPath ( "Assets/" + fbxPath ) as GameObject ;
512
+ GameObject originalFbxObj = AssetDatabase . LoadMainAssetAtPath ( "Assets/" + fileToExport ) as GameObject ;
518
513
Assert . IsNotNull ( originalFbxObj ) ;
519
514
GameObject originalGO = GameObject . Instantiate ( originalFbxObj ) ;
520
515
Assert . IsTrue ( originalGO ) ;
@@ -526,11 +521,21 @@ public void TestSkinnedMeshExport(){
526
521
GameObject fbxObj = AssetDatabase . LoadMainAssetAtPath ( filename ) as GameObject ;
527
522
Assert . IsTrue ( fbxObj ) ;
528
523
529
- var originalSkinnedMesh = originalGO . GetComponentInChildren < SkinnedMeshRenderer > ( ) ;
524
+ originalSkinnedMesh = originalGO . GetComponentInChildren < SkinnedMeshRenderer > ( ) ;
530
525
Assert . IsNotNull ( originalSkinnedMesh ) ;
531
526
532
- var exportedSkinnedMesh = fbxObj . GetComponentInChildren < SkinnedMeshRenderer > ( ) ;
527
+ exportedSkinnedMesh = fbxObj . GetComponentInChildren < SkinnedMeshRenderer > ( ) ;
533
528
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 ) ;
534
539
535
540
Assert . IsTrue ( originalSkinnedMesh . name == exportedSkinnedMesh . name ||
536
541
( originalSkinnedMesh . transform . parent == null && exportedSkinnedMesh . transform . parent == null ) ) ;
@@ -594,5 +599,64 @@ public void TestSkinnedMeshExport(){
594
599
var expWeights = exportedMesh . boneWeights ;
595
600
Assert . IsNotNull ( expWeights ) ;
596
601
}
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
+ }
597
661
}
598
662
}
0 commit comments