近期热门
粉丝184
关注 39
获赞 274
游戏动作师使用Unity3D遇到过的所有问题

[教程] 游戏动作师使用Unity3D遇到过的所有问题

 !heats_icon! [复制链接]
8734 85 1 37 8年前 举报
文/拉撒路http://www.gameres.com/480489.html#rd?sukey=c65e39fee5582111d9ac8d54285116519c0f03caba240807c088ec9721aef8985ac48fa930d48d519fd0169fc0312277

  到现在我大概用了四年多u3d,期间掉过无数坑,遇到过各种问题,2015年底的时候想着应该将其整理出来,方便大家查阅,于是有了这篇东西。但是实际整理完发现,有些问题我已经想不起了,遇到过的问题肯定不止这么多。希望各位同行能把遇到的问题发给我,解决了的、没解决的都可以,大家互相交流一起进步。我会把所有问题全部整理好在共享给大家,自己能提高的同时也算给行业做点小贡献。我的微信号:othniel-aslan。

  导出相关

0.jpg

图为max导出fbx界面,各版本界面略有不同功能相近,版面所限请放大查看

  在游戏美术工作流中,模型和动画的导出都是由动画师负责,一份可用的动画文件,必须同时包含模型和动画文件各一个。

  模型导出时应注意勾选蒙皮和几何变形,不要勾选贴图文件,导出模型后单独将贴图文件手动放在模型文件夹下。避免重复导出替换时出错。动画的导出则比较常规,需要注意的是很多人喜欢使用烘焙动画,其实并不好用,容易出现万向轴的问题且不说,还给一些中间帧动画的修改带来难度。具体内容见模型篇。

  挂点相关

1.jpg

图为常规挂点所需点位,实际根据项目需求增减。

  所挂dummy点需作为子级链接到对应骨骼,三轴对齐,各个模型间同一个点位置要统一。

  武器换手相关

  换手的三种方式 1.缩放隐藏换手  2.link链接约束换手  3.prop骨骼换手

  1.缩放隐藏换手 即 在需要有武器的位置都放置一把武器(如左手、右手、后背、空中),将当前不需要显示的武器缩放至极小不可见,需要显示时再放大显示。优点为无需特别支持,引擎通用,非常简单。缺点为略麻烦,做动画之前就要想好武器需复制几份分别在哪,动画缩放容易出现中间帧过度不顺畅。

2.jpg


3.jpg


4.jpg


  2.link链接约束换手 即 使用link约束动画实现武器换手 其最大优点就是大部分动画师非常熟悉,运用起来得心应手。缺点也很明显,引擎不能识别link动画,需要塌陷或导出时烘焙动画才可被引擎识别,而一旦出现万向轴问题,改起来会比较麻烦。

5.jpg


6.jpg


7.jpg


  3. prop骨骼换手 即max自带的武器道具骨骼 优点是设定即为武器道具骨骼,能解决武器所需一切需求,并且被unity3D 5.0以后的版本支持,直接导出即可。缺点是unity3D 5.0之前的版本不支持,需要烘焙动画。

8.jpg


9.jpg


  表情动画相关

  Unity支持的MAX表情动画已经确认可行的有两种 一种就是 面部骨骼绑定表情动画 另一种是morpher控制器表情动画。表情动画常见于舞蹈类、大型MMO类及单机类等游戏中,前两种重视社交和展示所以对表情有需求,后一种常见于精品游戏中,各方面品质相对都比较高所以对表情也有要求。

  面部骨骼绑定动画 最常见的面部骨骼就是张嘴动画,只需一根下颚骨骼即可解决,在很多有坐骑或怪兽的项目中使用,是广义上的表情动画。较为复杂的表情动画用骨骼绑定来做并不划算,一来架设骨骼比较麻烦,具体K动画的时候也相对繁琐(有人用线性IK来制作表情,其实道理与骨骼绑定并无二致,只是调动画的时候有联动关系相对简单些);二是骨骼过多带来的运算量也比较大,会比较占用资源。

10.jpg


11.jpg


  morpher控制器表情动画 优点是占用资源相对较小,动画可以做到比较精细,制作流程也相对简单。缺点是动画师不一定会调模型表情,前期过程相对麻烦(被拾取的表情头不能镜像、不能在统一个被拾取脸上左右同时调表情),并且有比较多的动作师从来没接触过morpher学习成本也相对较高。

  这里解释下morpher的原理 将一个角色的面部模型复制出多份,每份分别承担表情的一个局部动作,如微笑至少需要左嘴角上翘、右嘴角上翘、左眼微闭、右眼微闭四份。然后通过morpher控制器拾取这些表情,即可通过控制morpher的数值来调节表情动画。

12.jpg


13.jpg

(以上表情为鄙人随手乱调作为配图使用,略丑勿怪)

  文件压缩相关

  由于Fbx导出采样原则(即我们通常所说的满帧导出)所致,通常一段动画导出后的容量都会比较大,常见的压缩方式只有一种,即使用unity自带的动画压缩。这里再额外介绍两种非常规的压缩方法以应不时之需。

  Unity自带的动画压缩 选项有三种分别是关闭压缩 减少关键帧 减少关键帧并压缩文件。  1.关闭即为不进行压缩保持导出时的状态。2.减少关键帧 即unity会检查相邻两帧之间移动旋转缩放的阈值,当这个值小于规定数值时就删掉其中一帧。3.减少关键帧并压缩文件 除了2中所描述的内容还会降动画文件进行打包压缩,使其减少占用硬盘容量,但对内存容量并无影响。

  Rotation error、Position error、Scale error三个值是上文“减少关键帧”内容中所提到的阈值,这个值越大被删除的帧就越多,动画文件相对就越小,同时动画质量相对也就越差。

  当动画压缩过于严重时,一些动作幅度较小的动画将会严重失真,如待机动画在压缩严重时腿部将无法站立于地面,而是随着质心摇摆。产生此类问题,只需将该动画的压缩阈值略作调整即可,如果遇特殊情况调整阈值无效可尝试后面的方法。

14.jpg


15.jpg


  Max中导出时进行压缩 在max的导出面板也有减少关键帧的选项,其工作原理也与unity相同,只是max作为专业的动画制作软件,他的阈值允许的精度更高可以到小数点后面很多位。而且作为美术软件相信他对动画关键帧的删减也更专业。但缺点也很明显,他不能实时预览。当我们设定一个阈值之后,没有办法实时查看压缩后的效果,难保压缩后的文件没有错误,不适用于处理大量的文件。当unity无法处理某个动画时可以用max尝试。

16.jpg


  编辑fbx动画 这种是非常规的办法了,我也是听人说没试过。方法是 在max中导出fbx之后,使用可以编辑fbx的软件(如mortion builder),对动画进行删帧。这个办法的好处显而易见,由于是动画师手工删除,既能保证动画的质量又能保证压缩到最小。缺点也很明显,工作量大浪费时间,如果不是非常重要的角色出现解决不了的问题,不建议使用这种方式。

  新旧骨骼系统相关

  Unity在4.0系统增加了新的动画系统,目前unity动画类型下拉菜单中共有四个选项,分别是None、Legacy、Generic以及Humanoid。其中G和H为4.0版本新增的内容,L是老版本的动画系统,none则是不使用动画。

17.jpg


  Legacy 是我目前使用最多的动画系统,在我看来他已经满足一个项目的绝大部分需求,而且因为最基础所以也最易扩展,需要一些额外功能时也方便修改追加。

  Generic 与legacy相比,generic可以使用新系统自带的状态机,并且自带可编辑的动画融合系统,然而在我看来这都没什么用。如果generic不与humanoid配合使用,其功能与legacy并无二致,反而因为系统并不成熟更容易出现未知错误。当然,也可能是有其他功能我并未得知,如有遗漏还望指正。

18.jpg


19.jpg


  Humanoid 字面上理解即为人型骨骼系统,其最显著的特点是可以将max的骨骼转化为unity的骨骼,并且会生成一份avatar,将avatar指定给不同的角色模型。即可无视高矮胖瘦的体型差异将同一个动画分配给每个角色,简单来说就是可以实现动画的通用。

20.jpg


21.jpg


  这里并没有讲每个动画系统的优劣,因为动画系统优劣的评判并不是单一独立的,理论上每个动画系统都能解决问题。具体要选择哪个系统,要看游戏的类型、打包方式,举例来说,如果是像三国无双系列这种,同一个角色换了武器就会换一套动作,每件武器都有对应的动画,那显然是要用humanoid这种可以无视体型的通用骨骼;又比如角色间不需要共用动画,并且每个角色程序都是单独打包,那最好还是用legacy系统,简单省事。甚至在同一款游戏里也可以主角单独打包使用legacy骨骼,其他怪物使用humanoid骨骼共用动画,以实现资源的最优化。

  常见问题与小技巧

  1.单帧动画无效 在unity中至少要两个关键帧才能被认定为是一段动画,如果某根骨骼只有一个关键帧能不能读取这个关键帧则比较看缘分,有时候读得出有时候读不出。

  注:另外要注意的是,同一个骨骼的两个动画,如果A动画中该骨骼存在两个以上的关键帧,而B动画只有一个关键帧,当播完A继续播B的时候,该骨骼则会保持A动画的最厚一帧状态。同理如果B动画该骨骼没有帧,也会保持A动画最后一帧。

  2.超远位置出现关键帧 一般常见于导bip动作文件时bone骨骼或dummy点上,在负几百万帧的位置出现一个孤立的帧,具体是什么原因目前仍不清楚。该问题在max中比较不容易被发现,导入到unity时动画无法读取,曲线面板不显示任何关键帧。Max导出动画时虽有删除孤立帧的选项,但经测试无法解决该问题,一般只能打开曲线面板找到该帧删除之。这里要特别强调一下,因为其位置非常远,最好逐一选择骨骼删除,框选所有骨骼一起删的话,极容易导致max崩溃。

  3.层动画问题 常见的有两种,导出时如果动画层没有塌陷,则unity只能识别当前层所记录的动画,基本是百分之百出错的,回到max塌陷即可。另外一个是max自身的问题,当某个骨骼使用了select IK object的时候,加层是无效的,必须点击空白处清空掉拾取的IK object。

22.jpg

拾取状态

23.jpg

清空状态

  4.摄像机动画 理论上来说,max里的摄像机动画unity是不识别的,但实际上导出的摄像机在unity中会默认作为一个gameobject来使用。这样只要在这个gameobject下面挂载一个unity的摄像机,并把坐标归零即可。这里说个小技巧,由于单位的原因,max的摄像机动画进入到unity中可能会遇到比例的问题,我们可以在max中创建一个dummy点,坐标归零,把摄像机作为子级链接给dummy,然后再调摄像机动画。这样进入unity的时候,我们只要吧dummy归零,缩放它的尺寸就可以调整比例。

  5.Unity动画曲线  unity曲线面板提供了一些基础功能,但是却连复制帧这种常用的功能都没有,我的解决办法是将需要复制的帧拖动至动画的末尾,然后再尾帧之外打个关键帧,这样即可复制出一样的帧,之后再把帧拖到适当的位置即可(下图我复制了第二帧)

24.jpg


25.jpg

1
点赞
0
打赏
37
添加到收藏夹

0

点击复制链接

使用微信扫码分享
一次扣10个券
全部评论85
您需要登录后才可以回帖 登录 | 立即注册

拉撒路牛逼!
5年前
回复

使用道具 举报

感谢分享
5年前
回复

使用道具 举报

满满的干货啊
5年前
回复

使用道具 举报

ffffffffffffff
5年前
回复

使用道具 举报

牛皮了
5年前
回复

使用道具 举报

看看
5年前
回复

使用道具 举报

666
5年前
回复

使用道具 举报

kk

5年前
回复

使用道具 举报

谢谢分享
5年前
回复

使用道具 举报