计算机动画概述

2023-04-03 22:23:13

对于许多人来说,计算机动画基本上等价于那些大银幕上的故事,如《星球大战》、《玩具总动员》《泰坦尼克号》等。但是并不是所有的,或者说事实上只有一部分计算机动画是在好莱坞这样的地方完成的。对于星期六早晨播放的那些卡通片而言(美国电视频道通常在星期六早晨播放预定的动画节目),它们很有可能完全是使用计算机来生成的。计算机游戏同样受益于各种最先进的计算机图形学技术,并且已经成为计算机动画技术研发的主要驱动力。实时的、性能驱动的计算机动画已经在SIGGRAPHR上提出,并应用在《芝麻街》(Sesame Sreet,一个风靡美国的儿童电视节目)上。台式计算机的动画制作已经可以维持在一个合理的开销水准上,而基于网络的计算机动画设计也有各种规程可循。使用数字模拟技术来完成飞行员、SWAT反恐小组的训练项目,以及核反应堆的模拟也已经不是什么新闻了。这种种应用之间最显著的差别就在于它们的成本、画面要求质量,以及可用的交互行为的种类和数量。在这本书里,我们不会列举某一个应用领域的优势与不足,而是向读者介绍所有这些案例当中,计算机动画的算法实现和相关技术的使用。
这里所说的计算机动画,指的是各种基于计算机实现的运算,其目的是产生多幅图像以构成对运动的感知。本书的重点在于三维图形数据的处理算法和相关技术。总的来说,任何可以被改变的数据量都可以被动画化。某个对象的位置和方向显然都是动画的组成元素,而以下这些内容同样可以构成某种形式的动画:物体的形状、着色参数、纹理坐标、光源的参数,以及摄像机的参数等。
对于计算机动画的技术而言,通常有3种运动控制的实现方式。
艺术动画(artistic animation),设计者需要全力负责运动的制作过程。艺术动画的构建基础是插值技术(interpolation)。
数据驱动的动画(data-driven animation),此时我们需要将各种即时录制的运动过程数字化并且映射为图形对象。
过程式动画( procedural animation),也就是建立一种计算模型以用于运动的控制。通常来说,这种动画的表现形式是对某种物理事件或行为的模拟,并且需要设置其初始条件。
在走进计算机动画的世界之前,我们很有必要先了解一下它的传统、历史,以及一些相关的概念。

感知
一幅图像可以迅速地传达大量的信息,这是由于人类的视觉系统是一个精密的信息处理设备。依此类推,运动的多幅图像就有可能在短时间内传递更多的信息。当然,为了生存的需要,人类的视觉系统同样在多变的世界中不断地进化,它同样可以察觉并解译那些运动的信息。
一个被普遍认同的事实是,如果一系列图像迅速地依次显示,那么观察者会将其辨认为一幅运动的图像,这种情况的发生需要适当的观察条件和播放速度。此时由于人眼和大脑的组成结构,我们有可能将一个静态图像的序列感知为一个连续的图像。对此,一种通常的看法是这种体验源于人体的视觉暂留,即眼睛可以在图像刺激被移除的一瞬间保留其视觉印记。但是值得争议的是,这样的印记(又被称做独立静物的正视觉后像(positive afterimages)),是否真的能填补连续变化的图像之间的感知空隙。对此,Peter Roget于1824年提出了自己的理论,即光照的痕迹可以保留在视网膜之上"。但是视觉的暂留并不等同于运动的感知。一个白色光源的旋转如果能够达到足够的速度,那么我们将感受到一个静止不动的白色环。虽然这种现象可以归因于视觉的暂留,但是其结果却是静止的。而电影院标牌上的一组霓虹灯的连续开关,则可以产生一个循环运动的发光体的效果。在这里我们感知到了运动,但是却不包含任何视觉的暂留,因为我们并没有输出独立的图像。近年来,越来越多的人开始质疑(生理学上的)视觉暂留机制的产生及其结果,而运动的感知也开始被归因于一种(心理学上的)拟动现象(phi phenomenon),即外在的运动最终指向了一种名为B-运动(beta motion)的行为。
无论其内部机理是怎样的,我们的结论依然不变,即对于影片和视频而言,如果一个图像序列可以以一种足够快的速度被依次显示的话,我们的眼睛将被愚弄并将它们解析为连续的影像信息。如果我们的器官无法建立起对这种连续影像的感知,那么我们会看到闪烁(flicker)的画面。这个时候,我们的眼睛和大脑事实上把动画识别为了快速的静止图像序列。依据外部条件的不同,如室内光照和观察的距离,我们能够把独立的图像序列感知为连续影像所需的播放速率也不相同。这个速率被称为临界闪烁频率(critical flicker frequency。
我们已经知道,运动感知的最低限度就是建立对连续影像的感知,那么人眼的感知能力是否也有最高限度呢?答案是肯定的。人眼的感觉器官会频繁地对环境中的光照进行采样,而运动感知的极限,在一定程度上,也就取决于这些传感器官的反应时间,以及其他机械运动(例如眨眼和追踪观察)的限制。如果一个物体的运动对于观察者而言非常迅速,那么眼睛的感受器官将无法向大脑发出足够快的响应信号,也就无法轮廓分明地、独立地分辨物体的细节,从而产生模糊的运动效果。在一个静止图像的序列中,这种运动模糊(motion blur)是由于物体运动的速度和场景采样的时间间隔的共同作用而产生的。对于静止的摄像机来说,如果快门速度相对于物体本身的速度而言足够快的话,那么就算是快速运动的物体也不会产生模糊。在计算机图形学中,如果我们总是可以及时和精确地对场景进行采样的话,就不会出现运动模糊的情形。如果要产生运动模糊,我们需要以大于默认时间间隔的方式对场景进行采样,或者通过手动控制来模拟这种采样的效果。如果我们没有实现运动模糊的效果,那么快速运动的物体的图像序列将变得脱节,就好像在一些现场演出中使用频闪灯一样。这种效果通常称做频闪(strobing)。在手绘实现的动画里,我们通常需要对快速运动的物体在运动方向上进行拉伸,这样就可以在这个物体的连续各帧图像上产生交叠,从而减轻频闪的问题。
正如上面的讨论所提及的,我们事实上需要关注两种类型的速率。一种是播放或者刷新的速率,即浏览动画时每秒钟显示的图像数目;另一种是采样或者更新速率,即每秒钟出现的不同图像的数目。播放速率与动画的闪烁与否相关,而采样速率决定了运动的平滑程度。举例来说,NTSC制式(nationaltelevision standards committee)的电视信号要求显示图像的速率为大约 30fps°,但是它是一种交错信

号R,因此在通常的观察条件下,整个场的播放实质上要达到60fps才能避免闪烁的问题10。在有些电视节目中(例如一些周六早晨播放的卡通片),每秒钟可能只需要6幅不同的图像,而每幅图像需要重复显示5次。通常来说,与口型同步的动画是隔帧绘制的(每两帧绘制一次),因为如果我们每帧都对其进行绘制的话,其显示可能会变得过于频繁。在电影院播放电影的速率通常是24fps(美国标准),但是为了减轻闪烁的问题,电影的每一帧实际上要被显示两次(double-shuttered),这样有效刷新速率将维持在48fps。另一方面,由于NTSC电视信号是交错的,我们可以在1秒内每60帧采样1次场景,从而产生平滑的运动效果(但是事实上所有帧的播放速率是30fps)。计算机的显示设备通常采用逐行扫描的形式(非交错式),因此其刷新速率一般大于70fps。