因为考虑到绝大多数人看不懂,我修改了整体的描述,会以大白话的形式表达一下内容!
“动作”统一称作“动画”(动画更具体,动作不具体)
早期的游戏引擎是没有包含动画编辑器的。需要单独的动画引擎。目前的成熟的商用引擎都整合了地形/建筑/动作/特效/Ai/物理。(不过现在还有的公司还没整合明白!)
Joakim Hagdahl @RH_Hagdahl多年来积累的提示和技巧:
游戏动画的一大挑战是如何从一个动画转换到另一个动画。您是否创建了更多过渡动画并将其添加到状态机?你能让你的混合长一点吗?您是否为每个可能混合在一起的动画添加同步点标记?您是否实现,基于关节目标朝向变化速度和其他动作的混合过渡?您是否实现了动作匹配并且创建了庞大的动捕数据库?
您可以做一件实际上并不太复杂或昂贵(高级)的事情,您可以立即使用它来替换可能存在标记问题的同步标记点。
开始动画通过姿势匹配转换为循环。这是一个理想的情况,这是动画师通常制作的情况,除非你想在右脚或左脚动画结束前做进一步的动画,否则通常不需要姿势匹配。
姿势匹配指的是检查两个姿势的相似性和计算优先级。如果将此姿势匹配计算应用于搜索,则可以在动画中找到最佳姿势,并根据该姿势更改要混合的动画的开始时间。如果您将姿势匹配基于最后一帧中,角色的实际输出姿势,就可以找到与当前混合姿势最接近的匹配动画。
我们完成姿势匹配计算的方法是通过计算几个关节的位置差和速度差,其权重优先考虑位置差。当您需要更好的衔接上下姿势匹配时,还可以计算旋转速度以改善此匹配并添加更多关节动作。
旋转移动方向开始变得更难,因为动画的开始与向前奔跑移动不同,因此姿势匹配能够更好的帮助动画师。
(Naughty Dog自己引擎不是商用的所以无法得知细节,这里拿Epic的Unreal4引擎做解读。)
在游戏动画引擎中,某些操作需要导入动画时运行。这些姿势会以正确的旋转方式纠正根节点错误还将进行重新定位,并且减少每个动画师无法实现所想的遗憾。以上这些操作在早期的动画引擎中进行了硬编码,因为开发者他们想要在游戏里实现流畅的动画只能通过引擎预渲染这些动画。
Epic去年实现了一个功能,他们将虚拟引擎称为动画修改器,这是一个能够编辑实时动画的系统。您可以更改代码,以便它在重新导入时运行。这样,每当动画师改变动画时,修改器将会重新处理。
动画修改器基本上是在动画序列上运行的蓝图,它们可以调用您想要的任何类型的代码并对原始动画数据进行处理。您可以创建动画原数据,生成同步点,您可以预先计算关节速度和旋转速度的曲线,您可以添加动画通知,还可以将新的原始数据轨迹写入关节(如果将此代码添加到Unreal中)。
我们实现姿势匹配的方式是添加一个动画修改器,在所选动画序列上创建姿势匹配动画元数据。
此动画修改器能够将动画逐帧进行修改,并计算几个关节的组件空间变换及其速度。我们的动画修改器将作用到左脚和右脚关节以及臀部。这实质上意味着我们正试图找到通常适用于运动的动画阶段。
在我们的动画序列和混合空间中,我们有一个函数,我们可以选择在动画启动时进行姿势匹配。这将在动画序列中搜索最佳姿势匹配,并将开始时就设置为该匹配。在混合空间中,它首先查找具有最高权重的动画并计算该动画的开始时间,然后同步以确保混合空间中的其余动画能够在正确的时间出现。
最简单的姿势匹配应用是,将其用作循环动画的开始时间。在循环动画中,它们将从哪里开始并不重要,因为它们只是循环,并且如果动画是循环运动的,则是最完美的姿势匹配。
通过姿势匹配,您可以创作每个方向的动画,并且你可以让动画师把运动的腿脚以不同姿势结束,并依靠姿势匹配来找到运动动画中的最佳姿势。
用于转换成游戏动画,如闪避/掷骰/攻击/跳跃/等。姿势匹配将自动找到最佳姿势进入运动,因为这样对于响应性和动作感觉很重要,你可以让设计师调整那些分支窗口,你可以依靠姿势匹配来做出让别人看起来很棒的动画(假设它们分支时角色是自立的)。
姿势匹配的另一个案例是转换为脚本的时候。在上面的运动循环案例中,姿势匹配寻找的是整个动画库。对于制作脚本时,您将在动画的入口部分进行搜索,您可以直接跳到角色匹配的动画部分。
除此之外的第二步是获得可能的动画列表,并在所有这些动画中搜索最佳匹配姿势并选择播放该动画。这可以输入,触发,启动动画等。
如果游戏正在进行近战格斗部分,那么你可以用姿势匹配来扩展选择,这样它就可以检测手的位置,你做出一个攻击动作,接下来姿势匹配就会找出最接近起手动作的下一个动作作为衔接,一直匹配到停止攻击,最后会以一个结束动作做收尾。需要设置一个攻击动作序列。
如果你想做的更好,而不仅仅是从已有匹配动画列表中选择。你接下来可以做到以下这一点,即便在翻滚状态下你有一些不同的翻滚姿势(需要扩充相应动画),当你激活一个布娃娃系统,然后姿势匹配搜索最佳姿势,因为角色是在翻滚的状态下。这将使得布娃娃系统不断处于动态,动态的地形或物理碰撞测试翻滚最佳的方法!
这组动图来自GDC开发者大会技术讲座,用以演示不同情况下的动作状态。
动捕后导入动作库中,实际受到物体碰撞后产生的物理效果。
受到物理碰撞或挤压后根据受力方向做出相应动作(自动调取动作库相近的动作)随后根据Joystick的控制方向做出相应的动作。
《The Last of Us: Part II》中展现的物理碰撞。
Naughty Dog在GDC(开发者大会)的技术演讲
攻击动作是向设定好的攻击点做出动作,这样的处理手法会给人拳拳到肉的感觉,毕竟一个动作的“打击感”是需要和一个物体互动,在出拳击中目标,拳头或武器会做出击打到物体表面的停顿也就是卡肉。但是受力的Ai会在一定距离内,做出相对应的被打击反馈动作,有的时候可能都没完全触及表面,因为速度快和电影镜头的把握。能让玩家觉得我真的打到的感觉,加上镜头抖动和声效特效增加的视觉,听觉效果。“打击感”就这样呈现出来了。有的会通过手柄的震动来提高这一感受!如果一个物体没有做出相对应的反馈或者根本没有接触到物体表面的反馈,这样的打击反馈是不扎实的。
攻击敌对Ai最后一下取决于目标是否依靠物体,如果是依靠物体那么他最后的终结动作是统一的。只是最后一下的动作会依据依靠物体的高低判断起手的方向!
连续攻击下回判断是否依靠物体做出动作筛选(动作数据库)选着最接近的动作,作为衔接动作。依靠不同高低大小的物体最后一下的终结时相同的,只是方向不同!
艾莉用板砖砸晕敌对Ai造成的硬直,使用蝴蝶刀跳起攻击(因为身高差)起手第一下,认真看蝴蝶刀是吸附到到Ai脖子上的。后续的连续攻击时匹配数据库中最接近的攻击动作作为衔接。
这里乔尔把Ai或玩家推到墙面后处决动作是在起手攻击后最后一下判断是否依靠墙面,而墙面的距离判定过远就不会触发该动作,如果在5步以内(包括5步)就会根据推摇杆的方向来触发这个动作。会把Ai吸到相应墙面或物体上,没错就是吸过去。因为镜头始终在玩家背后,加上电影镜头的表现,再触发推墙动作的时候不会觉得很不自然
下面的图可以看出乔尔触发这个动作的时候是吸过去的(对应方向)。
敌人Ai和乔尔的攻击动作系统是一致的,也就是乔尔能打出什么动作Ai也可以打出一模一样的动作(只是ND限制了Ai动作几率)乔尔可以用的劫持动作,Ai也可以趁你不注意劫持你。只是玩家不会这么傻,导致这个劫持动作Ai几乎用不到,人多例外。
最后生还者:第二幕,艾莉的动作库也是和敌对Ai是一样的,换句话说玩家和Ai的动作享用同一个动作库
下面这个连续的动作估计很少人能触发吧。是反击动作,在你连打的时候 ,敌方闪避,这时按△ 三角触发反击(一定的反应速度,没有提示),有武器的时候是用武器挡,空手时是将对方推开。很多动作是在很苛刻的条件下才能攻击出发,也就是很多人说这个动作我怎么没见过。或者在发售后是不是删除了,游戏难度有关系,简单难度下敌人基本无双,连续多变的动作基本用不到。然而困难或绝地难度下这些动作就会被慢慢发现,因为绝地难度下物质匮乏,主角脆皮很容易死,一般都会忽略这些动作。所以取而代之的是猥琐流或者看视频攻略,这样就缺少了探索新东西的可能性,从而忽略了这些动作。
Naughty Dog在GDC上分享的极少部分代码展示和介绍
科技日新月异,技术的发展都是有根据的,也不用大惊小怪的去怀疑。在未来的演示中,也许还有更高级的Ai系统和更真实自然。甚至到达真人反应的动作系统的存在,可能只是因为目前的硬件技术没有跟上呢?E3 demo展示是经过特意的安排与指定的路线去实现的,画面肯定会调整(比如去掉一点特效提高一下贴图)这个不用怀疑,但我相信顽皮狗能实现的大部分内容,将会和他们承诺的一样。
评论区
共 49 条评论热门最新