@@ -541,7 +541,19 @@ private void CompareMeshComponentAttributes(Mesh mesh, Mesh fbxMesh)
541
541
Assert . AreEqual ( mesh . tangents , fbxMesh . tangents ) ;
542
542
}
543
543
544
- private string ExportSkinnedMesh ( string fileToExport , out SkinnedMeshRenderer originalSkinnedMesh , out SkinnedMeshRenderer exportedSkinnedMesh ) {
544
+ private delegate void SetImportSettings ( ModelImporter importer ) ;
545
+ private ( string filename , SkinnedMeshRenderer originalSkinnedMesh , SkinnedMeshRenderer exportedSkinnedMesh ) ExportSkinnedMesh (
546
+ string fileToExport ,
547
+ SetImportSettings setImportSettings = null )
548
+ {
549
+ // change import settings of original FBX
550
+ if ( setImportSettings != null )
551
+ {
552
+ var origImporter = AssetImporter . GetAtPath ( fileToExport ) as ModelImporter ;
553
+ setImportSettings ( origImporter ) ;
554
+ origImporter . SaveAndReimport ( ) ;
555
+ }
556
+
545
557
// add fbx to scene
546
558
GameObject originalFbxObj = AssetDatabase . LoadMainAssetAtPath ( fileToExport ) as GameObject ;
547
559
Assert . IsNotNull ( originalFbxObj ) ;
@@ -553,39 +565,23 @@ private string ExportSkinnedMesh(string fileToExport, out SkinnedMeshRenderer or
553
565
string filename = GetRandomFbxFilePath ( ) ;
554
566
ModelExporter . ExportObject ( filename , originalGO ) ;
555
567
556
- var importer = AssetImporter . GetAtPath ( filename ) as ModelImporter ;
557
- #if UNITY_2019_1_OR_NEWER
558
- importer . importBlendShapes = true ;
559
- importer . optimizeMeshPolygons = false ;
560
- importer . optimizeMeshVertices = false ;
561
- importer . meshCompression = ModelImporterMeshCompression . Off ;
562
- // If either blendshape normals are imported or weldVertices is turned off (or both),
563
- // the vertex count between the original and exported meshes does not match.
564
- // TODO (UT-3410): investigate why the original and exported blendshape normals split the vertices differently.
565
- importer . importBlendShapeNormals = ModelImporterNormals . None ;
566
- importer . weldVertices = true ;
567
- #else
568
- importer . importBlendShapes = true ;
569
- importer . optimizeMesh = false ;
570
- importer . meshCompression = ModelImporterMeshCompression . Off ;
571
- // If either blendshape normals are imported or weldVertices is turned off (or both),
572
- // the vertex count between the original and exported meshes does not match.
573
- // TODO (UT-3410): investigate why the original and exported blendshape normals split the vertices differently.
574
- importer . importBlendShapeNormals = ModelImporterNormals . None ;
575
- importer . weldVertices = true ;
576
- #endif // UNITY_2019_1_OR_NEWER
577
- importer . SaveAndReimport ( ) ;
568
+ if ( setImportSettings != null )
569
+ {
570
+ var importer = AssetImporter . GetAtPath ( filename ) as ModelImporter ;
571
+ setImportSettings ( importer ) ;
572
+ importer . SaveAndReimport ( ) ;
573
+ }
578
574
579
575
GameObject fbxObj = AssetDatabase . LoadMainAssetAtPath ( filename ) as GameObject ;
580
576
Assert . IsTrue ( fbxObj ) ;
581
577
582
- originalSkinnedMesh = originalGO . GetComponentInChildren < SkinnedMeshRenderer > ( ) ;
578
+ var originalSkinnedMesh = originalGO . GetComponentInChildren < SkinnedMeshRenderer > ( ) ;
583
579
Assert . IsNotNull ( originalSkinnedMesh ) ;
584
580
585
- exportedSkinnedMesh = fbxObj . GetComponentInChildren < SkinnedMeshRenderer > ( ) ;
581
+ var exportedSkinnedMesh = fbxObj . GetComponentInChildren < SkinnedMeshRenderer > ( ) ;
586
582
Assert . IsNotNull ( exportedSkinnedMesh ) ;
587
583
588
- return filename ;
584
+ return ( filename , originalSkinnedMesh , exportedSkinnedMesh ) ;
589
585
}
590
586
591
587
public class SkinnedMeshTestDataClass
@@ -624,7 +620,9 @@ public void TestSkinnedMeshes (string fbxPath) {
624
620
Assert . That ( fbxPath , Is . Not . Null ) ;
625
621
626
622
SkinnedMeshRenderer originalSkinnedMesh , exportedSkinnedMesh ;
627
- ExportSkinnedMesh ( fbxPath , out originalSkinnedMesh , out exportedSkinnedMesh ) ;
623
+ var exportResult = ExportSkinnedMesh ( fbxPath ) ;
624
+ originalSkinnedMesh = exportResult . originalSkinnedMesh ;
625
+ exportedSkinnedMesh = exportResult . exportedSkinnedMesh ;
628
626
629
627
Assert . IsTrue ( originalSkinnedMesh . name == exportedSkinnedMesh . name ||
630
628
( originalSkinnedMesh . transform . parent == null && exportedSkinnedMesh . transform . parent == null ) ) ;
@@ -852,7 +850,38 @@ public void TestBlendShapeExport(string fbxPath)
852
850
Assert . That ( fbxPath , Is . Not . Null ) ;
853
851
854
852
SkinnedMeshRenderer originalSMR , exportedSMR ;
855
- var exportedFbxPath = ExportSkinnedMesh ( fbxPath , out originalSMR , out exportedSMR ) ;
853
+ SetImportSettings setImportSettings = ( importer ) =>
854
+ {
855
+ importer . importBlendShapes = true ;
856
+ importer . meshCompression = ModelImporterMeshCompression . Off ;
857
+
858
+ #if UNITY_2019_1_OR_NEWER
859
+ importer . optimizeMeshPolygons = false ;
860
+ importer . optimizeMeshVertices = false ;
861
+ #else
862
+ importer . optimizeMesh = false ;
863
+ #endif // UNITY_2019_1_OR_NEWER
864
+
865
+ #if UNITY_2018_4_OR_NEWER
866
+ importer . importNormals = ModelImporterNormals . Import ;
867
+ importer . importTangents = ModelImporterTangents . CalculateMikk ;
868
+ #else
869
+ // In 2018.3, the vertices still do not match unless no normals
870
+ // are imported.
871
+ importer . importNormals = ModelImporterNormals . None ;
872
+ #endif
873
+ // If either blendshape normals are imported or weldVertices is turned off (or both),
874
+ // the vertex count between the original and exported meshes does not match.
875
+ // TODO (UT-3410): investigate why the original and exported blendshape normals split the vertices differently.
876
+ importer . importBlendShapeNormals = ModelImporterNormals . None ;
877
+ importer . weldVertices = true ;
878
+ } ;
879
+
880
+ var exportResult = ExportSkinnedMesh ( fbxPath , setImportSettings ) ;
881
+ var exportedFbxPath = exportResult . filename ;
882
+ originalSMR = exportResult . originalSkinnedMesh ;
883
+ exportedSMR = exportResult . exportedSkinnedMesh ;
884
+
856
885
857
886
var originalMesh = originalSMR . sharedMesh ;
858
887
var exportedMesh = exportedSMR . sharedMesh ;
0 commit comments