注意:本节提供有关使用 FBX 转换的专有文件格式的信息。但是,有两种文件格式不使用 FBX 作为中介格式:SketchUp 和 SpeedTree。有关导入这些文件格式的更多信息,请参阅 SketchUp 设置和 SpeedTree 主题。
Unity 支持可能从许多 3D 建模应用程序导出的 FBX 文件。请遵循以下准则来确保获得最佳结果:
除了以上关于从 3D 建模应用程序执行导出操作的一般准则之外,有些 3D 建模应用程序在以下部分还有更具体的信息:
对于想导出的内容:有些场景对象必不可少,而其他可能不必要。 应用程序通常允许导出选定对象或整个场景。 可以通过仅保留基本对象来优化 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 建模软件中的导出选项设置。
Unity 的物理系统和光照系统希望游戏世界中的 1 米在导入文件中为 1 个单位。
不同 3D 包的默认值如下:
将模型文件从具有不同缩放因子的 3D 建模应用程序导入 Unity 时,可以通过启用 Convert Units 选项将文件单位转换为使用 Unity 比例。
您可以使用 FBX 导出选项选择要在 FBX 文件中导出的内容。
从 Maya 导出 BlendShape(变形)时,请遵循以下准则:
将文件导入 Unity 之后,请在__项目__视图中选择该文件,然后在 Model Importer 的 Animations 选项卡中启用 Bake Animations。
可以在 Maya 中创建非常复杂的角色骨架。出于性能原因,Unity 仅支持线性混合蒙皮:每个顶点有四个影响。如果您的角色使用四种以上的影响,则在将模型导入 Unity 中时,动画可能会出现波动或扭曲。或者,如果使用的是集群以外的变形,则动画可能完全不存在。
要解决此问题,请在从 Maya 导出模型之前使用 Bake Deformer 工具烘焙变形关节(使用 Maya 的顶部菜单:Skin > Bake Deformers to Skin Weights)。
有关更多信息,请参阅 Autodesk 文档中的在角色上烘焙变形体 (Bake deformers on a character)。
如果使用 IK 在 Cinema 4D 中对角色进行动画化,必须在导出之前使用 Cinema 4D 中的 Plugins > Mocca > Cappucino 菜单烘焙 IK。 如果您在导入 Unity 之前未烘焙 IK,则只能获得动画定位器 (locator) 和动画骨骼。
为了加快文件导入 Unity 的速度,可在导出之前关闭 Cinema 4D 中的 Embed Textures 偏好设置。请查看 Cinema 4D 文档了解相关说明。
您可以使用 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) | 导出场景中的所有 BlendShape | |
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 值匹配的缩放值。 |