Skip to main content

动画方面

本动画中,动画特指 Animation Clip。

在继续阅读本教程前,有必要向您介绍“优化动画大小也很必要”的原因,如果您了解这一问题的答案与原理,您可以跳过开头的这一说明部分

对动画文件数据组成的简略说明

显而易见的,当我们用手机拍摄 4K 图片的时候,想发到朋友圈,或者在 VRChat 里拍摄 4K 图片,却发现文件太大了,QQ 会以发送文件的形式发送图片;当我们在音乐 app 上听音乐时,高品质音乐的下载占用大小就越多——这也就是为什么在 VRChat 里,模型贴图与音频文件的大小也是一个需要注意的原因。
但为什么也需要注意动画文件的大小呢?
让我们从 Unity 动画的录制角度来看,假设我想要录制某件衣服的开关动画,常见的手法应该是录制一个开启的一帧动画,再录制一个关闭的一帧动画,再拿给动画控制器使用,于是我们可以说,这两个动画分别都含有一帧,那一帧上“拥有一个叫做"关"的数据信息”,假设这个信息在这一帧里,对应的数据占用为1,另一个例子如下:

image.png

我们可以看到,它一共拥有两帧,每一帧拥有 15 个信息,总共 30 空间占用,类似的空间占用也可以粗糙的推断到模型动画上。
然而,这样的情况在人物动作动画上会变的更复杂,让我们举一个例子:我们在游戏里,将手臂从大腿旁举到头顶时,不会一瞬间转动 180 度,而是会从大腿向上举,过渡到头顶,这一过程中我们的手臂转动状态有无数种,转动了 15度,转动了 16.98 度,转动了 78.24 度等等,取决于浮点小数点的精度。当我们一旦使用动画表现这一过程,这些信息就会在每一帧上叠加起来,形成非常巨大的占用量。

 

动画可能非常大,尤其是当它们“完全设定关键帧”并且不同关键帧之间没有补间时。这些动画可以有效地压缩,但必须以解压缩的方式加载到内存中,这有助于 Uncompressed Size (未压缩的大小) 统计数据。

Unity 在导入设置中为动画提供了内置的动画压缩选项。您可以使用 “Keyframe Reduction” 或 “Optimal” 压缩,这将尝试根据您设置的阈值来减少冗余关键帧。