Unity模型导入相关知识

Posted canon_卡农

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity模型导入相关知识相关的知识,希望对你有一定的参考价值。


文章目录


常见的模型格式

Unity支持很多模型格式,比如:.fbx .dae .3ds .dxf .obj等等。其中最常见也是官方推荐使用的格式是 .fbx,使用FBX模型格式的优势:
1)减少不必要数据,提升导入效率。
2)不需要再每台计算机上安装建模软件的授权副本。
3)对Unity版本无要求,避免了模型因为Unity版本不同而导致错误。
从建模软件导出FBX格式的人物模型注意坐标轴规范:
人物面朝向为Z轴正方向,Y轴正方向为头顶方向,X轴正方向为人物右侧。
具体参考: https://docs.unity.cn/cn/2019.4/Manual/CreatingDCCAssets.html

模型导入参数设置

官方文档:https://docs.unity.cn/cn/current/Manual/FBXImporter-Model.html#CameraImportProperties

Model页签

该页签主要是用于设置:模型比例设置,是否使用导入模型中的摄像机和光源,网格压缩方式等等相关信息。修改模型中存储的各种元素和属性,最终会影响在Unity中使用模型时的一些表现。

Scene设置


Scale Factor:缩放因子
Unity 中默认一个单位为1m。不同 3D 包的单位默认值如下:
.fbx、.max、.jas = 0.01m;
.3ds = 0.1m;
.mb、.ma、.lxo、.dxf、.blend、.dae = 1m
将模型文件从具有不同缩放因子的 3D 建模应用程序导入 Unity 时,可以通过启用 Convert Units 选项将文件单位转换为使用 Unity 比例。
Convert Units:转换单位
启用可将模型文件中定义的模型比例转换为Unity的比例
不同的格式的比例如下。比如一个FBX模型(ScaleFactor = 0.01),勾选后会缩小100倍。
Bake Axis Conversion:轴转化烘焙
如果启用此属性,当您导入使用与 Unity 不同的轴系统的模型时,可将轴转换的结果直接烘焙到应用程序的资源数据(例如,顶点或动画数据)中。如果禁用此属性,将在运行时补偿根游戏对象的 Transform 组件以模拟轴转换。
Import BlendShapes
是否允许Unity随网格一起导入混合形状。当导入包含混合形状的网格时,将使用Skinned MeshRenderer组件
注意:
1.导入混合形状法线需要在FBX文件中具有平滑组
2.如果想要导入具有法线的混合形状:
1)把下方的Blend Shape Normals属性设置为Import,将使用FBX文件的法线
2)或者把下方的Blend Shape Normals属性设置为Calculate,Unity使用相同的逻辑来计算网格和混合形状
3.如果需要混合形状上的切线,则应将 Tangents 导入设置设为 Calculate
Import Visibility
开启后可以从FBX文件中读取可见性属性。
比如模型动作里 有些动作是要隐藏模型形象的,开启后才会生效。
一些3D建模软件对可见性属性不支持或者有限制,比如Maya和Blender就对可见性有限制。所以一般这个选项要根据你使用的建模软件决定,一般可以不勾选。
文档解释:值和动画曲线可以通过控制 Renderer.enabled 属性来启用或禁用 MeshRenderer 组件(指渐变?)。默认情况下,可见性是可以继承的(设置为 true),但可以覆盖。例如,如果父网格上的可见性设置为 0,那么其子网格上的所有渲染器也将被禁用。在此情况下,将为每个子项的 Renderer.enabled 属性创建一个动画曲线。
Import Cameras:是否导入摄像机,一般不勾选。
Import Lights:是否导入光源,一般不勾选。
Preserve Hierarchy:始终创建一个显示预制体根
通常在导入的时候,FBX会将模型中的空根节点进行优化去掉它。但是如果多个FBX文件中包含同一层级的空根对象,可以勾选它来保留他们。
主要作用是:比如有两个fbx文件,1包含骨骼和网格,2只包含骨骼动画。如果不启用它导入2,那么Unity将剥离根节点,会让层级不匹配让动画不能正常播放。
Sort Hierarchy By Name
启用此属性可在层级视图中按字母顺序对游戏对象进行排序。禁用此属性可保留 FBX 文件中定义的层级视图顺序。

Meshes设置


Mesh Compression:网格压缩
提高压缩比会降低网格的精度,但是可以减小网格的文件大小。调整该参数可以优化游戏包的大小。
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设置

Keep Quads:保留四边形
启用后,Unity不会将4个顶点的多边形转为三角形,当使用曲面细分着色器时可以启用此选项,因为四边形的曲面周色漆比多边形的效率更高。
Unity 可以导入任意类型的多边形(三角形到 N 边形)。顶点数量超过四个的多边形将始终转换为三角形,无论此设置如何。
如果一个网格有四边形和三角形(或者转换为三角形的 N 边形),那么 Unity 会创建两个子网格来分离四边形和三角形。每个子网格要么只包含三角形,要么只包含四边形。
提示:如果要从 3ds Max 将四边形导入 Unity,必须将其导出为可编辑多边形。
Weld Vertices:合并顶点
合并在空间中共享相同位置的顶点,前提是这些顶点总体上共享相同的属性(UV,法线,切线等等)
开启后相当于会通过减少网格的总数量来优化网格的顶点计数。
默认情况下开启此选项,除非有意保留这些重复顶点,之后想通过代码操作单个顶点和三角形数据。
Index Format
定义网格索引缓冲区的大小,一般都选择16bits,Auto会默认选择16bits,只有在必要时使用32bit。
Legacy Blend Shape Normals
启用后会基于Smoothing Angle值来计算法线。
Normals:法线计算方式
Import:从文件中导入法线,如果文件中不包含法线信息,将使用Calculate模式计算法线。
Calculate:根据Normals Mode、Smoothness Source和Smoothing Angle属性来计算法线。
None:不计算法线。如果网格既没有法线贴图,也不受实时照明的影响,请使用此选项。
Blend Shape Normals
定义如何为混合形状计算法线,只有当Legacy Blend Shape Normals禁用时出现。此值应与 Normals 属性的值匹配。
Normals Mode
计算法线的模式,只有当上方的Normals设置为Import和Calculate才会出现。
Unweighted Legacy:旧版的法线计算方法(在 2017.1 版本之前)。在某些情况下,旧版给出的结果与当前实现给出的结果略有不同。对于在将项目迁移到最新版本的 Unity 之前导入的所有 FBX 预制件,这是默认设置。
Unweighted:法线不加权。
Area Weighted:法线按照图面面积加权。
Angle Weighted:法线按照每个图面上的顶角加权。
Area and Angle Weighted:法线按照每个图面上的图面面积和顶角加权。这是默认选项。
Smoothness Source
设置如何确定平滑行为(哪些边应该是平滑的,哪些应该是粗糙的)。
仅当禁用 Legacy Blend Shape Normals 时,此属性才可见。
Prefer Smoothing Groups:尽可能使用模型文件中的平滑组。
From Smoothing Groups:仅使用模型文件中的平滑组。
From Angle:使用Smoothing Angle值来确定哪些边应该是平滑的。
None:不拆分硬边的任何顶点。
Smoothing Angle
控制是否为硬边拆分顶点。
通常,值越大,产生的顶点越少,仅当Normals设置为Calculate时才可用。
注意:此设置仅用于非常光滑的或者非常复杂的模型,否则,最好在3D建模软件中手动平滑然后导入,始终建议建模的时候就做好,更加准确。
Tangents
定义如何导入或计算顶点切线,仅当Normals设置为Calculate或Import时,此属性才可用。
Import:如果 Normals 设置为 Import,则从 FBX 文件中导入顶点切线。如果网格没有切线,那么将无法使用法线贴图着色器。
Calculate Legacy:使用旧版算法计算切线。
Calculate MikkTSpace :使用 MikkTSpace 计算切线。如果 Normals 设置为 Calculate,则这是默认选项。
Calculate Legacy - Split Tangent:使用旧版算法计算切线,并在 UV 图表上进行拆分。如果网格上的接缝破坏了法线贴图光照,请使用此属性。此属性通常仅适用于角色。
None:不导入顶点切线。网格没有切线,因此将无法使用法线贴图着色器。
Swap UVs
在网格中交换 UV 通道。如果漫射纹理使用光照贴图中的 UV,请使用此选项。Unity 最多支持八个 UV 通道,但并不是所有的 3D 建模应用程序都会导出两个以上的通道。
Generate Lightmap UVs:为光照贴图创建第二个UV通道。

Rig页签

该页签主要是用于设置,如何将骨骼映射到导入模型中的网格,以便能够将其动画化。对于人形角色模型,需要分配或创建Avatar(替身信息),对于非人形角色模型,需要在骨骼中确定根骨骼。该页签的设置影响到动画的正常播放。

Animation Type:动画类型

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

2)Legacy:旧版动画类型,与Unity3.x及更早版本一样导入和使用动画,一般不使用。
Generation:选择动画导入方法。
Don’t Import:不导入
Store in Root (New):导入动画并将其存储在模型的根节点中。这是默认设置。

3)Generic:通用模型,非人形模型。需要设置骨骼根节点。使用通用动画系统。
Root Node:选择用于此Avatar的根节点的骨骼(仅当将 Avatar Definition 设置为 Create From This Model 时此设置才可用。)

4)Humanoid
骨架为人形(有两条腿、两条手臂和一个头)。需要使用Avatar化身系统,绑定人主要关节的映射关系。使用人形动画系统。Unity 通常会检测骨架并将其正确映射到 Avatar。有些情况下,可能需要更改 Avatar 定义 (Avatar Definition) 并手动对映射进行配置 (Configure)。
Avatar Definition:选择获取Avatar定义的位置
No Avatar:没有化身系统信息
Create From This Model:根据此模型创建Avatar化身信息
Copy from Other Avatar:指向另一个模型上设置的Avatar化身信息
Source:复制另一个具有相同骨架的 Avatar 以导入其动画剪辑。
Configure…:打开Avatar化身配置,人形动画使用Create From This Model时才有。
Skin Weights:设置影响单个顶点的最大骨骼数量
Standard(4 Bones):使用最多4个骨骼来产生影响。默认值,处于对性能考虑,建议使用此设置
Custom:设置自定义的最大骨骼数,选择后会出现下方的两个选项
Max Bones/Vertex:定义每个顶点的最大骨骼数(以影响给定顶点)。可为每个顶点设置 1 到 32 个骨骼,但是用来影响顶点的骨骼数量越多,性能成本就越高。
Max Bone Weight:设置考虑骨骼权重的最低阈值。权重计算将忽略小于此值的任何值,并且 Unity 会将高于此值的骨骼权重放大为总计 1.0。
Strip Bones:仅将骨骼添加到已指定蒙皮权重的SkinnedMeshRenderers。
Optimize Game Objects
在Avatar化身系统和Animator动画组件中删除和存储所导入角色的游戏对象骨骼层级信息。如果启用会出现下方的Extra Transforms to Expose选项。角色将使用Unity动画系统的内部骨架,可以提高动画角色的性能。仅Avatar Definition为Create From This Model才可勾选。
Extra Transforms to Expose
要暴露的骨骼层级,在下方打钩将暴露该骨骼层级信息,可通过名称搜索对应骨骼信息。勾选表示
希望 Unity 在计算中包含这个变换(骨架的骨骼)。
Toggle All:全选或者反选;Collapse All:全部折叠;Expand All:全部展开

Avatar化身信息设置


Mapping:关节映射信息。可以从本地读取或者保存为.ht文件。
Muscles&Settings:肌肉和设置

  1. Muscle Group Preview:肌肉群预览

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

  1. Per-Muscle Settings:肌肉设置

用于设置各骨骼在旋转时的范围限制。因为如果不设置限制,在一些极限角度时(人物动作)会非常奇怪,我们可以在这里单独设置限制范围。

  1. Additional Settings:高级设置

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

其中Translation DoF比较重要,如果启用,将启用人形角色的移动动画。如果禁用,Unity仅使用旋转对骨骼进行动画化。
但是启用后,会提升性能消耗,因为动画需要执行额外步骤来重定向人形动画,除非动画包含角色某些骨骼的动画式移动才会启用(比如君麻吕的椿之舞?)。一般情况下禁用即可。

Animation页签

当我们选中包含动画剪辑(AnimationClip)的模型时,该页签将显示动画设置相关的内容。动画剪辑是Unity动画的最小构成元素,代表一个单独的动作。当美术同学做好动画导出时建议将模型和动画文件分别导出为:
1.包含网格信息不包含动作信息模型
2.不包含网格信息包含动作信息的动作(模型)文件
动作文件使用modelName@animationName.fbx的方式命名,参考:

Animation页签包含三大部分:

基础信息设置

Import Constraints:从此资源导入约束
启用后,Unity会自动添加相应的约束组件将其关联到正确的游戏对象。
Import Animation:从此资源导入动画
如果禁用,下面的都没有,并且不会导入任何动画。
Bake Animations:通过反向动力学(IK)或模拟创建的动画以便推进运动关键帧,仅用于Maya、3Dmax和Cinema4D文件
Anim.Compression:导入动画时使用的压缩类型
Off:禁用动画压缩,在导入时Unity不会减少关键帧数量,效果最好性能较低,文件较大,运行时内存占用也大。通常不建议使用。
Keyframe Reduction:减少冗余关键帧,仅适用于Generic通用动画类型。
Keyframe Reduction and Compression:减少关键帧并在文件中存储动画时压缩关键帧,会影响文件大小,但是内存大小和Keyframe Reduction相同,仅适用于Legacy旧版动画类型。
Optimal:让Unity决定如何压缩,仅适用Generic通用和Humanoid人形动画类型
Rotation Error:设置旋转曲线压缩容错度(百分比),原始旋转值和减小值之间的最小角度。
Position Error:设置位置曲线压缩容错度(百分比)
Scale Error:设置缩放曲线压缩容错度(百分比)
上面的 Animation Compression Errors 用来确定 Unity 是否可以删除位置曲线或缩放曲线上的关键点作为动画压缩策略。如果原始值和消减值之间的差值小于原始值乘以容错度百分比,则 Unity 会删除关键帧。
这些内容仅在Keyframe Reduction或Optimal压缩时可用

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

Clips:动画剪辑选择列表
可以从列表中选择一个剪辑以显示特定于剪辑的属性。在剪辑预览面板中播放所选剪辑。使用添加 (+) 按钮为此文件创建新剪辑。使用删除 (-) 按钮删除所选的剪辑定义。

动画剪辑属性基本设置


A:动画剪辑名,可编辑
B:动画剪辑时间轴
可以通过拖动滑块,剪切出整段动画中需要的部分。当我们拖动滑动时,下方将会显示出曲线图通过红色/黄色/绿色,来标记剪切出的剪辑中,角色的某种姿态属性是否能够构成循环。
C:用于控制循环和姿势的剪辑属性
从上到下依次是:
姿态循环:角色的姿态是否在剪辑开始与结束时相似
方位循环:角色根节点朝向的方位,是否在剪辑开始与结束时相似
Y轴根节点运动循环:角色的根节点,在Y轴高度方向上的位置,是否在剪辑开始与结束时相似
XZ平面根节点运动循环:角色的根节点,在XZ平面上的位置是否在剪辑开始与结束时相似

结束拖动时,四种姿态属性的循环评价会记录在右侧,我们可以通过一组勾选栏来选择是否需要循环播放动画,以及是否需要对应属性烘焙进姿态变化中,让根节点保持不变。

LoopTime:这个动画切片在被应用时,是否要循环播放。
LoopPose:是否在循环播放的过程中,对单次切片开头和结尾时的姿态进行循环处理。
Bake Into Pose:将角色对应属性的变换植入到身体(Pose)的运动中,让根节点对应属性的运动不发生改变。
注意!!!即使姿态属性评价为红色。也可以勾选Bake Into Pose ,但此时动画播放完后,身体姿态会与根节点出现很大的偏移,进行状态机混合时就会出现身体姿态的突变
勾选Bake Into Pose,将消除根节点对应的运动属性,在切片播放时,角色对应的旋转/位移,将不会被植入到Unity中(apply root motion勾选)。

通常需要某个姿态属性循环(恒定)的切片,我们应保证剪辑时评价为绿色,并勾选LoopPose/Bake Into Pose。

Cycle Offset:应是一个0到1之间的数值,否则无效,可以设定循环时起始播放位置的偏移。
Base Upon:对应属性的改变要以什么为参照(通常保持默认即可)
—original 引用FBX文件中原先的位置,方位坐标,并以此为参照。通常对Y轴启用,对Rotation启用可能导致人物初始朝向不是Z轴正方向,对XZ平面启用可能导致人物不在原点位置。
—Body Orientation 按身体的朝向变化为参照,通常对Rotation启用
—Center Of Mass 按身体重心位置为参照,选定时,身体重心位置会被至于原点,通常不对Y轴启用,而对XY平面启用
—feet 按脚底的Y轴高度为参照(Y轴高度的另一个参照

Rotation Offset:可以设定旋转的初始偏移。
Y Offset:可以设定Y轴高度的初始偏移。
Mirror:左右镜像翻转动画(仅Humanoid )。
Additive Reference Pose:启用后可以设置附加动画层基础参考姿势的帧。在时间轴中可以看到蓝色标记。
附加动画层:在动画控制器(状态机)中可以添加新的动画层
Pose Frame:当启用参考姿势帧时,该项就是选择的具体是哪一帧。

D:曲线、事件、遮罩等其他属性参数设置
Curves:曲线可以配合Animator作为参数。曲线中的值X轴代表标准化时间(0~1)代表动画的开始和结尾,Y轴的值可以根据需求自己设置,有几个默认曲线也可以选择。
Events:为动画剪辑添加一个事件,当动画播放到事件处时会自动找对象脚本中的同名函数。
Mask:动画遮罩
主要作用是当播放该动画时,可以指定哪一部分或者哪些骨骼排除在外不受动作影响。
Humanoid(人形动画的快捷设置)
我们分别可以控制头、左右臂、左右手、左右腿、根等,点击他们让他们变成红色,就代表做该动作时不影响该部位。
Transform(明确指定哪些骨骼关节点不受影响)
Motion:当导入的动画剪辑包含根运动时,我们可以在这里手动设置特定骨骼关节点作为我们的根运动节点。
Import Messages:如果在动画导入过程中出现任何问题,动画导入检视面板 (Animations Import Inspector) 顶部会显示警告,你可以将 Generate Retargeting Quality Report 选中,Unity会帮我们生成更多的有关重定向问题的具体信息。
只有看到警告动画不正确时才启用,可以帮助我们排查问题。

预览窗口

可以从project窗口拖入模型进行动作预览。

Materials页签

可以使用此选项卡更改 Unity 在导入模型时处理材质和纹理的方式。
入没有指定任何材质的模型时,它使用 Unity 漫反射材质。如果模型有材质,Unity 会将这些材质导入为子资源。

Material Creation Mode:定义希望Unity如何为模型生成或导入材质
None:不使用此模型中嵌入的任何材质,改用Unity的默认漫反射材质。
Standard:导入时,Unity使用默认规则来生成材质。
Import via MaterialDescription(Experimental):导入时,Unity使用FBX文件中嵌入的材质描述来生成材质。与Standard相比,该方法结果更准确,并且支持更广泛的材质类型。
sRGB Albedo Colors:是否在伽马空间中使用反射率颜色。对于使用线性颜色控件的项目,禁用此选项。如果上面的选项选择的是 Import via MaterialDescription(Experimental)该属性不可用。
Location:定义如何访问材质和纹理。
Use Embedded Materials:将导入的材质保持在导入的资源中。从 Unity 2017.2 版本开始,这是默认选项。
Use External Materials(Legacy):将导入的材质提取为外部资源。旧版材质处理方式,适用于2017.1或更早的Unity版本创建的项目。Naming 和 Search 属性可帮助 Unity 找到导入的材质以映射到模型。
Extract Textures/Materials:当选择Use Embedded Materials后会出现的内容。这两个按钮可以提取导入的资源中嵌入的所有材质和纹理。如果没有需要提取的子资源,这两个按钮会显示为灰色。
Naming:定义材质的命名规则
By Base Texture Name:使用导入材质的漫反射纹理名称来命名材质。如果未将漫反射纹理分配给材质,Unity将使用导入材质的名称。
From Model’s Material:使用导入材质的名称来命名材质。
Model Name + Model’s Material:使用模型文件的名称与导入材质的名称相结合来命名材质。
Search:定义在使用Naming选项定义的名称时查找现有材质的位置规则。
Local Materials Folder:在本地Materials材质子文件夹(模型文件所在的同一文件夹)中查找现有材质。
Recursive-Up:在所有父文件夹(一直向上追溯到Assets文件夹)中所有Materials子文件夹中查找现有材质。
Project-Wide:在所有Unity项目文件夹中查找现有材质。
如果找到了,Unity会自动关联,如果没有找到,我们可以手动进行关联。

参考链接:
https://zhuanlan.zhihu.com/p/105029905
https://docs.unity.cn/cn/current/Manual/models.html

以上是关于Unity模型导入相关知识的主要内容,如果未能解决你的问题,请参考以下文章

Unity ❉ 基础知识 ☀️| 一起走进游戏引擎界大佬——Unity 的陈情往事 (^_−)☆

unity怎么打开模型文件

Unity3.3 用3ds Max 2015制作模型并将其导入到Unity

Unity有啥特点

走进Unity

生死狙击微端unity引擎显示游戏崩溃