Game101现代计算机图形学入门学习笔记(十二)

一、计算机动画

  • 把事物变“活”
  • 美学是主要考率因素
  • 电影 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) fab=ks(ba)
    f b → a = − f a → b f_{b\rightarrow a}=-f_{a\rightarrow b} fba=fab
    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) fab=ksba(ba)(bal)
  • 导数的点表示方法
    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=kdbaba(b˙a˙)baba
    在这里插入图片描述
    结构决定行为。

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×1011Nm2kg2
  • 在一个大规模范围内存在大量重复的小东西-理论上就可以用粒子系统来描述,我们可以用粒子系统来模拟鸟群,将每只鸟抽象为一个粒子,并结合生物特点考虑其受力。

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/2v(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/2v(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 笔记

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值