Unity在运行时使用FBX SDK的API

1.写在前面

本文主要一块学习关于Unity官方封装的AutoDesk的FBX SDK的API的C#版本包;最初该包的本意是想让开发者在编辑器模式下使用,但是官方也提供了在运行时对于该包的支持。

2.获取Autodesk FBX SDK for Unity

你可以通过以下方式在Unity项目里添加Autodesk FBX SDK for Unity:

点击菜单栏的“Windoes”选项,选择“Package Manager”;

在Package Manager面板中左上角点击“+”,然后选择Add package from git url ;

在弹出的输入框中输入“[email protected]”,然后点击“Add”添加包;

3.添加运行时支持

添加过Autodesk FBX SDK for Unity之后,该包仅支持编辑器模式下使用。如果想在运行时也被支持,需要做以下操作:

点击菜单栏的“Edit”选项,然后选择“Project Settings”,弹出的窗口中选择“Player”;

然后在“Other Settings”选项卡中,找到“Script Compilation”选项;

在“Scripting Define Symbols”框中输入“FBXSDK_RUNTIME”,然后点击“Apply”按钮即可;

注:该包在运行时只有Windows/OSX/Linux三个平台可以支持,其他平台暂时不能支持; 

4.示例代码 

using (var fbxManager = FbxManager.Create())
        {
            FbxIOSettings fbxIOSettings = FbxIOSettings.Create(fbxManager, Globals.IOSROOT);

            // 配置IO settings
            fbxManager.SetIOSettings(fbxIOSettings);

            // 创建导出器 
            var fbxExporter = FbxExporter.Create(fbxManager, "Exporter");

            // 初始化导出器
            int fileFormat = fbxManager.GetIOPluginRegistry().FindWriterIDByDescription("FBX ascii (*.fbx)");

            bool status = fbxExporter.Initialize(fbxFilePath, fileFormat, fbxIOSettings);
            // 检查导出器的初始化是否成功
            if (!status)
            {
                Debug.LogError(string.Format("failed to initialize exporter, reason: {0}",
                                               fbxExporter.GetStatus().GetErrorString()));
                return;
            }

            // 创建一个场景
            var fbxScene = FbxScene.Create(fbxManager, "Scene");

            // 创建场景信息
            FbxDocumentInfo fbxSceneInfo = FbxDocumentInfo.Create(fbxManager, "SceneInfo");

            // 设置场景信息的值
            fbxSceneInfo.mTitle = "fromRuntime";
            fbxSceneInfo.mSubject = "Exported from a Unity runtime";
            fbxSceneInfo.mAuthor = "Unity Technologies";
            fbxSceneInfo.mRevision = "1.0";
            fbxSceneInfo.mKeywords = "export runtime";
            fbxSceneInfo.mComment = "This is to demonstrate the capability of exporting from a Unity runtime, using the FBX SDK C# bindings";

            fbxScene.SetSceneInfo(fbxSceneInfo);

            // 将场景导出到文件中
            status = fbxExporter.Export(fbxScene);

            // 释放资源
            fbxScene.Destroy();
            fbxExporter.Destroy();
        }

附录. API简介 

EFbxType

基本类型定义,FBX SDK中使用的标准基本类型。

public enum EFbxType {
  eFbxUndefined,   //未定义的变量
  eFbxChar,        //带符号的字符型,最高位为符号位
  eFbxUChar,       //无符号的字符型
  eFbxShort,       //带符号的短整型,最高位为符号位
  eFbxUShort,      //无符号的短整型
  eFbxUInt,        //无符号的整型,默认的整型是带符号的,需要无符号的变量就用这个
  eFbxLongLong,    //长长整型,能表示的数据范围更广
  eFbxULongLong,   //无符号的长长整型
  eFbxHalfFloat,   //半精度浮点型
  eFbxBool,        //布尔值
  eFbxInt,         //整型(带符号)
  eFbxFloat,       //单精度浮点型
  eFbxDouble,      //双精度浮点型
  eFbxDouble2,     //二维向量
  eFbxDouble3,     //三维向量
  eFbxDouble4,     //四元数
  eFbxDouble4x4,   //4x4的矩阵
  eFbxEnum = 17,   //枚举?
  eFbxEnumM = -17, //暂没搞懂和上面的区别
  eFbxString = 18, //字符串
  eFbxTime,        //时间
  eFbxReference,   //引用
  eFbxBlob,        //指定大小的初始化数据,由用户填充
  eFbxDistance,    //距离
  eFbxDateTime,    //日期
  eFbxTypeCount = 24
}

FbxAMatrix

仿射矩阵类

当一个FbxAMatrix表示一个变换(平移、旋转和缩放)时,矩阵的最后一行表示变换的平移部分。

FbxAnimCurve

动画曲线

由一组键组成,并指示值如何随时间变化。是 SDK 的主要动画动画曲线对象。用户需要处理动画曲线的话,就要使用这个类。

FbxAnimCurveBase

实现动画曲线的基类

FbxAnimCurveDef

 定义用于FBX动画曲线和键

FbxAnimCurveDef.EDataIndex

 FbxAnimCurveKey数据索引,用于三次插值切线信息。

FbxAnimCureveDef.EinterpolationType

键的插值类型

FbxAnimCurveDef.ETangentMode

 键的三次插值的切线模式

FbxAnimCurveDef.ETangentVisibility

切线的可见性 

FbxAnimCurveDef.EVelocityMode

速度模式

速度设置可以在不改变动画轨迹的情况下,在键的任意一侧加速或减速动画。与“自动”和“权重”设置不同,“速度”在时间上改变动画,而不是在空间上。 

FbxAnimCurveDef.EWeightedMode

权重模式

FbxAnimCurveFilterUnroll

过滤器以将连续旋转值应用于动画曲线

由于欧拉旋转特性,当旋转角度超过 180 度值时,它变为 -179。这个过滤器试图通过产生增加的值来有效地保持连续旋转,实际上变成 181 度等等

FbxAnimCurveKey

这是 FBX 动画曲线键的接口

键由时间和值定义。它还具有控制动画曲线如何进入和退出关键点的切线。

FbxAnimCurveNode

该类是动画曲线的组合,称为动画曲线节点

动画曲线节点用作动画曲线和与属性关联的其他动画曲线节点的连接点。FbxAnimCurveNode可以连接到其他FbxAnimCurveNode。

FbxAnimLayer 

动画层是动画曲线节点的集合。

其目的是存储可变数量的FbxAnimCurveNode。该类提供不同的状态标志(布尔属性)、可动画化的权重和混合模式标志,以指示该层上的数据在评估期间如何与其他层的数据交互。

FbxAnimStack 

动画堆栈是动画层的集合。

Fbx 文档可以有一个或多个动画堆栈。在以前版本的 FBX SDK 中,每个堆栈都可以视为一个“片段”。“堆栈”术语来自这样一个事实,即对象包含 1 到 n 个动画层,这些动画层根据它们的混合模式进行评估,以产生给定属性的结果动画。

FbxAxisSystem 

该类表示场景的坐标系,可以将场景转换为其他坐标系。

默认情况下,FbxScene使用 Y-Up 轴系统。

FbxAxisSystem.ECoordSystem 

枚举,指定系统的第三个向量。

FbxAxisSystem根据该标志以及与上、前向量的关系推导出正确的向量和方向。

FbxAxisSystem.EFrontVector 

 枚举,以屏幕为原点指向相机的向量。这是枚举 EUpVector 的子集。

FbxAxisSystem.EPreDefinedAxisSystem 

 枚举,可用于使用预定义配置初始化此类的新实例的枚举。

FbxAxisSystem.EUpVector 

 枚举,指定系统中哪个标准轴代表向上(通常是 Y 或 Z)。

FbxBindingTable 

绑定表表示从源类型(例如FbxObject或 FbxLayerElements)到相应目标(通常是第三方着色器参数)的绑定集合。

绑定表示内部对象(例如FbxObject)和外部对象(例如 HLSL 着色器参数)之间的链接。

FbxBindingTableBase

 绑定表表示从源类型(如FbxObject或fbxlayerelement)到目标(可能具有类似类型)的绑定集合。

FbxBindingTableEntry

绑定表项存储源和目标之间的绑定。用户不应该直接实例化这个类,而应该调用FbxBindingTableBase.AddNewEntry()在绑定表中创建一个新条目。

FbxBlendShape

混合形状变形器的类。

混合形状变形器采用基本形状(多边形曲面、曲线或曲面)并根据权重值将其与其他目标形状混合。混合形状变形器通过混合形状通道组织所有目标形状。一个混合形状变形器可以包含多个混合形状通道,然后每个通道可以组织多个目标形状。

FbxBlendShapeChannel

混合形状通道的类。

混合形状通道是一个子变形器,可帮助混合形状变形器组织目标形状。一个混合变形器可以有多个平行的混合变形通道,每个通道可以控制一个或多个目标形状。如果有多个目标形状连接到一个通道,则每个目标形状都可以有自己的完全变形百分比。例如,给定一个具有 3 个目标形状的通道,其完全变形百分比分别为 30 到 80 到 100,那么当百分比从 0 变为 100 时,基础几何体将从第一个目标形状变形到最后一个目标形状。这称为中间混合形状或渐进变形。混合形状通道的属性 DeformPercent 将控制每个目标形状的变形级别或在其上的混合形状之间。

FbxCamera

此节点属性包含用于访问相机属性的方法。

可以将相机设置为自动指向并跟随层次结构中的另一个节点。

FbxCamera.EApertureMode

相机光圈模式。

光圈模式确定驱动相机光圈的值。如果光圈模式是eHorizAndVerteHorizo​​ntaleVertical,则使用视野。如果光圈模式为eFocalLength,则使用焦距。

FbxCamera.EAspectRatioMode

相机的纵横比模式。

FbxCamera.EGateFit

相机的门适合模式。

相机有两个门,胶片门和分辨率门。胶片门是一个边界,指示相机的视野区域,作为真实世界的相机记录在胶片上。胶卷门的尺寸代表相机光圈的尺寸。但是胶片门并不代表渲染区域。代表渲染分辨率的是分辨率门。门适合模式控制分辨率门相对于胶片门的大小。

FbxCamera.EProjectionType

相机投影类型。

FbxCluster

群集(链接)的类。
集群或链接是作用于几何图形(FbxGeometry)的实体。更准确地说,集群作用于几何图形控制点的一个子集。对于集群作用于的每个控制点,集群作用的强度由权重调制。链接模式(ELinkMode)指定如何考虑权重。
集群的link节点指定影响集群控制点的节点(FbxNode)。如果节点是动画的,控制点也会随之移动。

FbxCluster.ELinkMode

链接模式。
链接模式设置链接如何影响控制点的位置以及分配给控制点的权重之间的关系。分配给控制点的权重被分配到与类FbxGeometry实例相关的一组链接中。

FbxCollection

FbxObject派生的FbxObject容器。

FbxColor

类使用双数在RGBA格式中表示颜色。

FbxConnection

定义Fbx的链接类

FbxConnection.EType

定义Fbx的链接类的类型

FbxConstraint

加权动画约束的基类。
约束主要用于限制对象的属性(例如,位置,方向,比例)和自动化动画过程。受约束对象是具有一个或多个加权约束源约束的属性的对象。

FbxConstraint.EType

约束属性类型

FbxConstraintAim

目标约束控制对象的方向,以便该对象指向其他对象。
例如,您可以使用aim约束将灯指向一个或一组对象。

FbxConstraintAim.EWorldUp

约束世界向上的类型,这与Maya有相同的含义。

FbxConstraintParent

父约束在任意两个层次结构的任意两个对象之间创建父-子关系。
它创建了与层次结构中父-子关系相同的关系。您可以使用此约束来连接对象而不改变层次结构。

FbxConstraintPosition

此约束类包含用于访问位置约束属性的方法。
位置约束允许您基于一个或多个源的位置约束对象的位置。

FbxConstraintRotation

此约束类包含用于访问旋转约束属性的方法。
旋转约束允许您基于一个或多个源的旋转来约束对象的旋转。

FbxConstraintScale

此约束类包含用于访问缩放约束的属性的方法。
缩放约束允许基于一个或多个源的缩放来约束对象的缩放。

FbxDataType

FBX SDK数据类型类。

FbxDeformer

皮肤变形器(FbxSkin)和顶点缓存变形器(FbxVertexCacheDeformer)的基类。
对应的变形器类型是FbxDeformer::eSkin和FbxDeformer::eVertexCache。变形器可以绑定到几何体(FbxGeometry)上,以作用于其形状。通常情况下,变形器下的一些对象是动画的,通过变形器,几何体也是动画的。

皮肤变形器包含集群(FbxCluster)。每个簇作用于几何图形控制点的一个子集,具有不同的权重。例如,一个人形网格可以有一个皮肤附着,这描述了人形网格被骨骼变形的方式。当骨骼被激活时,集群也会对几何体起作用,使其产生动画效果。

顶点缓存变形器包含一个缓存(FbxCache)。缓存包含几何图形的每个控制点的动画信息。

FbxDeformer.EDeformerType

变形器类型。

FbxDocument

FbxDocument是FbxScene和FbxLibrary类的基类。
文档是对象(FbxObject)的集合(FbxCollection),称为根成员对象。这是因为这些对象都构成了对象图的根。管理器(FbxManager)可以访问所有文档、场景和库。

一个文档可以包含在另一个文档中,因此可以构建文档的层次结构。所有文档的根简称为根文档。

一个文档管理动画栈(FbxAnimStack)。它还提供了对动画堆栈信息(FbxTakeInfo)的访问。

文档在其FbxDocumentInfo中携带信息。

文档管理外设来加载和卸载对象(参见类FbxPeripheral),以及对其他对象或文档的引用。

FbxDocumentInfo

这个类包含场景缩略图和用户定义的汇总数据。

FbxEmitter

基类发出具有指定事件类型的事件。

事件类型可以是一个从FbxEvent派生的特定类。事件发射器包含事件处理程序列表。FBX对象可以用作发射器,因为FbxObject派生自FbxEmitter。在使用发射器发射事件之前,必须将一个或多个事件处理程序添加到当前发射器的处理程序列表中。换句话说,它是“将事件处理程序绑定到发射器”。

FbxEntryView

条目视图类表示条目表中的绑定条目。

FbxEuler

定义Fbx欧拉

FbxEuler.EOrder

定义Fbx欧拉顺序

FbxExporter

该类定义了将对象导出到FBX文件中方式。

导出器将选择适当的写入器写入特定的文件。例如:当一个导出器必须导出一个fbx7文件时,如果fbx7文件写入器可用,导出器将查找所有注册的写入器,然后如果找到一个fbx7写入器,导出器将创建专门的fbx7写入器并写入该文件。通过这种方式,导出器可以导出许多不同类型的文件,如FBX 5/6/7、3DS、Obj、Dxf、Collada等。

FbxFileTexture

这个类描述了模型上的贴图映射。将纹理应用到几何体中,首先将几何体连接到FbxSurfaceMaterial对象(例如FbxSurfaceLambert),然后将其一个属性(例如Diffuse)连接到FbxFileTexture对象。

FbxFileTexture.EMaterialUse

指定纹理是否使用模型材质。

FbxGeometry

支持控制点变形的几何对象的基类(FbxMesh, FbxNurbs,和FbxPatch)。

FbxGeometryBase

这个类是几何对象的基类,如网格,NURBS和修补程序。

使用FbxGeometryBase类来管理几何的控制点,法线,副法线和切线。“控制点”的含义取决于几何对象类型。对于网格来说,“控制点”是多边形顶点的物理三维坐标,而对于NURBS来说,“控制点”是定义曲面的曲线上的实际控制点。这个类还允许您定义法线、副法线和切线,而不管几何对象的类型。然而,在现实中,将这种定义应用到NURBS和patch上并没有多大意义,因为这些定义只存在于控制点上,在控制点之间,插值肯定不会沿着曲线。

几何对象使用分层数据系统来扩展其构造定义。例如,一个典型的网格层包含法线,uv和材质,但客户端应用程序可以决定定义另一组法线和uv,并在渲染阶段交换它们以产生一些不同的结果。组合是无限的,不可能讨论所有的组合。这个例子展示了可以使用层的一个可能的上下文。更多信息可以在FbxLayerContainer和FbxLayer类描述中找到。

FbxGlobalSettings

该类包含用于访问全局设置的函数。

FbxImplementation

这个对象表示着色节点的实现。
它定义了着色器和绑定表(FbxBindingTable)的基本信息。

FbxImporter

该类定义了将对象导入到FBX文件中方式。

导入器将为特定的文件选择合适的读取器。例如:当一个导入器必须导入一个fbx7文件时,如果一个fbx7文件读取器可用,导入器将查找所有注册的读取器,然后如果找到一个读取器,导入器将创建专门的fbx7读取器并读取文件。通过这种方式,导入器可以导入许多不同类型的文件,如FBX 5/6/7、3DS、Obj、Dxf、Collada等。

FbxIOBase

FBX文件导入和导出的基类。

FbxIOFileHeaderInfo

FBX头信息用于FBX文件的开始,以获取或设置重要的值,如文件格式版本号(mFileVersion)。
文件版本号将用于选择特定的Reader或Writer。

FbxIOPluginRegistry

这个类充当文件格式的注册商。
FBX SDK使用文件格式时,必须注册文件格式。这个类还允许您创建和读取FBX SDK原生格式以外的格式。FBX SDK的用户可以编写自己的插件来读取或写入任意文件格式。一旦他们的插件注册到这个类中,FBX SDK就能够读写这些文件格式。

FbxIOSettings

FbxIOSettings是一个属性集合,以树的形式排列,FBX文件读取器和写入器可以使用它来表示导入和导出选项。

主要用于FBX导入器(FbxImporter)和FBX导出器(fbxexporters)对磁盘进行数据读写时。

FbxIOSettings的实例必须在导入/导出操作之前创建。当一个新的FbxIOSettings实例被创建时,所有的选项都会被创建为默认值。FbxIOSettings的新实例要传递给FbxManager,这样才能实现导入/导出操作。

FbxLayer

FbxLayer类为分层机制提供了一个基础。一个层可以包含以下一个或多个层元素:

1.法线
2.副法线
3.切线
4.材料
5.多边形组
6.uv
7.顶点颜色
8.平滑信息
9.顶点折痕
10.边折痕
11.自定义用户数据
12.可见性
13.纹理(漫反射,环境,高光等)(已弃用)

一个典型的网格层包含法线,uv和材质。一个典型的NURBS层只包含材料。在NURBS的情况下,NURBS的参数化用于uv;不应指定uv。

在大多数情况下,您只需要一个层来描述一个几何图形。许多应用程序只支持在第一层定义的内容。当你填充图层时,要考虑到这一点。例如,用uv定义0层,然后在Layer 1上定义模型的法线是合法的。但是,如果您以这种方式构造一个文件,它可能无法在其他应用程序中正确导入。将法线存储在0层以避免问题。

自从FBX SDK 2011,纹理连接到fbxsurfacmaterial派生类的属性。FbxLayerElementTexture不再使用。参见FbxLayerElementTexture中的代码示例,了解如何连接纹理。

自FBX SDK 2011以来,纹理分层是通过FbxLayeredTexture实现的。请参阅FbxLayeredTexture中的代码示例,了解如何混合纹理。

通常,你可以从FbxLayerContainer访问层,如FbxGeometry。

FbxLayerContainer

包含FbxLayer对象的集合。这个类用于管理层的构造、销毁和访问。

FbxLayerElement

层元素的基类(FbxLayer)。

层元素类型由EType标识。FbxLayerElement描述了层元素如何映射到几何表面,以及映射信息如何在内存中排列。FbxLayerElement包含法线,uv或其他类型的信息。

FbxLayerElement.EMappingMode

确定元素如何映射到一个表面。

FbxLayerElement.EReferenceMode

确定映射信息如何存储在坐标数组中。

FbxLayerElement.EType

层元素类型标识符。

FbxLayerElementArray

FbxLayerElementArray是FbxLayerElementArrayTemplate的基类,它为FbxLayerElement提供了数据缓冲区的锁处理和数据数组操作。

FbxLayerElementArrayTemplateFbxColor

层元素的类型(Color)

FbxLayerElementArrayTemplateFbxSurfaceMaterial

层元素的类型(SurfaceMaterial)

FbxLayerElementArrayTemplateFbxVector2

层元素的类型(Vector2)

FbxLayerElementArrayTemplateFbxVector4

层元素的类型(Vector4)

FbxLayerElementArrayTemplateInt

层元素的类型(int)

FbxLayerElementBinormal

将副法线映射到几何图形的图层元素。

FbxLayerElementMaterial

图层元素用于将材质(FbxSurfaceMaterial)映射到一个几何图形。

FbxLayerElementNormal

将法线映射到几何图形的图层元素。

FbxLayerElementTangent

将切线映射到几何图形的图层元素。

FbxLayerElementTemplateFbxColor

访问不同层元素Color的直接数组和索引数组

FbxLayerElementTemplateFbxSurfaceMaterial

访问不同层元素材质(FbxSurfaceMaterial)的直接数组和索引数组

FbxLayerElementTemplateFbxVector2

访问不同层元素Vector2的直接数组和索引数组

FbxLayerElementTemplateFbxVector4

访问不同层元素Vector4的直接数组和索引数组

FbxLayerElementUV

图层元素映射uv到一个几何图形。

FbxLayerElementVertexColor

图层元素映射顶点颜色到一个几何图形。

FbxLight

此节点属性包含用于访问灯光的属性的方法。

FbxLight.EAreaLightShape

支持的区域灯类型。

FbxLight.EDecayType

衰变类型

FbxLight.EType

灯光类型

FbxLimits

FbxLimits定义了一个转换组件的限制范围,可以是平移、旋转或缩放。

一个转换组件限制包含两部分:最小值和最大值限制,这意味着对应的转换组件的每个值不能超过最小值和最大值设置的范围。尽管在这个级别上,成员被标识为X、Y和Z(忽略W组件),但它们是无单位的值,并且只在查询它们的上下文中有意义。

对于每个限制,都有一个标志来指示限制是否处于活动状态。在访问limit信息之前,调用者需要首先查询标志,以确保检索到的值是有意义的。

FbxManager

SDK对象管理器。

SDK管理器负责:

1.场景元素的创建,例如FbxScene.Create(pSdkManager, "")。
2.场景元素的回收,调用FbxManager.Destroy()来回收所有由SDK管理器创建的对象。
3.场景元素的搜索和访问。

通过使用下面的处理程序集函数提供系统内存分配函数,可以覆盖整个FBX SDK中的内存分配函数。这必须在第一次创建FbxManager之前完成。

在销毁时,SDK管理器分配的所有未显式销毁的对象也将被销毁。可以定义一个派生类来分配和释放特定的场景元素。

你可以创建多个SDK管理器。但是,最好不要在不同的管理器之间共享相同的对象。

FbxMarker

此节点属性包含标记的属性。FbxMarker可以表示动作捕捉标记或HIK IK/FK效应器。

FbxMarker.ELook

标记样式。

FbxMarker.EType

标记类型。

FbxMatrix

FBX SDK基本4x4双矩阵类。

FbxMesh

网格是由多边形构成的几何图形。类可以根据需要定义具有任意多个n面多边形的几何图形。用户可以自由混合三角形、四边形和其他多边形。由于FBX SDK的网格相关术语与已知的标准略有不同,以下是我们的定义:

1.控制点是一个XYZ坐标,它是顶点的同义词。

2.一个多边形顶点是一个控制点的索引(同一个控制点可以被多个多边形顶点引用)。

3.多边形是一组多边形顶点。定义多边形的最小有效多边形顶点数是3。

FbxGeometryBase类提供了初始化、设置和访问控制点的方法。

FbxMesh.BadBracketingException

被破坏的Mesh除外

FbxNode

表示场景图中的一个元素。

场景图是FbxNode对象的树状结构。树状管理服务是自包含在这个类中的。

FBX SDK默认不测试所构建的场景图的有效性。调用方有责任确保它不会在节点层次结构中生成循环图。

除了树管理之外,这个类还定义了描述物体在场景中的位置所需的所有属性。这些信息包括基本的平移、旋转和缩放属性,以及枢轴、极限和IK关节属性(如刚度和阻尼)的更高级选项。

当它第一次被创建时,FbxNode对象是“空的”(即:它是一个没有任何图形表示的对象,只包含位置信息)。在这种状态下,它可以用于表示节点树结构中的父节点,但仅此而已。这种类型的对象的通常用途是为它们添加一个将专门化节点的属性。

Node属性本身是一个对象,并且连接到FbxNode。这也意味着同一个节点属性可以在多个节点之间共享。FbxCamera, FbxLight, FbxMesh等都是节点属性,它们都派生自基类FbxNodeAttribute。

FbxNode.EPivotSet

主上下文标识符。

FbxNode.EPivotState

主上下文状态。

FbxNode.EShadingMode

渲染模式。

FbxNodeAttribute

该类是所有类型的节点属性的基类。

FbxNodeAttribute.EType

节点属性类型。

FbxNull

此节点属性包含空节点的属性。

FbxNull.ELook

空节点类型。

FbxNurbsCurve

非均匀有理b样条(NURBS)曲线是一种参数几何形式。NURBS曲线由顺序、形式、结向量和控制点来定义。设M是曲线的阶数。设N为曲线的控制点个数。曲线的形式可以是开的、闭的或周期的。端点不相交的曲线被定义为开曲线。开放曲线的节数定义为N+(M+1)。

FbxNurbsCurve.EDimension

曲线的维度。

FbxNurbsCurve.EType

曲线的类型

FbxObject

大多数FBX对象的基类。

提供连接、标识、运行时类型、属性、命名、复制、克隆、选择和自动文件IO的好处。大多数FBX SDK API处理FbxObject引用时,它以最简单的形式操作对象。ClassID机制取代了dynamic_cast机制,以获得有效的运行时类型信息。

FbxObject提供了管理对象之间连接的方法。使用连接,对象可以相互关联,形成层次结构或结构。所有FBX场景的对象关系都表示为对象之间的连接。这些连接可以根据需要更改,以反映在这个世界上遇到的大多数设置类型。例如,可以使用连接来表示转换节点之间的养育关系。连接并不严格,因为我们允许任何类型的对象连接到任何其他类型的对象。这种联系的意义纯粹是语义上的。到目前为止,我们还没有提供验证是否允许用户建立连接的功能。

FbxObject提供了一个属性(FbxProperty)机制来描述场景中对象的特征。属性可以是静态的,也可以是动态的。静态属性是在类的方向上定义的,并且可以通过对象的名称直接访问它们,而不需要在对象的属性列表中进行搜索。可以在程序运行时添加动态属性。对象可以有无限数量的属性。属性可以在运行时列出,允许灵活地支持对象上的自定义数据,因为FBX文件读取器/写入器可以根据设置的标志来考虑它们。

FbxPose

这个类包含了一个姿态的描述,并提供了一些方法来访问一个FBX场景中的姿态信息。FbxPose对象可以设置为持有“绑定姿势”数据或“静止姿势”数据。

Bind Pose保存了链接变形中隐含的所有节点的转换(平移、旋转和缩放)矩阵。这包括正在变形的几何图形、变形几何图形的链接,以及递归地处理该链接的所有祖先节点。当没有变形发生时,绑定姿势会在绑定操作的时刻给你节点的转换。

Rest Pose是节点转换的快照。休息姿势可以用来存储角色在某个时间点的每个节点的位置。这个姿势可以作为动画任务的参考位置,比如编辑行走周期。

这两种模式之间的一个区别在于添加项目之前执行的验证和存储的矩阵类型。

在“Bind Pose”模式下,假设矩阵是在全局空间中定义的,而在“Rest Pose”模式下,矩阵的类型可以由调用者指定。所以可以使用局部系统矩阵。实际上,因为每个条目都有一个这样的标志(FbxPoseInfo),所以在FbxPose元素中可能有混合类型。因此,调用方有责任检查检索到的矩阵的类型,并在需要时进行适当的转换。

FbxProperty

保存用户属性

FbxPropertyBool

布尔类型

FbxPropertyDouble

双精度浮点类型

FbxPropertyDouble3

三维向量类型

FbxPropertyEAreaLightShape

区域光形状的属性

FbxPropertyEBlendMode

混合的模型

FbxPropertyEDecayType

衰变类型

FbxPropertyEGateFit

摄像机门类型

FbxPropertyEInheritType

继承关系

FbxPropertyELightType

灯光的类型

FbxPropertyEntryView

条目表中的属性条目

FbxPropertyEProjectionType

投影的类型

FbxPropertyEWrapMode

Wrap模式

FbxPropertyFlags

保存标志信息

FbxPropertyFlags.EFlags

影响其行为的属性标志

FbxPropertyFlags.EInheritType

继承类型的属性

FbxPropertyFloat

单精度类型的属性

FbxPropertyInt

整型的属性

FbxPropertyMarkerELook

浏览标志的属性

FbxPropertyNullELook

空值的属性

FbxPropertyString

字符串属性

FbxQuaternion

FBX SDK四元数类。

四元数在实数上构成一个四维赋范除法代数。它适用于涉及三维旋转的计算。

FbxScene

这个类包含了一个3D场景的描述。

它包含节点(包括根节点)(FbxNode)、材料、纹理、视频、gobos、姿态、角色、角色姿态、控制设置插头、通用节点、场景信息、全局设置和全局评估器。节点被构造在场景的根节点下的树中。

当使用FBX SDK创建一个对象时,场景通常作为参数传递给对象创建函数,以指定对象属于这个场景。此时,以物体为源,以场景为目的建立了连接。

通过连接索引查询场景中的所有对象。此外,还可以通过名称查询通用节点、材料和纹理。在后一种情况下,将返回具有查询名称的第一个对象。

FbxSemanticEntryView

FbxSemanticEntryView在着色器文件中存储一个与语义对应的绑定。

一个着色器语义是一个参数,一个常数或一个操作符。所以着色器语义可以绑定FbxProperty (parameter, constant)和FbxBindingOperator (operator)。

FbxShape

形状描述一组控制点上的变形,这类似于Maya中的群集变形器。

例如,我们可以向创建的几何图形添加一个形状。形状和几何形状具有相同的拓扑信息,但控制点的位置不同。由于受到不同程度的影响,几何体执行变形效果。

形状可以用两种方式表示:

1.Legacy style (default):在遗留样式中,只处理控制点位置和法线。在这种样式中,控制点位置值和法线被保存为相对于基本几何值的值。只有控制点位置已更改的法线才会被导出。

2.现代风格(非遗产风格):在这个样式中,LayerElements (FbxLayerElement)为Normal (FbxGeometryBase.GetElementNormal), Tangent (FbxGeometryBase.GetElementTangent), BiNormal (FbxGeometryBase.GetElementBiNormal),VertexColor (FbxGeometryBase.GetElementVertexColor)和UV (FbxGeometryBase.GetElementUV)将被导出,如果他们在FbxBlendShape (FbxShape.GetBaseGeometry)的基础几何上有相应的FbxLayerElement。只有当这些值与基础几何上的值不同,并且不再需要更改相应的控制点位置时,这些值才会被导出。在现代风格中,您可以选择值应该保存为绝对值还是相对值(FbxShape::SetAbsoluteMode)。

FbxSkeleton

这个类专门使用一个节点属性来表示构成骨骼的元素。

类的FbxSkeleton名称来源于与人体骨骼结构的类比。事实上,这种类型的对象只不过是具有特殊属性的转换节点,这些属性对于图形表示以及IK/FK和蒙皮变形计算非常有用。通常情况下,一个场景将包含FbxSkeleton节点属性链,它们一起形成一个骨架段。例如,可以使用具有eRoot属性的一个父节点来表示字符的腿,然后使用类型为eLimb的一个子节点(股骨),该子节点还拥有相同类型的一个子节点(胫骨)。最后,以eEffector (ankle)类型的最后一个节点属性结束。

FbxSkeleton.EType

骨骼类型

FbxSkin

皮肤变形器类

皮肤变形器包含集群(FbxCluster)。每个簇作用于几何图形控制点的一个子集,具有不同的权重。例如,一个人形网格可以有一个皮肤附着,这描述了人形网格被骨骼变形的方式。当骨骼被激活时,集群也会对几何体起作用,使其产生动画效果。

对应的变形器类型是FbxDeformer.skin。

FbxStatus

这个类有助于测试/报告错误。它封装了状态码和API函数返回的内部FBXSDK错误码。默认情况下,类不会将所有错误消息累积到历史数组中。如果需要这个历史记录,则必须通过调用KeepErrorStringHistory(true)来配置该对象。

FbxStatus.EStatusCode

可用的状态码

FbxSubDeformer

基类簇子变形器(FbxCluster)和混合形状通道子变形器(FbxBlendShapeChannel)

集群或链接是作用于几何图形(FbxGeometry)的实体。更准确地说,集群作用于几何图形控制点的一个子集。对于集群作用于的每个控制点,集群作用的强度由权重调制。链接模式(ELinkMode)指定如何考虑权重。集群的link节点指定影响集群控制点的节点(FbxNode)。如果节点是动画的,控制点也会随之移动。集群通常是皮肤的一部分(参见FbxDeformer, FbxSkin)。例如,想象一个网格代表一个人形,想象一个由骨头组成的骨架。每个骨头在FBX中由一个节点表示。为了将几何图形绑定到节点上,我们创建了一个皮肤(FbxSkin)。皮肤有许多簇,每个簇对应一个骨头。每个节点影响网格的一些控制点。节点对某些点的影响较大(权重高),对其他点的影响较小(权重低)。网格中的一些点完全不受骨骼的影响,所以它们不会成为相应集群的一部分。

混合形状通道是一个子变形器,用于帮助混合形状变形器组织目标形状。一个混合形状变形器可以同时拥有多个混合形状通道,并且每个通道可以控制一个或多个目标形状。如果有多个目标形状连接到一个通道,每个目标形状可以有自己的完全变形百分比,例如,一个通道可能有3个目标形状,其全部变形百分比为30、80、100,然后当百分比从0变为100时,基本几何体将从第一个目标形状变形到最后一个目标形状,这被称为In-Between混合形状。混合形状通道还控制每个目标形状或其上的中间混合形状的变形百分比。

FbxSurfaceLambert

这个类包含兰伯特材料的设置。

FbxSurfaceMaterial

这个类包含材料设置。

FbxSurfacePhong

这个类包含Phong材质的设置。

FbxSystemUnit

该类描述了在特定场景中使用的测量单位。

FbxSystemUnit.ConversionOptions

结构来定义各种选项,你可以用来转换场景的系统单元。

默认值已经设置好了,改变这些值将直接影响整个场景的行为。

FbxTexture

这个类是纹理的基类,即类FbxFileTexture, FbxLayeredTexture和FbxProceduralTexture。
它描述了几何图形上的图像映射。

FbxTexture.EAlphaSource

控制当前纹理的Alpha计算是否来自Alpha通道,RGB 强度通道,或者是否没有Alpha。

FbxTexture.EBlendMode

混合模式

FbxTexture.EMappingType

纹理映射类型

FbxTexture.EPlanarMappingNormal

平面映射法向

FbxTexture.ETextureUse

材质使用

FbxTexture.EWrapMode

打包模式

FbxTime

该类封装和时间有关的单元

FbxTime.EElement

时间的类型

FbxTime.EMode

时间的模式

EMode eNTSCDropFrame用于广播操作,其中时钟时间必须(几乎)与时间代码同步。为了带时钟时间返回彩色NTSC时间码,该模式每分钟下降2帧,除了每10分钟(00,10,20,30,40,50)。每小时丢失108帧。超过24小时,误差为2帧和1/4帧。01:00:03:18的时间码等于01:00:00:00的时钟时间。

eNTSCFullFrame模式表示一个时间地址,因此与时钟时间不同步。01:00:00:00的时间码等于01:00:03:18的时钟时间。

FbxTime.EProtocol

enumaration时间协议。

FbxTimeSpan

封装时间间隔。

FbxTransform

处理转换行为,如支点、限制和偏移量等。

FbxTransform.EInheritType

继承的类型

FbxVector2

二维向量

FbxVector4

四维向量

Globals

FBX包内对于C++运行库的引用都在这里定义

Globals.FbxProgressCallback

进程回调方法

猜你喜欢

转载自blog.csdn.net/m0_68256659/article/details/123752768