动画与模拟
一、计算机动画
- 把事物变“活”
- 美学是主要考率因素
- 电影 24fps 视频:30fps 虚拟现实:90fps
1、关键帧动画
- 艺术家们画出动画中重要的帧,也就是关键帧,助手们画出这些关键帧之间的过渡帧
- 关键帧插值,给定了关键帧,如何通过插值得到中间的过渡帧。插值是关键帧动画制作里很重要的一项技术。
2、物理仿真
1、牛顿运动定律
F = m a F=ma F=ma
2、基础物理模拟
衣服/织物是由网格构成的,只要我们将每个点的受力情况都考虑清楚,自然可以得到其加速度,并进一步更新速度和位置。
3、弹簧系统
- 理想化的弹簧
没有长度,被拉开了多长就会产生相应的多大的力-遵循胡克定律
f a → b = k s ( b − a ) f_{a\rightarrow b}=k_s(b-a) fa→b=ks(b−a)
f b → a = − f a → b f_{b\rightarrow a}=-f_{a\rightarrow b} fb→a=−fa→b
k s k_s ks劲度系数 - 没有零长度的弹簧
考虑弹簧的自然长度
f a → b = k s ( b − a ) ∣ ∣ b − a ∣ ∣ ( ∣ ∣ b − a ∣ ∣ − l ) f_{a\rightarrow b}=k_s\frac{(b-a)}{||b-a||}(||b-a||-l) fa→b=ks∣∣b−a∣∣(b−a)(∣∣b−a∣∣−l) - 导数的点表示方法
令 x x x为一个点的位置
x ˙ \dot{x} x˙是速度
x ¨ \ddot{x} x¨是加速度 - 能量损失
f = − k d b ˙ f=-k_d \dot{b} f=−kdb˙
类似阻碍运动的粘滞力
与运动方向相反,在速度方向上减慢运动
k d k_d kd是衰减系数
这个力只能描述弹簧外部的力,描述不了弹簧内部的损耗。 - 弹簧内阻尼
f b = − k d b − a ∣ ∣ b − a ∣ ∣ ( b ˙ − a ˙ ) ⋅ b − a ∣ ∣ b − a ∣ ∣ f_b=-k_d\frac{b-a}{||b-a||}(\dot{b}-\dot{a}) \cdot \frac{b-a}{||b-a||} fb=−kd∣∣b−a∣∣b−a(b˙−a˙)⋅∣∣b−a∣∣b−a
结构决定行为。
4、粒子系统
动态系统建模为大量粒子构成的集合,每个粒子的行为由其所受的力决定。
- 粒子系统的的动画
1、(如果有必要) 创建新的粒子
2、计算每一个粒子上的力
3、更新每一个粒子的速度和位置
4、(如果有必要)删除符合某个终止条件的粒子。
5、渲染粒子 - 粒子系统的力
1、引力和斥力- 重力、电磁力
- 弹力、推力
2、阻力 - 摩擦力、空气阻力、粘滞力
3、碰撞力 - 墙、容器、固定物体
- 动态物体、身体部位
- 万有引力
F = G m 1 m 2 d 2 F=G\frac{m_1m_2}{d^2} F=Gd2m1m2
G = 6.67428 × 1 0 − 11 N m 2 k g − 2 G=6.67428\times10^{-11}Nm^2kg^{-2} G=6.67428×10−11Nm2kg−2 - 在一个大规模范围内存在大量重复的小东西-理论上就可以用粒子系统来描述,我们可以用粒子系统来模拟鸟群,将每只鸟抽象为一个粒子,并结合生物特点考虑其受力。
5、运动学
- 前向运动学
描述一个骨骼系统
要定义拓扑结构(什么和什么相连)
各种关节
树形结构
关节类型有3种:
Pin(1D rotation)
Ball(2D rotation)
Prismatic joint(translation)
计算p的位置
- 逆运动学
直接去定义物体的运动情况,中间的关节如何运动,由计算机去算。
逆运动学不好解,但本质上是个优化问题,可以用一些数值方法去解,比如梯度下降法:
1、选定初始配置
2、定义误差度量
3、计算误差的梯度
4、应用梯度下降
6、绳索
类似于木偶操作,用线去提拉木偶的某些部位,使其呈现各种造型
一定程度上来讲,rigging是逆运动学的一个应用
- Blend Shapes
本质上是在对控制点进行blend
简单的做法是:采用顶点位置的线性组合,用样条来控制权重随时间的变化 - 动作捕捉
是一个数据驱动的制作动画序列的方法
记录真实世界的表现,然后从中抽出动作
好处是:可以快速捕捉到大量真实数据;真实性更高 - Motion Capture Pros and Cons
优点:
1、可以快速捕捉到大量真实数据
2、真实性更高
缺点:
1、动作捕捉配置非常复杂、昂贵
2、捕捉到的动作可能是不符合美术师的需求的 - Optical Motion Capture
目前应用最广泛设备
需要在人物身上贴一些marker,位置用多台摄像机来记录
Motion Data:得到的数据,是一堆看似杂乱无章的曲线,每一条是一个marker在不同时间的位置。 - Uncanny valley(恐怖谷效应)
当人工生成的角色外表跟人类接近时,我们对其会有负面的反应,直到人造的外表和真正的人类达到足够相似的程度,我们对其反应才会转为正面
二、模拟
1、单粒子模拟
假设粒子位于一个速度场中, 速度场是个关于位置和时间的函数
v
(
x
,
t
)
v(x,t)
v(x,t)
已知了速度,计算粒子的(在不同时间的)位置需要解一个 一阶常微分方程:
d
x
d
t
=
x
˙
=
v
(
x
,
t
)
\frac{dx}{dt}=\dot{x}=v(x,t)
dtdx=x˙=v(x,t)
1、显示欧拉
已知速度和给定的初始位置x0,求粒子在任意时刻的位置
- 对时间进行离散化,取一定的 △ t \triangle{t} △t ,不断计算下一个位置。
- 是一个简单的迭代方法
- 被广泛使用
- 非常不准确,并且不稳定
x t + △ t = x t + △ t x ˙ t x^{t+\triangle{t}}=x^t+\triangle{t}\dot{x}^t xt+△t=xt+△tx˙t
x ˙ t + △ t = x ˙ t + △ t x ¨ t \dot{x}^{t+\triangle{t}}=\dot{x}^t+\triangle{t}\ddot{x}^t x˙t+△t=x˙t+△tx¨t - 两个问题
1、数值积分会使得误差累积,可以通过减小步长来改善
2、减小步长可以减小误差,但是某些情况下,即便步长取的无限小,结果会偏离正确的值,这就是不稳定。
2、不稳定性和改进
-
中点法
到达a点后,取到a的中点,用中点的速度重新计算欧拉方法
x m i d = x ( t ) + △ t / 2 ∗ v ( x ( t ) , t ) x_{mid}=x(t)+\triangle{t}/2*v(x(t),t) xmid=x(t)+△t/2∗v(x(t),t)
x ( t + △ t ) = x ( t ) + △ t / 2 ∗ v ( x m i d , t ) x(t+\triangle{t})=x(t)+\triangle{t}/2*v(x_{mid},t) x(t+△t)=x(t)+△t/2∗v(xmid,t) -
自适应法
从当前位置出发,分两次计算下一个位置得到 x T / 2 x_{T/2} xT/2和之前计算得到的 x T x_{T} xT做比较,看两者的值是否足够接近,以此决定是否需要减小步长 -
隐式欧拉方法
在当前这一步应用下一步的速度
x t + △ t = x t + △ t x ˙ t + △ t x^{t+\triangle{t}}=x^t+\triangle{t}\dot{x}^{t+\triangle{t}} xt+△t=xt+△tx˙t+△t
x ˙ t + △ t = x ˙ t + △ t x ¨ t + △ t \dot{x}^{t+\triangle{t}}=\dot{x}^t+\triangle{t}\ddot{x}^{t+\triangle{t}} x˙t+△t=x˙t+△tx¨t+△t
阶数越高的方法,误差随步长减小而减小得越快,稳定性越高 -
龙格-库塔方法
-
Position-Based / Verlet Integration
通过一些规则使得粒子在走下一步时,下一步的位置会得到一定的限制,防止粒子发散,与预期不符
优缺:
1、快速且简单
2、不基于物理,减少能量
2、刚体模拟
1、内部所有点按照同一种方式运动,类似于粒子的模拟
2、仅仅考虑一些属性
3、流体模拟
可以采用 Position-Based Method 进行,它是一种非物理的方法。
Position-Based Method 主要基于两个假设:
1、假设水是由无数小的刚体球体组成
2、假设水无法被压缩,即任意处水的密度相等
可以通过下述步骤模拟流体:
1、只要知道水的任意处密度发生了改变,就需要改变刚体球体的位置来修正这一部分的密度
2、水的任意处的密度都是关于刚体球体的位置的函数,所以我们也能知道任意处的密度梯度,如果想要改变任意处的密度,只需要通过梯度下降法即可。
4、Eulerian vs. Lagrangian
在模拟大规模物体运动时的两种不同视角
1、拉格朗日法,俗称“质点法”:盯着每个物体看
2、欧拉法,俗称“网格法”:将空间划分成一个个网格,在不同的时间观察全部的物体
1、Material Point Method(MPM)
拉格朗日方法:考虑了粒子的材质属性
欧拉方法:使用格子去做数值积分
混合方法:将粒子属性记录在格子上,对格子进行更新,然后将属性写回粒子
三、参考和引用
[1] bilibili:GAMES101-现代计算机图形学入门-闫令琪
[2] 动画与模拟(基本概念、质点弹簧系统、运动学).pdf
[3] 动画与模拟(求解常微分方程,刚体与流体).pdf
[4] 知乎:GAMES-101 Lecture 21 笔记-上
[5] 知乎:GAMES-101 Lecture 21 笔记-下
[6] CSDN:GAMES101-现代计算机图形学学习笔记(22)
[7] 知乎:GAMES-101 Lecture 22 笔记