• 2022-06-30 Unity核心8——模型导入


    一、模型导入概述

    ​ Unity 支持很多模型格式。比如 .fbx /.dae /.3ds /.dxf /.obj 等等。

    ​ 99%的模型都不是在 Unity 中制作的,都是美术人员在建模软件中制作,如 3DMax、Maya 等等。

    ​ 当他们制作完模型后,虽然 Unity 支持很多模型格式但是官方建议是将模型在建模软件中导出为 FBX 格式后再使用

    ​ 使用 FBX 模型格式的优势:

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

    ​ 在 Project 窗口选中导入的模型,在 Inspector 窗口进行相关设置,4 个页签分别是

    1. Model 模型页签

    2. Rig 操纵(骨骼)页签

    3. Animation 动画页签

    4. Materials 材质纹理页签

    ​ 通过这 4 个页签对模型动作相关信息设置完成后,我们才能在场景中更好的使用这些模型资源

    二、Model 模型页签

    ​ 该页签主要是用于设置。

    ​ 比如:

    • 模型比例设置
    • 是否导入模型中的摄像机和光源
    • 网格压缩方式 等等相关信息
    • 修改模型中存储的各种元素和属性

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

    image-20220628155354652

    (一)Scene 场景设置

    1. Scale Factor:模型的全局比例

      Unity 的物理系统希望游戏世界中的 1 米在导入模型文件中为 1 个单位

    2. Convert Units:将模型文件中定义的模型比例转换为 Unity 的比例

      不同格式的比例如下:

      .fbx / .max / .jas = 0.01

      .3ds = 0.1

      .mb / .ma / .lxo / .dxf / .blend / .dae = 1

    3. Import BlendShapes:是否允许 Unity 随网格一起导入混合形状

      当导入包含混合形状的网格时,将使用 Skinned MeshRenderer 组件

      注意:

      • 导入混合形状法线需要在 FBX 文件中具有平滑组

      • 如果想要导入具有法线的混合形状:

        1)把下方的 Blend Shape Normals 属性设置为 Import, 将使用 FBX 文件的法线

        2)把下方的 Blend Shape Normals 属性设置为 Calculate,Unity 将使用相同的逻辑来计算网格和混合形状上的法线

    4. Import Visibility:是否导入可见性,开启后可以从 FBX 文件中读取可见性属性

      比如模型动作里,有一些动作是要隐藏模型形象的,开启后才会生效

      一些 3D 建模软件对可见性属性不支持或者有限制,比如 Maya 和 Blender

      一般可以不勾选

    5. Import Camera:是否导入摄像机

      是否把 FBX 文件中的摄像机也导入,但是 Unity 只支持 FBX 中摄像机的部分属性。

      比如:正交 / 透视、动画、物理属性、远近裁剪面等

    6. Import Lights:是否导入光源

      支持的光源类型:全局光、聚光灯、方向光、面光源

      支持的光源属性:范围、颜色、强度、角度

      一般不使用

    7. Preserve Hierarchy:始终创建一个显示预制体根

      通常在导入的时候,FBX 会将模型中的空根节点进行优化去掉

      但是如果多个 FBX 文件中包含同一层级的空根对象,可以勾选它来保留它们

      主要作用:例如有两个文件 1、2,其中文件 1 包含骨骼和网格,文件 2 只包含骨骼动画。如果不启用该属性而导入文件 2,Unity 将剥离根节点,会让层级不匹配,使得动画不能正常播放

    8. Sort Hierarchy By Name:在层级窗口中根据名字排序子物体

      如果不启用,会保留 FBX 文件中定义的层级顺序

    (二)Meshes 网格设置

    1. Mesh Compression:网格压缩,设置压缩比及减小网格的文件大小

      提高压缩比会降低网格的精度,调整该参数可以优化游戏包的大小

      • Off:不使用压缩
      • Low:低压缩比
      • Medium:中等压缩比
      • High:高压缩比
    2. Read / Write Enabled:是否开启读写网格信息

      如果开启,Unity 将网格数据传给 GPU后,在 CPU 中还会保留可寻址内存,意味着我们可以通过代码访问网格数据进行处理。

      如果不开启,Unity 将网格数据传给 GPU 后,会将 CPU 中的可寻址内存中网格数据删除,我们无法再得到网格数据

      开启时,会增加内存占用;关闭时,可以节约运行时的内存使用量

      以下情况可以考虑开启:

      • 需要在代码中读取或写入网格数据
      • 需要运行时合并网格
      • 需要使用网格碰撞器
      • 需要运行时使用 NavMesh 构建组件来烘焙 NavMesh
    3. Optimize Mesh:确定三角形在网格中列出的顺序以提高 GPU 性能

      • Nothing:无优化
      • Everything:对顶点及多边形顶点索引进行重新排序
      • Polygon Order:仅对多边形重新排序
      • Vertex Order:仅对顶点重新排序
    4. Generate Colliders:生成碰撞器

      启用后会自动附加网格碰撞器的情况下导入你的网格

      建议不移动的环境几何体可以开启它,但是需要移动的几何体建议不要开启

    (三)Geometry 设置

    1. Keep Quads:保留四边形

      启用后,Unity 不会将 4 个顶点的多边形转为三角形

      当使用曲面细分着色器时可能需要启用此选项,因为四边形的曲面周色漆比多边形的效率更高

      Unity 可以导入任意类型的多边形(三角形到 N 边形)。顶点数量超过四个的多边形将始终转换为三角形,无论此设置如何。

      如果一个网格有四边形和三角形(或者转换为三角形的 N 边形),那么 Unity 会创建两个子网格来分离四边形和三角形。每个子网格要么只包含三角形,要么只包含四边形。

    2. Weld Vertices:合并在空间中共享相同位置的顶点,前提是这些顶点总体上共享相同的属性(UV,法线,切线等等)

      开启后相当于会通过减少网格的总数量来优化网格的顶点计数

      一般都开启,除非你想有意保留这些重复顶点,之后想通过代码去获取他们来进行处理

    3. Index Format:网格索引缓冲区的大小

      一般都选择 16 bits,Auto 会默认选择 16 bits。

      只有在必要时使用 32 bits,16 bits 既通用又节约内存

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

    5. Normals:定义如何计算法线

      • Import:从文件中导入法线,如果文件中不包含发现信息,将使用 Calculate 模式计算法线
      • Calculate:根据 Normals Mode、Smoothness Source 和 Smoothing Angle 属性来计算法线
      • None:不计算法线
    6. Blend Shape Normals:定义如何为混合形状计算法线

      只有当 Legacy Blend Shape Normals 禁用时出现

    7. Normals Mode:计算法线的模式,只有当上方的 Normals 设置为 Import 或 Calculate 才会出现

      • Unweighted Legacy:2017.1 版本之前计算法线的方式,如果是在该版本之前导入的所有 FBX 模型,默认设置为该模式
      • Unweighted:法线不加权重
      • Area Weighted:法线按照图面面积加权重
      • Angle Weighted:法线按照每个图面上的顶角加权重
      • Area And Angle Weighted:法线按照每个图面上的图面面积和顶角加权重,这是默认选项
    8. Smoothness Source:如何确定平滑,哪些边应该平滑,哪些应该粗糙

      只有当 Legacy Blend Shape Normals 禁用时出现

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

      通常,值越大,产生的顶点越少

      仅当 Normals 设置为 Calculate 时才可用

      注意:此设置仅用于非常光滑的或者非常复杂的模型,否则,最好在 3D 建模软件中手动平滑然后导入,始终建议建模的时候就做好,更加准确

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

      仅当 Normals 设置为 Calculate 或 Import 时,此属性才可用

      • Import:如果 Normals 设置为 Import,则从 FBX 文件中导入顶点切线,如果网格没有切线,那么将无法使用法线贴图着色器
      • Calculate Legacy:使用旧版算法计算切线
      • Calculate Legacy With Split Tangents:使用旧版算法计算切线,并在 UV 图表上进行拆分。如果网格上的接缝碰坏了法线贴图光照,请使用此属性
      • Calculate Mikktspace:使用米克特空间计算切线
      • None:不导入顶点切线,网格没有切线,则无法使用法线贴图着色器
    11. Swap UVs:在网格中交换 UV 通道

      如果漫反射纹理使用光照贴图中的 UV,请使用此选项

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

    三、Rig 模型页签

    ​ 该页签主要是用于设置如何将骨骼映射到导入模型中的网格,以便能够将其动画化

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

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

    ​ 简单来说 Rig 页签主要是设置骨骼和替身系统相关信息的,设置了他们,动画才能正常的播放

    (一)面板参数

    ​ Animation Type:动画类型。Unity 依据动画将模型分为以下四大类

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

      image-20220629153004930
    2. Humanoid:人形模型

      一般情况下,有头和四肢(一个头两条腿两只手)为人形

      人形模型需要使用 Avatar 化身系统,绑定人主要关节的映射关系

      image-20220629152539993
      • Avatar Definition:选择获取 Avatar 定义的位置

        • No Avatar:没有化身系统信息
        • Create From This Model:根据此模型创建 Avatar 化身信息
        • Copy from Other Avatar:指向另一个模型上设置的 Avatar 化身信息
      • Source:复制另一个具有相同骨架的 Avatar 化身信息以导入其动画剪辑

        使用 Copy From Other Avatar 时才有

        image-20220629154429240
      • Configure…:打开 Avatar 化身配置

        使用 Create From This Model 时才有

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

        • Standard(4 Bones):使用最多 4 个骨骼来产生影响。默认值,处于对性能考虑,建议使用此设置
        • Custom:设置自定义的最大骨骼数,选择后会出现下方的两个选项
        • Max Bones / Vertex:定义每个顶点的最大骨骼数,值越大性能消耗越大
        • Max Bone Weight:设置考虑骨骼权重的最低阈值,权重计算时将忽略小于此值的内容
      • Optimize Game Objects:在 Avatar 化身系统和 Animator 动画组件中删除和存储所导入角色的游戏对象骨骼层级信息。

        如果启用会出现下方的 Extra Transforms to Expose 选项。角色将使用 Unity 动画系统的内部骨架,可以提高动画角色的性能

        image-20220629154137425
      • Extra Transforms to Expose:要公开的骨骼层级,在下方打钩将公开该骨骼层级信息

        • 放大镜:通过名称搜索对应骨骼信息

        • Toggle All:全选或者反选

        • Collapse All:全部折叠

        • Expand All:全部展开

    3. Generic:通用模型,非人形模型

      不是标准的人形模型,可以是任意形状,可能有 8 只腿两个头等等

      这种模型主要需要设置骨骼根节点

      image-20220629153454472
      • Root Node:选择用于此 Avatar 的根节点的骨骼,仅当选择 Create From This Model 才会出现
    4. Legacy:旧版动画类型

      与 Unity3.x 及更早版本导入和使用动画,一般不使用

      image-20220629153511972
      • Generation:动画导入方法
        • Dont Import:不导入动画
        • 第 2 ~ 4 选项:已禁用,不要使用
        • Store in Root(New):导入动画将其存储在模型的根节点中

    (二)Avatar 化身系统

    ​ 理解化身系统首先要知道骨骼动画是什么

    ​ 3D 动画的本质,也是骨骼动画。为制作好的模型绑定骨骼制作动画是模型动画的制作流程

    ​ 形象的理解:对于人来说,人的整体结构都是一致的,另一个人能做的动作理论上来说我们是完全可以模仿出来的

    ​ 而化身系统的本质,就是动作的模仿(复用)。我们可以把一个标准人形动作通过化身系统复用到其它人形模型上,只要保证他们的关节点对应关系是一致的

    ​ 而下面学习的就是如何设置人形模型在化身系统中关节的对应关系

    image-20220629155900061

    Mapping:关节映射信息设置

    image-20220629161133937

    ​ 我们需要在这个页签对模型关节进行映射设置,因为人物动画无非就是改变这些关节的角度

    1. 关节映射信息设置

      image-20220629160213383
      • Body:身体关节
      • Head:头部关节
      • Left Hand:左手关节
      • Right Hand:右手关节
    2. 关节点映射关系

      image-20220629160322282
    3. Mapping:映射文件设置

      image-20220629160411822
      • Clear:清空映射
      • AutoMap:自动映射
      • Load:从文件中读取
      • Save:保存映射信息
    4. Pose:设置模型姿势

      image-20220629160456009
      • Reset:重置姿势
      • Sample Bind-Pose:绑定姿势示例
      • Enforce T-Pose:强制 T 姿势,推荐一般使用

    Muscles&Settings:肌肉和设置

    image-20220629161331706
    1. Muscle Group Preview:肌肉群预览

      image-20220629162121207

      可以在这里预览在不同姿势的旋转变化,用来观察之前的关联映射关系是否合理

      主要起到预览作用

    2. Per-Muscle Settings:肌肉设置

      image-20220629162136763

      用于设置各骨骼在旋转时的范围限制,因为如果不设置限制,在一些极限角度时会非常奇怪

      我们可以在这里单独设置限制范围

    3. Additional Settings:高级设置

      image-20220629162157125

      可以设置手脚的扭转和伸展值,一般不会修改他们

      其中 Translation DoF 比较重要

      如果启用,将启用人形角色的移动动画

      如果禁用,Unity 仅使用旋转对骨骼进行动画化

      但是启用后,会提升性能消耗,因为动画需要执行额外步骤来重定向人形动画,除非动画包含角色某些骨骼的动画式移动才会启用

      一般情况下禁用即可

    4. Muscles:重置所有设置

      image-20220629162215811

    四、Animation 动画页签

    ​ 当我们选中包含动画剪辑的的模型时,该页签将显示动画设置相关的内容

    ​ 动画剪辑是 Unity 动画的最小构成元素,代表一个单独的动作

    ​ 当美术同学做好动画导出时建议将模型和动画文件分别导出

    1. 导出包含网格信息不包含动作信息模型

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

    ​ Animation 动画页签分为 4 大部分:

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

    (一)基础信息设置

    image-20220630213229336
    1. Import Constraints:从此资源导入约束

      启用后,Unity 会自动添加相应的约束组件将其关联到正确的游戏对象

    2. Import Animation:从此资源导入动画

      如果禁用,下面的都没有,并且不会导入任何动画

    3. Anim. Compression:导入动画时使用的压缩类型

      • Off:禁用动画压缩,在导入时 Unity 不会减少关键帧数量,效果最好性能较低,文件较大,运行时内存占用也大。通常不建议使用
      • Keyframe Reduction:减少冗余关键帧,仅适用于 Generic 通用动画类型
      • Keyframe Reduction and Compression:减少关键帧并在文件中存储动画时压缩关键帧,会影响文件大小,但是内存大小和 Keyframe Reduction 相同,仅适用于 Legacy 旧版动画类型
      • Optimal:让 Unity 决定如何压缩,仅适用 Generic 通用和 Humanoid 人形动画类型
    4. Rotation Error:设置旋转曲线压缩容错度(百分比),原始旋转值和减小值之间的最小角度

    5. Position Error:设置位置曲线压缩容错度(百分比)

    6. Scale Error:设置缩放曲线压缩容错度(百分比)

      如果原始值和消减值之间的差小于原始值乘以容错百分比,会删除关键帧

      这些内容仅在 Keyframe Reduction 或 Optimal 压缩时可用

    7. Animated Custom Properties:导入你指定为自定义用户属性的任何 FBX 属性

    8. Clips:动画剪辑选择列表

      image-20220630213940406

      在这里我们可以看到所有的动画剪辑,可以通过 + 或 - 来新增剪辑或者删除所选的剪辑

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

    (二)动画剪辑属性基本设置

    image-20220630214928106
    1. Loop Time:播放动画剪辑时是否循环播放,到结尾时重新开始

      • Loop Pose:无缝循环运动
      • Loop Match:循环匹配,能够循环匹配则显示绿色,否则显示红色
      • Cycle Offset:循环动画在其他时间开始时的周期偏移
    2. Root Transform Rotation:根位置的角度相关

      • Bake Into Pose:将根旋转烘焙到骨骼移动,禁用此选项将存储为根运动
      • Based Upon:根旋转的基础
        • Original:保持源文件中的原始旋转
        • Root Node Rotation:使用根节点的旋转(仅适用 Generic 通用动画类型)
        • Body Orientation:保持上半身朝前(仅适用于 Humanoid 人形动画类型)
      • Offset:根旋转偏移(单位:度)
    3. Root Transform Position(Y):根垂直位置(Y 轴方向)

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

      • Bake Into Pose:将水平根运动烘焙到骨骼移动。禁用此选项将会存储为根运动
      • Based Upon:水平根位置的基础
        • Original:保持源文件中的水平位置
        • Root Node Position:使用水平根位置(仅适用 Generic 通用动画类型)
        • Center Of Mass:保持与根位置对其(仅适用 Humanoid 人形动画类型)
    5. Mirror:在此剪辑中进行左右镜像(仅 Humanoid 人形动画类型才显示)

    6. Additive Reference Pose:启用后可以设置附加动画层基础参考姿势的帧。在时间轴中可以看到蓝色标记

      附加动画层:在动画控制器(状态机)中可以添加新的动画层

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

    (三)动画剪辑属性其它设置

    image-20220630215424299
    1. Curves:曲线设置

      image-20220630215745843

      曲线可以配合 Animator 作为参数,通过加入曲线值可以利用它标记重要的点

      可以修改曲线的名字,名字就类似参数名,通过加减来添加或删除曲线信息

      image-20220630215850792

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

    2. Events:动画事件

      image-20220630220052488

      类似 Animation 窗口中的动画事件,可以在这里为动画剪辑添加一个事件,当动画播放到事件处时会自动找对象脚本中的同名函数

      当我们希望在动画某一时刻进行逻辑处理时非常常用,比如某一时刻进行伤害判断

    3. Mask:动画遮罩

      image-20220630220221518

      主要作用是当播放该动画时,可以指定哪一部分或者哪些骨骼排除在外不受动作影响

      • Humanoid(人形动画的快捷设置)

        我们分别可以控制头、左右臂、左右手、左右腿、根等。点击他们让他们变成红色,就代表做该动作时不影响该部位

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

    4. Motion:动作设置

      image-20220630220447307

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

    5. Import Messages:模型导入信息

      image-20220630220504798

      当我们导入动画出现问题,看到黄色的警告符号时,你可以将 Generate Retargeting Quality Report 选中

      Unity 会帮我们生成更多的有关重定向问题的具体信息,我们便可以看到具体的一些问题

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

    (四)预览窗口

    image-20220630220622291
    1. IK:是否开启脚步反动力学预览

    2. 2D 模式预览

    3. 坐标箭头:是否显示轴心和质心辅助图标

    4. 人形:切换预览操作的游戏对象,只要其对应的 Avatar 符合要求即可播放动画

    5. AssetBundle:AB 包设置,之后讲解

    五、Materials 材质纹理页签

    image-20220630221036474
    1. Material Creation Mode:定义希望 Unity 如何为模型生成或导入材质

      • None:不使用此模型中嵌入的任何材质,改用 Unity 的默认漫反射材质

      • Standard:导入时,Unity 使用默认规则来生成材质。一般使用此项

      • Import via MaterialDescription(Experimental):导入时,Unity 使用 FBX 文件中嵌入的材质描述来生成材质。

        与 Standard 相比,该方法结果更准确,并且支持更广泛的材质类型,

    2. sRGB Albedo Colors:是否在伽马空间中使用反射率颜色

      对于使用线性颜色控件的项目,禁用此选项
      如果上面的选项选择的是 Import via MaterialDescription(Experimental),该属性不可用

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

      • Use Embedded Materials:将导入的材质保持在导入的资源中
      • Use External Materials(Legacy):将导入的材质提取为外部资源。旧版材质处理方式,适用于 2017.1 或更早的 Unity 版本创建的项目
    4. Extract Textures / Materials:当选择 Use Embedded Materials 后会出现的内容。这两个按钮可以提取导入的资源中嵌入的所有材质和纹理

      如果没有需要提取的子资源,这两个按钮会显示为灰色、

    5. Naming:定义材质的命名规则

      • By Base Texture Name:使用导入材质的漫反射纹理名称来命名材质。如果未将漫反射纹理分配给材质,Unity 将使用导入材质的名称
      • From Model’s Material:使用导入材质的名称来命名材质
      • Model Name + Model’s Material:使用模型文件的名称与导入材质的名称相结合来命名材质
    6. Search:定义查找现有材质的位置规则

      • Local Materials Folder:在本地 Materials 材质子文件夹(模型文件所在的同—文件夹)中查找现有材质
      • Recursive-Up:在所有父文件夹(一直向上追溯到 Assets 文件夹)中所有 Materials 子文件夹中查找现有材质
      • Project-Wide:在所有 Unity 项目文件夹中查找现有材质
    7. EthanWhite:重新映射的材质

      如果找到了,Unity 会自动关联;否则,我们可以手动进行关联

  • 相关阅读:
    超全解析:CRM是什么?怎么用?10大好用的CRM系统大盘点!
    如何避免由 Web 字体引起的布局偏移
    PTL货位指引标签为仓储管理打开新思路
    项目复现 | DETR:利用transformers端到端的目标检测
    Vue官方文档(1):Component的定义和使用
    MySQL-锁:共享锁(读)、排他锁(写)、表锁、行锁、意向锁、间隙锁,锁升级
    关于 Notion-Like 工具的反思和畅想
    Navicat 解决隔一段时间不操作出现延时卡顿问题
    C++程序设计-第四/五章 函数和类和对象【期末复习|考研复习】
    java-net-php-python-ssm电子班牌系统计算机毕业设计程序
  • 原文地址:https://blog.csdn.net/zheliku/article/details/125549420