Skip to content

Commit ed773fb

Browse files
committed
add test for blend shape export
1 parent 91eef7a commit ed773fb

File tree

5 files changed

+280
-0
lines changed

5 files changed

+280
-0
lines changed

Assets/FbxExporters/Editor/UnitTests/ModelExporterTest.cs

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -594,5 +594,85 @@ public void TestSkinnedMeshExport(){
594594
var expWeights = exportedMesh.boneWeights;
595595
Assert.IsNotNull (expWeights);
596596
}
597+
598+
599+
public static void AreNearEqual(Vector3 a, Vector3 b)
600+
{
601+
Assert.That(a.x, Is.EqualTo(b.x).Within(0.0001f));
602+
Assert.That(a.y, Is.EqualTo(b.y).Within(0.0001f));
603+
Assert.That(a.z, Is.EqualTo(b.z).Within(0.0001f));
604+
}
605+
public static void AreNearEqual(Vector3[] a, Vector3[] b)
606+
{
607+
Assert.AreEqual(a.Length, b.Length);
608+
for (int i = 0; i < a.Length; ++i)
609+
AreNearEqual(a[i], b[i]);
610+
}
611+
612+
[Test]
613+
public void TestBlendShapeExport()
614+
{
615+
// TODO: find more practical test data
616+
var fbxPaths = new string[]{
617+
"FbxExporters/Editor/UnitTests/Models/blendshape.fbx",
618+
"FbxExporters/Editor/UnitTests/Models/blendshape_with_skinning.fbx"
619+
};
620+
foreach(var fbxPath in fbxPaths)
621+
{
622+
// add fbx to scene
623+
GameObject originalFbxObj = AssetDatabase.LoadMainAssetAtPath("Assets/" + fbxPath) as GameObject;
624+
Assert.IsNotNull(originalFbxObj);
625+
GameObject originalGO = GameObject.Instantiate(originalFbxObj);
626+
Assert.IsTrue(originalGO);
627+
628+
// export fbx
629+
// get GameObject
630+
string filename = GetRandomFbxFilePath();
631+
ModelExporter.ExportObject(filename, originalGO);
632+
GameObject fbxObj = AssetDatabase.LoadMainAssetAtPath(filename) as GameObject;
633+
Assert.IsTrue(fbxObj);
634+
635+
var originalSMR = originalGO.GetComponentInChildren<SkinnedMeshRenderer>();
636+
var exportedSMR = fbxObj.GetComponentInChildren<SkinnedMeshRenderer>();
637+
Assert.IsNotNull(originalSMR);
638+
Assert.IsNotNull(exportedSMR);
639+
640+
var originalMesh = originalSMR.sharedMesh;
641+
var exportedMesh = exportedSMR.sharedMesh;
642+
Assert.IsNotNull(originalMesh);
643+
Assert.IsNotNull(exportedMesh);
644+
645+
// compare blend shape data
646+
Assert.AreEqual(originalMesh.blendShapeCount, exportedMesh.blendShapeCount);
647+
if (originalMesh.blendShapeCount > 0)
648+
{
649+
var deltaVertices = new Vector3[originalMesh.vertexCount];
650+
var deltaNormals = new Vector3[originalMesh.vertexCount];
651+
var deltaTangents = new Vector3[originalMesh.vertexCount];
652+
var fbxDeltaVertices = new Vector3[originalMesh.vertexCount];
653+
var fbxDeltaNormals = new Vector3[originalMesh.vertexCount];
654+
var fbxDeltaTangents = new Vector3[originalMesh.vertexCount];
655+
656+
for (int bi = 0; bi < originalMesh.blendShapeCount; ++bi)
657+
{
658+
Assert.AreEqual(originalMesh.GetBlendShapeName(bi), exportedMesh.GetBlendShapeName(bi));
659+
Assert.AreEqual(originalMesh.GetBlendShapeFrameCount(bi), exportedMesh.GetBlendShapeFrameCount(bi));
660+
661+
int frameCount = originalMesh.GetBlendShapeFrameCount(bi);
662+
for (int fi = 0; fi < frameCount; ++fi)
663+
{
664+
Assert.AreEqual(originalMesh.GetBlendShapeFrameWeight(bi, fi), exportedMesh.GetBlendShapeFrameWeight(bi, fi));
665+
666+
originalMesh.GetBlendShapeFrameVertices(bi, fi, deltaVertices, deltaNormals, deltaTangents);
667+
exportedMesh.GetBlendShapeFrameVertices(bi, fi, fbxDeltaVertices, fbxDeltaNormals, fbxDeltaTangents);
668+
AreNearEqual(deltaVertices, fbxDeltaVertices);
669+
AreNearEqual(deltaNormals, fbxDeltaNormals);
670+
AreNearEqual(deltaTangents, fbxDeltaTangents);
671+
672+
}
673+
}
674+
}
675+
}
676+
}
597677
}
598678
}
Binary file not shown.

Assets/FbxExporters/Editor/UnitTests/Models/blendshape.fbx.meta

Lines changed: 93 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Binary file not shown.

Assets/FbxExporters/Editor/UnitTests/Models/blendshape_with_skinning.fbx.meta

Lines changed: 107 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)