程序动画层

第一个是我们抽离了完整的程序动画层,所谓的程序动画层就是我们会以FPP模型的握枪点为核心,用一套程序控制的方法,去控制握枪点的位置和旋转,牵引相关连的手臂,枪械姿态,摄像机位置的系统。
为什么会这么做呢,我们分析竞品资源的时候发现,有很多FPP的表现模块都是没有具体动画资源的,然后表现上非常真实和丝滑,因此很容易得出这些都是通过程序动画控制的。
于是我们把像枪摆,跳跃之类的动画模块。抽象成为几类动画子系统,比如握枪姿态相关的GunSwing,后坐力反馈相关的。ViewKick和GunKick,枪械指向相关的GunSway,然后通过引入弹簧模拟,正弦余弦振子,手工配置的曲线来增强牵引跟缓冲的物理感,最后通过动画蓝图和动画控制器,体现在FPP动画表现之中。

这里我们以枪摆为例,枪摆最重要就是控制握枪点,我们引入了变阻力弹簧,也就是我们在滑屏或者移动鼠标的过程中。控制握枪点的弹簧在移动刚开始的时候是比较松弛的,但是在操作停下来的时候可能会逐渐紧绷,用这个方法来模拟肌肉由松到紧的过程,并且实际测试发现,单一弹簧控制的表现也没有那么真实。于是我们使用多个弹簧组合,去模拟手臂持枪以及对抗枪械的惯性的过程。同时,不同的枪械,我们也定义了他们的枪长枪高和握点的位置来通过物理演算去反应出整体的枪械的重量感和质感。结合调整这些参数,最终就会形成一个我们认为还比较好的枪摆的效果,它显得比较丝滑,而且有缓冲感,感官表现比较真实。

接下来我们讲一下开火的优化,在连发枪的开火表现上,我们也直接摒弃了纯动作美术同学做开火动画的实现形式,我们是通过曲线和振子的方式,用多条曲线和振子去控制我们的握枪点以及它前后及左右的一些抖动,比如说我们的枪械开一发火的时候,我们的曲线会控制它,开火前面几帧的移动的范围会比较大,然后在开火收尾的时候。曲线会突然收紧,模拟一个紧绷的过程,同时呢,枪械的开火过程会有枪械的抖动,我们通过正余弦曲线进行控制,然后我们通过多条曲线振子和弹簧相叠加去展现我们的射击效果,可以看到相对于纯动画表现,它表现力更丰富,并且纯参数配置更可控。我们通过策划配置多套模板的方式来实现不同枪械的开火感觉,整体取得不错的开火效果。