计算机图形学动画代码_计算机图形学中的动画简介
Note
这份是对MIT Foundation of 3D Computer Graphics 第23章的翻译稿。本章主要介绍了动画制作中的基础算法知识。由于学习过程中的不断探索与研究,在此我对本书的内容进行了深入的学习与理解,并在此基础上对相关章节进行了较为详细的解读与总结。鉴于此,在撰写过程中本文的内容也会不断地进行优化和完善以确保其准确性和完整性。如您在阅读过程中有任何建议与意见,请随时提出以便共同进步!联系邮箱:ninety miles@icloud.com
说明:文章中的相关内容均归属原创作者所有,并非个人作品,请确保引用规范以尊重知识产权。
此外,在Github平台CGLearning上可获取详尽资料以及完整的文档库,并提供课程项目的实施方案以供参考与实践。
动画:甚至都不是一个介绍(Animation: Not Even an Introduction)
在CG电影和视频游戏中,物体动态呈现。这种现象被称为动画。再次强调, animate its own comprehensive book, which we are not qualified to author.本章将向您介绍用于动画的一些技术概念(并配有多幅图片)。对于对此课程感兴趣的学习者,他们或许可以在参考文献[4]中找到更多详细内容.计算机动画常被视为计算机图形领域中最具挑战性的子领域之一.尽管如此,在这一领域中的重要改进仍在持续进行.
23.1 插值(Interpolation)
通过计算机构简化解插值的过程,并处理数据中的空缺部分以补充缺失的信息量,则能显著提升动画制作效率
23.1.1 关键帧(Keyframing)
基于低分辨率的时间样本集合进行动画序列的描绘。 artist 通过详细描述每个场景的状态来传达完整信息。随后采用平滑插值方法来生成介于艺术家指定帧之间的中间图像。这些过程将在第9章中得到深入讲解。尽管计算占据了主要工作量,但艺术性的核心工作仍由专业 artists 完成。这种技术赋予 animation artists 对最终呈现效果的全面掌控权。
23.1.2 蒙皮(Skinning)
蒙皮是一种较为简单的技术,在三角形网格上用来模拟身体部分形态变化。参考图示

。蒙皮易于在顶点着色器实现并且通常用于视频游戏中。

Figure 23.1: 借助靠近关节的模型视图矩阵(adjacent joint model view matrix),该系统允许你方便地应用可变形关节产生物体动画。来自参考文献[74](© Industrial Light & Magic)。
让我们假设一位艺术家从一个基于物体坐标的三角形网格开始创建艺术作品。“在这种输入中”,每个顶点的位置由物体坐标精确定义。“具体来说”,这个网格中的每一个顶点都是通过测量并记录物体的实际坐标来确定的。

接下来,在被称为索具(rigging)的一个处理中进行操作时,在艺术家手中完成了一系列关键步骤:首先设计出几何轮廓,并将其填入网格系统之中;随后形成的这个几何图形能够直观地体现骨骼系统的分布情况;它相当于将骨骼系统与关节联系起来的基础结构;而在当前时刻这一情境下,请假定每个顶点都被艺术家特意指定为对应某一块特定的骨骼。
这种轮廓形状自发地发展出一种子-物体坐标系和子-物体矩阵体系(如上文所述)。就像我们在上一节所观察到的(图示参考)。

)。这些子-物体矩阵表达了一个帧和其处于静止姿态的“父”帧的关系。回忆一下,例如,在小节5.4中,我们具有

,此处

曾为(正交标准化的)右下臂帧,并且矩阵

为刚体矩阵。我们已经增加“

”下标意指“静止姿态”。让我们针对这种骨骼定义渐增的累加矩阵,

;这种矩阵表达了帧关系:

。让我们考虑某种顶点,使用输入物体-坐标

,其已经被关联到下臂骨骼。我们可以记录这个点为

该方法在小节5.4中得到体现,在动画场景中调整骨骼结构时会将某些矩阵重新赋值为新的位置参数。

和

,此处下标意指“新”。让我们针对这种骨骼定义“新的”累加矩阵,

,其表达了关系:

。比方说,这种骨骼操纵移动了下臂帧:

。如果我们要顺着这种帧以刚体风格移动点

,那么我们需要以下面方式表达更新

这种情形中,被变换点的眼睛坐标为

,并且我们看到针对这个顶点的模型视图矩阵应该为

。
这种方法带来了具有"刚性"效果的"坚硬"蒙皮结果。通过将顶点关联到多个骨骼来实现平滑蒙皮效果。针对每个骨骼进行计算后将结果混合。
更专业一点,针对每个顶点,我们允许动画器设置一系列权重

其总和为单位一,并非简单的数值相加;这些权重参数则决定了每个骨骼在运动时对相应顶点施加的影响程度。在动画生成的过程中,则是以这样的方式来计算出每个顶点的具体位置变化

此处

为针对骨骼

的渐增矩阵。
实现蒙皮效果较为简便地在顶点着色器中完成。替代单个模型视图矩阵,则采用一系列模型视图矩阵作为统一变量输入。每个顶点的权重参数则通过属性变量来表示,并依赖于一个辅助缓存对象来存储相关信息。方程(23.1)所描述的求和运算随后由顶点程序进行计算。
23.2 模拟(Simulation)
物理学为我们提供了随时间演变 governing objects' motion and evolution 的数学方程。基于输入集合中的初始条件, 这些方程可以通过计算方法来模拟, 从而预测物体在真实世界中的运动轨迹。如果操作得当, 这种方法可以生成非常逼真的效果。其核心在于通过预判处理来模拟真实的物理过程——也就是说, 你只需输入初始条件, 系统就会自动生成相应的动画效果。然而, 控制这样的动画并非直观易懂的过程——需要深入理解系统的运行机制才能实现有效的操控。过去十年间, 物理学模拟技术取得了显著的进步, 这一技术突破在计算机图形生成特效方面发挥了关键作用。
23.2.1 粒子(Particles)
针对一个点的时间进化,运动物理学始于常微分方程(ODE)。

力可表示为质量与加速度的乘积;此处所指的加速度即为速度对时间的变化率(导数),而该变化率本身又是位置对时间的一阶导数(即速度)。除了引力之外,在流体动力学中还有一种类似于风的力量(如气压差产生的流动力量)。
基于初始条件的设定下,在对常微分方程(ODE)进行离散化处理时,在时间维度上采用经典的四阶Runge-Kutta方法。

这种方法通常被称为时间积分法。当采用欧拉方法时, 我们需要选择适当的小步长以避免出现异常情况. 另一种方法是确实存在大量成熟的文献中, 可以用更可靠的方式求解常微分方程(ODE). 要进一步了解相关内容, 可参考课后书目[4]中的注释.
在粒子系统动画制作中, 我们采用了非交互式的点状粒子模拟场景, 基于方程(23.2)进行逐步演化, 也可以模拟为空气中的烟雾微粒。参考图示

。通常每个粒子被渲染为半透明的小斑点(blob)或表面。

Figure 23.2: The simulation of a group of simple particles can be used for computer animation of flowing water. Referenced from Book [37], © Eurographics and Blackwell Publishing Ltd.
23.2.2 刚体(Rigid Bodies)
如何建模刚体随时间演变(例如骰子在桌面上滚动)则会异常复杂?首先由于我们的物体具有体积和形状因此必须处理其旋转运动及其角动量(angular momentum)。然而这并非全部挑战因为还有许多其他需要精确定位和解决的问题如摩擦力接触点以及碰撞响应等都需要考虑清楚。如需进一步了解相关细节请参阅参考文献[4]中的注释信息。
在刚体模拟过程中,我们的目标是建立一个能够反映物体之间相互作用及反作用力(回应)的物理模型。为了准确计算碰撞事件的发生时间及位置,在动态系统中必须持续监控每一对刚体之间的互动,并根据其运动特性预测潜在的接触时刻。The reference diagrams.

为了快速实现这一模拟, 我们通常采用了一种基于动态进化和空间绑定的体系, 这种方法能够有效提升模拟效率与准确性

Figure 23.3: 为了实现对刚性物体的模拟,在计算碰撞事件的同时还需要综合考虑动量守恒、摩擦力以及弹簧的弹性势能等物理效应。该图来自于参考文献[27](ACM Press, 1995)。
另一个特别严重的问题源于将摩擦力视为接触力进行精确建模。
对于静止在地板上的物体而言,
为了准确模拟阻碍物体滑动的物理机制,
同时需要准确模拟无限次反弹及其伴随的振荡行为。
23.2.3 衣料(Cloth)
在建模过程中具有重要意义的现象是衣料。在这种情形下,表面既可以表示为粒子网格,也可以作为三角形元素的网格。在采用粒子网格的方式下,将力施加到该系统以防止物体被拉伸、切削或过度弯曲。为了模拟内部摩擦力以及消除振动行为,在此系统中引入了阻尼。当采用三角形网格时,由于拉伸、切削以及可能发生的弯曲变形,你需要编写相应的数学表达式来描述这些行为。

用于衣料状态的能量。力从而被解释为

探讨关于衣料效果的方面时
探讨关于衣料效果的方面时

。

Figure 23.4: 衣料可以通过多种算法实现模拟过程。其中实现"完美达成"特定行为的过程往往具有一定的复杂性。源自参考文献[24],©️ACM.
头发建模常常用类似的方法模拟为质量-弹簧模型。请查阅相关资料时,请参考文献[67]以获取更多信息。如图所示

。

Figure 23.5: 头发可以作为质量-弹簧系统实现动画化。来自于[67],©️ACM。
23.2.4 可变形材料(Deformable Materials)
在现实世界中存在大量具有明显可变性的物体,在物理学中可以将其表示为适当的数学方程组,并且在时间维度上进行积分运算。为了构建可变形物体的物理模型,则需关注其体积变化情况这一关键指标,在这种情况下通常采用四面体网格来进行数值模拟。值得注意的是这种方法不仅适用于特殊材料如果冻凝胶这类非传统物质,在构建人类真实的形态模型方面同样具有重要意义

。

Figure 23.6: 要建模可变形模型,我们需要考虑表达容积。来自于[57],©️Springer。
23.2.5 火和水(Fire and Water)
建模和动画类似水和火的物理现象也可能是重要的。参考图示

这些主要借助颗粒以及基于三维网格的技术进行建模,在一个液体容积中的扭曲和回旋的发展过程由纳维-斯托克斯偏微分方程描述。这种数值模拟依赖于自身采用的数值方法,并如当前非常受欢迎的"稳定流体"技术[70]所示;关于流体模拟的更多信息,请参考Bridson最近所著之书[9]。

Figure 23.7: 一张令人震惊的模拟水的图像。来自于参考书目[46],©️IEEE。
23.3 人类运动(Human Locomotion)
人类并非仅仅是作为动物体存在,并且在进行计算机模拟时发现其复杂程度远超传统液体或颗粒物等物质的复杂程度。此外,在计算机动画领域中,人们显然致力于精确控制虚拟生物的行为
存在这样一个时刻,在研究者眼中,在机器人、控制理论与优化概念最初阶段或许能模仿人类某些动作的可能性非常大。然而这一目标目前难以实现,并且当前技术具有较高的依赖性——这些技术高度依赖于对运动捕捉的使用。在运动捕捉过程中,在校准过的相机/传感器装置下观察到的人体可能会进行多种动作;而被跟踪的目标通常会穿着标记物来辅助数据采集

这种数据随后就可以被传输到虚拟角色。这种数据也可以在一定程度上经过修改和控制。

Figure 23.8: 一个人和一匹马。来自于参考书目[41],©️Sian Lawson。
