This topic lists the new features and improvements, changes and deprecations, fixes, and known issues in the 2016 release.
LodGroup
object to now store thresholds as percentage values or distance from camera.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.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.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.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.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).
FbxProperty::SetParent()
FbxProperty::SetArraySize()
FbxProperty::GetArraySize()
FbxProperty::GetArrayItem()
FbxProperty::operator[\]
FbxAutoDeletePtr
on Unix based systems.FbxPathUtils::Exist()
as it was failing on Mac OS for Sandboxed applications.ConvertPivotAnimation
. It was not properly deactivating Rotation pivots/limits after conversion.FbxMesh::RemoveBadPolygons()
so that polygons with less than three vertices are considered invalid.CloneManager
to avoid duplicating already cloned objects.FbxScene::ForceKill()
that was caused by FbxCharacterPose
.GenerateTangentsDataForAllUVSets
. It was processing tangents for each polygon instead of each mesh when calling FbxGeometryConverter::SplitMeshPerMaterial()
.ConvertPivotAnimation
that occurred when processing multiple takes.ReadUserElementData
. It was referencing invalid pointers.FbxSimpleMap
and FbxObjectMap
.FbxAMatrix
only works with the XYZ rotation order.