贫民级游戏动捕方案——AI视频动作捕捉
涉及到的关键词
Mocap = Motion Capture = 动作捕捉
Deep AI Video Mocap = 你懂得
Clean Up = 动捕数据的优化
NLA = Nonlinear Animation = 非线性动画(不知道是不是Blender特有的)
Retargeting = 骨骼重定向
Walk Cycle = 循环走路的动画
涉及到的工具
Blender
推荐理由:免费,开源,有大量好用的插件。但是缺点就是没有其他成熟的软件好用。但是免费,免费,免费。
Plask.AI
一个网站,里面提供了免费的AI视频动捕方案,用户只需要自己拍摄一段视频,然后上传上去,自动可以Extract动画,然后导出FBX文件。
Kinetix
另一个网站,里面提供了免费的AI视频动捕方案,用户只需要自己拍摄一段视频,然后上传上去,自动可以Extract动画,然后导出FBX文件。
Plask VS Kinetix
Plask内置了一个建议的骨骼编辑器,可以在有限程度下修改动画,但是有Blender的情况下,基本形同虚设。且Plask没有手部识别。但是动作识别精准度好像略高于Kinetix。
Kinetix使用界面非常非常简洁,没有多余的功能,就是两步走:上传视频→下载动画。Kinetix有手部动作识别,但是识别精准度特别特别低,你摆一个握拳的姿势,基本上动画导出来之后,跟老年痴呆一样,手部一直在“打响指”。但是总好过没有,后期我们可以在Blender里面优化。
动捕过程
先从YouTube上找一个视频,当然大家自己操作的时候是需要自己录自己的视频的。这里涉及到一个问题我好好奇,我从网上下载武打明星的片段,然后动捕出动画放到游戏里面算侵权么??
Plask视角
Step One
Step Two
Step Three
Step Three - Roast
这里要吐槽一下,这个交互设计实在太烂了,他本意是想让我等待这些时间,但是这个窗口看上去像是一个报错窗口,只给了一个Cancel按钮,忍不住点。实际上,千万不要点!千万不要点!千万不要点!
Step Four
这里需要将动画与模型绑定,绑定需要等待几分钟。
Step Five - Final
Kinetix视角
Step One
Step Two
Step Three
Step Four
Step Five
Step Six
Step Seven
Step Eight
Step Eight - Roast
这里空口吐槽一下,上一步必须要点击Editing,如果不点Editing,而直接点Export会被报错
提示无法导出一个模板,因为你没编辑过,所以他就算成模板了……
好吧这也没有空口吐槽,还是截了图……
Step Nine - Final
在Blender中进行Clean Up以及制作Walk Cycle
这里以Blender为例进行讲解动捕的后处理,也就是Clean Up阶段。另外也顺带讲解一下,如何做Walk Cycle,这可是困扰我两天的成果。
对于普通的攻击或者放技能之类的动作,在Unreal中通常会被用于Montage的动画,其实就是所见即所得,只要处理Clean Up就可以了。
但是对于Locomotion之类的动画,也就是在Unreal中需要放进BlendSpace中作为移动动画的(……动画),我们则需要额外的去处理Walk Cycle。
将FBX文件导入到Blender
新建一个Blender工程,并将多余的东西删掉(摄像机,以及那个箭头)
导入FBX文件到Blender中
File→Import→FBX
Clean Up 动捕数据
Step One
Step Two
Step Three
这里有快捷键可以操作,在Blender里面A是全选,然后疯狂按Alt+O进行曲线平滑,直到满意为止。
至于按到什么程度才算满意,首先你要先理解这个曲线代表什么意义。
Step Three - Bonus of Graph Editor Explanation
这里给大家讲解一下曲线编辑器里面曲线的意义。
从上图中展开某一个骨骼的列表中可以看出,每一个骨骼都有自己的Transform信息。所以这个曲线也既是每一个骨骼的动画过程。那这和“关键帧”有啥关系和区别呢?
关键帧,顾名思义就是关键帧,是储存这一帧某一个骨骼的Transform状态的,对于3D游戏来说,区别于2D像素动画,只有关键帧和关键帧的切换显然是无法满足人们的需求,蒙骗过人眼能够识别出的平滑切换。所以这里曲线实际上意味着interpolation(插值运算)。
所以我们在执行Smooth Key这个动作的时候,就是为了平滑由于动捕不精确带来的一些额外的抖动。
处理前:
处理后:
开始制作Walk Cycle
我们先回到Dope Sheet编辑器
挑选出一段你最满意的循环片段,然后在编辑器右下角限定一下,比如我选的是从第1帧到第47帧。其他多余的关键帧都可以删了。
下面骚操作来了,我们先把这个片段的最后一帧删了,然后再把第一帧拷贝到最后一帧。
然后先按播放键看一下效果,我猜100%会出现Gap,这个时候不要急。紧接着打开Graph Editor观察曲线。
我画圈的这部分,就是导致Gap的罪魁祸首。如果你理解了我之前讲解的关键帧与曲线的关系,就应该知道该怎么做。这里提供两条有效方法:
破坏性的方法
删除倒数第二帧,播放一下看看效果,不行再删除倒数第三帧,倒数第四帧……
这样做的好处就是非常省事,方便,快捷。
坏处就是非常具有破坏性,根据动画而异,有一些这样做就看不出区别,有一些就能看出动画节奏由明显的问题。这个时候也不要急,只需要重新排一下关键帧的位置就可以修补。
但是这种方法可不能贪杯哦~删多了,会导致【关键的关键帧】丢失,就会导致关键动作丢失:P
这方法的原理你们应该懂吧?之所以有要处理成“Cycle”的需求,是因为这个动画本身就是Cycle的,所以基本上处于一种正弦或者余弦的曲线状态。由于我们为了能够让最后一帧和第一帧完美衔接,所以我们把最后一帧强行拷贝到了最后一帧,所以带来了最后一帧和倒数第二针之间的“隔阂”,所以我们本着“解决提出问题的人”的态度,谁有问题删谁,直到删到动画状态接近最后一帧的那一帧,在interpolation的加持下,自然而然的平滑。
正道做法
虽然有点累,但是是完美的。
如果你理解我之前讲的种种的一切,应该自然而然的知道该怎么优化。
就是一个骨骼一个骨骼的找,每一个曲线突兀的地方,然后手动平滑曲线。
过程太复杂,我就不演示了……
结论
以上全部是我这两天摸索的结果,纯原创。为了能够给更多地小伙伴启发,所以才写了这一篇教程。
大家一起加油,做出更多有意思的艺术作品。 (*?)