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中所使用的则是最后的蒙皮动画技术,在接下来的博客里,将会分别根据骨骼,关节和蒙皮三个部分,结合引擎源码与《游戏引擎架构》一书来进行分析学习。


