IMA_游戏

当3dMax遇上Unity3d---模型导入的前后你需要注意的地方
当3dMax遇上Unity3d---模型导入的前后你需要注意的地方Randy一位学土木的游戏程序员自己是一个使用U...
扫描右侧二维码阅读全文
23
2019/06

当3dMax遇上Unity3d---模型导入的前后你需要注意的地方

01.jpg

当3dMax遇上Unity3d---模型导入的前后你需要注意的地方

当3dMax遇上Unity3d---模型导入的前后你需要注意的地方

Randy

一位学土木的游戏程序员

自己是一个使用Unity3d的业余游戏制作者,学习3dMax也是为了能将模型导入Unity里进行使用,而不是为了一张渲染图

那么在模型导入的前后,都需要注意些什么,才能导出正确的,方便使用的模型呢?

自己的一点总结和分享,之后的学习过程中遇到了新的问题,有了新的总结,也会回来这里更新这篇文章,算是当作一个记录吧,知乎的文章发布之后还能能反复编辑也是很赞啦

也欢迎dalao留言指正,或是赐教一些我不知道的点,鄙人先谢为敬

以下要点可能比较散乱且不分先后,针对3dMax->fbx->Unity3d的资源传递流程,仅个人习惯总结不代表行业标准:

1.面片、网格、多边形才是不变的道理

---1.1 放样模型的导出警告

当你直接导出一个放样生成的模型时3dMax将如下警告,该模型可能在某些环境下不被正确的渲染

02.jpg

---1.2 个人习惯

虽然你不管这个Warning导出的模型还是能正常使用,不给过可能会埋下隐患,当前我的个人习惯是包括放样、扫描、倒角剖面、车削、挤出在内的生成方法,最后都要转换为可编辑多边形进行导出

事实上我们翻了一下unity的官方文档,虽然不是3dMax,但针对Maya unity有提到过“unity只能识别多边形,到处前请转换为多边形导出FBX”

2.模型比例问题

---2.1 Unity中默认尺寸和比例

经过我们的实测,Unity默认使用的单位制中的一个单位长度,相当于通用建模软件单位中的1m

03.jpg

图左正方体是Unity中创建的,图右正方体是来自3dMax中导出的棱长为1m的正方体(两者大小一样)

默认情况下:

Transform中的1个单位长度对应1m

Unity Scence窗口中参考线中的最小的方格边长1m

---2.2 通常人物模型的比例参照

Unity或者说一般3d游戏开发的模型,模型比例一直是一个问题究竟该用什么单位?

这里我们用Unity官方的一个实例工程,同样也是大多数人物模型的单位比列来作为标准

通常3d游戏中一个正常的人物模型(不考虑特殊Boss怪物,设定需要的缩放等情况)对它的大小描述如下(两种):

---1.胶囊替代:通常3d游戏中一个正常的人物模型大小相当于Unity中创建的一个默认胶囊体的大小,经常在模型师未给出人物模型情况下使用一个创建的默认胶囊暂时替代人物模型

---2.棺材参照:通常3d游戏中一个正常的人物模型应能够应被放置一个底面积 1m^2 高度2m的长方体(棺材)内
04.jpg

---2.3 其他模型比例参照及单位设置建议

其他模型尺寸大小参照上面人物模型的大小并结合真实世界以及设定要求进行尺寸调整

05.jpg

在设置建模软件尺寸时为避免建模时大小数据调整时的小数出现,通常将1单位设置为1分米,以10单位对应1米。建立小物体时如茶杯,手机也可将1单位设置为1厘米

---2.4 如果模型尺寸错误的调整办法

使用导入fbx模型Inspector编辑面板 Model->Scale Factor 进行调整

默认Scale Factor为1,模型将以 原尺寸*Scale Factor作为模型默认1缩放单位大小

06.jpg

3.轴向问题

---3.1 Unity和大多数建模软件轴向上的区别

------3.1.1 Unity坐标系以Y轴向上作为高度,XZ平面作为底面,

而通用建模软件(以3dMax为例)使用Z轴向上作为高度,XY平面作为底面

------3.1.2 Unity中有Z轴正方向为LookAt方向一说

可使用Transform.LookAt(目标点或目标方向)方法让物体Z轴正方向冲向某一方向

---3.2 导出模型前的轴向设置建议

------3.2.1 Y轴设置问题

---------3.2.1.1 Y轴冲上

07.jpg

导出模型前请手动旋转Y轴冲上,不要相信什么自动轴转化设置

08.png

没有旋转Y轴冲上的物体在Unity中默认姿态

虽然不进行手动旋转的模型也可以正常拖入Scence窗口中放置,但由于轴向不同,模型自身坐标系中会保留通用建模软件的Z轴向上做高度轴,而Y轴才是Unity中的高度轴,这样的冲突可能为之后的开发带来不必要的麻烦

---------3.2.1.2 Y轴底面&放置表面问题

有明确底面的需要放置在场景中的物体应将Y轴置于物体底面

09.png

需要被放置在场景中的补给箱Y轴置于底面

模型的某一高度的表面上需要放置其他物体的模型,其Y轴应置于待放置平面上,尤其是场景模型应特别注意该问题

10.png

可能需要放置物体的桌子表面其Y轴被置于桌面

11.jpg

可能需要放入物体的抽屉其Y轴被置于抽屉面

12.jpg

按上述要求设置了轴向,让补给箱作为抽屉的子物体Y轴高度设置为0,调整XZ平面位置,很轻松且标准的就将补给箱放入了抽屉中

---------3.2.1.3 当3.2.1.1与3.2.1.2设置冲突时优先按3.2.1.2要求完成Y轴高度设置,并记录尺寸找出正确的放置悬浮高度以保证正确的底面位置设置

------3.2.2 Z轴设置问题

有明确正面朝向要求的模型,

可能使用Transform.LookAt方法控制朝向的模型,

可能被旋转进行朝向跟随的模型,

应旋转Z轴冲向模型正面方向

13.jpg

一个简易的飞机模型Z轴旋转冲向飞机的正前方

14.jpg

正确设置Z轴的飞机模型才能正确的完成盘旋的表现效果

------3.2.3 错误设置轴向的模型,补救方法

当轴向设置错误且在开发中产生一定问题时,可以利用Unity中的空物体挂轴向错误的模型做子物体,进行旋转和移动来调整轴向,并将空物体生成一个Prefab进行使用

15.jpg

使用空物体下挂错误轴向的木桶模型,调整出的正确轴向的木桶模型的Prefab

4.模型贴图与光照渲染问题

---4.1 先在3dMax中建好一个模型

整个4.1将先总结一下在3dMax中如何建立并调整好一个模型的贴图和渲染光照

------4.1.1 3dMax渲染设置

16.jpg

渲染,渲染设置 使用3dMax默认的扫描线渲染器

17.jpg

渲染,曝光控制 全局照明颜色和级别(可更改强度) 环境光颜色

全局照明是对所有光源(环境光和创建的光源)的整体控制

18.jpg

场景中无任何光源时默认开启了环境光进行照明

19.jpg

场景中有光源时光源颜色强度比例受全局照明控制,环境光正常关闭

20.jpg

环境光颜色设置将覆盖全局照明颜色设置

------4.1.2 模型贴图与UV展开

这里不对如何添加模型贴图,以及贴图和UV的关系做过多赘述,主要总结3dMax中一般调整贴图,调整UV的大致方法

请一定不要忘记在添加贴图后勾选在“在视口中显示明暗处理材质”!!!

21.jpg

请一定不要忘记在添加贴图后勾选在“在视口中显示明暗处理材质”!!!

---------4.1.2.1 自然贴图正确

对于不使用任何UV展开,自然贴图正确的模型不需要进行UV展开

22.jpg

一个Box本身贴图正确,不需要进行UV展开,可直接导出

---------4.1.2.2 使用自动展开UV

在模型边面复杂情况下,自然贴图不正确时,就需要使用UV展开

对于棱角分明的几何体,优先采用自动展开UV的方法,使用自动展开请清除物体原有的一切UV修改器

--选中物体按数字0键打开纹理渲染编辑器,进行以下设置,通常自动展开后贴图能够大致正确显示

23.jpg

Unity中默认使用贴图通道为1,务必修改贴图通道为1(默认为3),点击仅展开

--注意选用标准的纹理可循环的贴图,尽量从一开始就避免出现以下问题

24.jpg

贴图纹理循环拼接不对,一般采用增加瓷砖重复数量,缩小纹理大小来掩盖

25.jpg

贴图循环纹理不一致,一般采用调整瓷砖和偏移,将不一致纹理移动到边缘或由两边缘平分来弥补

26.jpg

一般通过修改瓷砖属性就大致能够完成的贴图调整

--贴图属性中会有一个UV或VW或WU的勾选栏来调整贴图的附着方向

27.jpg

对于贴图附着方向不对的多边形应特别增加新的材质在原有基础上修改UV/VW/WU的勾选栏

--偏移和瓷砖配合调整贴图位置,

若贴图更改UV/VW/WU勾选栏后无法正常显示(纹理模糊化)可修改角度旋转贴图附着方向,调整贴图正常显示

28.jpg

---------4.1.2.3 手动展开UV

------------4.1.2.3.1 曲面的UV接缝效应

一般棱角分明的物体,UV的接缝布线会正好在棱边处,但对于曲面,UV布线则会在曲面上,在模型导出后曲面上的UV布线接缝将会产生很大的瑕疵

29.jpg

补给箱的拉手曲面UV布线

30.jpg

导出的模型UV接缝处会产生纹理的裂隙

当自展UV的接缝效应产生的瑕疵过大,尤其瑕疵在有重要的表现效果的纹理上时,应进行手动展开

------------4.1.2.3.1 手动展开UV的方法步骤

---------------4.1.2.3.1.1 使用UV贴图+UV展开修改器进行展开

31.jpg

先得到一个满意的渲染效果,之后物体将转换为可编辑多边形

32.jpg

添加一个UV贴图修改器,选择一种合适的贴图包裹模式

33.jpg

一般通过对齐调整,适配,让包裹线覆盖物体表面或包裹几合体能够包裹住物体

34.jpg

添加UV展开修改器,设置贴图通道为1,同时观察物体表面有无绿色的UV布线

布线要求一定要有,且在曲面上的布线尽可能的少,若不满意布线应删除UV展开,选择UV贴图中其他包裹模式,再添加UV展开,观察新的包裹模式下展开后布线是否满意

35.jpg

像上图曲面上满是布线的展开结果一定要进行修改,否则将产生过多的曲面纹理瑕疵

---------------4.1.2.3.1.2 使用UV展开修改器自行编辑剥离表面进行UV展开

emmmmmm...

此处待更ing...(等我学了吧,欢迎dalao能在下面不吝赐教)

---4.2 从3dMax->fbx->Unity3d(无任何导出插件)情况下的注意点

1.建立一个文件夹储存各种贴图以及fbx模型,贴图名称必须与3dMax选定贴图时的名称一致

36.jpg

注意:3dMax建模时并不会创建工程,复制贴图到工程目录,而是根据选则贴图时的绝对路径找到这张贴图,因而要注意手动对贴图等等资源文件的管理

37.jpg

一个标准的3dMax导出目录,除包含fbx文件外,还应包含fbx文件所链接使用的贴图等等各种资源文件,方便在导入unity时将资源文件与fbx文件一起导入,从而被fbx正确的链接

2.unity官方文档中有提到:“3dMax导出fbx时,模型的各项参数属性会是导出时动画编辑栏所在的那一帧时的模型参数属性,所以请保证含动画的模型标准0帧时保持,自然状态的各项参数,导出前请记得将动画调整至0帧”

------4.2.1 导出的保存与缺失

这里是针对3dMax->fbx->unity的资源传递流程中,fbx里能够在导入unity后被正确解读出的数据

---------4.2.1.1能够被保留进fbx文件中的数据

1.首先最基本的模型MeshFilter,漫反射颜色,高光颜色会被保留

2.模型的高光反射相关数据会被保留进fbx中的材质里

38.jpg

39.jpg

40.jpg

我们在unity中增强灯光,明显补给箱上不同子材质的高光反射效果不同

2.部分灯光组件

41.jpg

3dMax中的自由灯光会被unity解读为点光源

42.jpg

3dMax中的目标灯光也会被unity解读为点光源

注意:这里3dMax中的目标灯光被【错误解读】为点光源

3.模型的不透明度(材质的Alpha通道值)

43.jpg

44.jpg

---------4.2.1.2无法被fbx文件保留的数据

1.模型使用的各种贴图文件并不在fbx中,贴图资源文件需要和fbx一起导入(一起选中被拖入到unity的Assert目录下),或先导入贴图后导入模型,否则模型在导入时无法正确链接贴图文件

2.部分灯光组件

45.jpg

太阳定位器灯光无法被unity正确解读

3.材质自发光属性

46.jpg

材质自发光属性需要通过烘焙自发光贴图来保留

47.jpg

fbx导入后自发光并未被勾选

4.3dMax中的光线追踪贴图

48.jpg

导出材质含有光线追踪贴图时3dMax的导出警告

由于3dMax和unity3d在光照方面是有所不同的,3dMax中的光线追踪贴图是无法被unity解读的,且unity中又是另一套场景光照环境,因而那些透明光泽的物体就需要利用unity的shader创建出的材质来完成制作

5.3dMax的环境光照(全局照明)的光照渲染效果

(当然其实这是废话,因为unity和3dMax是两个不同的渲染场景)

------4.2.2 烘培贴图保留3dMax中光照渲染的方法

---------4.2.2.0 细说我们的一个期望

上述仍有部分材质属性无法被正确解读,比如材质自发光属性(可通过烘焙自发光贴图EmissionMap来保留)

尽管部分光源能被正确导入,但仍有部分灯光无法被正确解读出,或是被错误解读(目标灯光被解读为点光源)。且事实上我们并不希望连同光源一起导出fbx,更多的时候是在unity中创建光源进行光照烘焙,所以大多数时候甚至包括场景模型,我们都不会导出3dMax的光源

但事实上我们还是有一个期望,期望有时候模型能够带有3dMax中有针对性布置的光照渲染效果来增强表现力,而不是仅仅依靠unity的光照渲染

或是当我们希望保留3dMax中的光线追踪效果来增强表现力

49.jpg

我们再分析一下这个期望,就是我们希望模型的漫反射贴图能够保留3dMax的光照渲染效果或是光线追踪效果来增强表现力,也就是漫反射贴图贴烘焙出的高光贴图

50.jpg

漫反射贴图里保留了3dMax中针对性布置的光照渲染的模型

51.jpg

保留了3dMax中光线追踪结果的钻石

---------4.2.2.1 烘焙高光贴图,漫反射贴高光图保留3dMax光照渲染,光线追踪效果

1.首先在3dMax中调整出一个合适的渲染效果(包括环境布置,展开UV)

ps:你可以翻上去看看如何在3dMax中调整出合适的渲染效果

52.jpg

这里用到的光线追踪贴图,在通过fbx导入时无法被unity正确解读,且unity中是不同的场景渲染环境。但我们希望这颗钻石能保留当前光线追踪反射出的效果

2.展开好UV的情况下选中物体按数字0键打开纹理烘焙渲染器

53.jpg

3.使用现有通道,添加烘焙图片LightMap

54.jpg

这里已经完成UV展开,应使用现有通道,注意贴图通道务必使用通道1,贴图才能在unity导入fbx时被正确链接贴图

4.点击渲染,手动保存3dMax输出的高光贴图

55.jpg

5.创建一个新的材质,参考原材质调整其他属性,但漫反射颜色白色,并贴位图,找到我们保存的那张高光贴图

56.jpg

6.将材质赋给物体

由于所使用的贴图烘焙时的UV和当前物体UV是一致的,我们贴上的高光贴图按照UV的引导会被正确的贴在物体表面

如果原本物体使用了多维子材质,建议复制一份物体,所有多边形材质ID改为1,让所有多边形使用一个贴好高光贴图的单材质即可

57.jpg

点击在视口中明暗处理材质或渲染,察看贴图效果

7.导出fbx,注意fbx文件和贴图文件的保存

这样我们就通过漫反射贴高光图的方式,将3dMax中的光照渲染效果,光线追踪效果保留了下来,以增强模型的表现力,且不需要通过3dMax光源连同模型导入(况且还可能出现错误解读,3dMax中环境光照还无法导入到fbx中)

---4.3 Unity模型导入及后续调整

------4.3.1 导入的具体操作

58.jpg

前面已经提到了,应建立一个文件夹保存模型的贴图等资源

导入时应先拖入所有需要的贴图文件,再拖入FBX文件。或FBX文件与所有需要的贴图文件一起拖入,否则FBX自带的材质将无法正确的链接贴图

------4.3.2 导入uinty后的相关设置

在导入模型后,点击模型文件,Inspector窗口会显示unity为该模型的一个设置面板,这里来细说一下这个设置面板应如何设置

---------4.3.2.1 Model窗口

------------4.3.2.1.1 Model->Scence

该窗口主要用于设置模型的缩放属性,是否导入灯光和照相机

1.Scale Factor与Convert Units

59.jpg

前面也有提到模型的尺寸会乘缩放因子Scale Factor作为默认1单位的尺寸

这里的Convert Units勾选与否,是决定是否启用模型自身的尺寸单位,一般我们会按照1中提到的正常模型比例在3dMax中就设置好需要的模型的尺寸大小,并启用Convert Units

如果不勾选Conver Units 则会使得模型自身的尺寸设置失效,即忽略3dMax中的单位设置,3dMax中模型尺寸的1单位被直接解释为unity中的1m

2.导入 BlendShape(通常启用)

60.jpg

这里Blend Shape 是一种脸部动画的播放方式,通过预设脸部网格对应不同通道值的扭曲程度,来进行脸部动画的播放

Blend Shape其实实质是一种网格扭曲的混合通道绑定,其实也可以用于实现其他的网格混合扭曲效果

Blend Shape是Maya所创建的一种混合扭曲的组件,3dMax中使用Morpher完成同样的功能,同样需要勾选这个设置属性来完成导入

3.导入可见属性(通常启用)

61.jpg

导入可见属性用以保证可以读取FBX中的可见属性来禁用或启用unity中的MeshRender组件去渲染物体

模型动画如果涉及了模型可见属性的改变则需要勾选,来保证unity正常读取可见属性

4.导入Camera 导入Lights(可忽略)

62.jpg

前面有提到过我们不推荐从3dMax中导入摄像机与灯光,而使用unity中创建的摄像机,灯光,来完成渲染

5.Preserve Hierarchy是否保留层次结构(通常禁用,只包含动画的FBX文件需启用)

63.jpg

如果不勾选,则unity会自行剔除模型中的所有空节点,对于那些只包含空节点用以表现模型动画的FBX文件来说,这会导致动画Rig不匹配

如果勾选,即使只有Root节点unity也会创建一个显示的预制根节点作为父物体

64.jpg

勾选后unity为FBX中的模型创建了预制父物体,并自行添加了一个Animation组件用以记录模型动画,因为大多数情况勾选Preserve Hierarchy意味着这是一个只含动画的FBX模型

并且我们发现3dMax中导出时的自动轴转转化设置在勾选了之后Preserve Hierarchy才会生效,但我们更推荐按3中提到的,来手动设置出合适轴向,一般我们保持这一项不勾选,所以导出时也不必在意是否勾选了自动轴转化,而使用我们手动旋转好的轴向

------------4.3.2.1.2 Model->Mesh

用于调整模型网格数据相关设置

1.是否启用网格压缩(通常禁用,优化渲染和发布文件大小时启用)

65.jpg

启用网格压缩,unity会按照一定的级别来压缩网格数据

压缩级别越高,网格的精度越低,这对于渲染优化和发布时游戏文件大小的降低很有用

2.CPU读写权限(通常禁用,动态网格时勾选)

66.jpg

启用与否决定了模型网格数据是否会被加载到CPU的可寻址内存上,来保证CPU的读写权限

大多数情况下应禁用此选项来优化运行时的内存使用

但如果我们真的需要通过脚本修改网格数据,生成动态网格,则可以启用此选项

3.顶点及顶点索引优化(通常勾选)

67.jpg

unity会优化FBX中的顶点和顶点索引排列,以获得更好的GPU性能

4.是否展开网格碰撞(需要所有网格展开网格碰撞器的模型可勾选)

68.jpg

勾选后unity会将FBX中所有的网格展开为网格碰撞器

即FBX预制体所有有网格的节点会自带一个MeshColider组件并使用对应的网格数据

------------4.3.2.1.2 Model->Geometry

用于设置模型的拓扑,法线,UV等

1.保持四边形(通常不勾选)

69.jpg

是否需要unity保持模型中的四边形面,不向三角形转化

通常任何3D模型的面都应由一个三角形或一个四边形构成,五边形及以上的n边形都会被优化为四边形或三角形

通常我们不启用这一个选项,来保证四边形被优化

但如果使用曲面细分着色器时应勾选此项,因为曲面细分着色器在四边形上的细分效果比三角形好

unity在导入模型时总将五边形及以上的面转换为三角形(无论是否勾选此项),但若勾选此项后,unity会创建两个子网个来分别包含四边形和三角形

“如果要从3ds Max将四边形导入Unity,则必须将其转换为可编辑多边形”

2.顶点焊接(通常勾选,存在需要脚本动态控制而故意设置的重复顶点时应取消勾选)

70.jpg

是否需要unity自行焊接位置相同切属性相同的顶点(包括UV,法线,切线和VertexColo)

通过顶点焊接可以优化顶点数量,获得更好的渲染性能

但如果需要脚本中动态控制网格,模型故意设有位置相同的顶点时应取消勾选

3.索引格式(通常Auto,在使用基于GPU的渲染管线编程时,通常使用32位)

71.jpg

unity在导入网格时使用的索引表示长度

Auto时将取决于网格的大小

16bit时若网格顶点较多将进行顶点分块,分块后每个顶点块<64k个顶点,这是unity 2017.2或之前版本的设置

32bit可确保所有网格使用相同的索引格式,这可以降低着色器顶点处理的复杂性

4.法线来源

72.jpg

定义模型网格的法线使用怎样的生成方式

Import从FBX资源文件中导入法线

Calculate根据下面的法线模式由unity计算出网格面的法线

Node不使用法线,如果网格不需要法线贴图,也不受实时光照影响(各光照模型的计算都需要法线数据)应选择此项

5.网格混合法线来源

73.jpg

Scence菜单启用BlendShape引入后在此调整网格混合的法线生成方式

与Normals法线来源设置相同

6.法线模式

74.jpg

“定义Unity如何计算法线。仅当“法线来源”设置为“Calculate”时,此选项才可用”

“为导入法线时该项也可显示,但没有效果”

定义unity如何进行法线的计算

Unweighted Legacy旧式不加权计算,使用unity 2017.1及以前版本的计算方法,若某些Prefab从之前的旧版本(2017.1及以前)中迁移到新版本,可使用旧的计算方法尽量保证与迁移之前法线效果一致(但某些情况会有偏差)

Unweighted不加权的法线计算

Area Weighted依照模型每个网格面的面积加权

Angle Weighted依照每个面上的顶角加权

Area and Angle Weighted 面积加权+角度加权(默认选项)

7.平滑方式

75.jpg

“定义Unity如何计算法线。仅当“法线来源”设置为“Calculate”时,此选项才可用”

设置如何进行多边形平滑

Prefer Smoothing Groups尽可能依照FBX中的多边形平滑组进行平滑,但受到平滑角度的限制

From Smoothing Groups仅依照FBX中的平滑组

From Angle仅依照平滑角度设置进行平滑

None不进行平滑

8.平滑角度

76.jpg

仅在4法线来源为计算,且7中需要进行平滑处理切不只依照FBX中的平滑组时可用(4中法线来源为导入时,也可以显示此项但此项的设置没有效果)

调整是否为小于该角度的硬边分割顶点,过小的值将导致更多的顶点分割,更高的顶点渲染压力

9.切线来源

77.jpg

定义应如何导入或计算顶点切线。仅当“法线来源”设置为“Calculate”或“Import”时,此选项才可用

Import仅在法线来源设置为“Import”时可选,从FBX文件中导入切线数据

Calculate MikkTSpace/Calculate Tangent Space使用MikkTSpace标准进行切线计算,但不适用于法线贴图着色器

Calculate Legacy传统的切线计算

Calculate Legacy - Split Tangent使用传统的切线计算,并在UV图表中拆分“如果正常的地图照明被网格上的接缝破坏,请使用此选项。”通常只适用于人物模型

None不导入也不计算顶点切线,这不适用于法线贴图着色器

10.交换UV

78.jpg

是否在网格中交换UV,如果漫发射贴图使用了来自光照贴图的UV

11.展开光照烘焙UV

79.jpg

为模型展开第二UV以接受unity中的光照烘焙(非实时的渲染光照)效果

---------4.3.2.2 Rig窗口

Rig窗口用以控制模型的骨骼绑定信息,Avatar替身的来源

1.骨骼绑定类型

80.jpg

FBX中使用的骨骼动画的类型,并影响Rig窗口的各项后序设置

None无骨骼动画,unity将忽略FBX中的所有骨骼绑定信息,选择None不一定模型中就不包含动画,动画包含引入的设置在Animation窗口中完成,一种情况是我们使用了非骨骼动画时,选择了None

Legacy旧版本的unity动画绑定(unity 3.x版本及以前)

Generic非人形骨骼动画绑定

Humanoid人形骨骼动画绑定

2.Avatar Definition替身来源

81.jpg

82.jpg

Avatar替身是unity为管理骨骼动画所创建的一种保持节点信息的文件

通过在Animator中指定所需要用到的Avatar,Animator动画状态机在运行时就能根据Avatai中提供的节点信息,寻找子物体中的对应节点并对其赋予动画的控制,完成骨骼动画与含骨骼绑定的模型的适配

83.jpg

这里的替身来源主要有两个,

1.从该模型创建出一个Avatar替身

2.使用其他模型配置好的Avatar替身

创 建出的Avatat替身文件,尤其是人形骨骼的Avatar替身需要进行配置工作,绑定骨骼,设置初始T-Pos,通过复用其他模型创建好的Avatar 替身可以减少繁杂的配置操作,尤其是我们导入只包含骨骼动画的FBX时,复用角色模型的Avatar替身就可以快速完成骨骼动画于人物模型的适配

3.Optimize Game Object骨骼节点嵌入优化

84.jpg

85.jpg

仅在替身来源为从该模型创建时可用

选择后将在实际应用模型时,剔除FBX中的骨骼节点,节点信息将保持在Avatar 和 Animator中,即将骨骼节点嵌入到动画系统内部,以保证更高效的节点提取和变换

模型的SkinnedMeshRenderers蒙皮渲染使用动画系统内部的骨骼节点,蒙皮网格的矩阵提取也将变为多线程,从而提高渲染效率

3.1 导出保留与剔除节点

86.jpg

配合骨骼节点嵌入优化使用,勾选与否决定了是否会将该节点当作骨骼节点在最终使用模型时,进行剔除和动画系统的嵌入

通常我们设置好父子关系,并将骨骼节点单独保存在一起,不勾选,让unity完成剔除嵌入

模型的蒙皮渲染及其他配饰,我们进行勾选来保证不将其剔除

通常情况下我们不需要设置此项(不进行任何勾选时),unity会根据Avatar替身绑定时使用到的节点来进行剔除和嵌入

但一种情况是我们在标准骨骼节点之外创建了额外的骨骼节点,比如人物的翅膀,没有在创建标准人物Avatar替身时被用到,但我们并也希望完成剔除嵌入,我们就需要手动设置此项

另一种情况是由于骨骼节点的剔除导致最终模型中不包含骨骼节点,而我们可能需要在脚本中获取某些骨骼的完成一些动态操作,我们可以部分勾选我们需要在脚本中获取到的骨骼,让它不被剔除

4.Generic时,根节点指定

87.jpg

仅在骨骼类型为非人形骨骼,且从该模型创建Avatar替身时可选

为非人形骨骼绑定指定一个根节点骨骼

5.Humanoid时,人形骨骼绑定设置

88.jpg

左边的小图标,对勾或叉,代表unity是否自动完成了模型骨骼与标准人形骨骼的绑定

但由于T-Pos标准姿态问题,即使为对勾,我们也需要点击该项去检查T-Pos是否正确

具体设置在下文 7.人物动画,0帧T-Pos问题 中提到

---------4.3.2.3 Animation窗口

用于从FBX文件中引入动画,动画剪辑的设定

1.是否导入解析约束组件

89.jpg

如果FBX中的动画中使用了约束则需要勾选

unity会对FBX中的约束信息进行解析,并添加添加相应的Constraint组件并完成对应的链接

2.是否需要导入动画

90.jpg

是否从FBX中导入读取动画,如果FBX文件中包含了动画则需要勾选

下方所有选项仅在勾选导入动画时可以进行设置

3.动画烘焙

91.jpg

解析并烘焙使用了 IK反向动力学 或 Simulation仿真模拟 创建的非帧动画,转化为使用关键帧储存运动信息的通用动画格式

通常不可用,因为我们通常导入的FBX文件中如果包含动画,本身就是帧动画的形式

4.曲线重采样(unity 2019版本)

92.jpg

解析动画曲线,并重采样为四元数的形式

默认启用,在原动画存在关键帧间差值时,为保持原有曲线应禁用此项

5.动画压缩

93.jpg

这里一般使用默认的Optimal最佳模式就好

但Optimal最佳模式仅适用于骨骼动画,其他设置选项:

Off禁止动画压缩,Unity不会减少关键帧中的导入计数,这可以提高动画的精细程度,如果原动画在制作时有强调精细程度,比如齿轮的咬合转动。但这回导致更高的内存消耗,降低运行时的性能,以及更高的发布打包时的文件大小

Keyframe Reduction关键帧缩减,通过“导入时减少冗余关键帧”来降低文件大小和运行时的内存消耗

Keyframe Reduction and Compression关键帧缩进与压缩(unity2019版本可用),在Keyframe Reduction关键帧缩减的基础上,通过“动画中存储动画时,减少导入和压缩关键帧时的关键帧”,进一步缩减文件大小

6.压缩比率设置

94.jpg

决定压缩多大精度变化下的旋转,移动,缩放曲线,值越小精度越高,值越大压缩比率越高

7.自定义属性导入

95.jpg

通过FBX文件中设置用户自定义属性,以及extraUserProperties传入与FBX中相同的名称,unity可以通过传入Assert后处理器,来链接FBX中的用户自定义属性设置

那么下面的Animation Clip动画剪辑的相关设置是为结合unity的Miscellaneos动画系统,剪辑FBX文件中帧动画,生成动画切片的相关设置部分。学习过unity的动画系统的话自然会有所了解,我们在模型导入相关的设置这里就不过多赘述了

---------4.3.2.4 Materials窗口

设置FBX模型的材质导入以及相关链接

1.是否从FBX文件中引入材质

96.jpg

2.设置材质颜色反射率

97.jpg

启用时为伽马颜色空间的反射率

禁用时为线性颜色空间

3.材质位置

98.jpg

Use Embedded Materials 材质被嵌入保存在FBX文件中,这是现在3dMax导出FBX时的材质保存模式

Use External Materials (Legacy) 材质从外部提取,这是旧的材质保存模式,在导入FBX文件的同时会在FBX文件外部创建出材质

4.Use Embedded Materials 嵌入式材质保存相关设置

99.jpg

这是当前unity的默认材质位置设置,也是包括3dMax在内的通用建模软件导出FBX的材质储存模式

100.jpg

这种材质储存模式你应该可以在Assert窗口的FBX卷展中看到有材质的储存

此外可以通过下方的材质选择,来重建映射

101.jpg

5.Use External Materials (Legacy)外部材质提取式的相关设置

102.jpg

可通过下方的Naming 以及 设置 范围选项来查找对应范围的材质,并按照FBX文件中的材质映射赋予材质

无法重建材质映射

使用了新版的Use Embedded Materials 嵌入式材质保存的FBX模型也可以选择使用这个旧模式来将内部储存的材质外放

这可以使得材质能够被再次修改,且如果外部材质丢失,会自行从FBX中尝试提取一次材质,包括材质贴图,有时具有找回材质的作用

------4.3.3.1 由unity3d创建材质,后手贴图法

首先强调的是fbx导入unity后fbx自带的材质是无法修改的(可以见上面的附图),但可通过材质外放来外放出材质,变为可修改材质

而fbx中的模型的表面渲染信息会被unity解读并用unity中的MeshFilter 和 MeshRender组件呈现,可以被修改

---------4.3.4.1 Unity中后手贴图法的操作与分析

参照上面的方法,材质外放修改,或者创建新材质重建映射即可

5.导出材质名称问题

3dMax中材质名称请记得修改,否则导出后同名材质可能丢失

103.jpg

鱼眼使用的多维子材质重名

104.jpg

鱼眼中重名的材质发生了丢失

6.模型子物体及层级关系问题

---6.1 3dMax中的几种层级关系

元素包含关系

105.jpg

同一可编辑多边形/网格/面片中的元素包含

和链接关系

106.jpg

通过链接来绑定父物体

---6.2 3dMax中的层级在fbx导入unity后的表现

链接关系会被转换为unity中的父子关系表现

107.jpg

而元素包含关系并不能转换为父子关系,导入unity后同一个物体的所有元素仍是一体的

此外如果不进行链接,一次选中多个没有父子关系的物体导出,导入到unity中,会自行生成一个以FBX文件名称命名的空的父物体来包含一次性导出的多个物体

108.jpg

---6.3 3dMax中的层级设置建议

不可以用元素来区分出不同物体

如果父子关系要求比较复杂,应使用链接绑定正确的父子关系

可以选中多个物体一起导出,会自行生成父物体,所有选中的物体作为一级子物体,如果你对这种包含关系满意的话

7.人物动画,0帧T-Pos问题

前面有提到过,即使模型设置中的人物骨骼,configure前方出现对勾,你还是要点击它去调整Avatar的T-Pos状态,因为对勾这是骨骼绑定与标准绑定一致,但T-Pos不一定正确,

109.jpg

configer前出现了对勾

110.jpg

仅是右边的骨骼绑定与标准人物骨骼设置相同,可以看到左边场景窗口的红色骨骼是T-Pos拾取不正确的骨骼

除非你从别的地方复用Avatar,否则用于创建Avatar的模型一定要检查T-Pos是否正确

---7.1 用于创建人物Avatar的标准人物模型,0帧务必摆标准T-Pos不要做动作

尤其这个人物模型是要用于创建Avatar的时候,后序的含人物骨骼动画的FBX如果已经创建好了人物的Avatar,直接复用就行,0帧就不必非得是T-Pos

但如果创建人物Avatar的标准人物模型0帧不是T-Pos,可能出现人物动画的错误

因为unity的动画系统是以T-Pos为标准姿态,在此基础上进行演算,来进行动画控制的,T-Pos的不正确会导致人物骨骼动画变得奇奇怪怪

138.gif

向右跑的动画,由于T-Pos的不正确导致无法进行正常的动画控制演算

---7.1.1 依然有可能出现的僵局

case 1:

由于复用Avatar的条件是骨骼的层级关系和命名必须一致

111.jpg

我们拖入人物模型创建的Avatar给下载的动作资源FBX进行Avatar复用,由于骨骼命名的不一致而出现了错误

某些情况我们是从不同的地方分别获取了人物模型的资源,和动作资源,由于骨骼命名的不一致我们无法直接复用Avatar

case 2:

美术给你的人物模型TA都做了动画,导致0帧不是T-Pos,而且没有给出标准T-Pos的人物模型

一般这种情况你应该找美术,要求给出有标准T-Pos的人物模型,用于创建Avatar

但如果TA由于各种原因不给你标准的T-Pos人物模型,你就只能自己调整了

---7.2 0帧不是T-Pos unity中的正确调整与补救方法

1.使用自动Pos纠正选项

112.jpg

最坏的情况,最下方的选项,环境T-Pos也是可以用的,尝试用使用自动纠正

一般来说,使用自动Pos纠正能够完T-Pos的纠正

但某些坏的情况下使用了自动Pos纠正也无法完成纠正,动画显示依然不正确

113.jpg

尽管使用环境T-Pos纠正后显示全绿

114.jpg

但我们发现播放动画时,人物的左脚似乎并不正确,好像左脚多扭了一圈

这是因为某些情况可能人物的某些关节被多扭了一圈两圈,尽管转对了T-Pos但因为多转了一圈两圈,导致Base姿态依然不对

2.对症下药法

116.jpg

我们发现只有人物左脚不对

117.jpg

先使用和之前一样的T-Pos纠正

139.jpg

观察左脚的旋转参数

118.jpg

对比姿态正确的相似骨骼的旋转数据

119.jpg

拷贝正确姿态的相似骨骼数据,在加以手动旋转调整

3.从0帧手转出T-Pos

首先是一个原则,绝对不要一次旋转超过90度(任何一个轴),要耐心不要心急,否则转不对,或者转对了(全绿)却是错的

手动旋转的意义在于,0帧的时候不管人物摆什么姿势,都能通过各骨骼小于360度的旋转转回标准的T-Pos,不存在自动纠正多转一圈两圈的问题

120.jpg

先使用ReSet使人物返回0帧状态

121.jpg

反复点击环境T-Pos和ReSet确定中心的那块三角形骨骼Hips需要旋转的方向

122.jpg

腰部三角骨骼Hips是人物骨骼的组高级父骨骼,先使用世界旋转,转向环境T-Pos中确认的朝向

123.jpg

Local旋转使Hips转对位置

124.jpg

向上依次使用Local旋转调整骨骼的位置,保证骨骼变绿为

125.jpg

向两边依次使用Local旋转调整手臂及手指骨骼

126.jpg

从侧面切换视角,对齐手臂骨骼

127.jpg

从正面切换视角,对齐手臂骨骼

128.jpg

正侧面对齐后,再加上没有用到的那个轴旋选转一下,一般就可以使骨骼正确

129.jpg

还是转不对手臂,反复切换各个角度,仔细检查对齐

130.jpg

调整手指骨骼前,先调平手掌

131.jpg

按照之前的要领旋转令人抓狂的手指骨骼

132.jpg

参考正确的骨骼Local旋转轴的朝向去旋转相似的骨骼

133.jpg

参考正确的指尖骨,对齐红绿两轴,再转蓝轴,完成调整

134.jpg

结合实际分析转轴,对齐前的骨骼位置,完成调整

一块一块调整,调整对一块再转下一块,多次旋转调整不对,应回退到最初状态,重新调整

135.jpg

T-Pos时人物骨骼四肢出于同一竖平面上,以此为参考旋转四肢的根骨骼

136.jpg

手指实在转不对,且没有手指骨骼动画时可以放弃,但人物躯干头部,腿脚,以及到手掌骨之前的手臂必须旋转正确

4.你可以尝试获取相同来源的骨骼命名相同的其他FBX动画资源或人物模型,找一个手转T-Pos容易点的,转出来之后复用给需要的FBX动画资源

137.gif

OK经过T-Pos的调整动画终于正常了

/*

https://www.bilibili.com/video/av41359381​www.bilibili.com

附视频,之前做的人物控制模块展示,人物动画从mixamo上下载,模型来自unity,由于骨骼名称不一致导致需要手转T-Pos生成给mixamo上下载的FBX动画资源使用的Avatar

真的转到我想哭...

GIF好糊...不过算了...

*/

编辑于 2019-05-01
拷贝于 2019-06-23

本文章仍在不断更新中...
你可以点击下方链接进入知乎查看最新版本
当3dMax遇上Unity3d---模型导入的前后你需要注意的地方

作者个人主页
Randy

Last modification:June 30th, 2019 at 05:01 pm

Leave a Comment

#鼠标点击特效