GAMES101.闫令琪.12.动画与模拟(Lecture 21)
- https://www.bilibili.com/video/av90798049
动画与模拟
- animation
- 内容
- History
- Keyframe animation
- Physical simulation
- Kinematics
- Rigging
动画
- 动画的动机:让物体动起来
- 是一种交流的工具
- 更关注美学特征,物理上差不多对就行
- 建模,几何的拓展
- 时间轴上的扩展
- 动画的形成:快速播放的图片序列
- 电影:24 fps
- 视频:30 fps
- VR:90 fps
- 不晕的要求
- frames per second
动画的历史
早期的壁画
- 一些图片序列
- 我们将这些图片截取下来动态的播放,可以看到动态的狩猎图
- 这说明很早的时候,大家就已经知道动画就是一系列的图片序列而已,只是当时缺少播放设备罢了
Phenakistoscope
- 1831
- 圆盘,边上画上画,但是你只能看到一部分区域
- 转起来则会有动画的效果
- 小时候玩的小人书,翻页动画
电影
- 最早用于科学研究
- 例如:捕捉马的运动形态
动画
- 白雪公主和七个小矮人
- Disney, “Snow White and the Seven Dwarfs” (1937)
- 第一部手绘的长达 40 分钟的动画(电影长度)
- First Hand-Drawn Feature-Length (>40 mins) Animation
- feature length,时间大于等于 40 分钟,电影的长度
- Ivan Sutherland, “Sketchpad” (1963) – Light pen, vector display
- First Digital-Computer-Generated Animation
- 可以支持用一根激光笔在显示屏上画出、移动简单的几何体
- 早期的动画
- 三维网格显示任务的面目表情
- Ed Catmull & Frederick Parke, “Computer Animated Faces” (1972)
- 侏罗纪公园
- Jurassic Park (1993)
- 里程碑式的作品
- 真正把电脑生成的恐龙放到了电影里
- 玩具总动员
- Pixar, “Toy Story” (1995)
- First CG-Generated Feature-Length Film
- 第一部完全由电脑生成的电影
- 当时还是使用光栅化技术,没有光线跟踪
- 天降美食
- Sony Pictures Animation, “Cloudy With a Chance of Meatballs” (2009)
- 东西掉进水里的模拟还不是很逼真
- 涟漪
- 冰雪奇缘2
- Walt Disney Animation Studios, “Frozen 2” (2019)
- 充满大量细节:花瓣、草地、特效
关键帧动画
- keyframe animation
- 首先绘制一些重要的位置的场景,这些重要的位置就被称为关键帧
- 动画制作
- Animator (e.g. lead animator) creates keyframes
- 负责人先画出关键帧
- Assistant (person or computer) creates in-between frames
(“tweening”)
- 助手在将中间的过程补全
- Animator (e.g. lead animator) creates keyframes
- flash
- 简单的图案可以从关键帧自动生成
关键帧插值
- 插值是一门学问,做到自然真实是很难的
- 连续性
- \(C1,C2,\cdots\)
物理模拟
- physical simulation
- 牛顿定律 \(F=ma\)
- Force = Mass x Acceleration
- 简单的匀加速运动
\[ x^{t+\Delta t}=x^t+\Delta tv^t+\dfrac{1}{2}(\Delta t)^2a^t \]
- 复杂的布料:如果考虑了所有力,就能很好的模拟出结果
- 模拟得对的话,则不会出现穿模现象
- 流体的模拟
- 模拟水滴的位置
- 然后考虑怎么渲染得更真实
- 割裂开模拟和真实感渲染这两步
质点弹簧系统
- Mass Spring System
例子
简单的弹簧绳
- Mass Spring Rope
头发
- 很复杂:摩擦力、重力、外力
布料
- Mass Spring Mesh
- 关于模拟布料的一篇论文
- Huamin Wang, Ravi Ramamoorthi, and James F. O'Brien. "Data-Driven Elastic Models for Cloth: Modeling and Measurement". ACM Transactions on Graphics, 30(4):71:1–11, July 2011. Proceedings of ACM SIGGRAPH 2011, Vancouver, BC Canada.
质点弹簧系统
- 一系列相互连接的质点和弹簧
理想的弹簧
- 没有长度
- 被拉开多长,就产生多大的力
- 弹簧力大小的计算
- 胡克定律 Hooke’s Law
- 劲度系数 \(k_s\)
\[ \boldsymbol{f_{a\to b}}=k_s(\mathbf{b}-\mathbf{a}) \]
\[ \boldsymbol{f_{b\to a}}=-\boldsymbol{f_{a\to b}} \]
有长度的弹簧
\[ \boldsymbol{f_{a\to b}}=k_s(||\mathbf{b}-\mathbf{a}||-l)\dfrac{\mathbf{b}-\mathbf{a}}{||\mathbf{b}-\mathbf{a}||} \]
- 胡克定律
- \(\dfrac{\mathbf{b}-\mathbf{a}}{||\mathbf{b}-\mathbf{a}||}\) 表示方向
- 问题:由于能量守恒,永远不会停下来
- 加入一个摩擦力
- 记号
\[ \begin{aligned} &\boldsymbol{x}\\ &\dot{\boldsymbol{x}}=\boldsymbol{v}\\ &\ddot{\boldsymbol{x}}=\boldsymbol{a} \end{aligned} \]
阻尼
- damping force
\[ \boldsymbol{f}=-k_d\mathbf{\dot{b}} \]
- 问题:会引起所有的运动都停下来(Slows down all motion)
- 表现不了弹簧内部的损耗
- 表现问题的例子
- 两个质点和连接它们的弹簧,在光滑的水平面上同步的向右运动,理论上应该不会被停下来,而且弹簧之间应该没有相对运动
- 但是按照这个模型他们会被停下来
- 阻尼应该加在弹簧上,即两个质点的相对运动上(相对速度在弹簧方向上的分量)
\[ \boldsymbol{f_{b}}=-k_d\dfrac{\mathbf{b}-\mathbf{a}}{||\mathbf{b}-\mathbf{a}||}\cdot(\mathbf{\dot{b}}-\mathbf{\dot{a}})\cdot \dfrac{\mathbf{b}-\mathbf{a}}{||\mathbf{b}-\mathbf{a}||} \]
- 式子含义的解释
- 可以解释圆周运动,速度没有衰减的现象
组合
弹簧模拟布
问题1:切变
- 布有抵抗切变的力,但是这个模型对角线一拉会形变
问题2:不成平面
- 如果有一个力让这个结构不成平面,这个结构可能不会恢复
- 例如上面的结构沿着对角线对折
- 但是现实的布料是会恢复的
策略
- 加对角线弹簧
- 但是变得不对称了
- 解决不了问题 2
- 加两个对角线
- 同样解决不了问题 2(竖直对折)
- 每一个点和它相隔一个点的点相连
- skip connection
- 这样不管如果你把这个结构折成不在一个平面内的结构的话,势必会影响某个弹簧(产生恢复力)
- 红线的连接相对较弱(劲度系数较小)
有限元方法模拟布料
- FEM:Finite Element Method
- 广泛应用于汽车碰撞的模拟
- 力的作用会传导
- FEM 写起来很复杂
粒子系统
- Particle System
- 把模型看成是很多个粒子的集合
- 每个粒子的动作都被(非)物理上的力定义
- 在现代图形学和游戏中广泛应用
- 实现比较简单和方便
- 点越多,复杂度越高,模拟得越精细,执行越慢
- 问题
- 可能需要大量的粒子(流体)
- 可能需要一些其他的加速结构
- 例如要求粒子之间的引力(需要有一个很快得找到周围的粒子的方法)
简单算法
1 | For each frame in animation |
- 建模的部分确定有哪些相互作用力
- 怎么去解作用力
- 学术界更关心
- 更难一些
- 注意:模拟和渲染的过程是分开的
粒子系统中力的作用
- Attraction and repulsion forces(引力与斥力)
- Gravity, electromagnetism, …
- Springs, propulsion, …
- Damping forces(阻尼)
- Friction, air drag, viscosity, …
- Collisions(碰撞)
- Walls, containers, fixed objects, …
- Dynamic objects, character body parts, …
粒子的扩展
- 粒子:大规模范围内有很多小的重复的东西,这些东西可以理解为粒子
模拟鸟群
- http://www.red3d.com/cwr/boids/
- 引力:和邻居的中心有个引力(任何一只鸟都不想落单,并且试图融入到他们中间去)
- 斥力:和每只邻居中的鸟都有斥力(任何一只鸟都不希望和其他鸟离的太近)
- 朝向:邻居的朝向平均值(希望沿着和邻居相同的方向飞)
其他例子
- 模拟分子结构
- Molecular Dynamics
- 人群的模拟
- Crowds + “Rock” Dynamics
其他笔记
正运动学
- Forward Kinematics
- 做出一种动画,用于描述一个骨骼系统,能够表示和人类似的拓扑结构
- Articulated skeleton(铰接式骨架)
- Topology (what’s connected to what)
- 拓扑结构,具体怎么连接
- Geometric relations from joints
- 通过关节连接
- Tree structure (in absence of loops)
- 树的结构(无环)
- Topology (what’s connected to what)
- 关节的类型
- Pin:允许 1D 的旋转
- Ball:允许 2D 的旋转(像球一样旋转、可以转到平面外)
- Prismatic joint:允许拉长
- Pin(被钉住一样)
- Prismatic joint(棱柱形关节)
关节的例子
- Pin 关节连接
\[ \begin{aligned} &p_x=l_1\cos(\theta_1)+l_2\cos(\theta_1+\theta_2)\\ &p_y=l_1\sin(\theta_1)+l_2\sin(\theta_1+\theta_2)\\ \end{aligned} \]
评价
问题
- 定义太过于物理
- 不适合与艺术家
- 艺术家喜欢更加直观简单的定义,例如从哪里移动到哪里(而不是几个参数)
好处
- 方便计算模拟,实现简单
逆运动学
- 告诉你运动的结果,然后计算出参数来模拟这个结果
- 例如给出轨迹,然后计算参数
关节的例子
- 给你 \(P\) 点的轨迹,求出中间的过程中的 \(\theta_1,\theta_2\) 的值,从而模拟这个运动
- 解起来很复杂
评价
问题
- 关节多了很难算
- 解不唯一
- 可能无解
- 解只可能出现实线的圆环上,其他地方无解
解决策略
- 优化方法求解(梯度下降)
逆运动学例子
- Grochow et al., Style Based Inverse Kinematics
Rigging
- 指对于形状的控制
- 类似于木偶的控制
- Rigging is a set of higher level controls on a character that allow more rapid & intuitive modification of pose, deformations, expression, etc
- 一定程度上可以说是对于逆运动学的一个应用
- Rigging 本身很复杂
- 建模很复杂
Blend Shape
- 艺术家对同一个人物形象的两个动作已经做好了,不使用骨架,直接堆表面进行插值出中间的形态
- 对于控制点进行插值
Motion Capture
- 动作捕捉
- 真人的控制点
- 好处
- 真实感非常强
- 实际动作不需要艺术家去调,很方便(快)
- 缺点
- 动作演员很辛苦
- 动画人物的动作和现实人做出的动作还是有差异的
- 后期调整
- 捕捉不到很好的数据
- 成本高
- 需要很多个摄像机,才能捕捉到完整的信息
- 人物动作自己遮挡到控制点
其他的控制点模型
- 光学的方法(不受遮挡的影响)
- 应用相对广泛
- 需要很多相机高频捕捉
- 机械的方法(直接输出数据)
- 得到的数据
- 每一个控制点的位置随着时间变化的信息
- 可以得到非常真实的动画
- 恐怖谷效应 Uncanny valley
- 过于真实带来的问题
- 阿凡达 Avatar
- 使用了面部捕捉
- 里程碑式的作品
动画产业的 pipeline
- VFX:visual effects
- 开销:美工的开销、渲染的开销
- 动画电影的开销比请演员还高