Unity 模型导入设置

Model Import Settings 页面有四个选项卡, 分别是: Model, Rig, Animation, Materials

Model

Model 标签页主要是对模型进行设置, 共有三个方面的设置: Scene (场景), Meshes (网格), Geometry (几何)

Scene 设置

SceneView

Scale Factor

如果原始文件的比例 (来自模型文件) 不符合项目中的预期比例, 可以通过修改此值, 设置模型在 Unity 中的全局比例.

Convert Units

启用此选项可将模型文件中定义的模型比例转换为 Unity 的比例.

转换公式为: 1cm (file) ⇒ 0.01m (Unity)

Bake Axis Conversion

导入模型时, 如果模型使用的轴系和 Unity 中的轴系不一致,启用此属性可将轴转换结果直接烘焙到资源数据 (例如顶点或动画数据) 中.

禁用此属性可在运行时补偿根物体的 Transform 组件变换, 以模拟轴转换.

已知问题: Blender 导出的模型导入 Unity 后, 勾选此属性, 会在 Y 轴上产生 180 度旋转.

原因: Blender 中将 -Y 轴的外观定义为 "前视图", 但是 Blender 导出器在导出模型的时候却将 +Y 轴的外观定义为 "前视图", 因此这是 Blender 导出器的 Bug.

Import BlendShapes

允许 Unity 导入包含网格的 BlendShapes. (混合形状法线 / 表情), 导入混合形状法线时需要在 FBX 文件中具有平滑组.

比如模型表情的实现, 模型导入到 Unity 中后, 基础模型要开启 Import BlendShapes, 对应的面部 SkinnedMeshRenderer 上会多出 BlendShape 的配置, 调整这些值就可以看到表情变化了.

Import Visibility

导入可见性, 如果模型在导出之前设置为隐藏, 之后这个模型被导入到了 Unity 中, 并且勾选了这个选项, 那么模型拖到场景中之后就是隐藏的.

Import Cameras

是否导入摄像机, 有的模型会在制作时就打好了摄像机, 这时导出的 FBX 文件中便保存了摄像机的信息.

Import Lights

灯光信息是否导入, 模型的灯光信息已经在 3D 软件中制作好了, 是否导入.

Preserve Hierarchy

保留层次结构, 即使此模型只有一个根, 也要始终创建一个明确的预制根.

通常, 导入模型的时候, Unity 会从模型中剥离所有空的根节点作为优化策略, 但是, 如果有多个 FBX 文件, 且它们具有相同层次结构的某些部分, 则可以使用此选项保留原始层次结构. 这样即使是多个文件构成的一个模型, 他们的层级结构也不会乱.

Meshes 设置

MeshesView

Mesh Compression

压缩选项 效果
Off 不进行压缩
Low 使用低压缩比
Medium 使用中等压缩比
High 使用高压缩比

压缩网格, 在每个组件中使用网格边界和更低的位深来压缩网格数据.

提高压缩比可以减小网格的文件大小, 但是会降低网格的精度.

选用规则: 尽可能用压缩比高, 并且网格物体看起来与未压缩版本没有太大不同的压缩比率.

这用来优化游戏体积非常有用.

Read/Write Enabled

启用此选项后, Unity 会将 Mesh 数据上传到 GPU 可寻址内存, 同时也将其保留在 CPU 可寻址内存中.

这意味着 Unity 可以在运行时访问 Mesh 数据, 并且我们可以从脚本中访问它.

例如要按程序生成网格或者要从网格复制某些数据, 则必须要勾选此选项.

禁用此选项后, Unity 会将 Mesh 数据上传到 GPU 可寻址内存, 然后将其从 CPU 可寻址内存中删除.

默认情况下, 此选项是禁用的.

在大多数情况下, 应禁用此选项以节省运行时的内存使用量.

什么时候需要设置模型的 Read/Write Enabled ?

默认 Read/Write Enabled 不勾选的情况下, 粒子系统发射模型粒子时, 模型的 Mesh 是不可修改的, 如果想要在代码中实时地根据特定逻辑修改粒子系统中的粒子模型, 就必须将模型设置为 Read/Write Enabled.

只有在以下情况下才能启此选项:

  • 在代码中读取或写入网格数据. 比如代码中对 mesh 属性进行再次赋值时.
  • 将网格传递到 StaticBatchingUtility.Combine() 以在运行时合并网格时.
  • 使用网格以在运行时使用 NavMesh 构建组件来烘焙 NavMesh 时.
  • 当网格是凸面时, 可将网格与网格碰撞体一起使用, 并且网格碰撞体的变换具有负缩放时. 例如 (-1, 1, 1)
  • 将网格与网格碰撞体一起使用, 并且网格碰撞体的变换倾斜或截断时. 例如, 当旋转的变换具有缩放的父变换时
  • 将网格与网格碰撞体一起使用, 并且网格碰撞体的 Cooking Options 标志设置为默认值以外的任何值时.

[注意]

  • 当 Unity 通过脚本创建一个网格时, 该值最初设置为 true.
  • 未标记为可读的网格在运行时从脚本访问任何数据数组时将抛出错误.
  • Unity Editor 中, 在游戏和渲染循环之外始终允许访问, 无论此设置如何.

Optimize Mesh

优化 Mesh, 让 Unity 确定三角形在网格中列出的顺序. Unity 会对顶点和索引重新排序以改善 GPU 性能.

优化选项 效果
Nothing 不进行优化
Everything [默认值] 让 Unity 重排多边形和顶点的顶点和索引.
Polygon Order 让 Unity 仅对多边形重新排序
Vertex Order 让 Unity 仅对顶点重新排序

Generate Colliders

是否自动生成网格碰撞器.

用于为环境几何体快速生成碰撞网格, 禁止用于移动几何体.

Geometry 设置

GeometryView

Keep Quads

启用此属性可使 Unity 停止将包含四个顶点的多边形转换为三角形.

四边形的曲面细分要比多边形的曲面细分效率更高.

勾选此选项之后, 如果一个网格有四边形和三角形, 或者转换为三角形的 N 边形, 那么 Unity 会创建两个子网格来分离四边形和三角形. 一个子网格只包含三角形, 另一个只只包含四边形.

Weld Vertices

合并在空间中共享相同位置的顶点, 前提是这些顶点总体上共享相同的属性, 包括 UV, 法线, 切线和 VertexColor. 通过减少网格的总数量来优化网格的顶点计数.

默认情况下启用此选项.

Index Format

定义网格索引缓冲区的大小, 默认 Auto 即可.

Legacy Blend Shape Normals

启用此选项可基于 Smoothing Angle 值来计算法线.

Normals

定义是否以及如何计算法线.

  • Import [默认值] 从文件中导入法线. 如果文件不包含法线, 则将计算法线.
  • Calculate 直接根据 Normals Mode, Smoothness Source, Smoothing Angle 属性来计算法线.
  • None 禁用法线. 如果网格既未正常贴图,也不受实时光照的影响,则使用此选项。

Normals Mode

定义 Unity 计算法线的方式.

Smoothness Source

设置如何确定平滑行为

Smoothing Angle

控制是否为硬边拆分顶点. 通常, 值越大, 产生的顶点越少.

Tangents

定义如何导入或计算顶点切线.

Swap UVs

在网格中交换 UV 通道.

当漫射纹理使用光照贴图中的 UV 时需要勾选此选项.

Generate Lightmap UVs

为光照贴图创建第二个 UV 通道.

Rig

这个菜单项主要是对骨骼动画的类型进行设置.

Animation Type

动画类型 解释
None 不导入动画
Legacy 使用旧版动画系统
Generic 非人形骨架动画系统, 通用动画系统
Humanoid 人形骨架动画系统

None

静态组件选择 None, 不使用动画系统.

Legacy

使用传统的动画系统.

Generation 导入动画的方式.

  • Don’t Import 不导入动画
  • Store in Original Roots (Deprecated) 以原始根存储 (已弃用)
  • Store in Nodes (Deprecated) 存储在节点中 (已弃用)
  • Store in Root (Deprecated) 根存储 (已弃用)
  • Store in Root (New) 根存储 (新)

Skin Weights 设置可以影响单个顶点的最大骨骼数量.

Generic

通用动画系统

Avatar Definition 选择如何获取 Avatar 的定义

  • Create from this model 根据此模型创建 Avatar
  • Copy from Other Avatar 使用另一份 Avatar

Root node 设置 Avatar 的根节点

Source 另一份 Avatar 的引用

Skin Weights 设置可以影响单个顶点的最大骨骼数量

Max Bones/Vertex 定义每个顶点的最大骨骼数. 可为每个顶点设置 1 到 32 个骨骼, 但是用来影响顶点的骨骼数量越多, 性能成本就越高

Min Bone Weight 设置考虑骨骼权重的最低阈值. 权重计算将忽略小于此值的任何值, 并且 Unity 会将高于此值的骨骼权重放大, 且总计为 1.0

Optimize Game Object 在 Avatar 和 Animator 组件中删除和存储所导入角色的游戏对象变换层级视图. 如果启用此选项, 角色的 SkinnedMeshRenderer 将使用 Unity 动画系统的内部骨架, 因此可提高动画角色的性能.

Extra Transforms to Expose 指定已启用 Optimize Game Object 时, 希望 Unity 忽略的 Transform.

Humanoid

人形动画系统, 这个系统中的配置和 Generic 中的配置就只是多了一个 Configure… 按钮, 点击这个按钮会打开骨骼配置界面.

1
// TODO... 骨骼配置界面

Animation

将模型中配置好的动画导入到 Unity 中, 形成 Animation Clips 动画文件, "创建动画剪辑" 这一步实质上就是定义动画段的起点和终点, 使它们尽可能匹配所需循环的第一帧和最后一帧, 之后在 Animator Controller 中就可以拖入这个动画文件进行动画的混合 (Blend Trees), 转换, 过渡等操作.

model_animation

Import Constraints

是否要将此模型资源的约束导入到 Unity 中.

Import Animation

是否要将此模型资源的动画导入到 Unity 中.

Bake Animations

是否要通过反向动力学 (IK) 或模拟 (Simulation) 创建烘焙动画来推进运动关键帧.

这个选项仅适用于 Autodesk Maya, Autodesk 3ds MaxCinema 4D 文件.

Resample Curves

仅当导入文件包含欧拉曲线时才会显示此选项. [默认启用]

对模型中的动画曲线重新采样为四元数值, 并为动画中的每个帧生成一个新的四元数关键帧.

仅当原始动画中的关键点之间存在插值问题时, 才应禁用此选项来保留最初创作的动画曲线.

Anim. Compression

导入动画时要使用的压缩类型.

选项 解释
Off 禁用动画压缩
Keyframe Reduction 导入时减少冗余关键帧, 这个选项会影响动画文件大小(运行时内存)以及如何计算动画曲线
Keyframe Reduction and Compression 导入时减少关键帧并在文件中存储动画时压缩关键帧, 这仅影响文件大小, 运行时内存大小与 Keyframe Reduction 相同
Optimal 让 Unity 决定是通过减少关键帧还是通过使用密集格式来压缩动画, 此选项仅适用于 Generic 和 Humanoid 动画类型骨架

选择 Off 选项时, 意味着 Unity 不会在动画导入时减少关键帧数量, 因此可产生最高精度的动画, 但性能会降低, 文件会更大, 运行时内存大小将增加. 因此通常建议不要使用此选项 Off;

如果需要更高精度的动画, 应启用关键帧减少 (Keyframe Reduction) 功能并减小允许的 Animation Compression Error 值.

  • Rotation Error: 定义应减少的旋转曲线数量百分比.
  • Position Error: 定义应减少的位置曲线数量.
  • Scale Error: 定义应减少的比例曲线数量.

以上数值使用的值越小, 压缩时舍弃的曲线数越少, 获得的动画精度便越高.

Animated Custom Properties

不勾选的时候, Unity 在导入 FBX 文件时仅支持一小部分属性, 例如转换, 旋转, 缩放和可见性, 而勾选此选项之后可以导入指定为 "自定义用户属性" 的任何 FBX 属性. 之后可以使用 extraUserProperties 在导入器脚本中指定标准 FBX 属性来处理这些属性.

Loop Time

表示这个动画切片在被应用时, 是否要循环播放.

  • Loop Pose: 是否在循环播放的过程中, 对单次切片的开头和结尾时的姿态进行循环插值处理, 使开头和结尾连贯. 如果一个循环动画的首尾帧有差别, 选中这个选项 Unity 会对动画进行插帧让首尾帧看起来是连贯的, 循环起来没有缝隙, 但是很大概率会使动画变得很奇怪, 另外动画师一般都会做好可无缝循环的动画, 因此此选项基本不用.
  • Cycle Offset: 是一个 0 到 1 之间的数值, 用来设定循环时, 起始播放位置的偏移, 并不会改变动画的长度. 如果按照截断动画的角度去想, 可以理解为这个选项仅控制第一次播放的动画长度, 不影响后续的循环动画.

Additive Reference Pose

启用此选项可以设置附加动画层基础参考姿势的帧.

  • Pose Frame: 输入一个帧编号以用作参考姿势.

Curves

设置动画曲线.

Events

设置动画事件.

Mask

设置动画遮罩.

Motion

设置根运动节点.

Materials

Materials

Material Creation Mode

定义希望 Unity 如何为模型生成或导入材质.

  • None

    不使用此模型中嵌入的任何材质, 而是使用 Unity 的默认漫射材质.

  • Standard

    使用默认规则来生成材质.

  • Import via MaterialDescription

    使用 FBX 文件中嵌入的材质描述来生成材质, 即可以自定义导入规则. 另外此方法可提供更准确的结果, 支持更广泛的材质类型.

sRGB Albedo Colors

启用此选项可在伽马空间中使用反照率颜色. 对于使用线性颜色空间的项目, 需要禁用此选项.

Location

定义如何访问材质和纹理.

  • Use Embedded Materials

    将导入的材质保持在导入的资源中.

  • Use External Materials (Legacy)

    将导入的材质提取为外部资源.