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. 用局部条件图集建模三维曲面流形
  2. mysql date week_mysql weekday(date)/subdate(date,间隔天数)查询年龄/本月/周过生日
  3. 【Android 安全】DEX 加密 ( Application 替换 | Android 应用启动原理 | ActivityThread 源码分析 )
  4. 架构设计的目标与衡量
  5. linux下top命令讲解
  6. 从壹开始学习 NetCore 新篇章 ║ Blog.Core 开发社之招募计划书
  7. saltstack学习篇
  8. android log 如何获取double类型后小数点的值_【ES6基础】Symbol介绍:独一无二的值...
  9. 案例:演示使用beantuils的setProperty()、getProperty()和populate()方法访问JavaBean的属性
  10. PLSQLDeveloper下载使用
  11. 安卓APP应用启动流程详解
  12. 移动硬盘内容变成快捷方式处理
  13. 一、CPU寄存器说明
  14. Payoneer(P卡)怎么免费申请Joom账号?
  15. Dialog和DialogActivity
  16. 千万年斗转星移,小屏幕见大宇宙 - “钦天明时” 天文时钟万年历应用程序(iOS App)说明
  17. 全球地名中英文对照表(G)
  18. 怎么将CAD图纸转换成高清晰度PNG格式怎么操作?
  19. 2017年7月历史文章汇总
  20. 关于计算机专业的调整与优化,基于oracle数据库系统性能调整与优化分析-计算机应用技术专业论文.docx...

热门文章

  1. 【图像识别】基于形态学和模板匹配实现扑克牌识别matlab源码
  2. iphone合并重复联系人_如何清理iPhone上的重复联系人
  3. 移植 RT-Thread 到MB9BF218S
  4. 计算机d盘被拒绝访问了怎么办,Win10系统D盘打不开提示拒绝访问如何解决
  5. 你知道Alpha/Beta/RC/RTM/RTW/GA是什么版本吗?
  6. CnOpenData证券公司(分析师、保代)从业人员信息数据
  7. 计算机再带word打不开怎么办,word打不开怎么办 word打不开解决方法【详解】
  8. AI变身酿酒师 微软用ML创造出新的威士忌配方组合
  9. Java实现 蓝桥杯VIP 算法提高 3-3求圆面积表面积体积
  10. 学习网络和编程,本不必分得那么清