注意:本节提供有关使用 FBX 转换的专有文件格式的信息。但是,有两种文件格式不使用 FBX 作为中介格式:SketchUp 和 SpeedTree。有关导入这些文件格式的更多信息,请参阅 SketchUp 设置和 SpeedTree 主题。
Unity 支持可能从许多 3D 建模应用程序导出的 FBX 文件。请遵循以下准则来确保获得最佳结果:
除了以上关于从 3D 建模应用程序执行导出操作的一般准则之外,以下部分还提供了关于这些 3D 建模应用程序的更多具体信息:
Note: As of Unity 2019.3, Unity no longer provides built-in support for Cinema4D files. To continue using Cinema4D files in Unity for versions 2019.3 and later, install Maxon’s Cinema4D importer from the Asset Store. Alternatively, you can export an FBX file from Cinema4D instead.
对于想导出的内容:有些场景对象必不可少,而其他可能不必要。 应用程序通常允许导出选定对象或整个场景。 可以通过仅保留基本对象来优化 Unity 中的数据。
如果选择仅导出场景中的特定对象,则可以:
根据以下注意事项准备要导出的资源:
对象: | 准备: |
---|---|
网格 (Meshes) | 必须将所有 NURBS、NURMS、样条曲线、面片和细分曲面转换为多边形(三角形剖分或四边形剖分) |
动画 (Animation) | 选择正确的骨架。检查帧率。检查动画长度。 |
混合形状 (Blend Shapes) 或__变形 (Morphing)|确保分配了混合形状 (Blend Shapes) 或变形目标。正确设置导出网格。|
|烘焙变形体 (Bake deformers)|在导出到 FBX 之前,请确保将变形体烘焙到模型上。例如,如果要从 Maya 导出复杂骨架,则可以在将模型导出到 FBX 之前将变形烘焙到蒙皮权重上。|
|纹理 (Textures)|确保您的纹理来自 Unity 项目,或者将它们复制到 Unity 项目中的名为 textures 的文件夹。注意:建议不要使用 Embed Media__ 选项在 FBX 文件中嵌入纹理。在使用纹理之前必须提取纹理,因此嵌入它们只会导致项目出现不必要的臃肿问题并减慢导入过程。 |
|
平滑 (Smoothing) | 验证所有平滑组和平滑网格设置。 重要信息:导入混合形状法线要求在 FBX 文件中具有平滑组。 |
检查 FBX 导出设置:
在将 FBX 文件导入 Unity 之前,请验证导出文件的大小。对文件大小执行完整性检查(例如,查看文件大小是否大于 10KB)。
将 FBX 文件重新导回到用于生成该文件的 3D 建模软件中(例如导入到新场景中)。检查并确保能正常工作。
要将文件导入 Unity,请遵循有关导入操作的说明,务必记住您在 3D 建模软件中的导出选项设置。
您可以使用 FBX 导出选项选择要在 FBX 文件中导出的内容。
从 Maya 导出混合形状(变形)时,请遵循以下准则:
将文件导入 Unity 之后,请在__项目__视图中选择该文件,然后在 Model Importer 的 Animations 选项卡中启用 Bake Animations。
可以在 Maya 中创建非常复杂的角色绑定。出于性能原因,Unity 支持每个顶点默认最多有四个影响的线性混合蒙皮。如果您的角色使用四种以上的影响,请在将模型导入 Unity 中时遵循以下说明:
如果选择坚持使用默认的最大值,并且您的网格具有四个以上的影响,则变形可能会出现扭曲。或者,如果使用的是聚类以外的变形,则变形可能完全不存在。
有关更多信息,请参阅 Autodesk 文档中的在角色上烘焙变形体 (Bake deformers on a character)。
您可以使用 FBX 导出选项选择要在 FBX 文件中导出的内容。
如果从 3ds Max 导出,在处理以下内容时还有一些额外的注意事项:
3ds Max 的可编辑网格总是导出三角形。可编辑的多边形在导入时保留四边形和 N 边形。因此,如果要将四边形导入 Unity,必须在 3ds Max 中使用可编辑多边形。
如果要在 3ds Max 中导出基于骨骼的动画,请遵循以下准则:
将具有网格和动画的骨骼层级视图从 3ds Max 导出到 Unity 时,导出的游戏对象层级视图对应于您可以在 3ds Max Schematic View 中看到的层级视图。但是,Unity 使用游戏对象作为新根(包含动画),并将网格和材质信息放在根骨骼中。
如果您希望将动画和网格信息保留在同一 Unity 游戏对象中,在导出之前,请在 3ds Max 中将网格节点父级指定为骨骼层级视图中的骨骼。
如果要在 3ds Max 中导出变形目标,请遵循以下准则:
Unity 具有内置的光照贴图功能 (lightmapper),但您也可以使用纹理烘焙(Rendering 菜单上的 Render To Texture)功能和 3ds Max 中的自动展开 (unwrapping) 功能来创建光照贴图。
通常情况下,一个 UV 集用于主纹理和/或法线贴图,另一个 UV 集用于光照贴图纹理。为确保两个 UV 集都正确,请将 3ds Max 中的材质设置为标准材质,并设置 Diffuse(用于主纹理)和 Self-Illumination(用于光照贴图)贴图字段:
注意:如果对象使用 Shell 类型的材质,Autodesk 的 FBX Exporter 不能正确导出 UV。
或者,您可以使用多维/子对象 (Multi/Sub Object) 材质类型,并使用漫射贴图字段中的主纹理 (main texture) 和光照贴图 (lightmap) 设置两个子材质,如下图所示。但是,如果模型中的面使用不同的子材质 ID,这种方法会导致导入多个材质,此情况对性能而言并非最佳选择。
通过从 LightWave Layout 中的 File 工具栏选择 Save > Export > Export FBX 即可访问 LightWave 中的 FBX 导出设置窗口:
随后将显示 Export FBX 窗口。
属性: | 功能: | |
---|---|---|
FBX Filename | 设置 FBX 文件的名称和位置。应使用 Unity Assets 文件夹下的位置。 |
|
Anim Layer | 要使用的动画层的名称。 | |
Type | 使用 Binary 来减小文件大小,或使用 ASCII 生成文本可编辑的 FBX 文件。 | |
FBX Version | 从列表中选择最新的 FBX 版本,确保其与 Unity 使用的版本匹配。 | |
Export | ||
Models | 导出场景中的所有模型 | |
Morphs (Blend Shapes) | 导出场景中的所有混合形状 | |
Mesh type | ||
Cage (Subdivision Off) | 导出对象但不进行任何细分 | |
Subdivision | 导出网格时对其进行细分 | |
Re-parent bone hierarchy | 创建一个 null 充当骨骼层级视图的新父级。 从布局中导出骨架时,如果骨骼层级视图以网格为父级,变形网格的实际移动将是预期值的两倍。启用此新父级会使网格保持原样。 |
|
Materials | 转换 LightWave 的标准表面通道和图像映射。这不包括程序化纹理和节点。 | |
Embedded Textures | 将嵌入的纹理保存为直接包含在 FBX 文件中的图像映射,而不是保存到单独的图像目录。这会创建更大但更独立的 FBX 文件。 | |
Smoothing Groups | 将 LightWave 的法线转换为平滑组。 | |
Collapse Materials | 折叠具有相同材质名称的表面,分别导出材质。但是,如果材质名称和所有表面参数都匹配,则无论此设置如何,始终都会合并两个材质。 | |
Merge UVs | 将多个 UV 贴图折叠为每个对象的单个贴图。 | |
Unity 3D Mode | 纠正 LightWave、FBX 和 Unity 的坐标系之间的转换导致的旋转错误。 LightWave 和 Unity 均使用左手坐标系,但 FBX 使用右手坐标系。当 LightWave 导出到 FBX 时,它会沿 Z 轴转换为右手坐标。当 Unity 导入 FBX 文件时,它会沿 X 轴转换回左手坐标,从而使场景旋转 180 度。使用该设置意味着,当您进入 Unity 并向下观察 Z 轴时,导入的 FBX 看起来与在 LightWave 内部完全相同。 |
|
Cameras | 导出场景中的所有摄像机。 | |
Lights | 导出场景中的所有光照。 | |
Animations | 无需烘焙即可导出基于移动、旋转或缩放的简单动画。使用 IK 或动态的角色动画或其他动画仍应使用 Bake Motion Envelopes 进行烘焙。 | |
Bake Motion Envelopes | 当存在您不想捕获的设置帧时,设置烘焙的任意起始点和结束点。仅当选中 Animations 时才可用。 | |
Start Frame 和 End Frame | 仅导出此时间范围内的数据。 | |
Scale Scene | 为场景设置一个与 Unity File Scale 值匹配的缩放值。 |