2021SC@SDUSC

在开始分析学习有关Flax Engine的动画系统相关的源码之前,我们首先要对动画,特别是游戏当中的动画系统展开一定程度的了解,比如它是什么?有哪些类型?在游戏制作中有着什么样的功能等等。

动画系统作用

目前市面上的大部分游戏,都需要设计多个角色。无论这些角色是人形的,还是非人形的,是玩家可操控的,还是玩家不可操控的,都需要使这些角色能够在游戏中自然灵活地进行活动。而对于这些角色而言,他们基本都不是百分之百刚性物体,而对于这些非刚性物体而言,要使他们实现自然地活动的效果,比俄罗斯方块等刚性物体要困难得多。而游戏引擎中的动画系统(角色动画系统)所需要承担的功能,就是为游戏中的角色赋予自然灵活的动作

当然,除了游戏内的角色需要用到动画系统之外,其他的非角色的物体,也会用到动画系统。比如摇曳的树木,铰链,飘摇的衣角,爆炸效果等等,基本游戏内的任何非刚性物体的运动效果,都需要游戏引擎的动画系统来作为支撑。

因此动画系统在任何一个游戏引擎中都是一个相当核心的一部分。

动画系统类型(角色动画)

·赛璐璐动画(精灵动画/序列帧动画)

现在的游戏动画技术都是基于传统动画(traditional animation)或者手绘动画(hand-drawn animation)。这类动画,都是通过快速连续地展示一系列静止图片来产生动画的动感。而对于游戏动画技术来说,则是通过在时间内展示许多静止的实时渲染的全屏影像,以此来产生动感。

而赛璐璐动画则是传统动画的一个种类。赛璐璐是指透明的塑料片。赛璐璐动画的实质是将一连串在上面绘画过的塑料片放置在固定的手绘背景上,以此来产生动感。是传统动画中的一个重要种类。

而在游戏领域中,与传统动画的赛璐璐动画技术相对应的,被称作是精灵动画或者序列帧动画技术,这是二维游戏最主要也是应用得最为广泛的一项技术。和赛璐璐相似,所谓精灵,则是指一张张叠在背景之上而不会影响到背景的位图(可以理解成透明塑料片)。而当角色进行运动时,根据操作,不断重复播放相应的位图组,以此达到运动的效果。

·刚性层阶式动画

随着三维图形技术的发展,精灵技术并不能很好的适应三维游戏。而为了实现三维角色动画,刚性层阶式动画随之产生。在这种方法中,角色由一堆刚性部分建模而成,这些刚性部分以层阶形式连接(所谓的层阶形式,比如说将手臂按照关节划分为上臂(upper arm),下臂(lower arm)和手(hand),而当手动的时候,上臂或者下臂未必会动,但上臂动的时候下臂和手一定会动,根据这划分为上臂>下臂>手这样的层阶

通常而言,会将骨盆(pelvis)作为一个角色的核心部位,也就是最上层阶,在此之下划分为躯干(torso)和下肢【右大腿和左大腿】,躯干往下会划分为右上臂,左上臂和头部,而上臂下一层阶是下臂,再下一层阶是手;至于大腿(和躯干同一层阶)往下是小腿,再往下是脚。

而这项技术最大的问题在于刚性部分和刚性部分的连接,也就是所谓的关节部分会产生裂缝,对于机械或者机器人而言,这样的技术影响不大,但对于一些“软一点的,有血有肉”的,就会有问题。

·每顶点动画及变形目标

最密集的动画莫过于控制每一个活动的点,把关节再细分为顶点,但是这样会生成巨量的数据。

此技术的应用为变形目标动画(morphTargetAnimation):制作少量极端的姿势(extreme pose),然后在运行时把两个或以上的姿势通过插值(lerp)混合,生成动画。该技术通常用于面部动画,人脸大约具有50组肌肉驱动面部表情。动画师能够采用变形目标动画去控制脸上的每个顶点,制作出肌肉细微的移动,完成表情的改变。

·蒙皮动画

随着游戏硬件的进一步发展,蒙皮动画技术应运而生。蒙皮动画技术是当下大型3D游戏所广泛采用的技术,同时,在电影行业这项技术也有着相当广泛的应用。而这也是本次源码分析对象Flax Engine所采用的动画系统的核心技术之一。

蒙皮动画既拥有每顶点动画和变形目标动画的优点,允许组成网格的三角形做出变形,又同时和刚性层阶式动画类似,比每顶点动画更加高效节省内存。(或许可以看做是刚性层阶式动画和每顶点动画的中间形态)

在蒙皮动画中具体可以分为骨骼,关节和皮肤三个部分。骨骼和刚性层阶式动画相同,但蒙皮动画的骨骼并不会被渲染出来。称作皮肤的光滑三角形网格会绑定在骨骼之上,其顶点会按照权重绑定在多个关节上,当运动时,顶点就会根据关节进行移动,从而蒙皮可以自然地进行拉伸。即由刚性的骨骼和关节来驱动蒙皮的移动。

以上就是游戏行业中在动画系统部分(角色动画)的技术类型。而在Flax Engine中所使用的则是最后的蒙皮动画技术,在接下来的博客里,将会分别根据骨骼,关节和蒙皮三个部分,结合引擎源码与《游戏引擎架构》一书来进行分析学习。

Flax Engine(动画系统)学习笔记(二)——动画类型相关推荐

  1. Unity动画系统学习笔记(一)动画剪辑与状态机

    一.动画系统工作流 一个完整的动画系统工作流包含如下几个部分: 动画剪辑(Animation Clips):包含某些对象如何随时间更改其位置.旋转或其他属性的信息. 状态机(Animator Cont ...

  2. Unity3D之Mecanim动画系统学习笔记(五):Animator Controller

    简介 Animator Controller在Unity中是作为一种单独的配置文件存在的文件类型,其后缀为controller,Animator Controller包含了以下几种功能: 可以对多个动 ...

  3. Unity动画系统学习笔记(二)根运动、动画事件与状态机行为

    一.根运动 在学习根运动前需要了解两个名词: 身体变换:身体变换是角色的质心.它用于 Mecanim 的重定向引擎,并提供最稳定的移位模型.身体方向是相对于 Avatar T 形姿势的下身和上身方向的 ...

  4. Linux系统学习笔记二

    参考课程: 基于VSCode和CMake实现C/C++开发 | Linux篇_哔哩哔哩_bilibili 1.文件编辑器 vim:是所有Unix和Linux系统下标准的文件编辑器 gedit:Linu ...

  5. 初探swift语言的学习笔记二(可选类型?和隐式可选类型!)

    作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/28904115 转载请注明出处 如果觉得文章对你有所帮助,请通过留言 ...

  6. Unity动画状态机学习笔记

    Unity动画状态机学习笔记 一.建平面,拖人物模型.建状态机.动画导入.拖组件--实现Game时人物动画为等待状态. 二.拖WAIT01.WAIT02.WAIT03.WAIT04--实现按数字1切换 ...

  7. unity2D学习笔记-角色动画

    unity2D学习笔记-角色动画 角色移动 动画效果(重点!!!!!) 创建:Animator与Animation 状态转换 跳跃 从fall到idle Hierarchy中创建一个Sprite作为载 ...

  8. android学习笔记---55_frame动画的实现,Java技术qq交流群:JavaDream:251572072

    android学习笔记---55_frame动画的实现,Java技术qq交流群:JavaDream:251572072 Java技术qq交流群:JavaDream:251572072 2013/5/1 ...

  9. 嵌入式系统设计师学习笔记二十八:嵌入式程序设计③——高级程序设计语言

    嵌入式系统设计师学习笔记二十八:嵌入式程序设计③--高级程序设计语言 解释程序和编译程序 编译器的工作阶段示意图 语法错误:非法字符,关键字或标识符拼写错误 语法错误:语法结构出错,if--endif ...

  10. 学习笔记 JavaScript 动画

    学习笔记 JavaScript 动画 结果 代码里用到的图片 <html><head><style>#imageDiv {height: 100px;width: ...

最新文章

  1. 《数学之美》第21章 拼音输入法的数学原理
  2. oracle迁移postsql的,osdba's blog : Oracle迁移PostgreSQL系列文章之二:merge语句
  3. 疾风之刃的最新服务器,《疾风之刃》服务器数据互通(合服)提前预览
  4. 利用binlog进行数据库的还原
  5. tms570 can 接收大量数据_超全!嵌入式必懂的CAN总线一文讲通了
  6. libnghttp2 NDK 交叉编译
  7. 一个物理学家学习Windows编程的感受
  8. mysql单表索引个数_MySQL性能:多个表与单个表和分区上的索引
  9. 设计模式笔记十五:命令模式
  10. python数字图像处理(10):图像简单滤波
  11. 云服务器宽带怎么选择?3M够用吗?
  12. “绿萌”仿“大麦”演出购票APP
  13. php 0x80004005,错误类型:Provider (0x80004005)未指定的错误 的一个处理方法
  14. 淘宝数据可视化大屏案例(Hadoop实验)
  15. html页面上使用vlc,在HTML页面上嵌入VLC插件
  16. 优化ESD防护的PCB设计准则
  17. 您的第一个工程项目 [原创iOS开发-Xcode教程]
  18. 温度控制器matlab,某温度控制系统的MATLAB仿真.doc
  19. 吉尔电子烟获1200万天使轮融资
  20. 1597_AURIX_TC275_GPIO简介

热门文章

  1. Java——吃货联盟订餐系统(基础知识)
  2. Linux桌面环境最轻量,轻量之王:LUBUNTU 20.04体验简评
  3. 用企业级数据服务解决SOA的最后一英里问题
  4. Landsat数据下载
  5. Java入门之基本语法
  6. Linux 双拼导致的输入法错误
  7. 闲置小U盘变身最强大路由器
  8. 云计算机时代共享软件新战场
  9. u盘中毒现象为哪般,如何营救
  10. 矩阵的各种分解: LU分解, QR分解, 特征分解, 对称对角化, 奇异值分解 SVD