在Unity外部创建资源
# 在 Unity 外部创建资源
可以在 Unity
外部为游戏角色、地形和其他环境对象创建复杂的模型,并将它们导入。例如,可以在 Blender
或 Autodesk® Maya®
中为地形创建 SpeedTree
模型以及创建游戏对象。
# 缩放因子
Unity
的物理系统和光照系统希望游戏世界中的 1
米在导入的模型文件中为 1
个单位。
不同 3D
包的默认值如下:
.fbx
、.max
、.jas
= 0.01.3ds
= 0.1.mb
、.ma
、.lxo
、.dxf
、.blend
、.dae
= 1
# 角色建模的性能优化
要设计角色模型以实现最佳渲染和动画速度,请遵循以下要求:
# 使用单个带蒙皮的网格渲染器
对于每个角色,仅应使用单个带蒙皮的网格渲染器。Unity 使用可见性剔除和包围体更新来优化动画,这些优化仅在您将单个动画组件和单个带蒙皮的网格渲染器组合使用时才会生效。如果使用两个蒙皮网格代替单个网格,模型的渲染时间大概会是单个网格的两倍,并且这样做很少能带来实际的意义。
# 使用尽可能少的材质
可能减少每个网格上的材质数量。只有在需要为角色的不同部分使用不同着色器(例如,眼睛的特殊着色器)时,才应对一个角色使用多种材质。其余大多数情况下,每个角色有两到三种材质就应该足够了。
# 使用尽可能少的骨骼
一般来说,骨骼的数量越少,性能就越好。但有些时候,您需要创建具有大量骨骼的角色:例如,在需要大量可自定义的连接时。这些额外骨骼会增加构建大小,并且每个额外的骨骼都可能带来相对处理成本。例如,在通用模式下,已拥有 30
个骨骼的绑定上增加 15
个骨骼会让 Unity 再花费 50% 的时间来解析,这可能会影响解析所花费的时间。
请注意,对于通用和人形类型,您可以额外添加骨骼。如果未播放使用额外骨骼的动画,则处理成本应该可以忽略不计。如果连接不存在或为隐藏状态,此成本甚至会更低。
出于性能原因,请使用每个顶点最多有四个影响的线性混合蒙皮。但是,某些 3D 建模应用程序允许四个以上的骨骼对顶点产生影响,因此必须在性能成本与更大程度的控制之间进行权衡
# 尽量减少多边形数量
您应该使用的多边形数量取决于您需要达到的视觉质量,以及您的目标平台。然而,以下两个相互冲突的事实都正确:
- 在网格中使用的多边形越少,应用程序运行的速度就越快。这是因为每个顶点、边或面都需要计算资源。
- 在网格中使用的多边形越多,游戏对象的外观就越细致和自然,因为较小的多边形使您可以在更大程度上控制形状。
此外,还需要考虑其他元素也会争夺渲染资源。如果同时在屏幕上有很多游戏对象或地形对象,请考虑减少每个网格的多边形数量。
与移动平台相比,桌面平台通常可以处理更多的复杂性,但是移动平台的性能可能会因设备本身的质量和能力而千差万别。
# 正向和反向动力学保持分离
在导入动画时,Unity
会将模型的反向动力学 (IK
) 节点将烘焙为正向动力学 (FK
),因此 Unity
根本不需要 IK
节点。但是,如果这些节点留在了模型中,那么即使不影响动画,Unity
也会计算它们。可以在 Unity
或 3D
建模应用程序中删除冗余的 IK
节点。为了方便删除 IK
节点,应在建模时保留单独的 IK
和 FK
层级视图。
# 导出人形资源
为了充分利用 Unity 的人形动画系统和重定向,需要具有骨架式
和蒙皮式
人形类型网格。
角色模型通常由 3D 建模软件中的多边形组成,或者需要在导出之前从较复杂的网格类型转换为多边形或三角形网格。
为了控制角色的移动,必须创建一个
关节层级视图
或骨架
,在其中定义网格内的骨骼以及它们相对于彼此的移动情况。创建此类关节层级视图的过程称为骨架绑定(rigging
)。随后必须将网格或皮肤连接到关节层级视图。这定义了给定关节进行动画化时,角色网格的哪个部分移动。将骨架连接到网格的过程称为
蒙皮 (skinning)
。
# 获取人形模型
获取 Unity 动画系统中使用的人形模型主要有三种方法:
使用程序化角色系统或角色生成器(如
Poser
、Makehuman
或Mixamo
)。这些系统中,有些系统可对网格进行骨架绑定和蒙皮(如Mixamo
),而其他的则不能。此外,如果使用这些方法,可能需要减少原始网格中的多边形数量,以使其适合在 Unity 中使用。从
Unity Asset Store
购买演示示例和角色内容。使用
3D
建模应用程序从头开始对您自己的角色进行建模、骨骼绑定和蒙皮。
# 建模
对网格进行排列,使角色的双脚站在模型的局部原点或“
锚点
”上。由于角色通常在地面上直立行走,如果其锚点(即其变换位置)直接位于该地面上,则会大幅降低处理难度。如有可能,以 __T 形姿势__建模。这样可提供在必要位置(例如腋下)细化多边形细节的空间。此外也更容易将骨架放置在网格内。
在构建时,清理您的模型。在可能的情况下,请盖住孔洞、焊接顶点并移除隐藏面。这有助于蒙皮,尤其是自动蒙皮过程。
# 骨架绑定
此过程创建关节骨架来控制模型运动。
3D 建模软件提供了多种方法为人形骨架创建关节。从现成的两足动物骨架(可以缩放这些骨架来适应个人需求的网格),一直到用于单独骨骼创建和父子化以自行创建骨骼结构的工具。为了在 Unity 中与动画结合使用,请确保它们是骨骼层级视图的根元素。骨架中至少需要 15
个骨骼。
骨架必须具备所需的最少骨骼才能让 Unity 产生有效的匹配。为了提高与 Avatar
相匹配的机会,请确保骨骼的命名方式反映了其所代表的身体部位。例如,“LeftArm
”和“RightForearm
”明确显示了这些骨骼的控制对象。
关节/骨骼层级视图应遵循所创建的角色的自然结构。鉴于手臂和大腿成对出现,应使用一致的约定来命名它们(例如,左臂为“arm_L
”,右臂为“arm_R
”)。层级视图的可能结构包括:
* HIPS - spine - chest - shoulders - arm - forearm - hand
* HIPS - spine - chest - neck - head
* HIPS - UpLeg - Leg - foot - toe - toe_end
此过程的一些一般准则包括:
最初使用自动化过程来设置某种蒙皮(请参阅 3D 建模软件提供的蒙皮教程)。
为骨架创建简单的动画,或导入一些动画数据用于蒙皮测试。这样应该就能快速评估蒙皮是否在运动中看起来良好。
逐步编辑和优化蒙皮解决方案。
出于性能原因,在使用软性绑定时,请考虑将影响数限制为最多四个。这是 Unity 默认支持的最大数量。如果您的网格使用四个以上的影响,则可以选择以下两个选项之一:
- 使用
Skin Weights
属性增大最大影响数。 - 在从
Maya
导出模型之前使用Bake Deformer
工具烘焙变形关节(使用Maya
的顶部菜单:Skin > Bake Deformers to Skin Weights
)。有关更多信息,请参阅Autodesk
文档中的在角色上烘焙变形体 (Bake deformers on a character
)。
- 使用
# 导出FBX文件
对于想导出的内容:有些场景对象必不可少,而其他可能不必要。 应用程序通常允许导出选定对象或整个场景。 可以通过仅保留基本对象来优化 Unity 中的数据。
如果选择仅导出场景中的特定对象,则可以:
- 仅导出选定对象(如果应用程序支持此功能)。
- 从场景中删除不需要的数据并导出整个场景。
- 制作预设或自定义场景导出器以自动化或简化选择导出过程。
# 准备需要包含的内容
对象:
网格 (
Meshes
)动画 (
Animation
)混合形状 (
Blend Shapes
) 或变形 (Morphing
)确保分配了混合形状 (Blend Shapes
) 或变形目标。正确设置导出网格。烘焙变形体 (Bake deformers
)在导出到FBX
之前,请确保将变形体烘焙到模型上。例如,如果要从Maya
导出复杂骨架,则可以在将模型导出到FBX
之前将变形烘焙到蒙皮权重上。纹理 (Textures
)|确保您的纹理来自Unity
项目,或者将它们复制到Unity
项目中的名为textures
的文件夹。注意:建议不要使用
Embed Media
选项在FBX
文件中嵌入纹理。在使用纹理之前必须提取纹理,因此嵌入它们只会导致项目出现不必要的臃肿问题并减慢导入过程平滑 (
Smoothing
)
# 设置 FBX 导出选项
检查 FBX
导出设置:
- 检查
3D
建模应用程序的导出对话框中的每项设置,以便了解与Unity
中的FBX
导入设置的匹配情况。 - 根据需要选择是否导出动画 (
Animation
)、变形 (Deformations
)、皮肤 (Skins
)、变体 (Morphs
)。 - 节点、标记及其变换可以导出到
Unity
。 - 选择要导入
Unity
的任何摄像机 (Cameras
)、光照 (Lights
) 和可见性 (Visibility
) 设置。 - 尽可能使用最新版本的
FBX
。Autodesk
会定期更新其FBX
安装程序。 - 确保在将文件导入
Unity
时使用的FBX
版本与从3D
建模应用程序中导出时使用的版本相同。使用不同版本的软件可能产生意想不到的结果。
# 从Autodesk® Maya® 导出
导出混合形状(变形)
从
Maya
导出混合形状(变形)时,请遵循以下准则:- 将混合形状按顺序应用于导出网格及其目标。
- 如果需要
Maya
动画关键帧,可在混合形状节点上对关键帧进行动画化。 - 导出网格之前,在
Maya
中启用Animation > Deformed Models > Blend Shapes FBX
导出选项。 - 如果还想导出皮肤变形,则应在导出网格之前在
Maya
中启用Animation > Deformed Models > Skins FBX
导出选项。
将文件导入
Unity
之后,请在项目视图中选择该文件,然后在Model Importer
的Animations
选项卡中启用Bake Animations
。导出复杂变形
可以在
Maya
中创建非常复杂的角色绑定。出于性能原因,Unity
支持每个顶点默认最多有四个影响的线性混合蒙皮。如果您的角色使用四种以上的影响,请在将模型导入Unity
中时遵循以下说明:- 从
Import Settings
窗口的Rig
选项卡中,选择Skin Weights
下拉菜单中的Custom
。Skin Weights
下拉菜单中会出现两个新的属性。 - 在
Max Bones
/Vertex
属性中设置要用作影响的最大骨骼数。 - 还可以调整
Min Bone Weight
属性作为优化手段。这是Unity
在计算影响力时用于确定是否应该包括骨骼位置的阈值。如果骨骼几乎没有影响,则可以通过不将该骨骼包含在计算中来节省一些资源。
如果选择坚持使用默认的最大值,并且您的网格具有四个以上的影响,则变形可能会出现扭曲。或者,如果使用的是聚类以外的变形,则变形可能完全不存在。
- 从
# 从 Autodesk® 3ds Max® 导出
导出四边形
3ds Max 的可编辑网格总是导出三角形。可编辑的多边形在导入时保留四边形和 N 边形。因此,如果要将四边形导入 Unity,必须在 3ds Max 中使用可编辑多边形。
基于骨骼的动画
- 设置骨骼结构和动画(使用正向动力学 (
FK
) 或IK
)后,选择所有骨骼和/或IK
解算器。 - 选择
Motion > Motion Paths > Collapse
。Unity
会生成一个关键点过滤器,因此导出的关键点数量无意义。 - 在
FBX Exporter
窗口上,单击OK
按钮。 - 将
FBX
文件复制到Assets
文件夹中。 - 打开
Unity
并将纹理重新分配给根骨骼中的材质。
将具有网格和动画的骨骼层级视图从
3ds Max
导出到Unity
时,导出的游戏对象层级视图对应于您可以在 3ds Max Schematic View 中看到的层级视图。但是,Unity 使用游戏对象作为新根(包含动画),并将网格和材质信息放在根骨骼中。如果您希望将动画和网格信息保留在同一Unity
游戏对象中,在导出之前,请在3ds Max
中将网格节点父级指定为骨骼层级视图中的骨骼。- 设置骨骼结构和动画(使用正向动力学 (
变形目标(混合形状)
- 将变形体修改器 (
Morpher Modifier
) 应用于导出网格,并在通道列表 (Channel List
) 中设置适当的变形目标。 - 如果需要
3ds Max
动画关键帧,可在网格/修改器上对关键帧进行动画化。 - 导出网格之前,在
3ds Max
中启用Animation > Deformed Models > Blend Shapes FBX
导出选项。 - 如果还想导出皮肤变形,则应在导出网格之前在
3ds Max
中启用Animation > Deformed Models > Skins FBX
导出选项。
- 将变形体修改器 (
用于光照贴图的 UV 集
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 导出
通过从 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 值匹配的缩放值。 |
# 模型导入限制
# 从 Autodesk® Maya® 导入对象
Unity
通过 FBX
格式导入 Autodesk® Maya®
文件(.mb
和 .ma
),支持以下内容:
- 所有节点以及位置、旋转和缩放;轴心点和名称也会导入
- 网格以及顶点颜色、法线和最多 2 个 UV 集
- 材质以及纹理和漫射颜色;每个网格多种材质
- 动画
- 关节
- 混合形状
- 光照和摄像机
- 可见性
- 自定义属性动画
限制
Unity
不支持 Autodesk® Maya®
的旋转轴 (Rotate Axis
)(旋转前)。
关节限制包括:
- 关节方向 (
Joint Orient
)(仅限关节旋转后) - 分段缩放补偿 (
Segment Scale Compensate
)(仅限关节选项)
# 从 Autodesk® 3ds Max® 导入对象
Unity
通过 FBX
格式导入 Autodesk® 3ds Max®
文件 (.max
),支持以下内容:
- 所有节点以及位置、旋转和缩放;轴心点和名称也会导入
- 网格以及顶点颜色、法线和一个或多个 UV 集
- 材质以及漫射纹理和颜色。每个网格多种材质
- 动画
- 基于骨骼的动画
- 变形目标(混合形状)
- 可见性
# 从 Cheetah3D 导入对象
Unity
通过 FBX
格式导入 Cheetah3D
文件 (.jas
),支持以下内容:
- 所有节点以及位置、旋转和缩放;轴心点和名称也会导入
- 网格以及顶点、多边形、三角形、UV 和法线
- 动画
- 材质以及漫射颜色和纹理
# 从 Modo 导入对象
Unity
通过 FBX
格式导入 Modo
文件 (.lxo
),支持以下内容:
- 所有节点以及位置、旋转和缩放;轴心点和名称也会导入
- 网格以及顶点、法线和 UV。
- 材质以及纹理和漫射颜色;每个网格多种材质
- 动画
开始前,请将 .lxo
文件保存到项目的 Assets
文件夹。在 Unity
中,该文件显示在项目视图中。
Unity
检测到 .lxo
文件变化后会重新导入资源。
# 从 Lightwave 导入对象
- 所有节点以及位置、旋转和缩放;轴心点和名称也会导入
- 网格以及最多 2 个 UV 通道
- Normals
- 材质以及纹理和漫射颜色;每个网格多种材质
- 动画
- 基于骨骼的动画
还可以配置 Lightwave AppLink
插件,该插件会自动保存第一次将 Lightwave
场景文件导入 Unity
时使用的 FBX
导出设置。
限制
应将 Lightwave
特有的材质烘焙为纹理,以便 Unity
可以读取它们。有关使用非破坏性管线执行此操作的信息。Unity
不支持样条曲线和面片。必须将所有样条曲线和面片转换为多边形后才能保存和导出到 Unity
。
# 从 Blender 导入对象
Unity
通过 FBX
格式导入 Blender
(.blend
) 文件,支持以下内容:
- 所有节点以及位置、旋转和缩放;轴心点和名称也会导入
- 网格以及顶点、多边形、三角形、UV 和法线
- 骨骼
- 蒙皮网格
- 动画
限制
纹理和漫射颜色不会自动分配。将纹理拖动到 Unity Scene 视图中的网格上来手动分配它们。