动画/模拟
目录
1878年:第一个电影:一开始是科学研究用,比如研究马的奔跑形态
1937年:白雪公主和七个小矮人:第一部和电影长度一样的动画
3.2 质点弹簧系统(Mass Spring System)
解决方法:对角线加弹簧,只能抵抗一个方向上的力,另外一个方向依然可以折叠
进一步改进:跳跃链接任何一个点都和它隔一个点的点连接起来,这样不管怎么弯折平面,都会有一个抵抗的力。
1 计算机动画历史
1.1 动画是什么?
·把物体变成活的
·动画是建模/几何的一种拓展:在不同的时间有不同的图。
·动画:因为有视觉暂留现象,按一定速度连续放送一系列的图片即可。
电影:24帧/秒
平常的视频:30帧/秒
虚拟现实:双眼的采样都要大于90帧/秒
1.2 动画的历史
第一个动画:公元前,原始壁画
1813年:圆盘画图,按一定速度显示
1878年:第一个电影:一开始是科学研究用,比如研究马的奔跑形态
1937年:白雪公主和七个小矮人:第一部和电影长度一样的动画
1963年:用计算机生成数字动画
1972年:用计算机生成人脸的三维网格模型
1993年:侏罗纪公园,用电脑成的恐龙放到电影里面
1995年:玩具总动员,用电脑生成的完整长度的电影
2009年:水母上的涟漪还不是很真实
2019年:冰雪奇缘,头发、冰的模拟都非常好
2 动画是如何制作的?
2.1 关键帧动画(Keyframe Animation)
如图,一个人有3个主要动作
在3个关键动作之间补一些中间过程的运动趋势
具体而言,把每一帧看作一个带参数的向量
每一帧都有一些关键点,这些关键点在其他的帧上也有对应的点。
找出这些关键点和它们之间一一对应的关系,然后对不同帧中的点做插值处理。
线性插值:比较生硬
样条插值:可以控制插值效果
3 物理模拟 (Physical Simulation)
3.1 物理模拟是什么?
3.1.1 牛顿定律:F=ma
模拟/仿真就是在推导/实现这种物理公式,来计算出物体的变化。
只要能正确建立物理模型,就可以正确表示。
3.1.2 物理模拟的例子
布料模拟的例子
流体模拟
一般来说:只要正确建立物体的相互作用力,就可以模拟出正确的物理效果
3.2 质点弹簧系统(Mass Spring System)
这里介绍一个很简单经典的系统:质点弹簧系统
3.2.1 一些例子:绳子、头发、布料
3.2.2 质点弹簧系统概念
质点弹簧系统:是一系列的质点和弹簧
(1)基础模型:一个长度为0的弹簧左右两边连接着两个质点
胡克定律:弹力 = 劲度系数 * 弹簧伸长的长度
基本模型忽略了弹簧的长度,但实际上弹簧是有实际长度的
(2)让弹簧长度不为0
括号里面b点和a点的距离减去初始长度才是弹簧伸长的长度
有什么问题?
动能和势能一直互相转化,永远不会停
这里引入一些记号:
变量上点一个点就是它的一阶导数、变量上点两个点就是它的二阶导数。
(3)加入摩擦力
摩擦力f的方向与速度方向相反,
现在有什么问题?会使所有的运动都停下来,无法表示弹簧内部的力。
(4)加弹簧内部的摩擦力
内部的摩擦力与相对速度有关:
(b的速度-a的速度)越快,力越大,但还要考虑力的方向,只有投影到b-a方向上的力才会在内部产生摩擦力。反例就是固定住a点,然后让b点绕着a点做匀速圆周运动,这样的话,虽然a点和b点之间有速度差,但是并不会在内部产生摩擦力
(5)弹簧的结构:面、网格
现在想用弹簧质点系统模拟一块布,就出现了很多问题:
切变:布料对角线拽的话,结构的形状会变,但实际上的布料可以抵抗这种力
对折:布料很难被折叠,但现在的结构可以被轻易折叠
解决方法:对角线加弹簧,只能抵抗一个方向上的力,另外一个方向依然可以折叠
改进:再加另外一个方向对角线,但现在水平折叠,也是可以的
进一步改进:跳跃链接任何一个点都和它隔一个点的点连接起来,这样不管怎么弯折平面,都会有一个抵抗的力。
这样的一个质点弹簧系统就基本够用了!
例子:
有限元模型也能做这个模拟
3.3 粒子系统(Particle Systems)
粒子系统:建模每一个粒子,粒子之间的力、外部的力等描述出来。
魔法效果、烟雾、灰尘等会用这种粒子系统模拟。
粒子系统存在的问题:
·粒子之间的作用要模拟清楚很复杂,如粒子之间的引力、位置变化等,这是一个有挑战性的工作。
·粒子系统需要考虑的粒子非常多。
3.3.1 粒子系统模拟
这里有一个简单的算法:
·动态生成粒子
·计算粒子的作用力(包括内部和外部)【有点难】
·通过作用力来更新粒子的位置和速度 【也有点难】
·移除死亡的粒子
·渲染粒子
3.2.2 粒子系统的力
引力和斥力:重力,电磁力、弹簧、推力······
摩擦力: 摩擦力、空气阻力、粘滞力······
碰撞处理: 墙壁、容器、固定物体、动态对象、角色身体部位······
举例:万有引力
3.3.3 例子:星系模拟、水的模拟
3.3.4 粒子概念延伸
在一个很大规模的范围内有很多重复的东西,这些东西就可以被看作是粒子
比如模拟一个鸟群,有如下的假设
·任何一只鸟都不想落单,想要融入其他鸟
·鸟和鸟之间不愿意离的太近
·鸟要考虑整体的运动方向
例子:用粒子模拟分子结构、人群模拟
4 运动学
在图形学中,常会将运动学分为正运动学和逆运动学,逆运动学相对来说比较复杂
4.1正运动学(Forward Kinematics)
4.1.1 基本模型
要描述一个类似人类骨骼的骨骼系统,要定义不同的关节。
第一种:pin,可以在钉住的平面上旋转
第二种:Ball,可以空间360度旋转
第三种,可以伸缩
一个简单的情况:两个关节
第一段旋转一个角度,第二段旋转一个角度,那么最后的尖端在哪里?
正向运动学就是计算这些运动的结果。
4.1.2 例子:人类行走
正向运动学很早就得到了广泛应用。
4.1.3 正向运动学的问题:
实现容易,但不直观,艺术家们难以使用这些工具。
4.2 逆向运动学(Inverse Kinematics)
4.2.1 概念
给出最后的位置,也就是固定P点,你要告诉我角度1和角度2.
4.2.2 问题
这个式子会变得很复杂,不好计算。
逆向运动学的解有时候不唯一,有时候无解。
人们会采用一些优化方法来找到中间的位置。
梯度下降法可以解
还有些其他的优化方法,往往不会采用数学公式的计算来解。
4.2.3 逆运动学例子
5 Rigging
5.1 Rigging定义
是什么?通过类似于提线木偶的操作来控制物体的动作
例子
人物的两个动作之间可以通过插值来做
5.2 动作捕捉(Motion Capture)
5.2.1 定义
让真人的动作直接反应到虚拟的人物上,这时候就要建立真人的控制点和虚拟人物控制点之间的映射。
优缺点
真实、动捕的速度快,数据多。
但准备时间长、真人和动画人物的动作风格不一致、有时候捕捉不到有用的数据、有时候有遮挡也会导致数据丢失,总之问题很多。
5.2.3 动捕设备
视觉分析、磁场、机械等方法
运用最广泛的还是光学动作捕捉的方法,贴片/小球
5.2.4 动捕数据
不同的点在不同的时间会出现在三维空间里的哪里。
5.2.5 面部模拟的挑战
通过动捕可以达到非常真实的动画效果,但也造成恐怖谷效应
阿凡达就用了面部捕捉,是个里程碑式的作品
6 动画/电影的生成过程
有个想法 - 开会 - 画草稿 - 放幻灯片给大家看
物体位置 - 场景布置 - 角色建模 - 纹理制作 - 做成动画 - 给光照(渲染)
得到三维图像 - 后期合成 - 2d滤镜 - 颜色确认 - 产品输出