FBX

Nodes that will hurt you

Format owned by Autodesk that is used for interoperability between digital content creation applications.

Autodesk FBX SDK 2016

FbxScene

Use GetRootNode() to find the root of the scenegraph, GetGlobalSettings() to find the settings for the scene and GetEvaluator() to access the animation evaluator.

FbxNode

The nodes form the FBX scene graph. The rootnode is found from the FbxScene. Nodes are in a hierarchy and it can be explored with FbxNode::GetChildCount(), FbxNode::GetChild() and FbxNode::GetParent(). Each node contain Transformation Data that is relative to it's parent's coordinate system.

FbxProperty (Object Properties)

FbxProperty are used to be able to add strongly typed data to be dynamically added to FBX objects. They are also used as the way to hook the way to let animations modify the values over time.

Transformation Data

The transformation data of a node is relative to it's parent. They includes its translation (T), rotation (R) and scaling (S) vectors. It is in the form of FbxTypedProperty so they can be animated. It is also possible to get the global and local transform in a form of a matrix with FbxNode::EvaluateGlobalTransform() and FbxNode::EvaluateLocalTransform(). By sending in a FbxTime it is possible to get the matrix for a specific point in time. Using FBXSDK_TIME_INFINITE as time returns the default value of the node without any animation curves.

For transform order look at http://help.autodesk.com/view/FBX/2016/ENU/?guid=__files_GUID_10CDD63C_79C1_4F2D_BB28_AD2BE65A02ED_htm .

FbxNodeAttribute

Each FbxNode can have a number of FbxNodeAttribute that adds the content of a node. For example a mesh or a light.

FbxMesh - eMesh

Geometry made of polygons.

    • Vertices: GetControlPointsCount() and GetControlPoints().

    • Polygons: GetPolygonCount(), GetPolygonSize() and GetPolygonVertex().

    • Normals: GetPolygonVertexNormal()

    • UV's: GetUVSetNames() and GetPolygonVertexUV().

FbxSkeleton - eSkeleton

    • IsSkeletonRoot()

    • GetSkeletonType(). eRoot, eLimb, eLimbNode and eEffector.

FbxAnimStack

The FbxAnimStack are stored in the scene and they only need to exist if the scene has any animations. Each stack has one or more animation layers.

    • GetNumberOfStacks: FbxScene::GetSrcObjectCount(FBX_TYPE(FbxAnimStack)); i++)

    • Get Stack: FbxCast<FbxAnimStack>(pScene->GetSrcObject(FBX_TYPE(FbxAnimStack), n)

    • Animation Name: FbxAnimStack::GetName()

FbxAnimLayer

Each animation layer is a set of animation data.

    • GetNumberOfLayers: FbxAnimStack::GetMemberCount(FBX_TYPE(FbxAnimLayer));

    • GetLayer: FbxAnimStack->GetMember(FBX_TYPE(FbxAnimLayer), n);

FbxAnimCurve

An animation curve are used to make a value change over time. It is made up of a collection of keys (FbxAnimCurveKey) sorted in time order. Only one key per time is allowed. Keys are accessed by their index on the curve. Each key has tangents and interpolations that modify the animation curve.

FbxAnimCurveNode

A FbxAnimLayer contains a collection of FbxAnimCurveNode's. A FbxAnimCurveNode connects a FbxAnimCurve to modify the value of a FbxProperty.

FbxPose

A pose is a snapshot of all the transforms in a hierarchy at a given time. There are two types, BindPose and RestPose. Get the number of nodes in the pose with GetCount() and then data with GetNode(index), GetMatrix(index).

FbxCharacterPose

Reference