时间采样
动画 Animation 把随时间变化的场景采样为离散帧序列。电影常用 24 fps,电视和交互内容也常见 30、60 fps 或更高。帧率只规定显示时刻的离散间隔
Δt=fps1,
并不自动保证运动平滑。物体在相邻帧间位移过大时会产生时间混叠;快门时间决定单帧中是否通过运动模糊保留这段连续轨迹。
早期机械与手绘动画、关键帧和补间动画逐步发展到数字动画。现代制作仍保留相同基本结构:艺术家控制少量关键状态,系统生成中间状态,再配合物理模拟和动作捕捉处理难以逐帧制作的运动。
关键帧
关键帧动画 Keyframe Animation 在若干时刻 ti 指定参数 qi。最简单的线性插值为
q(t)=(1−α)qi+αqi+1,α=ti+1−tit−ti.
它保证位置连续,但在关键帧处速度会突然改变。三次 Hermite 曲线 额外指定端点物理速度 mi,mi+1:
q(α)=h00(α)qi+h10(α)Δtmi+h01(α)qi+1+h11(α)Δtmi+1,
其中
h00=2α3−3α2+1,h10=α3−2α2+α,
h01=−2α3+3α2,h11=α3−α2.
代入 α=0,1 可验证位置分别为两端关键帧。由于
dtdq=Δt1dαdq,
而端点处 dq/dα 分别为 Δtmi 和 Δtmi+1,所以物理时间上的端点速度正好匹配给定值。连续选择相邻段的速度能够获得 C1 运动。

图中线性插值在关键帧处会突然改变斜率,Hermite 曲线则通过端点速度让运动轨迹平滑衔接。位置连续并不代表速度连续,视觉上的顿挫通常来自后一种不连续。
角度直接线性插值可能绕远路,也会在 360∘ 附近跳变。三维旋转更适合使用单位四元数的 球面线性插值 Spherical Linear Interpolation,简称 SLERP。四元数 q 与 −q 表示同一旋转;若 q0⋅q1<0,先令 q1←−q1,才能沿四维单位球的短弧插值。令
θ=arccos[clamp(q0⋅q1,−1,1)],
则
slerp(q0,q1;α)=sinθsin[(1−α)θ]q0+sinθsin(αθ)q1.
q0,q1 必须先归一化;θ 很小时,直接线性插值后重新归一化更稳定。也可以先确保欧拉角分支一致,但它仍可能遇到万向节锁。比例、颜色和材质参数同样要依据其物理含义选择插值空间,不能机械地对显示编码值做线性插值。
动力学
运动学直接规定位置随时间的变化;动力学 Dynamics 从力和质量求运动。Newton 第二定律为
F=ma=mdtdv=mdt2d2x.
把二阶方程拆成一阶状态方程:
dtd(xv)=(vF(x,v,t)/m).
给定初始位置、速度、力模型和边界条件,数值积分器便能逐步求出状态。力模型决定物理现象,积分器决定连续方程如何离散,二者的问题需要分开判断。
弹簧力
先考虑两个质点 a,b,位置差
d=xa−xb,ℓ=∥d∥,d^=ℓd.
根据 Hooke’s Law,静止长度为 ℓ0、刚度为 ks 的弹簧势能是
Es=21ks(ℓ−ℓ0)2.
力是势能对位置的负梯度。由于
∂xa∂ℓ=∥xa−xb∥xa−xb=d^,
作用在 a 上的力为
fa←b=−∂xa∂Es=−ks(ℓ−ℓ0)d^.
作用在 b 上的力大小相等、方向相反。ℓ>ℓ0 时弹簧拉伸,力把两点拉近;ℓ<ℓ0 时弹簧压缩,力把两点推开。这一符号检查比死记公式更可靠。
零静止长度是 ℓ0=0 的特例:
fa←b=−ks(xa−xb).
当 ℓ 接近零而 ℓ0>0 时,方向 d^ 不稳定,实现中需要避免除零或使用连续的正则化。
阻尼
理想弹簧只在动能和势能之间交换能量,会永久振荡。阻尼 Damping 用来耗散能量。全局阻力
fd=−kdv
相对于世界静止系的阻力会耗散运动,连整体平移也会减慢。它适合模拟空气阻力式的稳定化,却会改变系统总动量。
内部弹簧阻尼只抑制两个端点沿弹簧方向的相对速度。令
vrel=(va−vb)⋅d^,
作用在 a 上的阻尼力可写为
fd,a=−kdvreld^,fd,b=−fd,a.
两力相互抵消,因此不会凭空改变质心动量。只取轴向相对速度也避免把刚体式共同运动误当成弹簧形变。刚度和阻尼很大时,方程会变得 stiff,显式积分必须使用很小时间步。
弹簧网
多个质点和弹簧可以组成绳索、布料与软体。规则布料网格通常包含:
- structural springs:连接水平、竖直相邻点,抵抗拉伸;
- shear springs:连接对角点,抵抗剪切;
- bending springs:跨过一个点连接更远邻居,抵抗折叠。
只使用结构弹簧的方格可沿对角方向轻易剪切;加入剪切弹簧后形状更稳定;弯曲弹簧控制布料柔软程度。边界点可以固定或施加碰撞约束。
质点—弹簧模型直观,但参数很难与连续材料的 Young 模量、Poisson 比等严格对应。有限元法 Finite Element Method 从连续体能量出发,把物体离散成单元并求能量梯度,在材料精度和复杂变形上更系统。

图中布料或软体由离散质点和连线组成,局部受力会沿网格传播并形成整体形变。网格越密,能表现的局部褶皱越丰富,但每步需要处理的邻接关系也越多。

图中只画出了结构弹簧与剪切弹簧:前者抵抗水平和竖直拉伸,后者约束对角变形;这两类连接本身仍不抵抗面外弯曲。弯曲弹簧需要跨过一个邻点连接更远顶点,才能对折叠提供恢复力。缺少其中一类时,网格会沿对应自由度出现不自然的软塌或剪切。
粒子系统
粒子系统 Particle System 用大量简单个体表示火花、烟尘、喷泉、群集甚至流体。每一时间步通常执行:
- 生成新粒子并设置初始状态;
- 计算重力、阻力、吸引、排斥等力;
- 更新速度和位置;
- 处理碰撞、约束和粒子间作用;
- 删除寿命结束或离开范围的粒子;
- 以点精灵、网格、体积或隐式表面渲染。
令
rij=xj−xi,r=∥rij∥,r^ij=rrij,
其中方向从粒子 i 指向粒子 j。两个质点的万有引力为
fi←j=Gr2mimjr^ij,
其中 r^ij 从 i 指向 j。当 r→0 时力会发散,离散模拟常引入软化长度
fi←j=Gmimj(∥rij∥2+ε2)3/2rij.
直接计算所有粒子对的成本为 O(N2)。大规模引力、分子动力学和群集可用网格、空间哈希、Barnes–Hut tree 或邻域列表减少候选交互。
Flocking 不要求每个个体解真实流体方程,而用分离、对齐、聚合等局部规则产生群体运动。规则是行为模型,其参数与视觉结果相关,不应解释为基本物理常数。

图中每个个体只观察邻域并执行分离、对齐、聚合,整体却出现队形、转向和聚散等宏观行为。局部规则的组合会产生涌现结果,不能把群体轨迹简单归因于某一个个体的预设路径。
正向运动学
正向运动学 Forward Kinematics 从关节参数计算末端位置。骨架是关节组成的树,每个关节保存相对父关节的旋转和平移,根节点位于世界坐标。沿父子链相乘即可得到关节 j 的全局变换:
Tjworld=TrootT1⋯Tj.
矩阵顺序由层级决定,父节点运动会影响所有后代。正向运动学输入关节参数,输出末端位置,计算直接且结果唯一。
二维平面中的 m 段机械臂,段长为 ℓk,关节相对角为 θk。第 k 段的世界朝向是累计角
ϕk=j=1∑kθj.
末端位置因此为
x(θ)=k=1∑mℓkcosϕk,y(θ)=k=1∑mℓksinϕk.
这个函数 f(θ) 就是后续逆运动学要反求的映射。
两杆反解
逆向运动学 Inverse Kinematics 从末端目标反求关节参数。两段平面机械臂的段长为 ℓ1,ℓ2,目标为 (x,y),目标到根部的距离满足
r2=x2+y2.
由余弦定理,
r2=ℓ12+ℓ22+2ℓ1ℓ2cosθ2,
所以
cosθ2=2ℓ1ℓ2r2−ℓ12−ℓ22.
若右侧超出 [−1,1],目标不在可达环域
∣ℓ1−ℓ2∣≤r≤ℓ1+ℓ2.
有效时 sinθ2 有正负两个选择,对应肘部向上或向下。选定 θ2 后,
θ1=atan2(y,x)−atan2(ℓ2sinθ2,ℓ1+ℓ2cosθ2).
第一项是目标方向,第二项修正第一段与根部到目标连线之间的夹角。这个解析解展示了 IK 的三个基本现象:目标可能无解、可能有多个解,也可能在完全伸直等奇异姿态附近对目标变化非常敏感。
FK 是确定的正向映射;IK 是带约束的反问题,多解、无解和奇异位形都属于问题本身。
数值反解
复杂骨架通常通过优化求解。设末端位置为 f(θ),目标为 p∗,可最小化
E(θ)=21∥f(θ)−p∗∥2.
令误差 e=f(θ)−p∗,Jacobian 为
J=∂θ∂f,
链式法则给出
∇θE=JTe.
最简单的梯度下降更新为
θk+1=θk−ηJTe.
Gauss–Newton 在局部线性化 f(θ+Δθ)≈f(θ)+JΔθ 后,求解
JTJΔθ=−JTe.
接近奇异姿态时 JTJ 可能病态,Damped Least Squares 改为
(JTJ+λI)Δθ=−JTe
以提高稳定性。关节限位、姿态偏好、脚底接触和避障都可作为约束或附加能量加入。

蒙皮绑定
Rigging 把可变形网格绑定到骨架。线性混合蒙皮 Linear Blend Skinning 为每个顶点分配若干关节权重 wij,满足
wij≥0,j∑wij=1.
以下统一采用 column vector,并让 xˉi 位于模型的绑定姿态空间;Bj 与 Tj 分别把关节 j 的局部坐标变换到绑定姿态模型空间和当前模型空间。这样二者处在同一个目标坐标系约定下,顶点更新为
xˉi′=j∑wijTjBj−1xˉi.
Bj−1 先把顶点送到关节绑定空间,Tj 再送到当前姿态,最后按权重混合。线性混合简单高效,但大角度扭转会损失体积并产生 candy-wrapper artifact。双四元数蒙皮、修正形变或数据驱动方法可改善。

图中骨骼层提供关节变换,蒙皮层为每个顶点保存多关节权重,网格位置是这些变换的加权结果。局部关节运动先沿骨架层级传播,再通过权重影响附近顶点,因此权重突变会造成明显折痕。
Blend Shapes 直接在线性形状基上组合面部表情:
x=x0+k∑wkΔxk.
它适合嘴型和表情等局部形变,也可与骨骼蒙皮叠加。权重范围和组合关系需要约束,否则会产生超出制作意图的形状。

图中每个 blend shape 是相对基准网格的一组位移,权重改变时把多个局部形变线性叠加。它直接表达嘴角、眼睑等形状目标,和骨骼提供的整体刚性运动属于不同数据层,可以组合使用。
动作捕捉
动作捕捉 Motion Capture 从真实演员获得身体或面部运动。光学系统用多台标定相机观察标记点,通过多视图射线的最近交会恢复三维位置,再把标记轨迹拟合到骨架。惯性系统使用 IMU 估计各部位旋转,不依赖固定相机,但会积累漂移。
捕捉数据自然、细节丰富,却仍需处理遮挡、标记混淆、缺帧、抖动和骨架比例差异。动作重定向 Retargeting 把源演员动作映射到不同角色,需要保持足底接触、关节限制和运动风格。

图中光学标记主要提供三维位置,IMU 主要提供局部旋转,系统把这些观测拟合成随时间变化的骨架参数;清理缺帧和重定向后才得到角色动画。捕捉数据是测量结果,不等于已经满足角色比例、接触和关节约束的最终姿态。
面部捕捉对微小形变和眼神很敏感。即使几何准确,只要眼睛、皮肤或时序略有不协调,也会产生 恐怖谷 Uncanny Valley。制作流程通常结合捕捉、表情基、人工修整与物理次级运动,而不直接把原始测量当作最终动画。