@@ -541,7 +541,21 @@ 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 ExportSkinnedMesh (
546
+ string fileToExport ,
547
+ out SkinnedMeshRenderer originalSkinnedMesh ,
548
+ out SkinnedMeshRenderer exportedSkinnedMesh ,
549
+ SetImportSettings setImportSettings = null )
550
+ {
551
+ // change import settings of original FBX
552
+ if ( setImportSettings != null )
553
+ {
554
+ var origImporter = AssetImporter . GetAtPath ( fileToExport ) as ModelImporter ;
555
+ setImportSettings ( origImporter ) ;
556
+ origImporter . SaveAndReimport ( ) ;
557
+ }
558
+
545
559
// add fbx to scene
546
560
GameObject originalFbxObj = AssetDatabase . LoadMainAssetAtPath ( fileToExport ) as GameObject ;
547
561
Assert . IsNotNull ( originalFbxObj ) ;
@@ -553,28 +567,12 @@ private string ExportSkinnedMesh(string fileToExport, out SkinnedMeshRenderer or
553
567
string filename = GetRandomFbxFilePath ( ) ;
554
568
ModelExporter . ExportObject ( filename , originalGO ) ;
555
569
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 ( ) ;
570
+ if ( setImportSettings != null )
571
+ {
572
+ var importer = AssetImporter . GetAtPath ( filename ) as ModelImporter ;
573
+ setImportSettings ( importer ) ;
574
+ importer . SaveAndReimport ( ) ;
575
+ }
578
576
579
577
GameObject fbxObj = AssetDatabase . LoadMainAssetAtPath ( filename ) as GameObject ;
580
578
Assert . IsTrue ( fbxObj ) ;
@@ -852,7 +850,40 @@ 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
+ #if UNITY_2019_1_OR_NEWER
856
+ importer . importBlendShapes = true ;
857
+ importer . optimizeMeshPolygons = false ;
858
+ importer . optimizeMeshVertices = false ;
859
+ importer . meshCompression = ModelImporterMeshCompression . Off ;
860
+
861
+ importer . importNormals = ModelImporterNormals . Import ;
862
+ importer . importTangents = ModelImporterTangents . CalculateMikk ;
863
+
864
+ // If either blendshape normals are imported or weldVertices is turned off (or both),
865
+ // the vertex count between the original and exported meshes does not match.
866
+ // TODO (UT-3410): investigate why the original and exported blendshape normals split the vertices differently.
867
+ importer . importBlendShapeNormals = ModelImporterNormals . None ;
868
+ importer . weldVertices = true ;
869
+ #else
870
+ importer . importBlendShapes = true ;
871
+ importer . optimizeMesh = false ;
872
+ importer . meshCompression = ModelImporterMeshCompression . Off ;
873
+
874
+ // In 2018.3, the vertices still do not match unless no normals
875
+ // are imported.
876
+ importer . importNormals = ModelImporterNormals . None ;
877
+
878
+ // If either blendshape normals are imported or weldVertices is turned off (or both),
879
+ // the vertex count between the original and exported meshes does not match.
880
+ // TODO (UT-3410): investigate why the original and exported blendshape normals split the vertices differently.
881
+ importer . importBlendShapeNormals = ModelImporterNormals . None ;
882
+ importer . weldVertices = true ;
883
+ #endif // UNITY_2019_1_OR_NEWER
884
+ } ;
885
+
886
+ var exportedFbxPath = ExportSkinnedMesh ( fbxPath , out originalSMR , out exportedSMR , setImportSettings ) ;
856
887
857
888
var originalMesh = originalSMR . sharedMesh ;
858
889
var exportedMesh = exportedSMR . sharedMesh ;
0 commit comments