游戏引擎的动画系统及骨骼动画原理
一、《游戏引擎架构》动画系统
动画的几种分类
《游戏引擎架构》中简单介绍了几种动画种类、用途以及优劣,在《计算机动画算法与技术》中详细介绍了各种动画的算法原理;
精灵动画
Spine动画
针对游戏开发的2D骨骼动画,其蒙皮由网格变为sprite;
刚性层阶式动画
变形目标动画
存储好关键帧数据,根据插值得到动画
蒙皮骨骼动画
逐帧动画与关键帧动画
逐帧动画
主要是精灵动画,需要准备好每一帧的资源
关键帧动画
源于原画绘制时,主动画师只绘制关键帧,中间帧由学徒绘制,又称中割;
降低了美术成本,程序拥有了更强的扩展性;
相关术语
蒙皮,每个顶点都会保存其蒙皮信息,即绑定的骨骼及其相应的权重;
骨架与关节 其在内存中的数据结构
整个骨架的结构是一个树结构,每个关节都有一个唯一的父节点,所以只要每个关节存储父节点的索引就可以表达整个结构;最终一个关节的数据一般包括,关节名称,关节索引,关节的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[]数组,大小为关节数量;
一个至多个动画片段,指定关节如何随时间而动;
蒙皮信息计算
关节的姿势以及网格的顶点都是在同一坐标系下的,最终无论保存的是局部姿势还是全局姿势,都是要根据全局姿势来计算,因为只有全局姿势才是和网格顶点在同一坐标系下,才能够进行计算;顶点绑定到关节,意味着关节和顶点的相对位置是不变的,所以我们只需要将顶点从模型坐标系下转换到关节坐标系下,然后通过当前的姿势矩阵变换关节的位置,最后再将顶点转换回模型坐标系下即可;从上可知,我们进行动画的计算需要知道的信息有,模型的顶点信息(模型坐标系),骨架中各关节的标准姿势,当前帧的骨架关节的姿势;这些信息,也就是一个游戏引擎需要读入的所有信息;
三、动画混合
游戏引擎的动画系统及骨骼动画原理相关推荐
- Spine2D动画系统添加骨骼动画事件帧
spine是基于骨骼的2D动画系统,相比较与模型动画各有利弊.在做项目时,有时候需要在spine特定骨骼出添加动画帧,类似于模型动画的Animation动画帧一样. 接下来就是 spine骨骼的2D动 ...
- 动画编辑器和骨骼动画使用
动画编辑器 1.使用编辑器来创建编辑动画 (1)创建一个节点 (2)往节点里添加动画组件cc.Animation (3)编辑 动画剪辑器制作 AnimClip 动画剪辑就是一份动画的声明数据,我们将它 ...
- 【Away3D代码解读】(五):动画模块及骨骼动画
动画模块核心存放在away3d.animators包里: Away3D支持下面几种动画格式: VertexAnimator:顶点动画 SkeletonAnimator:骨骼动画 UVAnimator: ...
- layaAir引擎制作游戏的图集动画、时间轴动画、和骨骼动画总结二
一.角色序列帧.ani动画的制作 1.在项目管理器中创建动画文件 2.创建动画模板,编辑动效名称 3.编辑序列帧动画 .ani格式动画的代码控制 1.动画加载loadAnmition() 2.播放与停 ...
- 进击3D游戏界!Cocos Creator快速实现骨骼动画交互!
文章目录 前言 一.Cocos Creator简介? 二.快速上手Cocos Creator 1.任何语言学习,先概览一遍文档 2.跟随官方Demo,进行游戏的制作 三.如何自己实现骨骼模型和界面交互 ...
- Python游戏引擎开发(六):动画的小小研究
今天我们来研究动画,其实这个动画就是一个Sprite+Bitmap的结合体.不造什么是Sprite和Bitmap?=__=#看来你是半路杀进来的,快去看看前几章吧: Python游戏引擎开发(一):序 ...
- UE4 动画系统 源码及原理剖析
动画基础概念 3D模型动画的基本原理是让模型中各顶点的位置随时间变化.主要种类有Morph(变形)动画,关节动画和骨骼蒙皮动画(SkinnedMesh). (自己搭的blog被黑了,只有本地备份,太伤 ...
- UE4动画系统,蒙太奇动画使用,添加动作
提示:仅供学习参考 前言 一.什么是蒙太奇? 二.实现步骤 1.使用第三人称游戏c++模板创建一个项目,创建动画蒙太奇 2.在动画蓝图中添加蒙太奇 3.绑定鼠标左键输入 4.添加c++代码 5.设置动 ...
- creator小功能----关于帧动画Animation和骨骼动画Skeleton一些有趣的东西
动画是app中经常要用到的,尤其是游戏中,可以增强表现效果. 那么在creator中,怎么使用和实现动画效果呢? 动画获取的方式: 第一种,编辑器绑定 //1.编辑器绑定anim: {type: cc ...
最新文章
- 恭贺各位鸡年好运,新年快乐,万事如意!!!
- 点量OTT TV 点播软件模式为何受海外华人运营者喜爱?
- 使用 Carla 和 Python 的自动驾驶汽车第 4 部分 —— 强化学习Action
- 2015-2月的小程序们
- 通过深度学习检测疟疾
- 手机远程linux桌面,centos8安装xrdp远程桌面,Android手机连接linux桌面
- 【maven】maven dependencyManagement 锁定Jar包版本
- Android中通过ViewHelper.setTranslationY实现View移动控制(NineOldAndroids开源项目)
- 数据挖掘应用案例:RFM模型分析与客户细分(转)
- 学土木结构考计算机等级考试,请教各位,我是学土木的,考计算机二级的哪个比较好?...
- QA:mongoose中设置virtual后不工作问题
- 网络安全05_VMware 虚拟机软件安装_准备Kali- Linux虚拟机_Windows Server 2003 Enterprise 虚拟机下载和安装
- SQL Server不允许保存更改【解决】
- 随机梯度下降SGD算法理解
- ns-3中的数据跟踪与采集——Tracing系统的配置
- java通过itext方法往pdf中插入图片(交互式pdf插入图片无法显示)
- Android Studio 4.2Previw版本编译错误提示Disable offline mode and rerun the build
- 树莓派从零开始快速入门系列汇总
- Android 学习网站
- VBA中的正则表达式(一)