游戏引擎中的动画基础

一、动画技术简介

在这里插入图片描述
视觉残留理论 - 影像在我们的视网膜上残留1/24s。

游戏中动画面临的挑战:

  • 交互:游戏中的玩家动画需要和场景中的物体进行交互。
  • 实时:最慢需要在1/30秒内算完所有的场景渲染和动画数据。(可以用动画压缩解决)
  • 真实:多个动画的融合,表情的变化。

二、2D动画技术

2.1 序列帧动画

采取多个图片切换实现2d动画效果
在这里插入图片描述
采取不同视角的多个图片实现3d动画效果
在这里插入图片描述
2.2 Live2D
在这里插入图片描述
将一个图片剪裁成多个图元,通过修改不同图元的位置,缩放,旋转来实现动画效果。

三、3D动画技术

3.1 DoF(自由度)
在这里插入图片描述
这是对于自由度的一个表达术语。比如6DOF代表能在xyz空间内进行平移和旋转。3d动画的核心就是对自由度的一个表达。

3.2 顶点动画

把每个帧的顶点的位置记下来
在这里插入图片描述
在做人脸的面部动画使用的也是顶点动画,不过这时的修改单个顶点的位置时会按照权重修改附近顶点的位置,这个叫做Morph Target Animation。
在这里插入图片描述
3.3 骨骼动画
刚体骨骼在动的时候,皮也在跟着动。是因为每个顶点是多个骨骼在动。
在这里插入图片描述
在这里插入图片描述
3.4 物理模拟动画

  • 布娃娃系统
  • 衣料模拟与流体模拟。
  • 反向动画

在这里插入图片描述

四、蒙皮动画的实现

4.1 怎样制作一个蒙皮动画

  1. 制作一个模型
  2. 制作模型对应的骨骼
  3. 绘制蒙皮,蒙皮受骨骼影响
  4. 动画决定骨骼的位置
  5. 骨骼根据权重决定蒙皮的位置

在这里插入图片描述
4.2 不同的空间

  • World space: 世界坐标系
  • Model space: 我自己的坐标系
  • Local space: 局部坐标系,每一根骨骼的坐标系都不一样,动画系统中的某个坐标系是由其他骨骼的坐标系累算出来的。只有通过local space从根节点累算出他的模型坐标系,才能够算他的世界坐标系,然后才能够进行渲染。
    在这里插入图片描述
    4.3 骨骼的创建

统一骨骼结构
在这里插入图片描述
骨骼与关节
在这里插入图片描述
Root节点
在这里插入图片描述
Bind point:绑定动画当两个骨骼动画绑在一起时需要这个Bind point
在这里插入图片描述

五、旋转的数学原理

5.1 2D旋转
在这里插入图片描述
5.2 3D旋转

在这里插入图片描述
在空间任意一点的旋转都可以分解成依次绕着每个轴旋转。

欧拉角:
在对物体进行编辑,或者摆放的时候会经常用欧拉角,但是做动画的时候无法使用欧拉角。
欧拉角的问题:
(1)严格的顺序依赖:顺序不一样,他算出来的结果不一样。
(2)万向节:万向锁
(3)很难插值
(4)旋转的叠加很难
(5)很难沿着一个固定的轴旋转。

5.3 四元数
在这里插入图片描述
四元数的定义如下:
在这里插入图片描述
欧拉角转成四元数的公式如下:
在这里插入图片描述

六、动画压缩技术

由于动画的数据量很大:
在这里插入图片描述
但是缩放和位移是不变的,大部分是rotation在变化。
所以我们可以通过以下方法来压缩动画数据存储:

6.1 较少自由度存储
在这里插入图片描述
6.2 关键帧
在这里插入图片描述
只存储几个关键帧,然后用线性插值的方法来计算中间帧,永远保证你的error小于你的阈值
在这里插入图片描述
6.3 浮点数
不要用浮点数来存储动画的旋转角度,因为浮点数占据的内存大,可以用整数来表达。
在这里插入图片描述
6.4 压缩带来的问题

  • 会让这个压缩错误一直传递到错误很大。
  • 不同 的骨骼对error敏感度是不一样的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码上生花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值