当前位置: 首页 > news >正文

游戏引擎中的动画基础

一、动画技术简介

在这里插入图片描述
视觉残留理论 - 影像在我们的视网膜上残留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敏感度是不一样的。
http://www.lryc.cn/news/321365.html

相关文章:

  • springboot3快速入门案例2024最新版
  • 软考 系统架构设计师系列知识点之系统性能(1)
  • Trent-FPGA硬件设计课程
  • 【大模型学习记录】db-gpt源码安装问题汇总
  • QB PHP 多语言配置
  • Kubernetes实战(三十一)-使用开源CEPH作为后端StorageClass
  • 【Python爬虫】详解BeautifulSoup()及其方法
  • C语言经典算法-8
  • Panasonic松下PLC如何数据采集?如何实现快速接入IIOT云平台?
  • 高性能 MySQL 第四版(GPT 重译)(四)
  • 整型数组按个位值排序 - 华为OD统一考试(C卷)
  • 【React】Diff算法
  • 【物联网】Modbus 协议及应用
  • Docker容器引擎
  • 2.28线程
  • TCP/IP ⽹络模型
  • 云原生:重塑未来应用的基石
  • 蓝桥杯day4刷题日记
  • [Qt学习笔记]Qt下使用Halcon实现采图时自动对焦的功能(Brenner梯度法)
  • 常州IGM机器人RTE497的日常维修保养方法
  • 如何利用机器学习和Python编写预测模型来预测设备故障
  • mysql部署(2)主从复制
  • FX-数组的使用
  • springboot283图书商城管理系统
  • FFmpeg-- c++实现:音频流aac和视频流h264封装
  • 单片机烧录方式,JTAG,ISP,SWD,
  • 【项目管理后台】Vue3+Ts+Sass实战框架搭建一
  • 基于python 变配电室运行状态评估与预警系统flask-django-nodejs-php
  • 【自记录】VS2022编译OpenSSL1.0.2u
  • ES代替品:轻量级搜索引擎MeiliSearch