FBX SDK 2016

This topic lists the new features and improvements, changes and deprecations, fixes, and known issues in the 2016 release.

2016.1

New features and improvements

  • Improved the LodGroup object to now store thresholds as percentage values or distance from camera.

Changes and deprecations

  • Properties with the FbxEnumDT data type now perform a strict validation to forbid duplicates when items are added, inserted, or replaced in the enumeration list. The new eFbxEnumM type identifier can be used for creating your own runtime enumeration data type that can accept duplicated entries.
  • In the Collada reader, replaced the xmlParseFile() function call with xmlReadFile() so that you can set the XML_PARSE_HUGE flag, which relaxes any hard-coded limit from the parser. This affects limits like the maximum depth of a document or the entity recursion as well as the size limits of text nodes.

Fixes

  • Fixed an issue with the Animation Curve Pre/Post Extrapolation data. In the very particular case of a program creating an animation curve directly in memory that sets the extrapolation flags and then tries to evaluate the curve outside the animation range, the extrapolation flags were not considered until the curve was saved to disk.
  • An overlooked condition from the fix above introduced a regression in the FBX SDK 2016.1 alpha.
  • An update to the FbxAMatrix::GetROnly() caused a regression when detecting the Euler gimbal locks while extracting the rotation vector value. The default threshold value used for this detection can be too small for a correct detection if the matrix is constructed with very low precision single floating point values. The FBX SDK now provides the FbxEuler::SetDegenerateThreshold() method to allow the client application to change the threshold value at runtime.

2016

New features and improvements

  • The support for Visual Studio 2008 builds has been discontinued. Only these versions are now supported: Visual Studio 2010, Visual Studio 2012, and Visual Studio 2013.
  • Updated the FBX file format to 7.5. This new file format is only compatible with the 2016 or later product versions that use 64-bit integers in the binary block headers for large file support (> 2GB). The new file format cannot be imported in 2015 or older product versions. You must set the correct export file format for an FBX file, if it needs to be opened in the 2015 or older product versions.
  • The iPhone Simulator build is now a universal binary that contains both the 32-bit and 64-bit architectures.
  • From this release onwards, the FBX SDK namespace does not contain version indications.
  • Improved the camera manipulator speed when it is very close to a camera interest position.
  • Added RemoveBadPolygonsFromMeshes to the FbxGeometryConverter class for cleaning a whole scene. Typically, this function must be called before Triangulate or any other utility functions that manipulate meshes.

Changes and deprecations

  • If your code retrieves the transform values directly from the LclTranslation, LclRotation, and LclScaling properties, then the fixes made in ConvertPivotAnimation might require a change in how these property values are retrieved.

    Now, when ConvertPivotAnimation is called, the computed value might be stored in the CurveNode channel instead of overwriting the property value. To correctly retrieve the computed values, it is recommended to use the FbxProperty::EvaluateValue() function with a different time argument value than FBXSDK_TIME_INFINITE.

    Alternatively, you can test for the presence of the CurveNode and retrieve the value directly from this object. For example:

    if (LclTranslation.GetCurveNode())
      x = LclTranslation.GetCurveNode()->GetChannelValue(0L);
    

  • Default export file format is now 7.5 (only compatible with the 2016 or later product versions).
  • Removed these deprecated functions:
    • FbxProperty::SetParent()
    • FbxProperty::SetArraySize()
    • FbxProperty::GetArraySize()
    • FbxProperty::GetArrayItem()
    • FbxProperty::operator[]

Fixes

  • Fixed a compilation error that occurred when attempting to use FbxAutoDeletePtr on Unix based systems.
  • Fixed an issue with bounding box calculations.
  • Fixed FbxPathUtils::Exist() as it was failing on Mac OS for Sandboxed applications.
  • Fixed an issue with ConvertPivotAnimation. It was not properly deactivating Rotation pivots/limits after conversion.
  • Fixed FbxMesh::RemoveBadPolygons() so that polygons with less than three vertices are considered invalid.
  • Fixed CloneManager to avoid duplicating already cloned objects.
  • Fixed a rare crash issue in FbxScene::ForceKill() that was caused by FbxCharacterPose.
  • Fixed an issue with GenerateTangentsDataForAllUVSets. It was processing tangents for each polygon instead of each mesh when calling FbxGeometryConverter::SplitMeshPerMaterial().
  • Fixed an issue with ConvertPivotAnimation that occurred when processing multiple takes.
  • Fixed a crash issue with ReadUserElementData. It was referencing invalid pointers.
  • Fixed a BVH import rotation issue on joints related to the constant key reducer.
  • Fixed the circular dependency in fbxsdk_nsbegin.h.
  • Fixed the missing template instantiation for FbxSimpleMap and FbxObjectMap.

Known issues

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