Skip to content

Commit 611d145

Browse files
authored
Merge pull request #522 from Unity-Technologies/UT-3390-fix-failing-unit-tests-2018.3
UT-3390 fix failing unit tests on 2018.3
2 parents 5afbcc4 + 808ff27 commit 611d145

File tree

1 file changed

+57
-28
lines changed

1 file changed

+57
-28
lines changed

com.unity.formats.fbx/Tests/FbxTests/ModelExporterTest.cs

Lines changed: 57 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -541,7 +541,19 @@ private void CompareMeshComponentAttributes(Mesh mesh, Mesh fbxMesh)
541541
Assert.AreEqual (mesh.tangents, fbxMesh.tangents);
542542
}
543543

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+
545557
// add fbx to scene
546558
GameObject originalFbxObj = AssetDatabase.LoadMainAssetAtPath(fileToExport) as GameObject;
547559
Assert.IsNotNull (originalFbxObj);
@@ -553,39 +565,23 @@ private string ExportSkinnedMesh(string fileToExport, out SkinnedMeshRenderer or
553565
string filename = GetRandomFbxFilePath();
554566
ModelExporter.ExportObject (filename, originalGO);
555567

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+
}
578574

579575
GameObject fbxObj = AssetDatabase.LoadMainAssetAtPath(filename) as GameObject;
580576
Assert.IsTrue (fbxObj);
581577

582-
originalSkinnedMesh = originalGO.GetComponentInChildren<SkinnedMeshRenderer> ();
578+
var originalSkinnedMesh = originalGO.GetComponentInChildren<SkinnedMeshRenderer> ();
583579
Assert.IsNotNull (originalSkinnedMesh);
584580

585-
exportedSkinnedMesh = fbxObj.GetComponentInChildren<SkinnedMeshRenderer> ();
581+
var exportedSkinnedMesh = fbxObj.GetComponentInChildren<SkinnedMeshRenderer> ();
586582
Assert.IsNotNull (exportedSkinnedMesh);
587583

588-
return filename;
584+
return (filename, originalSkinnedMesh, exportedSkinnedMesh);
589585
}
590586

591587
public class SkinnedMeshTestDataClass
@@ -624,7 +620,9 @@ public void TestSkinnedMeshes (string fbxPath) {
624620
Assert.That (fbxPath, Is.Not.Null);
625621

626622
SkinnedMeshRenderer originalSkinnedMesh, exportedSkinnedMesh;
627-
ExportSkinnedMesh (fbxPath, out originalSkinnedMesh, out exportedSkinnedMesh);
623+
var exportResult = ExportSkinnedMesh (fbxPath);
624+
originalSkinnedMesh = exportResult.originalSkinnedMesh;
625+
exportedSkinnedMesh = exportResult.exportedSkinnedMesh;
628626

629627
Assert.IsTrue (originalSkinnedMesh.name == exportedSkinnedMesh.name ||
630628
(originalSkinnedMesh.transform.parent == null && exportedSkinnedMesh.transform.parent == null));
@@ -852,7 +850,38 @@ public void TestBlendShapeExport(string fbxPath)
852850
Assert.That (fbxPath, Is.Not.Null);
853851

854852
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+
856885

857886
var originalMesh = originalSMR.sharedMesh;
858887
var exportedMesh = exportedSMR.sharedMesh;

0 commit comments

Comments
 (0)