@@ -552,7 +552,7 @@ private void CompareMeshComponentAttributes(Mesh mesh, Mesh fbxMesh)
552
552
Assert . AreEqual ( mesh . tangents , fbxMesh . tangents ) ;
553
553
}
554
554
555
- private void ExportSkinnedMesh ( string fileToExport , out SkinnedMeshRenderer originalSkinnedMesh , out SkinnedMeshRenderer exportedSkinnedMesh ) {
555
+ private string ExportSkinnedMesh ( string fileToExport , out SkinnedMeshRenderer originalSkinnedMesh , out SkinnedMeshRenderer exportedSkinnedMesh ) {
556
556
// add fbx to scene
557
557
GameObject originalFbxObj = AssetDatabase . LoadMainAssetAtPath ( fileToExport ) as GameObject ;
558
558
Assert . IsNotNull ( originalFbxObj ) ;
@@ -585,6 +585,8 @@ private void ExportSkinnedMesh(string fileToExport, out SkinnedMeshRenderer orig
585
585
586
586
exportedSkinnedMesh = fbxObj . GetComponentInChildren < SkinnedMeshRenderer > ( ) ;
587
587
Assert . IsNotNull ( exportedSkinnedMesh ) ;
588
+
589
+ return filename ;
588
590
}
589
591
590
592
public class SkinnedMeshTestDataClass
@@ -765,6 +767,85 @@ private static float ComputeHausdorffDistance<T>(T[] orig, T[] converted, GetDis
765
767
return maxDistance ;
766
768
}
767
769
770
+ private void TestFbxShapeNamesNotEmpty ( FbxNode node )
771
+ {
772
+ var mesh = node . GetMesh ( ) ;
773
+ if ( mesh != null )
774
+ {
775
+ for ( int i = 0 ; i < mesh . GetDeformerCount ( ) ; i ++ )
776
+ {
777
+ var blendshape = mesh . GetBlendShapeDeformer ( i ) ;
778
+ if ( blendshape == null )
779
+ {
780
+ continue ;
781
+ }
782
+
783
+ for ( int j = 0 ; j < blendshape . GetBlendShapeChannelCount ( ) ; j ++ )
784
+ {
785
+ var blendShapeChannel = blendshape . GetBlendShapeChannel ( j ) ;
786
+ for ( int k = 0 ; k < blendShapeChannel . GetTargetShapeCount ( ) ; k ++ )
787
+ {
788
+ var shape = blendShapeChannel . GetTargetShape ( k ) ;
789
+ Assert . That ( string . IsNullOrEmpty ( shape . GetName ( ) ) , Is . False , string . Format ( "FbxShape missing name on blendshape {0}" , blendshape . GetName ( ) ) ) ;
790
+ }
791
+ }
792
+ }
793
+ }
794
+
795
+ for ( int i = 0 ; i < node . GetChildCount ( ) ; i ++ )
796
+ {
797
+ TestFbxShapeNamesNotEmpty ( node . GetChild ( i ) ) ;
798
+ }
799
+ }
800
+
801
+ private void FbxImportAndTestBlendshapes ( string fbxPath )
802
+ {
803
+ // Create the FBX manager
804
+ using ( var fbxManager = FbxManager . Create ( ) )
805
+ {
806
+ FbxIOSettings fbxIOSettings = FbxIOSettings . Create ( fbxManager , Globals . IOSROOT ) ;
807
+
808
+ // Configure the IO settings.
809
+ fbxManager . SetIOSettings ( fbxIOSettings ) ;
810
+
811
+ // Create the importer
812
+ var fbxImporter = FbxImporter . Create ( fbxManager , "Importer" ) ;
813
+
814
+ // Initialize the importer.
815
+ int fileFormat = - 1 ;
816
+
817
+ bool status = fbxImporter . Initialize ( fbxPath , fileFormat , fbxIOSettings ) ;
818
+ FbxStatus fbxStatus = fbxImporter . GetStatus ( ) ;
819
+
820
+ Assert . That ( status , Is . True , fbxStatus . GetErrorString ( ) ) ;
821
+ Assert . That ( fbxImporter . IsFBX ( ) , "file does not contain FBX data" ) ;
822
+
823
+ // Import options. Determine what kind of data is to be imported.
824
+ // The default is true, but here we set the options explictly.
825
+ fbxIOSettings . SetBoolProp ( Globals . IMP_FBX_MATERIAL , false ) ;
826
+ fbxIOSettings . SetBoolProp ( Globals . IMP_FBX_TEXTURE , false ) ;
827
+ fbxIOSettings . SetBoolProp ( Globals . IMP_FBX_ANIMATION , false ) ;
828
+ fbxIOSettings . SetBoolProp ( Globals . IMP_FBX_EXTRACT_EMBEDDED_DATA , false ) ;
829
+ fbxIOSettings . SetBoolProp ( Globals . IMP_FBX_GLOBAL_SETTINGS , true ) ;
830
+
831
+ // Create a scene
832
+ var fbxScene = FbxScene . Create ( fbxManager , "Scene" ) ;
833
+
834
+ // Import the scene to the file.
835
+ status = fbxImporter . Import ( fbxScene ) ;
836
+ fbxStatus = fbxImporter . GetStatus ( ) ;
837
+ Assert . That ( status , Is . True , fbxStatus . GetErrorString ( ) ) ;
838
+
839
+ // Get blendshapes and check that the FbxShapes all have names
840
+ var rootNode = fbxScene . GetRootNode ( ) ;
841
+ TestFbxShapeNamesNotEmpty ( rootNode ) ;
842
+
843
+ // cleanup
844
+ fbxScene . Destroy ( ) ;
845
+ fbxImporter . Destroy ( ) ;
846
+ }
847
+ }
848
+
768
849
[ Test , TestCaseSource ( typeof ( AnimationTestDataClass ) , "BlendShapeTestCases" ) ]
769
850
public void TestBlendShapeExport ( string fbxPath )
770
851
{
@@ -774,7 +855,7 @@ public void TestBlendShapeExport(string fbxPath)
774
855
Assert . That ( fbxPath , Is . Not . Null ) ;
775
856
776
857
SkinnedMeshRenderer originalSMR , exportedSMR ;
777
- ExportSkinnedMesh ( fbxPath , out originalSMR , out exportedSMR ) ;
858
+ var exportedFbxPath = ExportSkinnedMesh ( fbxPath , out originalSMR , out exportedSMR ) ;
778
859
779
860
var originalMesh = originalSMR . sharedMesh ;
780
861
var exportedMesh = exportedSMR . sharedMesh ;
@@ -822,6 +903,8 @@ public void TestBlendShapeExport(string fbxPath)
822
903
}
823
904
}
824
905
}
906
+
907
+ FbxImportAndTestBlendshapes ( exportedFbxPath ) ;
825
908
}
826
909
827
910
[ Test ]
0 commit comments