168 lines
8.2 KiB
C#
168 lines
8.2 KiB
C#
// ***********************************************************************
|
|
// Copyright (c) 2017 Unity Technologies. All rights reserved.
|
|
//
|
|
// Licensed under the ##LICENSENAME##.
|
|
// See LICENSE.md file in the project root for full license information.
|
|
// ***********************************************************************
|
|
using NUnit.Framework;
|
|
using System.Collections.Generic;
|
|
using Autodesk.Fbx;
|
|
|
|
namespace Autodesk.Fbx.UseCaseTests
|
|
{
|
|
internal class CameraExportTest : AnimationClipsExportTest
|
|
{
|
|
[SetUp]
|
|
public override void Init ()
|
|
{
|
|
fileNamePrefix = "_safe_to_delete__camera_export_test";
|
|
base.Init ();
|
|
}
|
|
|
|
protected override FbxScene CreateScene (FbxManager manager)
|
|
{
|
|
FbxScene scene = base.CreateScene(manager);
|
|
FbxNode cameraNode = scene.GetRootNode ().GetChild (0);
|
|
FbxCamera camera = FbxCamera.Create (scene, "camera");
|
|
|
|
camera.ProjectionType.Set (FbxCamera.EProjectionType.ePerspective);
|
|
camera.SetAspect (FbxCamera.EAspectRatioMode.eFixedRatio, 300, 400);
|
|
camera.FilmAspectRatio.Set (240);
|
|
camera.SetApertureWidth (4);
|
|
camera.SetApertureHeight (2);
|
|
camera.SetApertureMode (FbxCamera.EApertureMode.eFocalLength);
|
|
camera.FocalLength.Set (32);
|
|
camera.SetNearPlane (1);
|
|
camera.SetFarPlane (100);
|
|
|
|
// create custom property (background color)
|
|
var bgColorProperty = FbxProperty.Create (cameraNode, Globals.FbxColor4DT, "backgroundColor");
|
|
Assert.IsTrue (bgColorProperty.IsValid ());
|
|
|
|
bgColorProperty.Set (new FbxColor(0.5, 0.4, 0.1, 1));
|
|
|
|
// Must be marked user-defined or it won't be shown in most DCCs
|
|
bgColorProperty.ModifyFlag (FbxPropertyFlags.EFlags.eUserDefined, true);
|
|
bgColorProperty.ModifyFlag (FbxPropertyFlags.EFlags.eAnimatable, true);
|
|
|
|
Assert.IsTrue (bgColorProperty.GetFlag (FbxPropertyFlags.EFlags.eUserDefined));
|
|
Assert.IsTrue (bgColorProperty.GetFlag (FbxPropertyFlags.EFlags.eAnimatable));
|
|
|
|
// create custom property (clear flags)
|
|
var clearFlagsProperty = FbxProperty.Create (cameraNode, Globals.FbxIntDT, "clearFlags");
|
|
Assert.IsTrue (clearFlagsProperty.IsValid ());
|
|
|
|
clearFlagsProperty.Set (4);
|
|
|
|
// Must be marked user-defined or it won't be shown in most DCCs
|
|
clearFlagsProperty.ModifyFlag (FbxPropertyFlags.EFlags.eUserDefined, true);
|
|
clearFlagsProperty.ModifyFlag (FbxPropertyFlags.EFlags.eAnimatable, true);
|
|
|
|
Assert.IsTrue (clearFlagsProperty.GetFlag (FbxPropertyFlags.EFlags.eUserDefined));
|
|
Assert.IsTrue (clearFlagsProperty.GetFlag (FbxPropertyFlags.EFlags.eAnimatable));
|
|
|
|
// Add camera properties to animation clip
|
|
FbxAnimStack animStack = scene.GetCurrentAnimationStack ();
|
|
FbxAnimLayer animLayer = animStack.GetAnimLayerMember ();
|
|
|
|
// TODO: (UNI-19438) Figure out why trying to do GetCurve for NearPlane always returns null
|
|
CreateAnimCurves (cameraNode, animLayer, new List<PropertyComponentPair> () {
|
|
new PropertyComponentPair("backgroundColor", new string[] {
|
|
Globals.FBXSDK_CURVENODE_COLOR_RED,
|
|
Globals.FBXSDK_CURVENODE_COLOR_GREEN,
|
|
Globals.FBXSDK_CURVENODE_COLOR_BLUE, "W"
|
|
}),
|
|
new PropertyComponentPair("FocalLength", new string[]{null}),
|
|
new PropertyComponentPair("clearFlags", new string[]{null})
|
|
}, (index) => { return index; }, (index) => { return index/5.0f; }, camera);
|
|
|
|
cameraNode.SetNodeAttribute (camera);
|
|
|
|
// set the default camera
|
|
scene.GetGlobalSettings ().SetDefaultCamera (cameraNode.GetName());
|
|
|
|
return scene;
|
|
}
|
|
|
|
protected override void CheckScene (FbxScene scene)
|
|
{
|
|
base.CheckScene (scene);
|
|
|
|
FbxScene origScene = CreateScene (FbxManager);
|
|
|
|
FbxNode origCameraNode = origScene.GetRootNode ().GetChild (0);
|
|
FbxNode importCameraNode = scene.GetRootNode ().GetChild (0);
|
|
|
|
Assert.IsNotNull (origCameraNode);
|
|
Assert.IsNotNull (importCameraNode);
|
|
|
|
Assert.AreEqual (origScene.GetGlobalSettings ().GetDefaultCamera (), scene.GetGlobalSettings ().GetDefaultCamera ());
|
|
|
|
FbxCamera origCamera = origCameraNode.GetCamera ();
|
|
FbxCamera importCamera = importCameraNode.GetCamera ();
|
|
|
|
Assert.IsNotNull (origCamera);
|
|
Assert.IsNotNull (importCamera);
|
|
|
|
CheckCameraSettings (origCamera, importCamera, origCameraNode, importCameraNode);
|
|
|
|
// check anim
|
|
FbxAnimStack origAnimStack = origScene.GetCurrentAnimationStack();
|
|
FbxAnimLayer origAnimLayer = origAnimStack.GetAnimLayerMember ();
|
|
Assert.IsNotNull (origAnimStack);
|
|
Assert.IsNotNull (origAnimLayer);
|
|
|
|
FbxAnimStack importAnimStack = scene.GetCurrentAnimationStack();
|
|
FbxAnimLayer importAnimLayer = importAnimStack.GetAnimLayerMember ();
|
|
Assert.IsNotNull (importAnimStack);
|
|
Assert.IsNotNull (importAnimLayer);
|
|
|
|
CheckAnimCurve (origCameraNode, importCameraNode, origAnimLayer, importAnimLayer, new List<PropertyComponentPair>(){
|
|
new PropertyComponentPair("backgroundColor", new string[] {
|
|
Globals.FBXSDK_CURVENODE_COLOR_RED,
|
|
Globals.FBXSDK_CURVENODE_COLOR_GREEN,
|
|
Globals.FBXSDK_CURVENODE_COLOR_BLUE, "W"
|
|
}),
|
|
new PropertyComponentPair("FocalLength", new string[]{null}),
|
|
new PropertyComponentPair("clearFlags", new string[]{null})
|
|
}, origCamera, importCamera);
|
|
}
|
|
|
|
protected void CheckCameraSettings(FbxCamera origCamera, FbxCamera importCamera, FbxNode origCameraNode, FbxNode importCameraNode)
|
|
{
|
|
Assert.AreEqual (origCamera.ProjectionType.Get (), importCamera.ProjectionType.Get ());
|
|
Assert.AreEqual (origCamera.AspectWidth.Get (), importCamera.AspectWidth.Get ());
|
|
Assert.AreEqual (origCamera.AspectHeight.Get (), importCamera.AspectHeight.Get ());
|
|
Assert.AreEqual (origCamera.GetAspectRatioMode (), importCamera.GetAspectRatioMode ());
|
|
Assert.AreEqual (origCamera.FilmAspectRatio.Get (), importCamera.FilmAspectRatio.Get ());
|
|
Assert.AreEqual (origCamera.GetApertureWidth (), importCamera.GetApertureWidth ());
|
|
Assert.AreEqual (origCamera.GetApertureHeight (), importCamera.GetApertureHeight ());
|
|
Assert.AreEqual (origCamera.GetApertureMode (), origCamera.GetApertureMode ());
|
|
Assert.AreEqual (origCamera.FocalLength.Get (), importCamera.FocalLength.Get ());
|
|
Assert.AreEqual (origCamera.GetNearPlane (), importCamera.GetNearPlane ());
|
|
Assert.AreEqual (origCamera.GetFarPlane (), importCamera.GetFarPlane ());
|
|
|
|
foreach (var customProp in new string[]{ "backgroundColor", "clearFlags" }) {
|
|
FbxProperty property = origCameraNode.FindProperty (customProp);
|
|
Assert.IsNotNull (property);
|
|
Assert.IsTrue (property.IsValid ());
|
|
|
|
FbxProperty importBgColorProp = importCameraNode.FindProperty (customProp);
|
|
Assert.IsNotNull (importBgColorProp);
|
|
Assert.IsTrue (importBgColorProp.IsValid ());
|
|
|
|
if (property.GetPropertyDataType ().Equals(Globals.FbxColor4DT)) {
|
|
Assert.AreEqual(property.GetFbxColor(), property.GetFbxColor());
|
|
}
|
|
else if (property.GetPropertyDataType().Equals(Globals.FbxIntDT)){
|
|
Assert.AreEqual(property.GetInt(), property.GetInt());
|
|
}
|
|
|
|
Assert.AreEqual (property.GetFlag (FbxPropertyFlags.EFlags.eUserDefined),
|
|
importBgColorProp.GetFlag (FbxPropertyFlags.EFlags.eUserDefined));
|
|
Assert.AreEqual (property.GetFlag (FbxPropertyFlags.EFlags.eAnimatable),
|
|
importBgColorProp.GetFlag (FbxPropertyFlags.EFlags.eAnimatable));
|
|
}
|
|
}
|
|
}
|
|
} |