生化危机7使用的过程化动画技术
发表于2017-01-05

本演讲所内容的是2017年1月26日发售的【生化危机7】中所使用的过程化动画技术。玩家角色和敌人角色的运动会对应游戏环境状况来动态的变化,来获得更有临场感的动画效果。

演讲者 橋本直樹博士,卡普空 CS第一开发总部 第一开发部 第一游戏开发室

讲座分为三部分,生化危机7的游戏概念,游戏中动画的基本功能和对应的解决方案。

首先是【生化危机7】的概念,本作各以前的【生化危机】系列有所转变,采用了第一人称视点。视觉上使用照片真实的表现,以对应VR的强浸入感的渲染为目标。另外,玩法也回到了最初的探索和解密上,要管理资源的生存模式,以及强调恐怖的表演上。而把这样的图形表现用60FPS的帧率稳定的渲染,对于软件工程师来说是最高的挑战。

生化危机7的动画技术调研以及目标的制定
Capcom自研引擎的基本功能

首先是动画的基本功能的说明。【生化危机7】是使用的叫做【RE ENGIE】的Capcom自研引擎开发的。游戏引擎里拥有像控制待机和步行的状态过渡,混合身体朝向与跑动的多个动作的混合树,上半身和下半身不同动画重叠的分层动画等标准的动画功能。

StateTransition功能,在Transition里配置条件,来触发在不同动画状态之间切换

动画混合树(BlendTree),Blendspace类似的功能。

动画序列功能,可以在动画序列上加入事件触发器,来执行生成攻击,调用音效等功能。

动画分层功能,可以实现动画层的替换和叠加功能。
现代的动画技术中一般也会采用称作IK(逆向动力学)的方法。简单来说就是运动骨骼关节的顶端部分(手指,脚趾),然后驱动连结的关节运动的构造。

IK功能有双关节(骨骼)IK (2Bone IK)和多关节IK(CCD IK)两种

双关节IK和多关节的手脚IK的介绍视频
视频01
通过这种IK功能,也实现了把脚限定在地面的【Foot Lock】功能

FootLock的演示
视频02
然后是使用【LookAt】的功能,由腰,腹,胸,头,眼睛的顺序来控制模型的姿势和视线。可以做出以敌人角色为目标的视线追踪的表现。

视频03 Look at的演示
另外还有的就是多个关联动画平滑过渡的解析功能。例如分析脚触地的时机,可以在游戏运行时获取左脚和右脚的落地时间。

Capcom的RE ENGINE的动画基本功能的总结
有效利用第一人称视点的手臂和相机的表演

玩家要实现的目标就是加强游戏的浸入感。具体的就是要想办法表现出玩家角色的动作。因为【生化危机7】是第一人称视角,无法表现出玩家角色的全身模型,所以要以表现两手为基本。也就是巧妙的利用手部的IK处理。这里实现的解决方法有3点。

首先是攻击时的Hitstop,准备了基本武器的挥动动画。而击中物体时的动作则是过程化生成的。

挥动的动画与攻击时的HitStop
视频04
具体来说,就是在武器打击判断到物体击中的瞬间,在保持手臂姿势的同时,附加一个表现击中时反作用力的动画。总之就是固定武器,用IK来处理手部位置的偏移,作出打击的表现。

攻击HitStop的演示
视频05

Hitstop演示动画
视频06
观看实际的游戏动画的话,和单纯的动画相比,有了临场感和生理上的感觉。也希望玩体验版时尝试下攻击游戏中的物体。

Hitstop在游戏中的示例
视频07
第2点是和背景的交互上。具体来说就是制作手接触门和墙壁的动作。在开门的场景中手和门接触后再播放动画。手接触门后就被固定在门上,动作会跟随着门的动作。另外根据和门的距离,接触时手腕的旋转角度也会跟着变化。

视频08 推门和墙壁的手姿势

游戏中与墙壁交互的示例
视频09

手与门的更多游戏示例,增加了游戏场景中的临场感。
视频10
最后一点是过场动画的演示与游戏的衔接。游戏这种自由的在地图中移动的游戏,需要游戏的场景和过场动画的场景可以无缝的衔接。在【生化危机7】中是计算游戏时的相机相机速度和过场时的移动速度,对这个区间做补完。为了不会有单纯的直线的连结速度的不协调感,加入了在移动的起始和结束部分调整速度的功能。
游戏演示与玩家操作的衔接
视频11

玩家部分的方案总结

表现敌意的动作方法

接下来看一下敌人角色的动作。包含的要点有,敌人角色的感觉到智慧的动作,狭小场所中的真实运动,以及滑步的改善上。

在有意识感的移动上,首先对平行移动(Strafe移动)的动作实现做了解说。因为平行移动在凝视一点的同时,在前后左右的移动,这样就有目的的给予了玩家敌对心和警戒心。

但是,过程化的平行移动也有自身的问题。这个是因为前后左右的步法是很复杂的,单纯的上半身和下半身的动作混合会让脚的动作纠缠在一起。在【生化危机6】中为了解决这个办法采用了螃蟹步的方法。而在本作中为了追求真实的动作,追加了动作,制作了步法的规则。
移动混合问题的解决
视频12
【生化危机7】中采用的步法解决方案。
接下来解说的是对应游戏状况动态的改变攻击动作的方法。准备的是敌人攻击时横向挥动武器的动作。对于动作,通过改变手的上下位置,过程化的生成向下挥动和向上挥动的动作。而单纯的用混合动画的话,手的动作会与整体平衡冲突,变成不自然的动作。

攻击的动态变化演示
视频13
这里的实现参考了CEDEC 2011上KOEITECMO发布的【FullBody IK Engine的做法】的文章,加入了类似手足的IK处理那样,改变模型的重心的技术。但实际上因为计算量非常多,减少了骨骼关节的数量,并且通过攻击动作中无视下半身来达到计算的轻量化。r
然后是以攻击目标头部的动态的改变动作,完成了有敌意的僵尸角色。这样可以对应玩家的姿势来狙击头部,表现出了恐怖感。

攻击的上下变化
视频14

攻击的左右上下变化
视频15

为了保证在狭小场所中战斗的真实感,敌人角色同样采用了攻击Hitstop。基本上和玩家角色一样,在动画播放后,在打击位置进行IK处理,在手臂加入武器的反作用力的技术。
铲子打击墙壁的HitStop
视频16

最后进行的是【生化危机7】中滑步的改善方法的介绍。首先是在斜坡和楼梯的走路动作的修正。在斜坡和楼梯上与在水平地面上不同,走路动作容易发生脚漂浮的问题。本作中是用过程化技术对通常步行动作做加工来进行修正的。
具体的讲就是为地形数据准备了【地形碰撞】和【效果碰撞】两种碰撞数据。前者是单纯的判定倾斜和水面表现,来让角色移动使用。而后者则是在更接近外观的形状的判定数据,增加了着弹和视线穿过的判断,来防止脚的插入。
动作的修正上,是计算模型和地形判断的地表倾斜,对应脚的位置的倾斜来动作。然后通过效果碰撞来进行脚与地面的接地判定,使用IK处理来表现反作用力的动作。另外还会根据倾斜角来降低腰的位置,防止脚够不到地面的问题。
斜坡的接地处理
视频17

视频18 斜坡处脚的接地处理

视频19 楼梯处脚的接地处理
另外单脚的身体旋转使用的是Pivot的动作修正。通常的做法是取得接地的脚的信息,以身体的中心为轴来移动。但是因为这样会有脚的侧滑问题,需要把旋转轴靠近支撑脚的方式来解决。还有像踏入攻击的动作,也不是全新的制作,而是利用Footlock来生成动画。

视频20 只有Root旋转和采用支撑脚旋转的对比

视频21 踏入攻击加工前后的对比

视频22 踏入动作

视频23 钟摆行为的两种动画

最后的总结
本演讲所内容的是2017年1月26日发售的【生化危机7】中所使用的过程化动画技术。玩家角色和敌人角色的运动会对应游戏环境状况来动态的变化,来获得更有临场感的动画效果。

演讲者 橋本直樹博士,卡普空 CS第一开发总部 第一开发部 第一游戏开发室

讲座分为三部分,生化危机7的游戏概念,游戏中动画的基本功能和对应的解决方案。

首先是【生化危机7】的概念,本作各以前的【生化危机】系列有所转变,采用了第一人称视点。视觉上使用照片真实的表现,以对应VR的强浸入感的渲染为目标。另外,玩法也回到了最初的探索和解密上,要管理资源的生存模式,以及强调恐怖的表演上。而把这样的图形表现用60FPS的帧率稳定的渲染,对于软件工程师来说是最高的挑战。

生化危机7的动画技术调研以及目标的制定
Capcom自研引擎的基本功能

首先是动画的基本功能的说明。【生化危机7】是使用的叫做【RE ENGIE】的Capcom自研引擎开发的。游戏引擎里拥有像控制待机和步行的状态过渡,混合身体朝向与跑动的多个动作的混合树,上半身和下半身不同动画重叠的分层动画等标准的动画功能。

StateTransition功能,在Transition里配置条件,来触发在不同动画状态之间切换

动画混合树(BlendTree),Blendspace类似的功能。

动画序列功能,可以在动画序列上加入事件触发器,来执行生成攻击,调用音效等功能。

动画分层功能,可以实现动画层的替换和叠加功能。

现代的动画技术中一般也会采用称作IK(逆向动力学)的方法。简单来说就是运动骨骼关节的顶端部分(手指,脚趾),然后驱动连结的关节运动的构造。

IK功能有双关节(骨骼)IK (2Bone IK)和多关节IK(CCD IK)两种

双关节IK和多关节的手脚IK的介绍视频
视频01
通过这种IK功能,也实现了把脚限定在地面的【Foot Lock】功能

FootLock的演示
视频02
然后是使用【LookAt】的功能,由腰,腹,胸,头,眼睛的顺序来控制模型的姿势和视线。可以做出以敌人角色为目标的视线追踪的表现。

视频03 Look at的演示
另外还有的就是多个关联动画平滑过渡的解析功能。例如分析脚触地的时机,可以在游戏运行时获取左脚和右脚的落地时间。

Capcom的RE ENGINE的动画基本功能的总结。

有效利用第一人称视点的手臂和相机的表演

玩家要实现的目标就是加强游戏的浸入感。具体的就是要想办法表现出玩家角色的动作。因为【生化危机7】是第一人称视角,无法表现出玩家角色的全身模型,所以要以表现两手为基本。也就是巧妙的利用手部的IK处理。这里实现的解决方法有3点。

首先是攻击时的Hitstop,准备了基本武器的挥动动画。而击中物体时的动作则是过程化生成的。

挥动的动画与攻击时的HitStop
视频04
具体来说,就是在武器打击判断到物体击中的瞬间,在保持手臂姿势的同时,附加一个表现击中时反作用力的动画。总之就是固定武器,用IK来处理手部位置的偏移,作出打击的表现。

攻击HitStop的演示
视频05

Hitstop演示动画
视频06
观看实际的游戏动画的话,和单纯的动画相比,有了临场感和生理上的感觉。也希望玩体验版时尝试下攻击游戏中的物体。

Hitstop在游戏中的示例
视频07
第2点是和背景的交互上。具体来说就是制作手接触门和墙壁的动作。在开门的场景中手和门接触后再播放动画。手接触门后就被固定在门上,动作会跟随着门的动作。另外根据和门的距离,接触时手腕的旋转角度也会跟着变化。

视频08 推门和墙壁的手姿势

游戏中与墙壁交互的示例
视频09

手与门的更多游戏示例,增加了游戏场景中的临场感。
视频10
最后一点是过场动画的演示与游戏的衔接。游戏这种自由的在地图中移动的游戏,需要游戏的场景和过场动画的场景可以无缝的衔接。在【生化危机7】中是计算游戏时的相机相机速度和过场时的移动速度,对这个区间做补完。为了不会有单纯的直线的连结速度的不协调感,加入了在移动的起始和结束部分调整速度的功能。
游戏演示与玩家操作的衔接
视频11
玩家部分的方案总结

表现敌意的动作方法

接下来看一下敌人角色的动作。包含的要点有,敌人角色的感觉到智慧的动作,狭小场所中的真实运动,以及滑步的改善上。

在有意识感的移动上,首先对平行移动(Strafe移动)的动作实现做了解说。因为平行移动在凝视一点的同时,在前后左右的移动,这样就有目的的给予了玩家敌对心和警戒心。

但是,过程化的平行移动也有自身的问题。这个是因为前后左右的步法是很复杂的,单纯的上半身和下半身的动作混合会让脚的动作纠缠在一起。在【生化危机6】中为了解决这个办法采用了螃蟹步的方法。而在本作中为了追求真实的动作,追加了动作,制作了步法的规则。
移动混合问题的解决
视频12
【生化危机7】中采用的步法解决方案。
接下来解说的是对应游戏状况动态的改变攻击动作的方法。准备的是敌人攻击时横向挥动武器的动作。对于动作,通过改变手的上下位置,过程化的生成向下挥动和向上挥动的动作。而单纯的用混合动画的话,手的动作会与整体平衡冲突,变成不自然的动作。

攻击的动态变化演示
视频13
这里的实现参考了CEDEC 2011上KOEITECMO发布的【FullBody IK Engine的做法】的文章,加入了类似手足的IK处理那样,改变模型的重心的技术。但实际上因为计算量非常多,减少了骨骼关节的数量,并且通过攻击动作中无视下半身来达到计算的轻量化。r
然后是以攻击目标头部的动态的改变动作,完成了有敌意的僵尸角色。这样可以对应玩家的姿势来狙击头部,表现出了恐怖感。

攻击的上下变化
视频14

攻击的左右上下变化
视频15
为了保证在狭小场所中战斗的真实感,敌人角色同样采用了攻击Hitstop。基本上和玩家角色一样,在动画播放后,在打击位置进行IK处理,在手臂加入武器的反作用力的技术。

铲子打击墙壁的HitStop
视频16
最后进行的是【生化危机7】中滑步的改善方法的介绍。首先是在斜坡和楼梯的走路动作的修正。在斜坡和楼梯上与在水平地面上不同,走路动作容易发生脚漂浮的问题。本作中是用过程化技术对通常步行动作做加工来进行修正的。
具体的讲就是为地形数据准备了【地形碰撞】和【效果碰撞】两种碰撞数据。前者是单纯的判定倾斜和水面表现,来让角色移动使用。而后者则是在更接近外观的形状的判定数据,增加了着弹和视线穿过的判断,来防止脚的插入。

动作的修正上,是计算模型和地形判断的地表倾斜,对应脚的位置的倾斜来动作。然后通过效果碰撞来进行脚与地面的接地判定,使用IK处理来表现反作用力的动作。另外还会根据倾斜角来降低腰的位置,防止脚够不到地面的问题。
斜坡的接地处理
视频17

视频18 斜坡处脚的接地处理

视频19 楼梯处脚的接地处理
另外单脚的身体旋转使用的是Pivot的动作修正。通常的做法是取得接地的脚的信息,以身体的中心为轴来移动。但是因为这样会有脚的侧滑问题,需要把旋转轴靠近支撑脚的方式来解决。还有像踏入攻击的动作,也不是全新的制作,而是利用Footlock来生成动画。

视频20 只有Root旋转和采用支撑脚旋转的对比

视频21 踏入攻击加工前后的对比

视频22 踏入动作

视频23 钟摆行为的两种动画

最后的总结