Skip to content

Commit 4ad3d0e

Browse files
committed
pass optional import settings to ExportSkinnedMesh
- change import settings for both original and exported mesh to make sure they match
1 parent 5afbcc4 commit 4ad3d0e

File tree

1 file changed

+55
-24
lines changed

1 file changed

+55
-24
lines changed

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

Lines changed: 55 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -541,7 +541,21 @@ 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 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+
545559
// add fbx to scene
546560
GameObject originalFbxObj = AssetDatabase.LoadMainAssetAtPath(fileToExport) as GameObject;
547561
Assert.IsNotNull (originalFbxObj);
@@ -553,28 +567,12 @@ private string ExportSkinnedMesh(string fileToExport, out SkinnedMeshRenderer or
553567
string filename = GetRandomFbxFilePath();
554568
ModelExporter.ExportObject (filename, originalGO);
555569

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

579577
GameObject fbxObj = AssetDatabase.LoadMainAssetAtPath(filename) as GameObject;
580578
Assert.IsTrue (fbxObj);
@@ -852,7 +850,40 @@ 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+
#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);
856887

857888
var originalMesh = originalSMR.sharedMesh;
858889
var exportedMesh = exportedSMR.sharedMesh;

0 commit comments

Comments
 (0)