一、《游戏引擎架构》动画系统

  • 动画的几种分类

    《游戏引擎架构》中简单介绍了几种动画种类、用途以及优劣,在《计算机动画算法与技术》中详细介绍了各种动画的算法原理;

    1. 精灵动画

    2. Spine动画

      针对游戏开发的2D骨骼动画,其蒙皮由网格变为sprite;

    3. 刚性层阶式动画

    4. 变形目标动画

      存储好关键帧数据,根据插值得到动画

    5. 蒙皮骨骼动画

    逐帧动画与关键帧动画

    1. 逐帧动画

      主要是精灵动画,需要准备好每一帧的资源

    2. 关键帧动画

      源于原画绘制时,主动画师只绘制关键帧,中间帧由学徒绘制,又称中割;

      降低了美术成本,程序拥有了更强的扩展性;

相关术语

  • 蒙皮,每个顶点都会保存其蒙皮信息,即绑定的骨骼及其相应的权重;

  • 骨架与关节 其在内存中的数据结构

    整个骨架的结构是一个树结构,每个关节都有一个唯一的父节点,所以只要每个关节存储父节点的索引就可以表达整个结构;最终一个关节的数据一般包括,关节名称,关节索引,关节的SQT局部姿势数据;

    Pelvis(骨盘)索引一般为0,

    Max中通常由两种骨骼,bip和bone;

  • 姿势

骨架是关节的集合,骨架的姿势为其所有关节的姿势的集合,而姿势的数据结构通常简单地以SQT数组表示(Q为四元数表示的角度),那么绑定姿势的数据结构为所有关节姿势组成的SQT数组;

  • 动画片段,用于表现角色的个别动作(粒度较小),使用关键帧技术对姿势进行插值计算,每个关键帧所保存的数据就是每个关节在该时间点的姿势数据;

  • 动画系统架构

    • 动画管道

    共享资源数据:明确各资源数据结构之间的关系,骨架是统合各方的元素,蒙皮绑定至骨骼,动画驱动骨骼,但蒙皮和动画片段没有直接关系;

    • 动画状态机

    • 动画控制器

二、骨骼动画原理

三维模型/网格数据

  • 三维模型通常在DCC工具如Max、Maya中制作,必须编写相应的导出器Exporter获取数据并存储为引擎可读的格式才行;DCC软件会提供一些标准或半标准的导出格式,比如导出为FBX格式,但是这些格式基本上都不完全适合游戏使用(要明白游戏运行的CPU以及内存资源都是很宝贵的),所以往往要建立自定义格式以及编写专门的导出器,或者在资源导入时创建专门的导入器(Importer),如Unity会为所有支持的资源编写导入器(如Unity的Texture Importer、Model Importer等),

  • 骨架与关节 其在内存中的数据结构

    整个骨架的结构是一个树结构,每个关节都有一个唯一的父节点,所以只要每个关节存储父节点的索引就可以表达整个结构;最终一个关节的数据一般包括,关节名称,关节索引,关节的SQT局部姿势数据;

    Pelvis(骨盘)索引一般为0,

    Max中通常由两种骨骼,bip和bone

  • 骨骼动画数据

    骨骼网格是一种特殊网格,为关节动画而绑定到骨骼层次结构上(因为关节动画驱动骨骼运动,骨骼驱动所绑定的的网格运动)。骨骼网格在看不见的骨骼上形成皮肤,因此,骨骼网格又称皮肤,网格顶点绑定到骨骼的操作也称为蒙皮,骨骼网格每个顶点都会包含其蒙皮信息,即一组关节索引和权重信息;

    游戏引擎需要三种数据渲染骨骼动画

    • 网格本身,网格的位置信息、蒙皮信息等等,Unity中一个顶点最多允许绑定4个骨骼,其BoneWeight结构体也正是对应了四个关节索引和权重值;

    • 骨架结构,包含关节的名字、父子关系、网格绑定到骨骼时的姿势,也就是标准姿势T-Pose,一般使用全局姿势,Unity的Mesh类中会有一个BindPose变量,它是一个Matrix4x4[]数组,大小为关节数量;

    • 一个至多个动画片段,指定关节如何随时间而动;

  • 蒙皮信息计算

    关节的姿势以及网格的顶点都是在同一坐标系下的,最终无论保存的是局部姿势还是全局姿势,都是要根据全局姿势来计算,因为只有全局姿势才是和网格顶点在同一坐标系下,才能够进行计算;顶点绑定到关节,意味着关节和顶点的相对位置是不变的,所以我们只需要将顶点从模型坐标系下转换到关节坐标系下,然后通过当前的姿势矩阵变换关节的位置,最后再将顶点转换回模型坐标系下即可;从上可知,我们进行动画的计算需要知道的信息有,模型的顶点信息(模型坐标系),骨架中各关节的标准姿势,当前帧的骨架关节的姿势;这些信息,也就是一个游戏引擎需要读入的所有信息;

    三、动画混合

游戏引擎的动画系统及骨骼动画原理相关推荐

  1. Spine2D动画系统添加骨骼动画事件帧

    spine是基于骨骼的2D动画系统,相比较与模型动画各有利弊.在做项目时,有时候需要在spine特定骨骼出添加动画帧,类似于模型动画的Animation动画帧一样. 接下来就是 spine骨骼的2D动 ...

  2. 动画编辑器和骨骼动画使用

    动画编辑器 1.使用编辑器来创建编辑动画 (1)创建一个节点 (2)往节点里添加动画组件cc.Animation (3)编辑 动画剪辑器制作 AnimClip 动画剪辑就是一份动画的声明数据,我们将它 ...

  3. 【Away3D代码解读】(五):动画模块及骨骼动画

    动画模块核心存放在away3d.animators包里: Away3D支持下面几种动画格式: VertexAnimator:顶点动画 SkeletonAnimator:骨骼动画 UVAnimator: ...

  4. layaAir引擎制作游戏的图集动画、时间轴动画、和骨骼动画总结二

    一.角色序列帧.ani动画的制作 1.在项目管理器中创建动画文件 2.创建动画模板,编辑动效名称 3.编辑序列帧动画 .ani格式动画的代码控制 1.动画加载loadAnmition() 2.播放与停 ...

  5. 进击3D游戏界!Cocos Creator快速实现骨骼动画交互!

    文章目录 前言 一.Cocos Creator简介? 二.快速上手Cocos Creator 1.任何语言学习,先概览一遍文档 2.跟随官方Demo,进行游戏的制作 三.如何自己实现骨骼模型和界面交互 ...

  6. Python游戏引擎开发(六):动画的小小研究

    今天我们来研究动画,其实这个动画就是一个Sprite+Bitmap的结合体.不造什么是Sprite和Bitmap?=__=#看来你是半路杀进来的,快去看看前几章吧: Python游戏引擎开发(一):序 ...

  7. UE4 动画系统 源码及原理剖析

    动画基础概念 3D模型动画的基本原理是让模型中各顶点的位置随时间变化.主要种类有Morph(变形)动画,关节动画和骨骼蒙皮动画(SkinnedMesh). (自己搭的blog被黑了,只有本地备份,太伤 ...

  8. UE4动画系统,蒙太奇动画使用,添加动作

    提示:仅供学习参考 前言 一.什么是蒙太奇? 二.实现步骤 1.使用第三人称游戏c++模板创建一个项目,创建动画蒙太奇 2.在动画蓝图中添加蒙太奇 3.绑定鼠标左键输入 4.添加c++代码 5.设置动 ...

  9. creator小功能----关于帧动画Animation和骨骼动画Skeleton一些有趣的东西

    动画是app中经常要用到的,尤其是游戏中,可以增强表现效果. 那么在creator中,怎么使用和实现动画效果呢? 动画获取的方式: 第一种,编辑器绑定 //1.编辑器绑定anim: {type: cc ...

最新文章

  1. 恭贺各位鸡年好运,新年快乐,万事如意!!!
  2. 点量OTT TV 点播软件模式为何受海外华人运营者喜爱?
  3. 使用 Carla 和 Python 的自动驾驶汽车第 4 部分 —— 强化学习Action
  4. 2015-2月的小程序们
  5. 通过深度学习检测疟疾
  6. 手机远程linux桌面,centos8安装xrdp远程桌面,Android手机连接linux桌面
  7. 【maven】maven dependencyManagement 锁定Jar包版本
  8. Android中通过ViewHelper.setTranslationY实现View移动控制(NineOldAndroids开源项目)
  9. 数据挖掘应用案例:RFM模型分析与客户细分(转)
  10. 学土木结构考计算机等级考试,请教各位,我是学土木的,考计算机二级的哪个比较好?...
  11. QA:mongoose中设置virtual后不工作问题
  12. 网络安全05_VMware 虚拟机软件安装_准备Kali- Linux虚拟机_Windows Server 2003 Enterprise 虚拟机下载和安装
  13. SQL Server不允许保存更改【解决】
  14. 随机梯度下降SGD算法理解
  15. ns-3中的数据跟踪与采集——Tracing系统的配置
  16. java通过itext方法往pdf中插入图片(交互式pdf插入图片无法显示)
  17. Android Studio 4.2Previw版本编译错误提示Disable offline mode and rerun the build
  18. 树莓派从零开始快速入门系列汇总
  19. Android 学习网站
  20. VBA中的正则表达式(一)

热门文章

  1. 欧拉角Pitch、Roll、Yaw介绍
  2. scratch魔法星空 电子学会图形化编程scratch等级考试二级真题和答案解析2022年3月
  3. HTML的加粗、斜体、删除和下划线标签
  4. Linux系统如何查看版本信息
  5. 前端移动端superslide插件(使用方法)
  6. BUGKU-MISC-善用工具
  7. PG::JISCTF
  8. Lombok-使用安装
  9. 人生规划关于朋友~距离适宜,常与让自己舒适的人在一起
  10. Nginx部署https(自己生成证书)