For the complete documentation index, see llms.txt. This page is also available as Markdown.

动画

学习如何创建可嵌入到导入 Decentraland 的 3D 模型中的动画。

动画是一门赋予事物生命的艺术。而让你的场景更生动的最好方式,就是为你的 3D 模型添加一些动画。

💡 提示: 安装 Decentraland Tools Blender 插件。它包含一些实用功能,可帮助你编辑和导出 3D 模型、穿戴物和表情动作。

实现它有几种方式:通过 对象动画,通过 绑定(骨骼动画),或者使用 形状键(变形目标动画).

对象动画 最适合简单模型,例如弹跳的球、旋转的地球仪或漂浮的椅子,而且它不需要骨架。需要说明的是,对象动画不同于 顶点动画。在对象动画中,模型会作为一个整体进行动画;而在顶点动画中,对象的每个顶点都可以单独进行动画。

形状键(也称为变形目标或混合形状) 是一种 由 Decentraland 引擎支持的顶点动画。它们尤其适合面部表情、口型同步,或任何仅靠骨骼难以实现的变形。嵌入到 glTF/GLB 文件中的形状键动画,会像骨骼动画或对象动画一样在世界中播放。

如果你有一个更复杂的模型,例如人物、生物或机械,那么你就需要一个 骨架。骨架不过是一个数字骨骼系统,它会移动并变形网格。将网格绑定到骨架的过程称为蒙皮,在这个过程中你要定义每个骨骼会影响哪些顶点组,以及这种影响有多强,从而确保模型以尽可能好的方式变形。

不过,无论采用哪种方法,3D 模型的所有动画都必须嵌入到它的 glTF 文件中,因为你不能引用位于其他文件中的动画。

创建动画

以下是你如何使用 Blender 创建动画。

对象动画

  • 请确保你已打开 摄影表 > 动作编辑器 选项卡,并点击 新建 来添加一个动画片段。

  • 按你的需要重命名,并确保切换 Fake User (盾牌图标),这样你的动画就会被保存。

  • 先选中对象,并按 I在第一帧设置关键帧。然后移动对象,旋转或缩放它,再在时间轴的另一帧中按 I ,用当前变换再次设置一个关键帧。

  • 动画的最后一帧应该和第一帧一样,所以只需复制第一帧并粘贴到最后一帧。



创建动画片段并添加关键帧。

骨架动画

对于骨架动画,你需要一个骨架。如果你想自己制作,请参见 创建骨架 ,了解如何设置一个一致的骨架。

当绑定完成并且蒙皮变形效果良好后,你就可以开始动画了!这个过程与对象动画非常相似,但不是在 对象模式中进行,而是在 姿态模式.

  • 前往 姿态模式 并确保你已经打开了 摄影表 > 动作编辑器 选项卡,并点击 新建 来添加一个动画片段。

  • 按你的需要重命名,并确保切换 Fake User (盾牌图标),这样你的动画就会被保存。

  • 将鼠标放在 视口上,按 一个 全选,然后按 I ,为整个骨架设置关键帧。

  • 在时间轴上移动到不同的帧,然后随意操作骨骼,以获得你想要的姿势。你可以根据骨架的设置方式,改变骨骼的位置、旋转和缩放。

  • 当你得到满意的结果后,为整个骨架再设置一个关键帧。不断重复,直到完成动画。如果动画要循环播放,请记得让第一帧和最后一帧保持一致。



如果你是动画制作的新手,可以看看这个包含一些实用技巧的新手教程:

Video Preview

蒙皮动画与变换动画

从性能角度看,变换动画通常比蒙皮网格动画更好,因为它们在显示动画所需的计算资源方面开销更小。

蒙皮网格动画是指使用带有骨骼骨架的网格,这些骨骼会对网格顶点进行权重绑定。骨架会被动画化,进而驱动网格动画。这个过程可能相当耗费计算资源,尤其是在需要动画化大量顶点时。

另一方面,变换动画是直接对对象的变换属性(例如位置、旋转和缩放)进行动画处理。与蒙皮网格动画相比,这可以用更少的计算资源完成,因为通常需要动画化的变换属性比网格中的顶点要少。

此外,变换动画通常可以预先计算并存储为更紧凑的格式,例如关键帧数据,这样就能快速访问和播放,而无需在实时中进行大量计算。

总体而言,虽然蒙皮网格动画可以产生更细致、更逼真的动画,但在诸如电子游戏这类对性能要求很高的应用中,变换动画通常更受青睐。

创建并导出多个动画片段

你的模型可以拥有任意多个动画片段。你可以在 这里这一节.

中查看如何创建、浏览和删除动画。

Video Preview

将多个动画导出为一个动画

与骨骼动画不同,在骨骼动画中你可以绑定多个对象,并将它们的动画合并到一个动画片段里;而在对象动画中你不能这样做。动画会被分别导出,并且一次只能播放一个对象。一个解决方案是把多个动画合并成一个,这样你就拥有一个能让所有对象同时运动的动画片段。

要做到这一点,请将每个对象的动画下推到 非线性动画轨道 中,如下所示。



将每个对象的动画下推到 NLA 轨道。

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



来设置将多个动画导出为一个动画。

请注意,这只有在每个对象只有一个动画时才有效。如果对象有多个动画片段,最好分别导出。

💡 提示:如果你不想自己制作动画,也可以下载通用动画并将其应用到你的模型上。例如,对于具有类人特征的 3D 角色,你可以从 Mixamo.

采样

有时,由于动画数量过多,或者动画与模型的组合过大,你的动画文件最终可能会变得太大。

采样是优化动画的好方法。采样率将决定动画中关键帧被烘焙的频率。例如,如果采样率设为 2,就表示每 2 帧创建一个关键帧。采样率为 3 则表示每 3 帧烘焙一个关键帧,依此类推。采样率越高,文件就越轻。

不过,缺点是动画会开始变得越来越不流畅,因为它会丢失一些重要的关键帧(这些关键帧在动画中的分布是不均匀的)。另外还要注意, 采样绝不是将动画的帧数除以采样率.

通常, 2 或 3 的采样率 就足够了。这些数值可以在不影响质量的情况下优化动画。

你可以在 采样率 中找到它,在导出设置里的 动画.



💡 提示下:如果动画的帧数可以被采样率整除,那就是好事!这意味着最后一帧会被烘焙,从而保留动画从结束到开始的过渡。

实现动画

本文档介绍如何将动画添加到 3D 模型中。参见 处理动画 ,了解如何在场景中激活动画并处理动画。

动画最佳实践

  • 尽可能保持骨架简单,只为你打算动画化的模型部件创建骨骼。骨骼会影响性能,所以请确保只添加真正必要的部分。

  • 如果动画会在你的场景中循环播放,请确保最终姿势与起始姿势完全一致,以获得更好的过渡效果。

  • 永远不要让角色没有动画,即使它们实际上什么也没做。为角色静止时创建一个“idle”动画。idle 动画可以包含一些细微动作,比如呼吸,也许还会偶尔看看别处。

  • 不要让骨骼保持未摆姿势,比如手、手指、头或脖子。细节在优秀的动画中非常重要,僵硬的动作只会让它看起来更不真实。

  • 避免使用过多关键帧,除非确有必要。你添加的关键帧越多,出现糟糕插值和更大动画文件的可能性就越高。

  • 请选择所有骨骼(包括变形骨骼),并在动画的第一帧和最后一帧设置关键帧。这样可以避免出现没有信息的骨骼,从而导致一个动画无意中影响另一个动画。

  • 导出时,请确保文件中只有一个骨架。在导入动画时,骨架也会一并导入。所有动画都必须由同一个基础骨架来执行,所以请删除任何你不需要的内容。

  • 一定要给你的骨骼和动画重命名。保持一切井井有条!

  • 导出 glTF 模型时,请确认你导出了所有对象和动画。有些导出器默认只会导出 当前选中的内容 。

  • 导出模型后,请在 Babylon Sandbox 中检查所有动画是否都能正常工作,并且名称是否符合预期。

最后更新于