Contents

模型导入相关参数

Unity中使用的模型

Unity支持很多模型格式(fbx、dae、3ds、dxf、obj)等

99%的模型都不是在Unity中制作的,是美术人员在建模软件中制作

虽然Unity支持很多模型格式 但是官方建议在模型软件中导出为FBX格式后再使用

FBX模型格式的优势

  1. 减少不必要的数据,提升导入效率
  2. 不需要在每台计算机上安装建模软件的授权副本
  3. 对Unity版本无要求,使用原始3D模型格式可能会因为版本不同导致错误或意外

导入模型的基本流程

  1. 美术同学用3D建模软件制作好模型导出FBX格式模型资源
  2. 程序将这些模型资源导入到Unity的资源文件夹中
  3. 在Unity内部对这些模型进行基础设置-模型、骨骼、动作、材质等

模型页签(Model)

该页签用于设置

模型比例设置

是否导入模型中的摄像机和光源

网络压缩方式等等相关设置

修改模型中存储的各种元素和属性

最终会影响Unity中使用模型时的一些表现


模型页签参数

Scene场景相关设置

/usr/uploads/2024/06/image-20240628163358856.png

Scale Factor 当模型中的比例 不符合项目中预期的比例时 可以修改此值来改变模型的全局比例 Unity的物理系统希望游戏世界中的一米在导入模型文件中为1个单位

Convert Units 启用可将模型文件中定义的模型比例转换为Unity的比例 不同格式的比例如下: .fbx .max .jas = 0.01 .3ds .ma .lxo .dxf .blend .dae = 1

Import Blendshapes 是否允许Unity随网络一起导入混合形状 当导入包含混合形状时,请使用Skinned Mesh Renderer组件 注意:

  1. 导入混合形状发现需要在FBX文件中具有平滑组
  2. 如果想要导入具有法线的混合形状 把下方Blend Shape Normals属性设置为Import,将使用FBX文件的法线 或者把下方的Blend Shape Normals属性设置为Calculate,Unity使用相同的逻辑来计算网络和混合形状上的法线

Import Visibility 是否导入可见性 开启后可以从FBX文件中读取可见性属性。 比如模型动作里 有些动作是要隐藏模型形象的,开启后才会生效 一些3D建模软件对可见性属性不支持或者有限制 比如Maya和Blender就对可见性有限制 所以一般这个选项要根据使用的建模软件决定 一般不勾选

Improt Camera 是否导入摄像机 是否把FBX文件中的摄像机也导入 Unity只支持FBX中摄像机的部分属性,比如正交或者透视,是否支持动画、物理属性、远近裁剪面等等 一般不勾选

Import Lights 是否导入光源 支持的光源类型: 全局光、聚光灯、方向光、面光源 支持的光源属性: 范围、颜色、强度、角度

Preserve Hierarchy 始终创建一个显示预制体根 通常导入的时候,FBX会将模型中的空根节点进行优化去掉他 但是如果多个FBX文件中包含同一层级的空跟对象,可以勾选他来保留他们 主要作用是:比如有两个fbx文件,1包含骨骼和网络,2只包含骨骼。如果不启用他导入2,那么Unity会剥离根节点,会让层级不匹配 让动画不能正常播放

Sort Hierchy By name 在层级窗口中根据名字排列子物体 如果不启用,会保留FBX文件中定义的层级顺序


Meshes网络相关设置

/usr/uploads/2024/06/image-20240628163407586.png

Mesh Comperession 网格压缩 设置压缩比减小网络的文件大小 提高压缩比会降低网络的精度 /usr/uploads/2024/06/image-20240628163421690.png

  • off 不使用压缩
  • Low 低压缩比
  • Medium 中等压缩比
  • High 高压缩比

Read/Write Enabled 是否开启读写网络信息 如果开启,Unity将网格数据传给GPU后,在CPU中还会保留可寻址内存,意味着我们可以通过代码访问网格数据进行处理 如果不开启,Unity将网格数据传个GPU后,会将CPU中的可寻址内存中网格数据删除,我们无法再得到网格数据 开启时,会增加内存占用,关闭时,可以节约运行时内存使用量 何时开启?

  1. 需要在代码中读取或写入网格数据
  2. 需要运行时合并网格
  3. 需要使用网格碰撞器时
  4. 需要运行时使用NavMesh构建组件来烘焙NavMesh时 等等

Optimize Mesh 确定三角形在网格中列出的顺序以提高GPU性能

  • Nothing:无优化
  • Everything:对顶点以及多边形顶点索引进行重新排序
  • Polygon Order:仅对多边形重新排序
  • Vertex Order:仅对顶点重新排序

Generate Colliders 生成碰撞器 启用后会自动附加网格碰撞器的情况下导入你的网格 建议不移动的环境几何体可以开启它,但是需要移动的几何体建议不要开启它


Geometry几何体相关设置

/usr/uploads/2024/06/image-20240628163438039.png

Keep Quads 保留四边形 启用后,Unity不会将4个顶点的多边形转为三角形 当使用曲面细分着色器时可能需要启用此选项,因为四边形的曲面周色漆比多边形的效率更高 Unity 可以导入任意类型的多边形(三角形到 N 边形)。顶点数量超过四个的多边形将始终转换为三角形,无论此设置如何。 如果一个网格有四边形和三角形(或者转换为三角形的 N 边形),那么 Unity 会创建两个子网格来分离四边形和三角形。每个子网格要么只包含三角形,要么只包含四边形。

Weld Vertices 合并在空间中共享相同位置的顶点,前提是这些顶点总体上共享相同的属性(UV,法线,切线等等) 开启后相当于会通过减少网格的总数量来优化网格的顶点计数 一般都开启,除非你想有意保留这些重复顶点,之后想通过代码去获取他们来进行处理

Index Format 网格索引缓冲区的大小 /usr/uploads/2024/06/image-20240628163450486.png 一般都选择16bits,Auto可以会默认选择16bits 只有在必要时使用32bit 16bits即通用又节约内存

Legacy Blend Shape Normals 启用后会基于Smoothing Angle值来计算法线

Normals 定义如何计算法线 /usr/uploads/2024/06/image-20240628163500000.png

  • Import:从文件中导入法线,如果文件中不包含发现信息,将使用Calculate模式计算法线
  • Calculate:根据Normals Mode、Smoothness Source和Smoothing Angle属性来计算发现
  • None:不计算法线

Blend Shape Normals /usr/uploads/2024/06/image-20240628163507552.png 定义如何为混合形状计算法线 只有当Legacy Blend Shape Normals禁用时出现

Normals Mode /usr/uploads/2024/06/image-20240628163529647.png 计算法线的模式,只有当上方的Normals设置为Import和Calculate才会出现

Smoothness Source /usr/uploads/2024/06/image-20240628163547700.png 如何确定平滑,哪些边应该平滑,哪些应该粗糙 只有当Legacy Blend Shape Normals 禁用时出现

  • Prefer Smoothing Groups:尽可能使用模型文件中的平滑组
  • From Smoothing Groups:仅使用模型文件中的平滑组
  • From Angle:使用Smoothing Angle值来确定哪些边应该是平滑的
  • None:不拆分硬边的任何顶点

Smoothing Angle 控制是否为硬边拆分顶点 通常,值越大,产生的顶点越少 仅当Normals设置为Calculate时才可用 注意:此设置仅用于非常光滑的或者非常复杂的模型,否则,最好在3D建模软件中手动平滑然后导入,始终建议建模的时候就做好,更加准确

Tangents /usr/uploads/2024/06/image-20240628163555685.png 定义如何导入或计算顶点切线 仅当Normals设置为Calculate或Import时,此属性才可用

Swap UVs 在网格中交换UV通道。如果漫反射纹理使用光照贴图中的UV,请使用此选项

Generate Lightmap UVs 为光照贴图创建第二个UV通道


Rig操纵(骨骼)页签

该页签用于设置

如何将骨骼映射到导入模型的网络,一边能够将其动画化

对于人形角色模型,需要分配或创建Avatar(替身信息)

对于非人性角色模型,需要在骨骼中确定根骨骼

简单来说 Rig页签主要是设置骨骼和替身系统相关信息的

设置了他们,动画才可以正常播放


Rig操纵(骨骼)页签参数

无动画类型(none)

/usr/uploads/2024/06/image-20240628162920796.png

不存在动画,主要用于一些环境静态模型


人性模型类型(Humanoid)

/usr/uploads/2024/06/image-20240628162933625.png

人形模型 一般情况下,有头和四肢(一个头两条腿两只手)为人形 人形模型需要使用Avatar化身系统 绑定人主要关节的映射关系

Avatar Definition 选择获取Avatar定义的位置 /usr/uploads/2024/06/image-20240628162946410.png

  • No Avatar:没有化身系统信息
  • Create From This Model:根据此模型创建Avatar化身信息
  • Copy from Other Avatar:指向另一个模型上设置的Avatar化身信息

Source 复制另一个具有相同骨架的Avatar化身信息以导入其动画剪辑 /usr/uploads/2024/06/image-20240628163024090.png 使用Copy From Other Avatar时才有

Avatar Definition Configure…:打开Avatar化身配置 使用Create From This Model时才有 /usr/uploads/2024/06/image-20240628163034202.png

Skin Weights 设置影响单个顶点的最大骨骼数量 /usr/uploads/2024/06/image-20240628163047232.png

  • Standard(4 Bones):使用最多4个骨骼来产生影响。默认值,处于对性能考虑,建议使用此设置
  • Custom:设置自定义的最大骨骼数,选择后会出现下方的两个选项
  • Max Bones/Vertex:定义每个顶点的最大估个数,值越大性能消耗越大
  • Max Bone Weight:设置考虑骨骼权重的最低阈值,权重计算时将忽略小于此值的内容

Optimize Game Objects /usr/uploads/2024/06/image-20240628163120201.png 在Avatar化身系统和Animator动画组件中删除和存储所导入角色的游戏对象骨骼层级信息。如果启用会出现下方的Extra Transforms to Expose选项。角色将使用Unity动画系统的内部骨架,可以提高动画角色的性能

Extra Transforms to Expose 要公开的骨骼层级,在下方打钩将公开该骨骼层级信息 放大镜:通过名称搜索对应骨骼信息 Toggle All:全选或者反选 Collapse All:全部折叠 Expand All:全部展开


通用模型类型(Generic)

通用模型,非人形模型 不是标准的人形模型,可以是任意形状,可能有8只腿两个头等等 这种模型主要需要设置骨骼根节点 /usr/uploads/2024/06/image-20240628163135620.png

  • Root Node 选择用于此Avatar的根节点的骨骼(仅当选择Create From This Model才会出现)

旧版动画类型(Legacy)

旧版动画类型 与Unity3.x及更早版本导入和使用动画 一般不使用 /usr/uploads/2024/06/image-20240628163148823.png

Generation 动画导入方法 /usr/uploads/2024/06/image-20240628163156937.png

  • Don’t Import:不导入动画
  • 第2~4个选项:已禁用,勿使用
  • Store in Root(New):导入动画将其存储在模型的根节点中

Avatar替身信息设置

/usr/uploads/2024/06/image-20240628163241524.png

Mapping 关节映射信息设置

Muscles&Settings 肌肉和设置


动画页签(Animation)

当我们选中包含动画剪辑的模型时该页签将显示动画设置相关的内容 动画剪辑是Unity动画的最小构成元素代表一个单独的动作 当美术同学做好动画导出时建议将模型和动画文件分别导出

  1. 导出包含网格信息不包含动作信息模型
  2. 导出不包含网格信息包含动作信息的动作(模型)文件

具体的导出规则可以参考

  1. 如何导入外部创建的模型资源

    https://docs.unity.cn/cn/2019.4/Manual/CreatingDCCAssets.html

  2. 使用多个模型文件来导入动画

    https://docs.unity.cn/cn/2019.4/Manual/Splittinganimations.html

Animation动画页签的4大部分

  1. 基础信息设置
  2. 动画剪辑属性基本设置
  3. 动画剪辑属性其它设置
  4. 预览窗口

基础信息设置

/usr/uploads/2024/06/image-20240628162639824.png

Import Constraints 从此资源导入约束 启用后,Unity会自动添加相应的约束组件并将其关联到正确的游戏对象

Import Animation 从此资源导入动画 如果禁用则不会有下面的参数,并且不会导入任何动画

Bake Animation 通过反向动力学(IK)或模拟创建的动画以便推进运动帧,仅用于Maya、3Dmax和Cinema4D文件

Anim.Compression 导入动画时使用的压缩类型 /usr/uploads/2024/06/image-20240628162650690.png

  • Off 禁用动画压缩 再导入Unity时不会减少关键帧的数量,效果好性能较低,文件较大,运行时占用的内存也大通常不建议使用
  • Keyframe Reduction 减少冗余关键帧 仅适用于Geneic通用动画类型
  • Keyframe Reduction and Compression减少关键帧并在文件中存储动画时压缩关键帧 会影响文件大小,但是内存大小和Keyframe Reduction相同 仅适用于Legacy旧版动画类型
  • Optimal 让Unity决定如何压缩 仅适用Generic通用和Humanoid人形动画类型

容错百分比 如果原始值和消减值之间的差 小于原始值乘以容错值的百分比,会删除关键帧 这些内容仅在 Keyframe Reduction或Optimal 压缩时可用

  • Rotation Error 设置旋转曲线压缩容错度(百分比),原始旋转值和减少值之间的最小角度
  • Position Error 设置位置曲线压缩容错度(百分比)
  • Scale Error 设置缩放曲线压缩容错度(百分比) Animated Custom Propreties 导入指定为自定义用户属性的任何fbx属性

动画剪辑选择列表

/usr/uploads/2024/06/image-20240628162631129.png

动画剪辑选择列表

可以看到所有的动画剪辑

通过+或-来新增剪辑或者删除所选的剪辑

在这里选择一个动画剪辑后 我们可以在下方编辑具体的相关属性信息


动画剪辑属性基本设置

动画剪辑名称可编辑修改 /usr/uploads/2024/06/image-20240628173633728.png

时间轴

/usr/uploads/2024/06/image-20240628173703014.png

  • Start动画剪辑的开始帧
  • End动画剪辑的结束帧
  • 我们可以在时间轴中定义每个动画剪辑的帧范围

参数设置

/usr/uploads/2024/06/image-20240628174034108.png

Loop Time 播放动画剪辑时是否循环播放,到结尾时重新开始

Loop Pose 无缝循环运动

Cycle Offset 循环动画在其他时间开始时的周期偏移

Loop Match 循环匹配


动画位置相关参数

Root Transform Rotation根位置的角度 /usr/uploads/2024/06/image-20240628174124472.png

Bake Into Pose 将根旋转烘焙到骨骼移动,禁用此选项将存储为根运动

Based Upon 根旋转的基础

  • Original:保持源文件中的原始旋转
  • Root Node Rotation:使用根节点的旋转(仅适用Generic通用动画类型)
  • Body Orientation:保持上半身朝前(仅适用于Humanoid人形动画类型)

Offset 根旋转偏移(单位:度)

Root Transform Position(Y) 根垂直位置(Y轴方向) /usr/uploads/2024/06/image-20240628174839243.png

  • Bake Into Pose 将垂直根运动烘焙到骨骼移动。禁用此选项将会存储为根运动
  • Based Upon(at Start) 垂直方向根位置的基础
  • Original 保持源文件中的垂直位置
  • Root Node Position 使用垂直根位置(仅适用Generic通用动画类型)
  • Center Of Mass 保持质心与根位置对其(仅适用Humanoid人形动画类型)
  • Feet 保持双脚与根变换位置对齐(仅适用Humanoid人形动画类型)
  • Offset 垂直根位置偏移

Root Transform Position(XZ) 根水平位置(XZ平面) /usr/uploads/2024/06/image-20240628174904274.png

  • Based Upon 水平根位置的基础
  • Original 保持源文件中的水平位置
  • Root Node Position 使用水平根位置(仅适用Generic通用动画类型)
  • Center Of Mass 保持与根位置对齐(仅适用Humanoid人形动画类型)

Additive Reference Pose: 启用后可以设置附加动画层基础参考姿势的帧。在时间轴中可以看到蓝色标记 附加动画层:在动画控制器(状态机)中可以添加新的动画层

Pose Frame: 当启用参考姿势帧时,该项就是选择的具体是哪一帧


动画剪辑属性其他设置

曲线Curves

/usr/uploads/2024/06/image-20240628202611627.png

曲线可以配合Animator作为参数,通过加入曲线值可以利用他标记重要的点 可以修改曲线的名字,名字就类似参数名 可以通过加减来添加或删除曲线信息

/usr/uploads/2024/06/image-20240628202636987.png

曲线中的值X轴代表标准化时间(0~1)代表动画的开始和结尾 Y轴的值可以根据需求自己设置 也可以使用下方提供的预设曲线


动画事件Events

/usr/uploads/2024/06/image-20240628202714239.png

动画事件 类似Animation窗口中的动画事件 可以在这里为动画剪辑添加一个事件,当动画播放到事件处时会自动找对象脚本中的同名函数 当我们希望在动画某一时刻进行逻辑处理时非常常用 比如某一时刻进行伤害判断


动画遮罩Mask

/usr/uploads/2024/06/image-20240628202742388.png

动画遮罩 主要作用是当播放该动画时,可以指定哪一部分或者哪些骨骼排除在外不受动作影响 Humanoid(人形动画的快捷设置) 我们分别可以控制 头、左右臂、左右手、左右腿、根等 点击他们让他们变成红色,就代表做该动作时不影响该部位

Transform(明确指定哪些骨骼关节点不受影响)

/usr/uploads/2024/06/image-20240628202752481.png

当导入的动画剪辑包含根运动时 我们可以在这里手动设置特定骨骼关节点作为我们的根运动节点

展开后看到的都是骨骼关节节点

/usr/uploads/2024/06/image-20240628202758250.png

当我们导入动画出现问题,看到黄色的警告符号时 你可以将 Generate Retargeting Quality Report 选中 Unity会帮我们生成更多的有关重定向问题的具体信息 我们便可以看到具体的一些问题

只有看到警告动画不正确时才启用,可以帮助我们排查问题


材质页签(Mterials )

Material Creation Mode 定义希望Unity如何为模型生成或导入材质 /usr/uploads/2024/06/image-20240628204155131.png

  • None:不适用此模型中嵌入的任何材质,改用Unity默认的漫反射材质
  • Standard:导入时,Untiy使用默认规则来生成材质
  • Import via MaterialDescription(Experimental):导入时Unity使用fbx文件中嵌入的材质描述来生成材质 与Standard相比 该方法结果更准确,并且支持更广泛的材质类型

sRGB Albedo Colors 是否再伽马空间中红使用反射率颜色 对于使用线性颜色控件的项目,禁用此选项 如果上面选择的是Import via MaterialDescription(Experimental)该属性不可用

Location 定义如何访问材质和纹理 /usr/uploads/2024/06/image-20240628204209801.png

  • Use Embendded Materials 将导入的材质保持在导入的资源中
  • Use External Materials(Legacy):将导入的材质提取为外部资源。 旧版材质处理方式,适用于2017.1或更早的Unity版本创建的项目

Extract Textures/Materials 当选择Use Embendded Materials 后会出现的选项 /usr/uploads/2024/06/image-20240628204222488.png 这两个按钮可以提取导入的资源中嵌入的所有材质和纹理。如果没有需要提取的子资源,这两个按钮会显示为灰色

Naming 定义材质的命名规则

  • By Base Texture Name:使用导入材质的漫反射纹理名称来命名材质。如果未将漫反射纹理分配给材质,Unity将使用导入材质的名称
  • From Model‘s Material:使用导入材质的名称来命名材质
  • Model Name + Model’s Material:使用模型文件的名称和导入材质的名称结合来命名材质

Search 定义在使用Naming选项定义的名称时查找现有材质的位置规则 /usr/uploads/2024/06/image-20240628204236299.png

  • Local Materials Folder:在本地Materials材质子文件夹(模型文件所在的统一文件夹)中查找现有材质
  • Recursive-UP 在所有父文件夹(一直向上追溯到Assets文件夹)中所有的Materials子文件夹中查找现有材质
  • Project-Wide:在所有Unity项目文件夹中查找现有材质

EthanWhite 重新映射的材质 /usr/uploads/2024/06/image-20240628204244437.png 如果找到了,Unity会自动关联 如果没有找到,我们可以手动进行关联