动画
学习如何创建可嵌入到导入 Decentraland 的 3D 模型中的动画。
动画是一门赋予事物生命的艺术。而让你的场景更生动的最好方式,就是为你的 3D 模型添加一些动画。
实现它有几种方式:通过 对象动画,通过 绑定(骨骼动画),或者使用 形状键(变形目标动画).
对象动画 最适合简单模型,例如弹跳的球、旋转的地球仪或漂浮的椅子,而且它不需要骨架。需要说明的是,对象动画不同于 顶点动画。在对象动画中,模型会作为一个整体进行动画;而在顶点动画中,对象的每个顶点都可以单独进行动画。
形状键(也称为变形目标或混合形状) 是一种 由 Decentraland 引擎支持的顶点动画。它们尤其适合面部表情、口型同步,或任何仅靠骨骼难以实现的变形。嵌入到 glTF/GLB 文件中的形状键动画,会像骨骼动画或对象动画一样在世界中播放。
如果你有一个更复杂的模型,例如人物、生物或机械,那么你就需要一个 骨架。骨架不过是一个数字骨骼系统,它会移动并变形网格。将网格绑定到骨架的过程称为蒙皮,在这个过程中你要定义每个骨骼会影响哪些顶点组,以及这种影响有多强,从而确保模型以尽可能好的方式变形。
不过,无论采用哪种方法,3D 模型的所有动画都必须嵌入到它的 glTF 文件中,因为你不能引用位于其他文件中的动画。
创建动画
以下是你如何使用 Blender 创建动画。
对象动画
请确保你已打开 摄影表 > 动作编辑器 选项卡,并点击 新建 来添加一个动画片段。
按你的需要重命名,并确保切换 Fake User (盾牌图标),这样你的动画就会被保存。
先选中对象,并按 I在第一帧设置关键帧。然后移动对象,旋转或缩放它,再在时间轴的另一帧中按 I ,用当前变换再次设置一个关键帧。
动画的最后一帧应该和第一帧一样,所以只需复制第一帧并粘贴到最后一帧。

创建动画片段并添加关键帧。
骨架动画
对于骨架动画,你需要一个骨架。如果你想自己制作,请参见 创建骨架 ,了解如何设置一个一致的骨架。
当绑定完成并且蒙皮变形效果良好后,你就可以开始动画了!这个过程与对象动画非常相似,但不是在 对象模式中进行,而是在 姿态模式.
前往 姿态模式 并确保你已经打开了 摄影表 > 动作编辑器 选项卡,并点击 新建 来添加一个动画片段。
按你的需要重命名,并确保切换 Fake User (盾牌图标),这样你的动画就会被保存。
将鼠标放在 视口上,按 一个 全选,然后按 I ,为整个骨架设置关键帧。
在时间轴上移动到不同的帧,然后随意操作骨骼,以获得你想要的姿势。你可以根据骨架的设置方式,改变骨骼的位置、旋转和缩放。
当你得到满意的结果后,为整个骨架再设置一个关键帧。不断重复,直到完成动画。如果动画要循环播放,请记得让第一帧和最后一帧保持一致。

如果你是动画制作的新手,可以看看这个包含一些实用技巧的新手教程:
蒙皮动画与变换动画
从性能角度看,变换动画通常比蒙皮网格动画更好,因为它们在显示动画所需的计算资源方面开销更小。
蒙皮网格动画是指使用带有骨骼骨架的网格,这些骨骼会对网格顶点进行权重绑定。骨架会被动画化,进而驱动网格动画。这个过程可能相当耗费计算资源,尤其是在需要动画化大量顶点时。
另一方面,变换动画是直接对对象的变换属性(例如位置、旋转和缩放)进行动画处理。与蒙皮网格动画相比,这可以用更少的计算资源完成,因为通常需要动画化的变换属性比网格中的顶点要少。
此外,变换动画通常可以预先计算并存储为更紧凑的格式,例如关键帧数据,这样就能快速访问和播放,而无需在实时中进行大量计算。
总体而言,虽然蒙皮网格动画可以产生更细致、更逼真的动画,但在诸如电子游戏这类对性能要求很高的应用中,变换动画通常更受青睐。
创建并导出多个动画片段
你的模型可以拥有任意多个动画片段。你可以在 这里这一节.
中查看如何创建、浏览和删除动画。
将多个动画导出为一个动画
与骨骼动画不同,在骨骼动画中你可以绑定多个对象,并将它们的动画合并到一个动画片段里;而在对象动画中你不能这样做。动画会被分别导出,并且一次只能播放一个对象。一个解决方案是把多个动画合并成一个,这样你就拥有一个能让所有对象同时运动的动画片段。
要做到这一点,请将每个对象的动画下推到 非线性动画轨道 中,如下所示。

将每个对象的动画下推到 NLA 轨道。
当所有动画都列在 NLA 编辑器中后,选中所有对象,前往 文件 > 导出 > glTF2.0。展开 Include 并勾选 Selected Objects。展开 Animation,再展开 Animation,并取消勾选 按 NLA 轨道分组。你可以在 Merged Animation Name 中重命名该动画片段,然后直接按 导出 glTF 2.0.

来设置将多个动画导出为一个动画。
请注意,这只有在每个对象只有一个动画时才有效。如果对象有多个动画片段,最好分别导出。
采样
有时,由于动画数量过多,或者动画与模型的组合过大,你的动画文件最终可能会变得太大。
采样是优化动画的好方法。采样率将决定动画中关键帧被烘焙的频率。例如,如果采样率设为 2,就表示每 2 帧创建一个关键帧。采样率为 3 则表示每 3 帧烘焙一个关键帧,依此类推。采样率越高,文件就越轻。
不过,缺点是动画会开始变得越来越不流畅,因为它会丢失一些重要的关键帧(这些关键帧在动画中的分布是不均匀的)。另外还要注意, 采样绝不是将动画的帧数除以采样率.
通常, 2 或 3 的采样率 就足够了。这些数值可以在不影响质量的情况下优化动画。
你可以在 采样率 中找到它,在导出设置里的 动画.

实现动画
本文档介绍如何将动画添加到 3D 模型中。参见 处理动画 ,了解如何在场景中激活动画并处理动画。
动画最佳实践
尽可能保持骨架简单,只为你打算动画化的模型部件创建骨骼。骨骼会影响性能,所以请确保只添加真正必要的部分。
如果动画会在你的场景中循环播放,请确保最终姿势与起始姿势完全一致,以获得更好的过渡效果。
永远不要让角色没有动画,即使它们实际上什么也没做。为角色静止时创建一个“idle”动画。idle 动画可以包含一些细微动作,比如呼吸,也许还会偶尔看看别处。
不要让骨骼保持未摆姿势,比如手、手指、头或脖子。细节在优秀的动画中非常重要,僵硬的动作只会让它看起来更不真实。
避免使用过多关键帧,除非确有必要。你添加的关键帧越多,出现糟糕插值和更大动画文件的可能性就越高。
请选择所有骨骼(包括变形骨骼),并在动画的第一帧和最后一帧设置关键帧。这样可以避免出现没有信息的骨骼,从而导致一个动画无意中影响另一个动画。
导出时,请确保文件中只有一个骨架。在导入动画时,骨架也会一并导入。所有动画都必须由同一个基础骨架来执行,所以请删除任何你不需要的内容。
一定要给你的骨骼和动画重命名。保持一切井井有条!
导出 glTF 模型时,请确认你导出了所有对象和动画。有些导出器默认只会导出 当前选中的内容 。
导出模型后,请在 Babylon Sandbox 中检查所有动画是否都能正常工作,并且名称是否符合预期。
最后更新于

