删除隐藏层和形状
在早期使用 Bodymovin 时,它有一个问题,即在导出阶段和创建 JSON 时会包含来自隐藏层或隐藏子层的数据。从那时起,Bodymovin 已经更新为忽略隐藏层,除非在 Bodymovin 导出窗口的设置图标中指定。如果您有相当多的隐藏层或隐藏子层,为了让自己安心,那么就值得检查以确保所有额外的数据不会影响最终的输出。从现在开始,这应该不再是最终输出的问题。
更多的点在你的路径上,更多数据在你的 JSON 里
当处理复杂的插图时,最好要理解 Bodymovin 是如何将这些形状转换成数据的。为了绘制矢量形状,它在代码中绘制了一系列点在网格上,并使用代码中定义的弧线、直线和形状来组成插图。所有这些工作都将在定义不同部分的填充(fill)和笔画(stroke)的代码中完成。如果每个点、每条弧线、每条线都是由代码 bits 所定义的,那么插图中的代码 bits 越多,JSON 文件就越大。《YouTube Kids》中的许多插画风格都有一定的内在影响,避免角色感觉过于僵硬或过于完美。孩子们很邋遢,所以我们与他们互动的角色应该反映出一点真实的原始。在我们最初的插画方法中,我们的风格是更加有机和松散的。正因为如此,每个部件都有许多点,如果最终资产以 png 形式显示的话,这是可行的。但是,为了让这些插图变成动画,它们需要被大量的清理,并且被绘制的点的数量也大大减少了。通过看下面的图片,你可以看到许多线条从填充被转换成笔画并简化了。手臂和腿也被转换为笔画而不是填充路径,以使这些部分更容易动画化,并减少了用于动画这些部分的关键帧数据的数量。
更多关键帧在你的时间轴上,更多数据在你的 JSON 里
这一点应该是显而易见的,但至少需要提一下。对于每一层上使用的关键帧,都会生成数据。当你制作动画时,你使用的大量关键帧将直接转换成更大的 JSON 输出。理解这一点非常重要,因为如果你在动画化大量的属性,而其中你的一些关键帧的参数没有改变时,那么这些关键帧就是无用的数据,却会导致最终 JSON 的膨胀。如下图所示,最好的做法是删除多余的没有动画的关键帧,这样它们就不会被编译到最终的输出中。
删除修剪图层上未使用的关键帧
Bodymovin 中还没有建立的一个小优化是丢弃多余(驻留在修剪层之外)的关键帧。例如,你有一个非常复杂的关键帧的图层,你复制了这个图层 5 次,并在不同的地方进行修剪,这样你就可以改变它的 Z 位置,在整个合成过程中和另一个图层上下交替,当你渲染出最终的 JSON 时,你会意识到这个文件比动画设置时本该的大小要大得多。这样结果的原因是,Bodymovin 没有忽略位于图层开始和结束点之外的关键帧,而是将它们全部导出。所以比起将动画数据分割到 5 个不同的层,你却将复杂的信息复制了 5 次。处理这个问题的最好方法是删除所有(对进入、持续和离开图层没有影响)的关键帧。在下面的图片中,我展示了如何清理图层,以避免最终 JSON 中出现多余的数据和膨胀问题。注意,你不能删除任何存在于图层边界之外的关键帧数据,因为你的关键帧可能不会与你的修剪完美对齐。你要确保你要删除的关键帧不会对你要清理的图层产生影响。
在制作这样的动画的过程中,最好隐藏一个未处理的图层,以防你分裂图层并删除了错误的关键帧,浪费了宝贵的动画时间。