11 Animation¶
11.1 Keyframe Animation¶
Keyframe Animation 关键帧动画
Animator (e.g. lead animator) creates keyframes 先做关键字
Assistant (person or computer) creates in-between frames (“tweening”) 然后利用人工或者电脑补充中间的帧,这也就涉及到了 Keyframe Interpolation,我们把每一帧当作参数值的向量。
对每个参数值进行插值,一般来说线性插值的效果不是特别好,我们可以考虑样条或者说一些可控制的插值方式。
11.2 Physical Simulation¶
物理仿真,运用物理的公式来生成物体的运动过程
我们以 Mass Spring System (质点弹簧系统) 为例,介绍这样的动态模拟过程。
很多物体的动态模拟都可以被看作为质点弹簧系统,比如说人的头发,一张纸之类的,只不过弹簧的结构不太一样而已。
而这样的质点弹簧系统是一系列连接的质点和弹簧,基础的单元就是一段理想的弹簧。
根据胡克定律可以得到力与两点拉长的距离呈正比,下面公式中 \(l\) 为原始长度,\(f_{a\rightarrow b}\) 表示从 \(a\) 到 \(b\) 的这样一个力。
用这个模型得到的结果,由于能量守恒,弹簧会一直振动。考虑现实情况,我们增加一个摩擦力。
其中红色框中的部分是一个标量,这个表示的是投影到 \(\vec{ab}\) 方向的相对速度,然后摩擦力与该相对速度呈正比。
运用这个基础结构我们可以构建一系列的结构,比如说一块布就运用一个平面的结构来组合这些基础单元。弹簧结构的连接可以决定一个图形的行为,我们根据布的特性来改进仅仅只是平面的连接方式。

一开始的结构的不足之处在于
-
切变会影响形状
-
会使原来的形状不在一个平面上
改进之后,我们在对角线处增加了两根弹簧来防止切变,然后每隔一个质点增加一根弹簧避免了 out of plane bending

对于布料来说我们还可以使用有限元方法FEM(Finite Element Method)来代替弹簧系统
11.3 Particle Systems¶
粒子系统就是把动态的系统建模为大量粒子的集合,同时每个粒子的运动都是由一组物理(或者非物理)力所定义,采用的粒子越多,结果越好但是生成的速度越慢。
对于动画里的任意一帧的生成,采用粒子系统,大致步骤如下
-
[If needed] Create new particles 建立新的粒子
-
Calculate forces on each particle 计算新的粒子所受到的力
-
Update each particle’s position and velocity 更新每个粒子的位置和速度
-
[If needed] Remove dead particles 移除不用的粒子
-
Render particles 渲染粒子
对于粒子系统中的力,包括了
- 引力和斥力(repulsion) 如:万有引力、磁力、弹力(Springs)、弹簧、推进力(propulsion)。(eg:万有引力)
- 阻力(Damping forces):摩擦(Friction),空气阻力(air drag),粘度 (viscosity)…
- 碰撞(Collisions):墙壁、容器、固定的物体…。与动态物体、人物身体部位等…。
对于动物集群,我们可以将其模拟为 ODE,将每个鸟建模为一个粒子,每个粒子都受制于简单的力
- 吸引力 attraction 描述了鸟想要融入集体的那样一种运动
- 斥力 repulsion 就代表了鸟与鸟之间不愿靠的太近的现象
- alignment toward average trajectory of neighbors 考虑周围的鸟飞的方向
11.4 Kinematics¶
11.4.1 Forward Kinematics¶
Articulated skeleton 关节骨骼系统,是一种拓扑结构(描述了什么和什么连接)
关节有三种类型
- Pin (1D rotation) 只能在平面上移动
- Ball (2D rotation) 可以旋转到不同平面
- Prismatic joint (translation) 可以拉长
优点是直接控制比较方便,实施也比较直接;缺点在于不是特别直观(艺术家操控起来比较困难)
11.4.2 Inverse Kinematics¶
根据尖端的位置来获得关节的位置
为什么这样的逆向求解问题是困难的?因为逆运动学的解并不唯一或者说根本不存在
N-link lK问题优化方法
(1)选择一个初始构型。
(2)定义一个 error metric(如:目标与当前位置之间距离的平方)。
(3)计算误差梯度作为构形的函数
(4)应用梯度下降(或牛顿法,或其他优化程序)
11.4.3 应用¶
Rigging¶
Rigging是一套高级角色控制,允许更快速和直观地修改姿势、变形、表情等。
- 就像提线木偶的线一样。
- 捕捉所有有意义的角色变化。
- 因角色而异。
制作昂贵:具有人工误差并需要艺术和技术的训练。
Blend Shapes¶
Instead of skeleton, interpolate directly between surfaces 直接在表面间进行插值
E.g., model a collection of facial expressions:
Simplest scheme: take linear combination of vertex positions 对于控制点进行线性插值
Spline used to control choice of weights over time 样条用于控制随着时间的推移权重的选择。
Motion Capture¶
Motion Capture 动作捕捉是创建动画序列的数据驱动方法,记录真实世界的表现(例如执行活动的人),从收集到的数据中提取姿态作为时间函数。
优点 是非常贴近真实并且可以快速的获取大量的真实数据。
缺点 是准备工作复杂且高花费并且捕捉到的动画可能不满足艺术家的需要,需要选择。
最为常用的动作捕捉方式还是 Optical 的方式,选择在动捕演员上做标记(小球或贴片)。使用8+ 摄像机,240 Hz,但是有遮挡现象会变得困难
获得的数据就如同下图所示

面部动画的挑战: Uncanny valley (恐怖谷效应)
人造角色的表情越真实就越恐怖,直到达到完全真实。