GAMES101 学习21——动画与模拟-概念

lutianfei 发表于 2022/05/16 20:20:06 2022/05/16
【摘要】 课程下面会介绍计算机动画这一块的内容,分为以下五个模块进行:HistoryKeyframe animationPhysical simulationKinematicsRigging动画能够更加真实的表现计算机模拟的场景和物体,它是对计算机建模的一种扩展(体现了模型在时间上的变化,如一些三角形面片的顶点位置变换等),不同的场景所需要的动画帧率也不同: 一、Historical Points ...

课程下面会介绍计算机动画这一块的内容,分为以下五个模块进行:

  1. History
  2. Keyframe animation
  3. Physical simulation
  4. Kinematics
  5. Rigging

动画能够更加真实的表现计算机模拟的场景和物体,它是对计算机建模的一种扩展(体现了模型在时间上的变化,如一些三角形面片的顶点位置变换等),不同的场景所需要的动画帧率也不同:

一、Historical Points in Animation(动画发展的历程)

二、Keyframe Animation

关键帧动画就是绘制出某些关键时间节点中的人物动画状态,然后在这些不同状态之间进行插值,以得到连续的动画:
image.png

这个插值过程可以人为地进行绘制,也可以通过软件进行插值,前提是关键帧之间的人物状态相差不是特别大。

考虑三维面片顶点在关键帧之间的变换,我们也可以把不同关键帧动画中的顶点坐标变换用向量插值的方式来做。通过对不同平滑度的要求,我们可以采用不同的插值方式进行插值:
image.png

三、Physical Simulation

物理模拟(Physical Simulation)是指在计算机中用一些考虑了物理规律的物体来代替真实物体的模拟。

我们常用牛顿第二定律来计算物体的受力情况:F=ma

其中,F是外力,m是质量,a是加速度。

假设给定一个顶点,和它相关的一些运动属性(速度、加速度等),我们就可以计算出它的运动位置:
image.png

3.1 Mass Spring System(质量弹簧系统)

下面介绍了一下如何对质量弹簧系统(Mass Spring System)进行建模。

首先考虑一个简单的弹簧,它的两端分别为 a和b,当把弹簧沿着两端拉开时,a和b都会受到朝弹簧内的力 f a b \boldsymbol{f}_{a \rightarrow b} f b a \boldsymbol{f}_{b \rightarrow a} , k s k_s 为劲度系数:

image.png

但是这里存在一个问题,即弹簧不受力时也是有长度的,考虑了这个因素,我们把弹簧不受力时的长度 l 也考虑进去:
image.png

这里依然会存在个问题,即将弹簧从两端拉开时,它会一直伸缩不会停止,这里缺少了弹簧内部对力的损耗,所以这里引入了弹簧内部的相对运动消耗施展在弹簧两端的力:
image.png

这里的 b ˙ \dot{b} a ˙ \dot{a} 是两端的速度,红框部分是b端往外的阻力,等同于方向向量在 b ˙ a ˙ \dot{b}-\dot{a} 向量上的投影,还需要注意的一点是 b ˙ \dot{b} a ˙ \dot{a} 应该是它们两者在两端方向上的投影,因为在把弹簧往外拉的时候,只需要计算往外拉这个方向上的 力/速度 即可。

这就是质量弹簧系统的建模,通过这个系统我们可以建模出不同形状的物体:
image.png

考虑通过质量弹簧系统组成的结构来模拟一块布,它会存在两个问题:

  1. 这种结构会受到切变(shearing)的影响,当沿着对角拉伸时,会使得布变得过长,同时没有拉伸的对角会挤压在一起,不符合真实世界布的特性
  2. 这种结构会使得布能够像纸一样完全对折,但实际上布在对折的过程中,在对折处还应当有对抗对折的力

image.png

最终的解决方案是通过下图的弹簧连接方式的结构来模拟布:
image.png

四、Particle Systems

粒子系统指的是模拟大量粒子集合的运动,在其中每个粒子的运动又会受到不同力的影响,如碰撞、引力等,我们只需要把这些力正确的模拟出来即可。

粒子系统的模拟步骤也可以简单表示如下:
image.png

粒子系统的一些受力:
image.png

引力公式:
image.png

4.1 Simulated Flocking as an ODE

基于上述概念,我们可以通过粒子来模拟群体间的运动关系。

假设存在一个鸟群,我们采用模拟粒子运动的思路对其进行模拟,定义如下规则:

  • attraction 表示鸟群中的鸟不会单独飞
  • repulsion 表示鸟群中的鸟不会与其他鸟飞太近
  • alignment 表示鸟群始终会朝向一个方向飞

那么我们就可以把每一只鸟看做粒子进行模拟:
image.png

五、Kinematics

运动学(Kinematics)指的是物体如何运动,在这里主要描述如何做动画的,它通过骨骼系统实现,它分为前向运动学(Forward Kinematics)逆向运动学(Inverse Kinematics)

5.1 Forward Kinematics

骨骼系统表示了和人体类似的拓扑结果,它是通过关节相连接的,关节的类型有:

  1. Pin 钉子关节 (1D 旋转)
  2. Ball 球状关节 (2D 旋转)
  3. Prismatic joint (可以拉长或移动)

image.png

由于我们需要知道骨骼是如何运动的(角度,位移),这里就可以通过前向运动学来求解相关参数。它首先计算起始关节的相关运动参数,然后通过这些参数再求解与之相连的关节参数,依次逐层求解即可:
image.png

但他也存在一些优点和缺点:
image.png

5.2 Inverse Kinematics

人们往往更希望直接调整骨骼的位置而不是通过调节角度间接的调整骨骼的位置,这时就引入了 Inverse Kinematics 来解决这个问题。相当于已知骨骼位置P,求解参数(关节处的角度 θ 1 , θ 2 \theta_1, \theta_2 ):
image.png

Inverse Kinematics 有时的解并不唯一:
image.png

这类问题通常可以通过优化的方法进行求解,即已知点 P,通过某些约束/损失和梯度下降方法来求解:
image.png

5.3 Rigging(木偶操控)

Rigging 是创建角色模型的骨骼结构的过程。这种骨骼结构中有一系列控制点使得我们可以像操纵木偶一样操纵角色模型:
image.png

image.png

通过 Blend Shape 我们可以将不同的形状混合在一起,本质上是控制点及其影响的区域的混合:
image.png

5.4 Motion Capture

运动捕捉(Motion Capture):
image.png

The Production Pipeline
image.png

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请发送邮件至:cloudbbs@huaweicloud.com;如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。