games101-21-Animation

动画

将场景模型表示为时间的函数, 输出:当顺序查看时提供运动感的图像序列

• 电影:每秒 24 帧

• 视频(一般):30 fps

• 虚拟现实:90 fps

动画历史

•1931,Phenakistoscope圆盘,通过转动圆盘来做动画(右边是可见的窗口,通过旋转时钟,能在窗口看到不同的动作,从而形成动画)

image-20230515102349693

•1878,第一部电影Sallie Gardner,早期电影用来做科学研究,而不是用来娱乐

•1937,第一部剧场版手绘电影-白雪公主与七个小矮人(每秒24帧)

•1963,第一个计算机生成的动画

•1972,早期计算机动画 — 人脸动画

•1993,侏罗纪公园(里程碑作品,电脑生成的恐龙直接使用在电影里)

•1995,玩具总动员,第一部完全计算机生成的CG动画电影(用的光栅化方法)

Keyframe Animation关键帧动画

​ 关键帧定义整个动画的走向,早期由最厉害的艺术家画出关键帧,再让助手把中间的过程补齐。(如软件flash可以通过关键帧自动生成中间的过度)

image-20230515095720277

​ 该方法的本质是插值。例如找到第k帧各个顶点的位置,再找到k+1帧各个顶点的位置,插值中二者中间过程的顶点位置。

image-20230515100020509

​ 但是插值不是简单的线性插值,如果是线性插值,其结果是折线,但是很多时候需要曲线(如可能需要通过样条的方法)。

image-20230515100139977
Physical Simulation物理模拟/仿真

​ 牛顿定律,知道加在物体上的力就可以获得加速度,从而获得速度和新的位置(已知一些初始条件,如开始的位置、速度),来动态更新位置。

img

​ 该方法通过正确建立真实的受力模型来模拟出真实的动画系统。如布料模拟、流体模拟,头发(重力,头发间的摩擦力,风力)。

​ 布料可以视为三角形网格,对于每个点,有自己的重力和来自其他点的拉力。建立相互作用力,从而模拟正确效果(模拟得不好,就有反物理现象:比如穿模,布料穿过人体模型)。如下图,布料可以看成质点弹簧网:

image-20230515100952739 image-20230515103857485

​ 在流体模拟中,先模拟这些水是怎么运动的,水滴在各种地方是怎么形成的;模拟了水的位置、形状等之后,拿去渲染,得出最后的结果。

Mass Spring System质点弹簧系统 (最简单,也非常实用的系统)

​ 质点弹簧系统是一系列相互连接的质点和弹簧。最基本的单元:一个弹簧,左右各连着一个质点。假设理想化的弹簧没有初始长度,只考虑拉伸的情况。对于a来说,弹簧对a的力从a指向b,弹力大小和ab的距离成正比,所以此处b-a是一个向量,表示了力的大小和方向,ks是弹簧系数。

image-20230515103947449

​ 在实际情况下,弹簧有初始长度。弹力大小和拉伸的长度成正比,所以弹力大小用(||b-a||-l)表示,弹力方向用a指向b的单位向量表示。但是由于没有能量损失,动力和势力会相互转换,拉伸后的弹簧会不断震荡而不会最终停止。因此,弹簧系统需要添加阻力。

image-20230515110202293

​ 计算机图形学中,如果x表示为位移,x上一点是速度(一阶导数)点两个点是加速度(二阶导数)。如果按照如下方式定义阻力,对于b来说,b的阻力与速度相反,速度越大阻力越大。kd是阻尼系数,速度定义了力的大小和方向。引入阻尼的目的是让震荡的弹簧不会永远震荡下去,会因为阻尼的存在而停下,弹簧长度恢复到原长。目前引入的阻尼确实能达到目的,但还会阻止一个处于常态的弹簧的一切非震荡运动。比如弹簧两端相对静止,但是处于自由落体状态,都有向下的速度,则此阻尼力会使其落得越来越慢,这不正常。

image-20230515142929565

​ 完整公式如下,f只与相对速度大小有关(也就是弹簧长度发生变化才有阻力),而与弹簧拉伸长度无关。如下对于b来说,阻力从b指向a,所以要添加-号,之后一项表示方向。红色点乘表示力的大小,b-a是相对速度大小,点乘后为该速度在a到b方向上的投影(对于ab不伸长的圆周运动,作用在b上的力垂直于ab,在ab方向上的投影为0,此时无阻力)。

image-20230515111251697

​ 对于一根绳子而言,会有多个弹簧链接组成。对于每一个节点:需要知道节点位置、节点质量和是否允许节点运动。每两个节点间需要创建弹簧。对于每一根弹簧需要知道起始节点、结束节点(计算原长)和弹簧系数。

​ 对于某一时刻,更新位移和速度:

​ (1)利用胡克定律计算每根弹簧两个节点的弹力(由于弹簧间是连在一起的,因此力是累加的;每一时刻都要单独计算受力)

​ (2)遍历每一个节点利用显示欧拉求解

​ 先得到加速度:弹簧力/节点质量+重力加速-阻力/节点质量(此处简化直接用-kv计算阻力,v是绝对速度)

​ 显示欧拉:

​ v(t+1)=v(t)+a(t)×dt; x(t+1)=x(t)+v(t)×dt;

​ 半隐式欧拉(更稳定):

​ v(t+1)=v(t)+a(t)×dt; x(t+1)=x(t)+v(t+1)×dt;

​ (3)遍历每一个节点利用显示Verlet求解

​ 先得到加速度:弹簧力/节点质量+重力加速(计算加速度时不考虑阻力)

​ 显示Verlet:x(t+1)=x(t)+(x(t)-x(t-1))+a(t)×dt×dt

​ 加入阻尼的显示Verlet:x(t+1)=x(t)+(1-kd)×(x(t)-x(t-1))+a(t)×dt×dt

单个模型可以组成更复杂的模型:

image-20230515113408957

​ 布料可以抵抗切变,但是如下模型不能抵抗切变(当有如下两个力拉动时,两端会被拉伸,中间会向内部收缩)。以及布料能力对抗“折”的力,例如纸很容易对折:

image-20230515114817530

​ 这种结构将抵抗切变, 当中间想往里收缩时,中间的弹簧因为阻力会阻碍收缩。但具有各向异性偏差(朝↖拉有弹簧,↗无)不对称, 也不会抵抗平面外弯曲,比如右上角和左下角可以对折(且不改变弹簧形状)。

image-20230515124234960

​ 这种结构将抵抗切变, 方向偏差较小, 也无法抵抗平面外弯曲,因为可以沿着竖线或者横线对折。

image-20230515124344616

​ 这种结构将抵抗切变, 方向偏差较小, 也可以抵抗平面外弯曲。相比青色弹簧, 红色的弹簧相连接的力应该弱得多 (因为青色相连代表布的韧性, 红色则代表布放在桌边, 布会自然下垂, 红色线就会被拉扯),所以不能只用红线,红线只是辅助作用。

image-20230515124450068

​ 如可以用质点弹簧裙子+人物,有时会采用更好的有限元法FEM代替弹簧系统。

粒子系统

​ 用大量的粒子模拟,例如模拟流体、灰尘等。定义每一个粒子受到的力从而定义粒子运动,例如重力、粒子间的相互作用力(如碰撞、引力等,对于引力需要找到粒子周围最近的一些粒子,但是粒子间的位置会不断改变,因此计算较为复杂)、或者粒子很小可能具有风给的浮力。粒子越多模拟的越精细,但是计算量更大。粒子除了模拟点(如水滴),还可以模拟一大群中的一个个体,如鸟群中的一个鸟。本质是在定义个体和群体的关系。

对于动画中的每一帧,粒子系统大概制作过程:

① [如果需要] 创建新的粒子

② 计算作用于每个粒子的力(决定了最后的效果,如根据万有引力考虑粒子间的引力)

③ 更新每个粒子的位置和速度(通过受力解出位置和速度)

④ [如果需要] 去除死粒子

⑤ 渲染粒子

对于渲染鸟群:

image-20230515130332172

① 对邻居中心的吸引力(不离群)

② 来自个别邻居的排斥力(不靠太近)

③ 与邻居的平均轨迹对齐(一起飞)

运动学

(1)正向运动学

​ 可以创作骨骼动画,如下图先定义拓扑关系(结构间的连接关系),树状结构等(此处不做详细讨论),再定义连接类型:Pin(平面上的旋转)、Ball(空间内的旋转)、Prismatic joint(平移)。

image-20230515130844902

​ 例如有两部分构成的手臂,第一部分旋转θ1,第二部分旋转θ2,问端点p的位置在哪?计算方法非常简单,说明只要定义好骨骼连接方式,任何时刻只要知道角度,就能算出尖端p应该停在哪里。

image-20230515145235688

​ 动画被描述为作为时间函数的角度参数值。已知根据时间两个角度值的变换,就可以知道任何时间点的位置,从而创建出动画。该方法的优点是实施很简单,动画可能和实际物理不太一致使得动画创作者耗时。

image-20230515145308329

(2)逆向运动学

​ 实现如抓住手移动使得整个手臂跟着移动的动画。

image-20230515145720652

​ 也就是通过控制尖端位置,反算出应该旋转多少。动画师提供末端执行器的位置p:

image-20230515150008918

​ 计算机必须算出满足约束的关节角度:

image-20230515150034617

​ 会出现的问题是,对于同一个位置p,可能有多组解:

image-20230515150156467 image-20230515150215565

​ 还可能出现没有解的情况,如下图顶点p到达不了第三个半圆外和第一个半圆内:

image-20230515150302939

​ 对于上述情况有多种优化方式。

Rigging绑定

​ 一种对角色更高层次的控制,允许更快速且直观的调整姿势、表情等。类似提线木偶,是逆运动学的一种应用。在角色身体、脸部等位置创造一系列控制点,艺术家通过调整控制点的位置,带动脸部其他从点移动,从而实现表情变化,动作变化等(类似贝塞尔曲线)。缺点:需要艺术能力也需要技术,全手工制作费时费力费钱。

image-20230515151414884
Blend Shapes

​ 类似关键帧动画,给定两个时间的两个状态,对于每一个控制点进行插值。

Motion Capture

​ 在真人身上放置许多控制点,在不同时刻对人进行拍照,记录控制点的位置,同步到对应的虚拟人物上。真实感很强,比起用计算机调节,可以迅速获得大量数据。但是昂贵,准备工作麻烦。捕捉的动画跟预期艺术需要不太符合,需要调整,以及控制点被遮挡问题。很多控制控制点的方法,有些方法也可以避免控制点遮挡。

image-20230515152447453

​ 众多动捕设备中最常用的还是光学动捕设备,在人身上贴光学贴片。最重要的被遮挡问题,可以通过增加摄像机等方法避免

image-20230515152558181

​ 得到的数据是每个控制点在三维空间中的运动数据。

image-20230515152621228
Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

扫一扫,分享到微信

微信分享二维码

请我喝杯咖啡吧~

支付宝
微信