企业管理

0

游戏动画技术总结

全文目录

·动画制作

·动画压缩

·动画系统架构

·反向动力学

·动态骨骼

·动画前沿技术发展


一、动画制作

1、赛璐璐动画 (cel animation)

2D动画的前身都是传统动画或者手绘动画,每一张静止的图片称为一帧,由连续快速显示多帧的静止图片就产生了动画(视觉暂留效应)。赛璐璐动画即把人物画在胶片上面,背景画在纸上面,就可以做到很多不同的效果。比如拖动胶片层起到角色在背景上移动的效果。

在游戏引擎中的实现为精灵动画,在一张背景图上,利用不同的序列帧合成播放出来的2D动画

精灵序列帧

2、刚性层阶式动画(rigid hierarchical animation)

在建模的适合把人物拆成不同的部位,制作动画的时候用代码逻辑去控制移动的部位(像低阶骨骼动画的初版)

3、顶点动画(per-vertex-animation)

就是字面上的意思,以顶点为最小单位制作的动画,可以制作非常高精度的动画(动捕也是基于顶点的动画),此类动画也有一个分支——变形目标动画(morph target animation),也是现在游戏中常用的动画技术,制作部分固定的动画姿势,在运行时利用线性插值对这些姿势进行混合生成动画。

虚拟人物Siren

4、蒙皮动画(skinned animation)

当今最流向性价比最高的动画制作方式,制作方式分为三步,第一步制作骨骼,骨骼就是骨架,包住模型。第二步是进行蒙皮,圆滑的三角形会绑定到骨骼上,并且给骨骼赋予不同的权重,当关节移动的时候,蒙皮就可以自然的拉伸。

绑定骨骼的手指


5、程序动画

这种动画基本上不是靠动画师制作的,是程序在shader或者代码里面进行制作,一般用于比如树或者草的动画,UI动画,或者是最简单的uv动画等等。另一方面,程序动画中还有一个分支叫ATB(Animation Texture Baker),通过把动画的数据烘焙在贴图上,利用特定的shader读取数据来对顶点进行操作,是一种性能非常高效的程序动画方案,一般使用Houdini等DCC工具制作烘焙。

烘焙到贴图的动画数据

二、动画压缩

动画文件一般会占据大量的内存,从单个关节的姿势考虑,每一个pose都至少由10个浮点数通道组成(3个float用于position,4个float用于rotation,3个float用于scale),按30帧算,4x10x30 = 1200bytes,每秒就会传输1.17KB的流量,按照100个骨骼,动画1000S来算,就是114.4M(对于一些重型游戏,这个数据量会更大)。所以压缩是很必要的,下面介绍三种常用的方法

方法1:减少通道,对于大部分动画,scale曲线是不需要的,对这些动画,我们可以在引擎里面进行删除,减少通道的存储量

方法2:减少骨骼,对于一些动画,在制作的时候也许只用到了部分骨骼,但是导入到引擎后还是会带所有骨骼的曲线,美术这个时候可以隐藏不受影响的骨骼,去掉一些骨骼数据的曲线,这样也可以减少动画数据量

方法3:降低存储精度,这个对内存其实影响不大,因为都是float类型,但是可以减少一部分包体大小,视情况使用

复杂的动画曲线

其他引擎诸如UE4的压缩方式也有所介绍,可以在下方的链接找到参考。

UE4 动画压缩

三、动画系统架构

常见的动画系统架构由三个分明的软件层所组成的:

动画管道(animation pipeline)

动作状态机(action state machine,ASM)

动画控制器(animation controller)

动画管道(animation pipeline): 底层动画引擎所做的运算过程

1、片段解压和姿势提取:首先它将对动画片段进行解压和姿势提取,这个姿势可能是包含全身关节的姿势或者是只包含局部关节的姿势,也可能是用作加法混合的区别姿势

2、姿势混合:对第一步得到的姿势进行全身lerp混合、分部lerp混合,把输入姿势结合在一起。

3、全局姿势生成:遍历骨骼层次结构,把局部关节串接产生骨骼的全局姿势

4、后期处理:这个阶段是可选的,如果有用到逆运动学(IK)或者布娃娃物理,会重新修改骨骼的全局姿势,否则直接跳到下一步

5、重新计算全局姿势:许多种类的后期处理都需要全局姿势作为输入,但却只生成局部姿势作为输出,当执行了这种后期处理步骤,我们必须从修改后的局部姿势重新计算全局姿势。显然,当某后处理运算并不需要全局姿势信息,该运算可在第二和第三阶段之间运行,就可以避免重新计算全局姿势

6、矩阵生成:生成最终全局姿势后,本阶段把每个关节的全局姿势矩阵乘以对应的逆绑定姿势矩阵作为输出

混合树:动画之间的混合

1、二元LERP混合:最简单的线性混合

2、泛化一维LERP混合:更加广泛的线性混合

3、简单二维LERP混合:

4、三角LERP混合:该混合使用重心坐标作为混合权重。

5、泛三角化LERP混合:


淡入/淡出架构:

动画的淡入/淡出通常是把之前的动画与之后的动画做线性插值来实现,可以用两种方式实现,取决于你的动画引擎采用扁平加权平均架构,还是表达式树架构。

1、扁平加权平均的淡入/淡出:逐渐的提高混合片段的权重即可

但是如果是从一个复杂的混合过渡到另一个复杂的混合,采用此种方式比较棘手,比如A态是由a,b,c混合而成,B态是由d,e混合而成,那么A到B的过渡,不仅要降低abc的权重,提高de的权重,并且保持abcde的相对权重维持不变,这样来保证复杂混合态的动作不会变形。


2、表达式树的淡入/淡出:

在基于表达式树的动画引擎中实现淡入/淡出,方法始终如一:只需要在淡入/淡出时,在混合根节点加入一个新的二叉LERP节点

动作状态机(action state machine,ASM):

Unity引擎中的状态机就是ASM,置于动画管道之上,能够直接驱动角色的动作,确保状态间能平滑、自然的方式过渡,每一个状态对应一个任意复杂的动画片段混合。

状态的过渡是高质量动画的关键,所以我们需要指定来源及目标状态、过渡类型、持续时间、缓入/缓出的曲线类型、过渡窗口、过渡矩阵等等。

状态的分层:一个角色在行走的过程中,可以控制肩、头观看某种东西,或者做一些姿势,对于这种情况,我们引入状态层的概念解决,每个状态层在某一刻只能有一个状态,但不同状态层在时间上又是独立的。最终的计算方法是对n个层取各自的混合树取值,产生n个骨骼姿势,再用预设的方法把他们混合在一起。

动画控制器(animation controller):

控制器管理趋向相对长时间的行为,通常是数秒或以上的级别,每个动画控制器负责一个类型的角色行为,基于控制器设计的好处之一,所有和某行为类型相关的代码都置于同一个地方,这个设计也能令AI编写更简单,因为所有动画的微观管理细节都要抽取出来并埋于控制器之中。


四、反向动力学(Inverse Kinematics)

这个概念原本出自机器人学,因为操纵机械手臂通过关节角度来控制。它给出的解是给定物体的姿势时——例如,给定终端效果器的位置时——找到关节的角度。一般情况下,逆运动学没有解析解,但是可以通过非线性编程技术来解决。游戏引擎中使用到的IK也很多,主要分为以下类型:

1、CCD IK(循环坐标下降)

是最简单且最受欢迎的逆运动学方法之一,已广泛用于计算机游戏行业。求解器背后的主要思想是一次将一个关节与末端执行器和目标对准,从而使链的最后一根骨骼迭代地更靠近目标。即使施加了旋转限制,CCD也非常快速且可靠。CCD往往过分强调靠近目标位置的骨骼旋转(很长的CCD链会绕着目标旋转。)在层次结构中降低骨骼重量将弥补这种影响。它设计用于处理串行链,因此很难扩展到多个末端执行器的问题(在这种情况下,使用FABRIK)。要完全扩展链,还需要进行大量迭代。

适用旋转限制的CCD

2、FABR IK

FABRIK是一种启发式求解器,可以与任意数量的骨骼段和旋转限制一起使用。这是一种基于向前和向后迭代运动的方法,方法是沿着到下一个关节的直线找到关节的新位置。FABRIK建议在位置空间而不是方向空间中解决IK问题,因此,尽管对原始论文中描述的约束方法进行了某些修改以提高求解器的稳定性,但它在方向约束下的连续性要比CCD小。通常,到达目标所需的迭代次数少于CCD,但每次迭代都较慢,尤其是在施加旋转限制的情况下。

FABRIK非常灵活,甚至可以在场景视图中直接操纵骨骼段,并且求解器将重新适应。骨骼长度也可以在运行时更改。监视和验证每个框架的IK链在性能上将是昂贵的,因此必须通过在求解器上调用SetChain(Transform []层次结构)来在运行时更改骨骼层次结构。如果层次结构有效,则SetChain返回true。

FABR IK

3、Aim IK

可以设置一个目标,使关节末端始终瞄准该目标,可以用于武器的瞄准。它可以消除单一的向前瞄准,甚至可以瞄准角色的背后

AimIK解算器是对CCD算法的一种修改,该算法旋转骨骼的层次结构以使该层次结构的子Transform瞄准目标。它与基本的内置Animator.SetLookAtPosition或LookAtIK功能不同,因为它能够准确地瞄准未与层次结构主轴对齐的变换。AimIK可以产生非常稳定且自然的角色动画重新定向,因此在武器瞄准系统中具有很大的潜力。使用AimIK,我们可以抵消单个向前瞄准的姿势或动画,甚至可以瞄准角色后面的目标。只是四元数奇点在180度偏移处,求解器无法知道用哪种方式旋转书脊。就像LookAtIK一样,AimIK提供了lampWeight属性来避免该奇异性问题。

AimIK还可以在旋转限制下工作,但是,如果链受到严重约束,则比其他受约束的求解器更容易卡住。Aim以很高的速度提供了很高的精度,但仍然需要牢记将目标位置保持在与瞄准变换保持安全距离的位置。如果到目标位置的距离小于到目标变换的距离,则求解器将尝试自行滚动,并且可能无法产生有限的结果。

AimIK求解器的实际应用

4、Look At IK

LookAt IK可用于任何角色或其他骨骼层次上,以旋转一组骨骼以面向目标。

Look At IK

5、Limb IK

LimbIK扩展了TrigonometricIK,以专门处理3段手和腿字符肢体类型。

Limb IK

6、Biped IK

用于标准两足动物角色的IK系统。

Biped IK

五、动态骨骼

Dynamic Bone是一个基于模拟弹簧振子算法实现的物理模拟方案,主要解决游戏中需要表现柔体动画的需求,比如尾巴,胸部突起那块,可以做到比较真实的物理效果,并且可以产生碰撞模拟。但是也有缺陷和限制,主要是以下两点:

1、并不适用所有柔体物理,只适合完全不发生拉伸和压缩的物体,所以没法用来模拟凝胶、橡胶等物体,适合头发、绳子。对于衣服则是看衣服的材质本身来决定是否能使用

2、DB的位置更新发生在LateUpdate之后,意味DB会完全控制节点的位置,计算结果会完全覆盖动画系统输出的位置,没法进行融合。

指尖江湖使用了Dynamic Bone

六、动画前沿技术发展

1、MOTION PATH WARPING

出自Gears of War 4,主角在不同的物理参数环境下要不同的动画表现(翻越不同宽度的障碍物等等),通过运行时设置Warp Point,在开始播放动画的时候,角色在世界中的运动轨迹就会被修正,令动画中打的点和环境中生成的点对齐,本质上是一种动画的拉伸或者缩放映射方案。

Warp Point

2、MOTION TRANSITIONS

同样出自Gears of War 4,相比传统的动画过渡,该技术方案选择在AnimationPost阶段处理,可以使得过渡的性能得到提高和飞跃方案


3、PHASE MATCHING

Gears of War 4中一个自动匹配foot phase的方案,在角色动画播放的过程中,存储每一帧的Phase Quotient,形成一个自动映射的关系,在有状态改变的时候,会为角色当前的pose计算Phase Quotient,随后映射回我的frame number,并接着从该帧开始进入运动状态。


4、AIForAnimation

Phase-Functioned Neural Networks for Character Control

人形AI动画

Siggraph2017 机器学习在游戏动画中的应用,利用PFNN(phase-Functioned Neural NetWorks)神经网络进行动画控制,表现效果很优秀,解决了传统动画的很多问题(滑步,过渡生硬等)。

Mode-Adaptive Neural Networks for Quadruped Motion Control

四足AI动画

Siggraph2018 机器学习对四足动画的研究,并且利用新型神经网络结构,从真实运动数据中生成自然动画,根据角色的当前状态将一组权重混合到另一个神经网络之中,可以获得非常优秀的四足动画效果!

Neural State Machine for Character-Scene Interactions

人形场景交互AI动画

Siggraph 2019,感觉已经快通关动画的技术栈了...带场景交互的AI动画,利用新的概念——神经状态机,一种用于角色-场景交互的数据驱动的深度学习框架。这项方案从运动捕获数据中合成不同的动作和场景交互,并且允许用户无缝的控制角色。模型还可以自适应场景中的变化,非常牛逼的方案。。!


Local Motion Phases for Learning Multi-Contact Character Movements

多AI交互

Siggraph 2020最新的方案,AI与AI,AI与场景互动,感觉就像光追是最终的渲染解决方案,这个已经是动画最终的解决方案了,从非结构化运动数据中无交互地以高质量交互式地合成此类动画,能够产生各种运动技能,例如运球和篮球比赛中的专业运球,投篮,接球,回避,多种运动模式以及不同的角色和物体交互


总结:

引擎动画系统发展到现在,已经是一个很复杂的系统了,需要动画管道,动画状态机,动画控制器,IK系统,动画压缩等等,并且随着AI的发展,未来引擎很有可能会接入这套系统,毕竟AI动画的前景实在是太诱人了,可以说是动画系统未来的最终方案,可以得到十分高质量的动画和过渡,并且极大的减少了维护成本(那密密麻麻的状态机系统...),不得不说,非常期待这套方案能早日得到验证和商用,得到更好的动画表现效果!


引用:

1、游戏引擎架构[美] Jason Gregory 著 第十一章(471-559)

2、sugi-cho/Animation-Texture-Baker

3、en.wikipedia.org/wiki/T

4、Motion Warping in 'Gears of War 4': Doing More with Less

5、Animation Compression: Unreal 4

6、en.wikipedia.org/wiki/I

7、Final IK - RootMotion

8、sebastianstarke/AI4Animation

9、mp.weixin.qq.com/s/WPUR



本文转自 知乎,原文链接:https://zhuanlan.zhihu.com/p/340313373,如需转载请自行联系原作者
头像
丢弃