如何在动画软件中表示帧数据?

时间:2015-04-10 14:53:17

标签: java

我计划用JavaFX创建一个简单的逐帧动画编辑器。您在画布上绘图,您可以在时间轴上移动以绘制动画的其他帧。

这将是传统的动画 - 没有矢量或骨头或其中任何一种。

我现在主要关心的是如何存储每一帧的数据。

表示帧的最基本方法是使用嵌套的像素数组。像这样:

Pixel[][] oneFrame = new Pixel[100][100];

表示在100x100画布上绘制的一帧。

如果用户使用1080p分辨率,帧将为1280x720像素:几乎一百万Pixel个实例(假设它们都填充了,可能是背景色)。每帧拥有一百万个物体的想法并不让我感到鼓舞。

因此,将几个帧作为Pixel数组存储在内存中可能不是一个好主意。

我还能如何存储帧数据?我发现可以存储用于创建此类框架的步骤

String[] oneFrame = new String[] {"Stroke, Black, 0, 0, 1280, 720" , "Fill, Green, 0, 720"};

因此,此框架被定义为"首先,您从一个角落到另一个角落,然后用绿色填充前半部分"。

这比存储一百万件物品轻得多。但是有很多缺点:

  • 更多"行动"一个艺术家这样做,程序渲染框架的难度就越大,因为每个动作都是渲染管道中的一个额外步骤。特别是当艺术家们做了很多细节时。
  • 如果我想要一部"导出电影"函数,程序必须重新绘制每一帧,而不是读取任何类型的原始数据"。我想这可能会导致更大的动画大幅减速。

我应该如何存储帧数据?

1 个答案:

答案 0 :(得分:0)

我不是动画专家,但您可以考虑以下一些想法。

  1. 是的,1080p每帧需要大约一百万像素。在具有16 GB内存的新64位计算机上,您可以在内存中保留大约10,000帧。其余的你可以存储在磁盘上。

  2. 您需要为艺术家提供一种在图层中创建动画的方法。可能会有一个缓慢移动的背景图层,一个移动得更快一点的前景图层,以及一个角色移动得更快的字符图层。这为动画提供了3D效果。我相信迪士尼有一台可以在1970年代处理5层cel的机器。你可以将它扩展到10层左右。

  3. 您可以为艺术家提供存储形状的方法。换句话说,每个角色的一幅画,艺术家可以为每一帧略微改变。

  4. 我希望这很有帮助。