FBX SDK 2014

2014.2

New features and improvements

  • Added new FBX SDK library targets: Windows Store, Mac Clang, and iOS.
  • Following improvements are made in animation evaluation functions:
    • The FbxAnimEvaluator instance is now stored in the manager rather than in a scene.
    • Added the evaluation state to animation stacks for simultaneous evaluation of takes.
    • Removed the necessity to provide an index to evaluation functions of the evaluator. All fast versions of these functions are no longer necessary, so they are removed.
    • Added a new FbxProperty::EvaluateValue() function to evaluate the value of a property.
    • Improved the performance of FbxProperty::GetCurveNode() by caching results in a map inside the evaluation state.
    • Reduced the size of a node and property evaluation states.
  • Reduced the amount of memory allocations that are caused by FbxCriteria and FbxQuery to improve performance.
  • Added a new FbxTypeComponentCount() global function to retrieve a type's component count.
  • Added these new functions for easily deleting the map content: FbxMapDelete(), FbxMapFree(), and FbxMapDestroy().
  • Added a new function in FbxTime to retrieve the time string. You can specify the start and end element it returns.
  • Added the InvertX property and InvertY property to the camera manipulator for inverting controls.
  • FbxGeometryBase::ComputeBBox() no longer computes or changes the bounding box value if the content is unloaded.
  • FbxString uses a char pointer allocation again instead of an opaque std::string implementation for easier debugging and better performance/memory footprint. It is no longer necessary to modify the autoexp.dat file of Visual Studio to see the string content with debuggers.
  • Made improvements to make it possible to clone a character and its dependencies. See fbxclonemanager.h for more information.
  • The FbxGeometryConverter::SplitMeshesPerMaterial() function now handles skinning on splitted meshes correctly.
  • Added these functions for bounding box calculation of nodes: FbxScene::ComputeBoundingBoxMinMaxCenter() and FbxNode::EvaluateGlobalBoundingBoxMinMaxCenter().
  • Added a new FbxGeometryConverter::ResetMeshesCenterToWorld() function to reset the center of scene meshes.
  • Added a new FbxMesh::GenerateNormals() function to generate normals. It works in the same way as generating tangents. This function is for replacing the FbxMesh::ComputeVertexNormals() function that only supports smooth normals.
  • Implemented FbxScene::Clone() to properly duplicate scenes.
  • Added these new functions: FbxTime::SetFramePrecise() and FbxTime::GetFrameCountPrecise(), which use double values.
  • Added FbxMod to fbxmath.h.
  • Added the FileStream sample code to demonstrate the use of the FbxStream class.

Changes and deprecations

  • FBXSDK_sprintf, FBXSDK_snprintf, FBXSDK_vsprintf, and FBXSDK_vsnprintf now take a single size parameter instead of being variant on different platforms.
  • Removed thumbnails from the animation stack. Now, only one thumbnail is saved per FBX file (found in the FbxSceneInfo class).
  • Removed GetCurveNode() in FbxProperty that used an animation stack name.
  • Changed ConvertPivot functions in FbxNode to use an animation stack pointer instead of the animation stack.
  • Renamed the FbxPropertyFlagsExt class to FbxPropertyFlags.
  • Moved the FbxPropertyValue class to a more global location because it is also used by the evaluation state.

Fixes

  • Fixed the issue of the horizontal orbit getting inversed when the camera is flipped vertically while using the camera manipulator.
  • Fixed an issue with matrix conversion to euler angles (degenerate case (gimbal lock) detection was too sensitive).
  • ContentUnload now unloads the layers properly on a geometry.
  • If the mesh content is unloaded when performing a frame-all using the camera manipulator, it uses the pre-computed bounding box (if it exists), otherwise it is skipped.
  • When performing a frame-all using the camera manipulator, the camera now centers correctly on the global bounding box center instead of its centroid.
  • Fixed many compilation warnings with the clang compiler on Mac.
  • Fixed an issue with the camera orthogonal projection and matrix generation.
  • When manipulating a camera, it no longer goes through the interest position.
  • Fixed a crash related to writing an encrypted FBX file.
  • Fixed a crash related to opening OBJ files.
  • Fixed a typo in the return value of FbxExporter::GetCurrentWritableVersions().
  • The FbxCameraManipulator frame-all now works on orthographic cameras.
  • Fixed the edge detection to be more accurate. Previously, only one edge was stored from a single point. Now, all edges from one point are saved and duplicated edges are detected in all situations.
  • Fixed various warnings in macros that are generated when compiling with C++x11.
  • Fixed an issue with reading textures for OBJ files.
  • Fixed an issue with reading material transparent properties in MTL files.
  • Fixed a crash related to reading 3DS files.
  • Fixed memory leaks that occur in some specific situations.
  • Fixed reversed normals that occur when reading DXF files.
  • Fixed a crash related to writing collada files containing shapes.
  • Fixed the function that generates tangents/binormals to correctly set the W component.
  • Cameras with a target up node or look at node now move around properly using the camera manipulator.

Known issues

  • The FbxAMatrix only works with XYZ rotation order.
  • Skew and Stretch matrixes are not supported.
  • The FBX SDK is not thread safe.
  • Deformers do not support instancing. The point cache deforming is not reusable because of this.
  • While the assigned material can change on the node, material layers on the mesh cannot be instanced.
  • When exporting various file formats, sometimes the scene is modified permanently resulting in data loss.

2014.1

New features and improvements

  • Introduced the FBXSDK_ENV_WINRT preprocessor define (previously known as FBXSDK_ENV_WINMETRO). This disables unsupported functions when targeting Microsoft Windows Store applications. This define will automatically be set if you set Windows Store App Support to Yes in your Visual Studio project settings.
  • A number of changes were made to the architecture defines in fbxarch.h in order to add support for the ARM processor:

    • Added FBXSDK_ARCH_IX86, only defined on Intel x86 targets.
    • Added FBXSDK_ARCH_AMD64, only defined on AMD64 targets.
    • Added FBXSDK_ARCH_ARM, only defined on ARM targets.
    • Renamed FBXSDK_ARCH_32 to FBXSDK_CPU_32, only defined for 32-bit targets.
    • Renamed FBXSDK_ARCH_64 to FBXSDK_CPU_64, only defined for 64-bit targets.

  • Also, please see deprecated details below.
  • Added version information to the FBX SDK .dll on Windows platforms.
  • Updated the ViewScene sample to show how to support in-between blendshape (progressive morph).
  • Added support for the new Maya 2014 Cache files (*.mcx).
  • Improved the tangent/binormal calculation functions to properly handle mirrored faces by flipping the binormal when the face is inverted. It also sets the fourth component of the tangent to -1 if it is flipped, 1 otherwise.
  • FbxReference is now defined as FbxObject* rather than void*. This change allows properties of the FbxReference type to correctly respond to FbxCast and other FBX SDK API operations, as well as restraining the assignment to FbxObject* types.
  • Improved the FbxCameraManipulator by adding a new action type: eFreePan. This action combines dollying and panning into a single action. For example, this may be useful for manipulating the camera using a touch screen.
  • Added a new object flag: FbxObject::eInitialized. This flag is automatically set on all objects after they are done with the Construct stage. This is also used to prevent PropertyNotify from being called during the ConstructProperties stage.
  • The FbxCameraManipulator does not use a hidden class internally anymore, and uses the PropertyNotify event to re-initialize when changing its affected camera.
  • Added a new IOSetting flag (IMP_FBX_EXTRACT_EMBEDDED_DATA) to completely disable embedded files extraction. This flag is set to true by default.
  • Added a new FbxObject::ResetProperties() function to reset all properties to their default value.
  • The pForceSet parameter for FbxProperty::StaticInit() is no longer optional. When calling this function in ConstructProperties, the value of pForceSet must be correctly passed to StaticInit() for all properties, in order to ensure that each property is initialized only once.
  • Added new FbxGeometryConverter::Triangulate() function, which replaces the deprecated TriangulateMesh(), TriangulateMeshAdvanced() and TriangulateInPlace() functions. The new function can either take a node attribute or a scene as a parameter, and can replace original nodes with new ones to make sure the scene stays clean.
  • Added new FbxGeometryConverter::SplitMeshesPerMaterial() function. This function can take a scene as a parameter, and can replace original meshes to make sure the scene stays clean.
  • Added a new constructor to the FbxArray class that accepts an integer parameter to specify the amount of memory that should be reserved for that specific size.
  • Added a new parameter to FbxMesh::GetPolygonVertexUV() to allow it to return an array of unmapped polygons. This is extremely useful to determine which vertex has no associated UV.
  • Changes to the library file names and folder organization. For all platforms, the version number has been removed from the library names on disk, and debug and release versions of the libraries now have the same file names, but are placed in separate subfolders. Windows library names have also been prefixed by lib to match the library names on other platforms.

Changes and deprecations

  • FBXSDK_ARCH_32 and FBXSDK_ARCH_64 have been renamed to FBXSDK_CPU_32 and FBXSDK_CPU_64 respectively, to dissociate them from the architecture.
  • You can no longer set void* types to FbxReference properties, in order to improve robustness.
  • FbxObject::PropertyNotify() now requires a reference to the property instead of a pointer.
  • Old triangulation functions previously offered by the FBX SDK are now deprecated. Please use FbxGeometryConverter::Triangulate() instead.

Fixes

  • Improved the manipulation of free cameras by preventing nasty flips when the view axis reaches vertical.
  • A regression with ConvertPivotAnimationRecursive, introduced in FBX 2013.3, caused some scenes to become resampled and key-reduced wrongly.
  • When you include fbxsdk.h in your project, the define WIN32_LEAN_AND_MEAN will no longer be automatically defined anymore.
  • In some cases, FbxPathUtils::GetRelativePath() did not work properly with localized paths.
  • Exporting to 2010/2011 compatible files (FBX 6.1/7.1) could cause a crash.
  • Fixed a performance issue with Quaternion FCurve evaluation.
  • All properties of the FbxReference type now use the Source connection. Only a handful of them were not complying, in various FbxConstraint classes. In FBX 2014 (7.4) or lower files, this will not change anything, but in memory these objects are now always connected to the source of the property.
  • Blend Shape animation was missing when a take other than first is imported.
  • The FbxObject::PropertyNotify() callback is not called anymore during ConstructProperties object creation stage.
  • FbxPropertyT<FbxReference> now correctly receives the PropertyNotify event.
  • FbxTime::SetTimeString() now supports passing spaces between elements.
  • Fixed an issue with the FbxCamera Position property synchronization with the local translation of its node.
  • The FbxMarker class no longer returns property pointers.
  • For all FbxMesh::GenerateTangentsData() functions: When the tangents data already exist on the mesh, and the pOverwrite parameter is set to false, the function now returns true so that it is not considered as an error.
  • Added a notification to the documentation of FbxStream that it does not support other formats than FBX.
  • FbxCache evaluation could cause a crash on Linux and Mac platforms in some circumstances.
  • FbxPathUtils::Create() could cause a crash on Linux and Mac platforms in some circumstances.
  • Fixed a rotation order issue and candidate value initialization for ASF motion files.
  • Improved the robustness of FbxGeoemetryConverter::SplitMeshPerMaterial(). Now, meshes that have material indexes that point to invalid materials will not be assigned any materials, and they will be regrouped together.
  • Fixed a crash when exporting blend shapes to an old FBX 6.x file format.
  • Fixed an issue with tangent/binormal generation when some vertices were not UV-mapped.

2014.0

New Features

  • Visual Studio 2012 is now supported.
  • FbxCamera::EvaluateUpDirection() now supports the Roll property.
  • The fourth vector element of normals, binormals, and tangents are now properly exported to the FBX files in FBX 2014 file format.
  • A new status reporting class (FbxStatus) is introduced to replace the old FbxError class.
  • Added new functions for the default IK pull value on markers. A default IK pull value is now stored on markers.
  • TimeMarker functionality is re-introduced in FBX 2014 file format. The API to access them is in the FbxGlobalSettings class.
  • Updated Python 3.1 to Python 3.2 in the FBX Python SDK.
  • MotionFiles readers/writers are now registered in the public FBX SDK. This means that the FBX SDK can now import and export the following motion file formats: Biovision (BVH), MotionAnalysis (HTR/TRC), Acclaim (ASF/AMC), Vicon (C3D), Adaptive Optics (AOA), and Superfluo (MCD).
  • The FBX SDK libraries on Mac and Linux are now compiled with default visibility set to hidden. Only symbols marked with FBXSDK_DLL are exported, which makes it equal to the Windows version.
  • The FbxProperty flags are cleaned. For clarity, the ePublished flag is renamed to eAnimated, and the eUser flag is renamed to eUserDefined. The eStatic flag is now turned on for all the static properties by default. Also, introduced the eImported flag for properties that are created upon import.
  • Added new environment variables: FBXSDK_ENV_WINMETRO for Windows Metro support and FBXSDK_ARCH_ARM for ARM processor support.
  • The FbxFolder::Create(), FbxFolder::Delete(), and FbxFolder::Exist() functions are moved to the FbxPathUtils class, and now work pass the Microsoft Certification Validation Kit for Windows Store applications. Other functions in the FbxFolder class are renamed for consistency. See fbxfolder.h.
  • The FbxPathUtils::Exist() function now works on relative paths.
  • The FbxPathUtils::Create() function can take multiple paths as argument and they are created if possible, like mkdir in Unix.
  • Improved the FbxMesh::GetPolygonVertexCount() function to simply return the array size.
  • Updated the FbxProgress class to be simpler and to allow an additional argument to be passed to the single-thread callback.

Deprecated Features

  • The fbxsdk_compatibility.h file is removed from the FBX SDK distribution, so you must use the latest API. Defining FBXSDK_NEW_API is not necessary anymore and can be removed from your projects.
  • The support for Visual Studio 2005 is discontinued.
  • The support for Mac OS X SDK 10.5 is discontinued. The minimum requirement is now Mac OS X SDK 10.6.
  • The FbxString::Empty() function is renamed to FbxString::Clear() to avoid confusion with the FbxString::IsEmpty() function.
  • FbxError is removed from all classes. Instead, functions that need to return an error string can use an optional parameter of type FbxStatus similar to MStatus in the Maya API.
  • The FbxFolder::Create() function is removed. You can use the FbxPathUtils::Create() function instead.
  • The FbxFolder::Delete() function is removed. You can use the FbxPathUtils::Delete() function instead.
  • The FbxFolder::Exist() function is removed. You can use the FbxPathUtils::Exist() function instead.
  • The FbxFolder::Remove() function is removed. You can use FbxPathUtils::Delete() function instead, which is always recursive.

Fixed Issues

  • Fixed the issue of FbxCamera::EvaluateUpDirection() incorrectly using the TargetUp object.
  • Fixed a buffer overrun crash issue that occurs when importing specific 3DS files.
  • Fixed a crash issue that occurs when trying to destroy the FbxManager on application exit.
  • Fixed some samples that were erroneously calling FbxString::Empty() instead of FbxString::IsEmpty().
  • Fixed a buffer overflow in FbxStream::ReadString().
  • Importing an OBJ file will not un-weld UV anymore.
  • Fixed curve key comment in ASCII version. The code was not distinguishing between GenericTimeIndependent only and GenericClampProgressive.
  • Improved the documentation related to the TranslationActive, RotationActive, and ScalingActive properties.
  • Fixed a crash that occurs when a scene containing kinds of deformers other than skins is exported to Collada.
  • The default value of FbxMarker::DrawLink() is now set to true.
  • Fixed the issue of FbxCamera::EvaluateLookAtPosition() not returning the expected value.
  • Fixed the issue of the Effect field being written for each polygon when writing Collada files resulting in an increased file size.
  • Various functions, such as FbxMin that were returning a const reference type value are fixed to return a copy of the value instead.
  • Various function parameters that were asking for const reference intrinsic type are changed to ask a copy of the intrinsic type (which is faster than a const reference in this case).
  • Fixed a crash that occurs when calling FbxScene::ForceKill() on an imported scene that contains thumbnails.
  • Made the fbxiosettingspath.h header file compatible with C++x11 standard.
  • Some optimization of connection management for large scenes.
  • Fixed a typo error in the Transform sample code.
  • Updated various doxygen comments for clarity.

Known Issues