撰写了文章 更新于 2018-12-16 01:34:36
【Daily GDC】IK骨骼-新的动画开发流程
原视频GDC-IK Rig: Procedural Pose Animation
概述
主讲人Alexander Bereznyak是Ubisoft的技术美术总监。今天他来介绍的是他在Ubisoft开发的一项技术叫IK Rig。这是一套全新的游戏动画开发流程/解决方案,可以给游戏内的动画带来极大的可拓展变化。因为这项技术被应用到了Ubisoft正在开发或者未公布的项目,所以本次不会以具体的例子来介绍这个技术。(在整篇文章里面不会讲任何关于KI如何在技术上实现的问题,也没有任何代码,只是介绍一种全新的做游戏中角色动画的方法/这种方法能实现什么效果/在实际开发中应用这种方法应该注意什么。)
内容概要
P1什么是IK骨骼
P2一套动画对应多套骨骼与多种应用情况
P3通过IK实现场景交互动画
P4在实际开发中要注意什么
P1什么是IK骨骼
1. 概述
现在在开发中,我们会发现动画制作是极为消耗资源的,因为我们需要昂贵的设备和演员来进行动画捕捉从而获得角色动画,这极大限制了游戏内的角色多样性。我们会发现,在很多游戏中,无论是男人,女人,还是人形的怪物,他们的动画都完全相同,可是在现实中,男人和女人的动作绝对会有自己的一套特色。这就是现在游戏开发中技术上的不足对拟真性的一种妥协。
那么为了解决这种妥协问题,实现游戏内角色动画的多样性,我们开发了IK Rig。IK Rig是一个全新的系统化骨骼动画开发流程,它的设计基础是将动画与骨骼完全脱离成两个较为独立的系统,通过制作不同的角色骨骼,利用IK(反向动力学)将相同的动画应用到骨骼上,从而在不同的骨骼系统上运行相同的动画会得到完全不同的结果。它的目的是能够在游戏中对已有的动画(经过动画捕捉或者其他手段获得)做出系统化的修改从而应对多种多样的游戏交互环境。
1)将动画和骨骼完美分离,设计一种统一的动画标准,能够做到能在任何没有巨大差别的骨骼上应用同一段动画
2)在游戏中,通过完全自定的规则对动画进行实时的修正,“给动画实时制作新的动画”
整套开发流程概括起来就是:
2. 传统骨骼动画VS. IK骨骼动画
1)直接的对比
传统骨骼动画一只脚有3个骨骼,在动画中通过关键帧记录下每个骨骼的位置/旋转等等数据。
问题:
①动画数据全部由各种位置/旋转数据,没有任何字面上的意义,难以进行修改
②骨骼和动画需要完全配套,动画需要应用在特定的骨骼上,如果你改变骨骼大小/初始位置等等,动画中的逐帧绝对位置旋转信息将会使整个骨骼发生错位等等效果
但实际上,我们只需要一些很简化的信息就能模拟出这条脚的运动:3个节点,节点起始位置,节点目标位置,移动的朝向。利用动力学就可以模拟出3条骨骼的运动。
于是,如果我们使用IK骨骼动画,任何其他的骨骼系统都能应用到这段拥有统一格式的动画上来而不会发生任何错位,因为骨骼的位置是由动力学来决定的,真实的物理模拟不会发生奇怪的事情,是经得起考验的hhh。
2)两种动画携带的信息:
普通骨骼:
Active骨骼(手/脚)
转动的腕骨
小骨骼(手指/脸)
二次约束信息(肌肉)
碰撞体
物品连接节点(比如手掌上有一个节点拿来同步拿起水杯时水杯的位置)
IK骨骼:
我们依然有使用到所有的骨骼,但是我们不会去单独操纵每个骨骼的具体行为。于此相比,我们会定义很多IK节点,在动画中我们会去操纵所有的IK节点,并且定义每个节点对所有骨骼的动力学影响,让动力学去决定每个骨骼具体应该如何移动。
我们来通过具体的例子看看如何通过动力学连接节点和骨骼,骨骼与骨骼?
基本的位置/旋转关联
特殊的关联
P2 一套动画对应多套骨骼与多种应用情况
1. 动画复用
通过IK,我们可以将不同的动画几乎完美的应用到所有的骨骼上
下图,左边为使用普通骨骼动画,右图为将普通骨骼动画信息转换成IK后的应用。两个动画看起来应该完全一样因为动画格式的转换不会有任何失真。
但是,神奇的地方是,我们可以通过改变IK节点与骨骼间的联系参数来进行任何我们想要的改变。
上图中,依然是左边对应普通骨骼动画,右边为完全相同的一段骨骼动画转换为IK的格式。但是我们可以通过改变IK节点与骨骼,骨骼与骨骼之间的关联方式,用同一段动画,实现完全不同的效果
这就实现了动画脱离骨骼的方式,总的来说,动画里的位置/旋转数据十分的不直观,就像机器码,你完全没有办法对其进行直观的修改。但是引入了IK骨骼后,就像发明了高级语言,我们只需要对通过简单的动力学知识,去改变IK节点与骨骼之间的关系,就能实现各种完全可控的效果,而不需要去重新录制一套新的动画捕捉。
所以IK一个最主要的目的,就是实现多样化的动画应用,简化整个动画开发流程。你录制一段表征行走动画,在游戏中制作50个多样的角色IK骨骼(男人/女人/肥胖的人/残疾人),你可以将这一个骨骼动画无缝应用到所有角色的IK骨骼上。当你觉得这个行走动画有问题,简单的重新录一遍就可以了;而如果你觉得单个角色的行走动画有问题,也只需要改变这个角色的IK骨骼。这种角色骨骼和动画分离对应的系统,会给整个动画制作流程带来极大的便利。
2. 缩放角色比例
在传统骨骼动画中,两个比例不一样的角色,如果应用同一段动画,会导致两个角色的动作幅度也跟随角色比例等比放大。
如下图一段行走动画,两个角色应用同一段动画会导致行走速度完全等比缩放,但在游戏中行走速度应该是由游戏设计来决定而完全不应该由动画来决定。于是为了让一个高个子以相同的速度行走,你必须雇佣一个高个子,重新录制一段用不同的步幅行走的动画。
这就是传统动画的一个问题:客制度非常低下。面对一堆骨骼的位置和旋转信息,你想要去单独改变行走的步幅几乎是不可能的。
但是有了IK,这一切都完全可以实现了。
在IK骨骼中,我们只需要改变一个节点和骨骼间的关联参数,就可以单独放大/缩小步幅。
于是,用同一段动画来做巨人和小矮人,完全没有问题
(不知道你们注意到没有,很多游戏因为这个问题被迫将游戏中所有角色大小做成完全一样,否则他们就必须要为每一个角色重新录制所有动画。可是有了IK,实现不同大小的角色代价就会变得异常的低啦)
3.给角色增加物件变得十分简单
在之前,给一个角色加一个手提箱,需要付出很大的代价。因为你完全要动作捕捉一整套角色拿着伞的所有动画。可是现在就不用了,有了IK,你只需要在骨骼上拿着箱子的手做一些参数调整,就能够完美的模拟出拿着箱子正常行走的动画。
4. 一套新的流程
于是,我们会在studio里找一些演员来,穿上动作捕捉的衣服,只是在房间里自然的做各种动作:行走,跳跃,举手,踢腿。但是我们不会去捕捉演员的动作,而是去记录各种有用的参数:他的步幅,步频,脊椎的形状等等(我称这些数据为动作DNA)。然后利用这些参数应用到我们的IK骨骼上(我们的IK骨骼现在大约有20个可供调整的参数来模拟每个不同角色的特性),就可以用同一段动画模拟出这名演员的所有动作特性了。
P3通过IK实现场景交互动画
1.关卡交互概述
在之前,我们会做一个行走的动画,和一个下蹲的动画,每当我们的角色脑袋上有东西,我们就会将行走动画混合到下蹲动画去。
但是这样,你永远只能去应对一种情况,你会对你的关卡设计说:请把所有的栅栏设置成1米高,请把所有的隧道做成1.5米高,因为我们的动画没有应对任何其他地形的方案。这实在是非常不合理的,事实上,早在30年前,人们在2D游戏中用tile map时开始用这种方法,到了现在,改变依然很少。
但是有了IK,你只需要通过射线去检测角色周围的环境,然后根据周围的环境去改变我们IK骨骼中的参数,一切就变得非常简单而且自然了。
2. 地形交互
在只有一段角色在平地上行走的动画的前提下,如何让角色能够在不同形状的地形上自由的行走?
有了之前的认识,其实一切应该都非常简单了:朝角色下方发射射线,检测到路面的信息,通过获得的信息去修正IK骨骼参数。
3. 让角色活在关卡里:复杂的关卡交互
1)乐队方阵DEMO
9个完全不同的角色
包含男人和女人
不同的身体比例
混合入9个单独的乐器演奏动画
9个人动作同步
能够与场景交互
只需要1天就可以做出来
2)复杂交互
通过发射射线去感知角色周围的地形交互,逐帧实时修正IK动画,实现人物与地形的交互。
4. IK骨骼与4脚动物
P4在实际开发中要注意什么
1. 为什么要用?
1)角色的多样性
游戏中角色的设计理应根据角色原画来设计,而不是根据骨骼来决定
2)在各种情况对动画的内容进行修改
3)高速迭代,简单的修改一段行走动画不需要重新动画捕捉了
4)快速做出游戏原型,利用IK可以利用以有动画很快的模拟出新的动画,做出游戏原型,再决定后续是否需要动作捕捉新的动画
5)省钱hhhhh
2. IK对角色开发流程带来什么改变?
新的技术使得很多旧的限制被摆脱了
1)角色建模可以更加自主的根据原画设计来制作,而不需要因为骨骼动画的问题做各种妥协
2)游戏引擎中会需要有一部分技术去支持实时改变IK骨骼参数
3)使用IK骨骼,需要动画技美与动画师做良好的沟通,确保IK骨骼参数修改出来的结果是动画师满意的。同时,可以制作一套可视化工具给动画师自行调整各种IK骨骼参数,做出她想要的效果
4)游戏设计师可以有更多选择了,可以利用动画去表达更多东西而不需要去考虑动画捕捉的高额成本
3. 什么时候不应该用
1)动画对玩法有决定性作用
比如在各种决斗游戏中,玩家需要各种精确的输入来释放技能,而玩家判断输入的时机很大一部分是通过屏幕上的动画。如果你使用IK让角色每次出轻拳的动作都不一样,玩家会抓狂的。
2)动画不是那么明显
比如策略游戏,你的屏幕上有1000个士兵,一个士兵只占那么10个像素的时候
3)游戏中角色不多
4. IK会占用多少资源?
非常少,你上面看到的很多复杂的效果,实际上只通过了几行代码,很简单的数学关系就实现了。一切只是,参数联系,各种数学等式,仅此而已。
Alwaysmadowl 1年前
感谢介绍和翻译~!
ThouSun [作者] 1年前
Alwaysmadowl 1年前
发布
ThouSun [作者] 1年前
Alwaysmadowl 1年前
ThouSun [作者] 1年前
Alwaysmadowl 1年前
发布
菊开几世 1年前
之前神海4的德雷克那么多动画都是录的吗?
发布
Ghost 1年前
真是酷!演示动画好魔性啊!
发布
白枫 1年前
发布