×

Unity动画系统设计介绍(上)

发布时间:2021-04-28 09:48:27

Hello,大家好,今天给大家分享一篇干货,Unity动画系统设计介绍(上),感兴趣的朋友可以一起来看下!

这两年和几个朋友一起讨论Unity动画系统,包括折腾了几次相关的组内分享,总结出很多内容。主要是关于设计和对象方面,陈列一下。

一、动画系统

1、简介

Unity现存两套动画系统:Legacy动画系统和Mecanim动画系统。Legacy动画系统功能相对简单,核心组件Animation;Mecanim动画系统是Unity当前主要的动画系统,在Legacy动画系统上增加很多新的概念,功能相对复杂,核心组件Animator。

2、动画曲线(AnimationCurve)

Unity中的AnimationCurve是一根二维曲线,在动画文件中曲线根据作用被分成了不同类型类型,具体分类可用下图表示:

不同类型BindCurve在Animation窗口内有不同的图标,图标由Curve绑定的组件来决定,Curve前显示的图标表示其控制的内容归属组件,其中最需要关注的是TransformCurve和MuscleCurve,前者图标是Transform的图标,后者图标是Animator的图标,属于Mecanim机制的Generic和Humanoid动画片在运行时是不会保留原始动画曲线数据的(在编辑器下会)。

所以运行期不能在Legacy机制下采样播放(但编辑器下可以),RootMotionCurve是程序内部生成的对象,它的特殊之处在于储存的值是相对整个模型空间的变换,而不是相对父节点的局部变换。

0.png

二、动画资产

1、资产的导入

Unity会对支持的文件执行导入流程,实际在引擎中出现的文件是导入流程生成的Unity对象。Unity导入模型和动画文件之后提供了很多的设置,导入设置面板中Rig和Animation选项页大部分都与动画相关。

最重要的选项是Rig/Animation Type,除无动画的None以外有三个选项,分别代表:

Legacy – 模型和动画数据都会被处理为Legacy系统的动画数据;

Generic – 模型和动画数据都会被处理为Mecanim系统的非人形动画数据,需要配置或者自动为模型资产创建对应的Avatar实例;

Humanoid – 模型和动画数据都会被处理为Mecanim系统的人形动画数据,需要配置或者自动生成模型骨骼创建Avatar实例和Human实例。

2、动画片段(AnimationClip)

动画片段是AnimationClip类型的对象,.anim资产文件,是Unity中动画数据的存在形式,AnimationClip数据实际上就是以绑定对象为索引的AnimationCurve数据集合。

所有的动画Fbx文件导入后都是生成AnimationClip类型的对象,只是资源管理器里的文件后缀名并不是.anim,且在引擎内禁止修改。导入的动画片段拷贝副本后,可以进行曲线修改和删除,导入DCC文件会根据关键帧拟合得到动画曲线,Unity有三种曲线拟合方式,埃尔米特曲线拟合、线性拟合和离散值。

默认情况下都是埃尔米特曲线拟合,也就是根据关键帧拟合出三次曲线,但如果导入动画资产时开启了动画压缩,则根据误差设置,Unity会自动在误差允许内使用线性拟合乃至保留离散的关键帧。

Unity不会在导入流程中使用离散值拟合,所以DCC软件里做的数值离散动画在Unity内播放会出现不合理的插值帧。

1.webp.jpg

3、动画的控制器

Mecanim的动画播放控制是由有限状态机和动画层级来完成,由Animator Controller做有限状态机层级的容器,Animator需要指定Animator Controller;

Animator Controller只能在编辑环境配置,运行期不可改,Animator Controller可以设置黑板参数(逻辑容器),可以在脚本中获取,也可以作为转移条件;如果黑板参数名字与播放的Custom Curve相同,则伴随动画播放动态修改。

Animator Controller核心概念就是Layer,State和Transition,就是层级,状态,转移,一个状态可以是播放一个动画片段的节点、一个子状态机或者混合树,Layer之间可以进行动画覆盖与附加,输出可以使用Avatar Mask进行剔除。

Sync选项可以让多个层级使用一个状态机,但是每个状态上可以播放不同的动画,Mecanim的IK也是以层级为单位。

State可以进行一些播放状态的设置,Mecanim的动画混合是使用BlendTree完成的,BlendTree可以作为一种State存在,Unity的BlendTree没有什么特殊设置。

Foot IK选项不意味着开启足部IK,而是启用足部IK相关的一些前处理,主要有两个:启用Human设置中的Feet Spacing,确保双足骨骼在Z轴上差距2倍Feet Spacing;根据Root Motion得到的速度进一步修正双足骨骼的位置。

Transition控制State之间的转移,主要依赖条件有两个,退出时间Exit Time以及参数条件Condition,两者均满足才会发生转移,转移有Solo和Mute标签,前者表示优先转移,后者表示禁用。

Animator Controller的动画融合是在转移的时候完成的;

可以在编辑器里配置转移打断相关的设置。

2.png

4、Avatar

Avatar文件是Mecanim方案里负责记录模型骨骼层级结构相关的数据合集,也会储存重定向方案相关的数据;

DCC文件导入时会生成或者依赖一个确定的Avatar文件完成动画数据的导入流程;

Animator组件可以通过指定Avatar文件完成骨骼层级结构的初始化,但也可以通过配合动画控制器查询当前模型子节点获取,所以Avatar文件并不是必须的。

来源:知乎

作者:Yene

返回列表>
热门课程

专业讲师指导 快速摆脱技能困惑

相关文章

多种教程 总有一个适合自己

专业问题咨询

你担心的问题 火星帮你解答

学员作品赏析
1903学员阮捍、徐珂小组作品

1903学员阮捍、徐珂小组作品

1903学员周德志小组作品

1903学员周德志小组作品

1903学员周德志小组作品

1903学员周德志小组作品

1903学员王悦、王思琪小组作品

1903学员王悦、王思琪小组作品

1903学员王悦、王思琪小组作品

1903学员王悦、王思琪小组作品

1903期学员阮捍、徐珂小组作品

1903期学员阮捍、徐珂小组作品

1903期学员阮捍、徐珂小组作品

1903期学员阮捍、徐珂小组作品

1903期学员阮捍、徐珂小组作品

1903期学员阮捍、徐珂小组作品

关于我们
关于我们
在线咨询 电话咨询
点击领取免费教程