Skip to content

Commit 6c8670a

Browse files
authored
Merge pull request #258 from Unity-Technologies/UNI-33533-add-normals-unit-test
Uni 33533 add normals unit test
2 parents 940b6f7 + 80a560c commit 6c8670a

File tree

2 files changed

+90
-8
lines changed

2 files changed

+90
-8
lines changed

Assets/FbxExporters/Editor/FbxExporter.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1516,7 +1516,9 @@ public bool HasValidNormals(){
15161516
}
15171517

15181518
public bool HasValidBinormals(){
1519-
return HasValidNormals () && HasValidTangents () && Binormals != null;
1519+
return HasValidNormals () &&
1520+
HasValidTangents () &&
1521+
Binormals != null;
15201522
}
15211523

15221524
public bool HasValidTangents(){

Assets/FbxExporters/Editor/UnitTests/ModelExporterTest.cs

Lines changed: 87 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -362,13 +362,7 @@ public void TestExportCamera(){
362362
/// <param name="filename">Filename.</param>
363363
/// <param name="cameraObj">Camera object.</param>
364364
private Camera ExportCamera(string filename, GameObject cameraObj){
365-
ModelExporter.ExportObject (filename, cameraObj);
366-
367-
GameObject fbxObj = AssetDatabase.LoadMainAssetAtPath(filename) as GameObject;
368-
var fbxCamera = fbxObj.GetComponent<Camera> ();
369-
370-
Assert.IsNotNull (fbxCamera);
371-
return fbxCamera;
365+
return ExportComponent<Camera> (filename, cameraObj);
372366
}
373367

374368
private void CompareCameraValues(Camera camera, Camera fbxCamera, float delta=0.001f){
@@ -377,5 +371,91 @@ private void CompareCameraValues(Camera camera, Camera fbxCamera, float delta=0.
377371
Assert.AreEqual (camera.nearClipPlane, fbxCamera.nearClipPlane, delta);
378372
Assert.AreEqual (camera.farClipPlane, fbxCamera.farClipPlane, delta);
379373
}
374+
375+
/// <summary>
376+
/// Exports the GameObject and returns component of type T.
377+
/// </summary>
378+
/// <returns>The component.</returns>
379+
/// <param name="filename">Filename.</param>
380+
/// <param name="obj">Object.</param>
381+
/// <typeparam name="T">The component type.</typeparam>
382+
private T ExportComponent<T>(string filename, GameObject obj) where T : Component {
383+
ModelExporter.ExportObject (filename, obj);
384+
385+
GameObject fbxObj = AssetDatabase.LoadMainAssetAtPath(filename) as GameObject;
386+
var fbxComponent = fbxObj.GetComponent<T> ();
387+
388+
Assert.IsNotNull (fbxComponent);
389+
return fbxComponent;
390+
}
391+
392+
[Test]
393+
public void TestComponentAttributeExport()
394+
{
395+
// test exporting of normals, tangents, uvs, and vertex colors
396+
// Note: won't test binormals as they are not imported into Unity
397+
398+
var quad = GameObject.CreatePrimitive (PrimitiveType.Quad);
399+
var quadMeshFilter = quad.GetComponent<MeshFilter> ();
400+
var quadMesh = quadMeshFilter.sharedMesh;
401+
402+
// create a simple mesh (just a quad)
403+
// this is to make sure we don't accidentally modify the
404+
// Unity internal Quad primitive.
405+
var mesh = new Mesh();
406+
mesh.name = "Test";
407+
408+
mesh.vertices = quadMesh.vertices;
409+
mesh.triangles = quadMesh.triangles;
410+
mesh.tangents = quadMesh.tangents;
411+
mesh.normals = quadMesh.normals;
412+
mesh.colors = quadMesh.colors;
413+
414+
Assert.IsNotNull (mesh.tangents);
415+
Assert.IsNotNull (mesh.vertices);
416+
Assert.IsNotNull (mesh.triangles);
417+
Assert.IsNotNull (mesh.normals);
418+
Assert.IsNotNull (mesh.colors);
419+
420+
var gameObject = new GameObject ();
421+
var meshFilter = gameObject.AddComponent<MeshFilter> ();
422+
423+
meshFilter.sharedMesh = mesh;
424+
425+
// don't need quad anymore
426+
Object.DestroyImmediate(quad);
427+
428+
// try exporting default values
429+
string filename = GetRandomFbxFilePath();
430+
var fbxMeshFilter = ExportComponent<MeshFilter> (filename, gameObject);
431+
var fbxMesh = fbxMeshFilter.sharedMesh;
432+
CompareMeshComponentAttributes (mesh, fbxMesh);
433+
434+
// try exporting mesh without vertex colors
435+
mesh.colors = new Color[]{ };
436+
437+
filename = GetRandomFbxFilePath();
438+
fbxMeshFilter = ExportComponent<MeshFilter> (filename, gameObject);
439+
fbxMesh = fbxMeshFilter.sharedMesh;
440+
CompareMeshComponentAttributes (mesh, fbxMesh);
441+
442+
Object.DestroyImmediate (mesh);
443+
}
444+
445+
private void CompareMeshComponentAttributes(Mesh mesh, Mesh fbxMesh)
446+
{
447+
Assert.IsNotNull (fbxMesh);
448+
Assert.IsNotNull (fbxMesh.vertices);
449+
Assert.IsNotNull (fbxMesh.triangles);
450+
Assert.IsNotNull (fbxMesh.normals);
451+
Assert.IsNotNull (fbxMesh.colors);
452+
Assert.IsNotNull (fbxMesh.tangents);
453+
454+
Assert.AreEqual (mesh.vertices, fbxMesh.vertices);
455+
Assert.AreEqual (mesh.triangles, fbxMesh.triangles);
456+
Assert.AreEqual (mesh.normals, fbxMesh.normals);
457+
Assert.AreEqual (mesh.colors, fbxMesh.colors);
458+
Assert.AreEqual (mesh.tangents, fbxMesh.tangents);
459+
}
380460
}
381461
}

0 commit comments

Comments
 (0)