“追求平滑!”——针对射击游戏中吸附类/阻尼类辅助瞄准的平滑性优化探索

作者:Minke 搬好今年最后一砖

一、平滑性有什么好研究的——如何定义一个好的辅助瞄准

在聊为什么要研究辅助瞄准平滑性的时候,需要先明确一个概念:究竟什么是一个好的辅助瞄准?

站在我的角度,结合之前和兄弟们聊的一些观点,我觉得主要从两个方向出发去定义这个东西:

  • 手感层面
灵敏、顺畅的角色转身
顺畅、平滑的瞄准射击

手指在屏幕上滑动,得到灵敏且符合预期的反馈,例如固定视角的人物转身,或是3P/1P视角的转向瞄准,都是典型的输入反馈乐趣,是操控感的重要组成部分

吸附类的辅助瞄准的原理一般都是在玩家当前帧的转向角速度基础上,再增加一个朝向吸附点的角速度,如果单位时间增加的量如果过大,玩家能够感受到自己的镜头在被明显拖拽

阻尼类的辅助瞄准是在玩家转向的基础上,乘上一个缩放系数从而实现在目标碰撞盒内转向速度减缓,这个减缓的量过大或者插值时间不合理时,也会有明显的阻滞感

无论是拖拽还是阻滞的体验,在我看来都是破坏了操控感带来的乐趣

  • 数值层面
理论TTK、期望TTK、实际TTK对比

辅助瞄准会影响玩家最终的实际TTK

在设计战斗预期的过程当中,我们会使用数值归一的方式,将玩家的战斗流程量化,数值归一是一个比较好的指导思路,也能够较好的衡量辅助瞄准的强度

以PVP射击游戏为例,一把武器上线后往往会有三个TTK:

  • 理论TTK:武器命中率100%的情况下击杀敌人的时间
  • 期望TTK:我们设计上武器击杀敌人的预估时间,考虑到武器操控难度、辅助瞄准水平、玩家操控水平、玩家血量变化等条件,也可以理解为理想战斗节奏下的击杀时间
  • 实际TTK:最终从CE、线上后台拿到的,玩家击杀目标的真实时间(这一块各个项目组可以做的很细,除了时间,命中距离、部位、整体命中率等等可以拆的很细来分析)

从这个角度出发,我们来看辅助瞄准的功能,其实是希望将玩家的实际TTK,尽可能向我们的期望TTK上面靠,使整体战斗符合我们的预期

我们希望这个“靠拢”是正向的,是水平一般的玩家通过辅助瞄准,缩短自己的实际TTK,而不是将高水平玩家的TTK加长,辅助瞄准不能影响玩家的主动瞄准

同时这个靠拢的幅度是去接近我们的战斗预期,而不是拉平,即便在辅助瞄准生效的情况下,仍然需要保留玩家技巧进步的空间

那么辅助瞄准是否缩短了TTK,缩短了多少,缩短之后玩家之间是否仍然能有水平差异,这些数值化的指标也是衡量辅助瞄准的一环

*题外话:这里的理论TTK、期望TTK、实际TTK的比例,是一个比较有趣的局内战斗节奏分析角度,目前应该还没有比较清晰的案例指导,大家都还在当手工匠人自己试的阶段,感兴趣的兄弟可以自己拆下

综上数值和手感两点,我们得到了一些好的辅助瞄准需要具备的要素:

  1. 避免拖拽感/阻塞感,保留滑屏反馈带来的操控感乐趣——这里就引出这篇研究的主题:追求平滑
  2. 能够有效的将新手玩家的偏长的TTK向期望TTK靠拢,同时不影响高水平玩家的实际TTK,更不能抹平玩家技能进步的空间

二、辅助瞄准各阶段的平滑性关注点

2.1 总览

瞄准各阶段辅助瞄准生效案例

这是一个常见的全自动武器的辅助瞄准类型和生效阶段案例,不同项目、不同武器的辅助瞄准生效方式不一致,这里不扩展,我们把玩家击杀单个目标的流程,拆分为四个阶段:

转向-预瞄:玩家移动过程中发现目标,并且移动准心开始瞄准的过程

瞄准/开火-拉枪:玩家准心大致贴近目标,尝试瞄准或者开火拉枪继续靠近目标

开火-跟枪:玩家对目标持续开火,将准心跟在目标身上的过程

转火-逃逸:玩家击杀目标,或跟枪过程中出现了更高价值目标,需要转火的过程

2.2 转向-预瞄阶段(开镜&准心吸附)

玩家从位移状态过渡到瞄准状态的阶段,这个时候会使用开镜/准心吸附来帮助辅助玩家瞄准

APEXM的开镜吸附效果

2.2.1 开镜吸附:

我们也可以把吸附类的生效过程拆解为 开始吸附 → 稳定吸附/吸附成功 → 逃逸 三个过程

吸附类的构建一般包含几个条件:生效条件,生效时间,生效区域,吸附点,各距离吸附速度,速度变化曲线,逃逸判定

由于开镜过程有明确的开镜时间,这里生效时间已经确定了

剩下的参数配置,讨论的问题其实是几组预期体验的问题:

A.关于吸附速度大小:一步到位 or 循序渐进 → 玩家开镜后是否需要进一步瞄准

B.关于吸附速度变化:匀速 or 先快后慢 or 先慢后快 → 开镜时间很短这个可以不考虑,但开火吸附就值得研究了

C.关于各距离吸附速度预期:近、中、远各区间的速度预期,时间控制 or 速度控制 → 不同距离吸附时间/速度的预期是多少,是否需要根据不同的枪型做优势区间

D.关于生效条件:直接生效 or 按住生效 or 滑动生效 → 是否需要一定程度上隐藏开镜吸附表现,是否针对多武器类型作区分

E.关于生效区域:大碰撞盒 or 小胶囊体 → 辅助瞄准的影响范围,需要和吸附速度配合来看

F.关于吸附点:单吸附点 or 多吸附点 or 骨骼吸附 → 辅助瞄准的理想落点,也需要和速度配合来看

G.关于逃逸判定:以单帧滑屏速度作判定 or 以一段时间的累计滑屏距离做判定 → 涉及到逃逸的顺滑程度,更深一些可以考虑逃逸时速度的变化

参数都是开放的,怎么调取决于预期是什么,PVE游戏是直接锁定高伤位置,还是锁定普通位置考验玩家的微调瞄准能力?PVP游戏是否需要帮助玩家将准心拖到敌方目标碰撞盒?问自己这些问题,再回到预期TTK和实际TTK中去找答案

我们一般不会觉得开镜吸附会出现平滑性上的问题,主要原因是三个:

1.玩家开镜一定是有开镜时间的,这里给了一个默认的插值时间,减少镜头拉扯的体验(如果偏移幅度过大,单帧转向幅度过大也是会有拉扯感)

2.开镜过程中,玩家主动滑屏,叠加FOV的变化、武器模型LOD的切换会分散玩家的注意力,减少对于镜头偏移的感知

3.开镜吸附基本不存在逃逸过程,玩家开镜结束后整个开镜吸附的过程就结束了,后续的移动并不涉及逃逸的处理,同时在开镜阶段触发逃逸的感知也并不明显

2.2.2 准心吸附

部分不需要开镜的武器,为了帮助玩家快速锁定目标,在转向-预瞄阶段需要做准心吸附:

CODM准心吸附

准心吸附对比开镜吸附,少了天然的生效时间,其余的参数基本一致

图示codm的准心吸附是一个长按触发的匀速吸附,吸附的速度比较慢,吸附生效框小且逃逸门槛极低,玩家主动滑屏瞄准的情况下准心吸附基本不生效,从游戏体验的角度触发,准心吸附带来的帮助是比较弱的

目前也没有看到哪款游戏做了比较强的准心吸附,猜测主要的考量是:

玩家长按屏幕的过程中,我们无法判断玩家是否要去瞄准离准心最近的目标,在怪物数量偏多的情况下,强化准心吸附的效果会导致滑屏过程不顺(阻尼也会有同样的问题)

所以要么不做,要么把吸附速度调小,同时把逃逸的阈值做的很低

2.3 瞄准/开火-拉枪阶段(开火吸附&阻尼)

2.3.1 开火吸附

拉枪阶段的开火吸附,有以下几个关注点:

开火吸附跳变
  • 开火吸附生效瞬间的加速过大导致镜头跳变

无论是匀速变化或是加速变化,在吸附力度较大的情况下,触发开火吸附的一瞬间都有可能导致镜头转向速度过大

有一个解决思路是再增加一个过渡时间,过渡时间内的转向速度做平滑插值,例如单次开火吸附的生效时间是0.5s,那么最早的0.1s做一个插值加速过程,能够有效缓解开火瞬间拉扯的问题

  • 拉枪阶段的吸附速度变化

这个本身是跟预期中辅助瞄准带来的TTK变化相关,又回到了最初的问题,你希望辅助瞄准帮助玩家缩短多少实际TTK

匀速变化:不会出错的答案,能够规避速度曲线变化带来的种种问题,需要注意的是无论是使用角速度作为变量,还是使用时间来反算速度,都需要归一到时间上来衡量强度

先快后慢:期望的体验是玩家能够快速接近目标,然后降低吸附速度,玩家通过微调来做主动瞄准,存在一个问题是,玩家有可能在靠近目标周围持续开火描边,最终的命中无法保障

先慢后快(脑补的,没验证过):这是在思考APEXM案例的时候兄弟们引申出来的一个思路,优势在于避免两个问题:

A.无论APEXM当时做的是匀速亦或是先快后慢,玩家在大致瞄准目标的情况下秒人速度都太快了,需要拉长作战的实际TTK,其中一个思路是下调开火吸附的力度

B.从APEXM的人物机动性考量,一旦玩家前期开火没有命中目标(前期的开火吸附协助下没有锁住目标),敌方的高机动能力+武器的后坐力叠加,是很难再去命中敌人的,所以我自己早期的对战体验是要么把人秒了,要么根本打不中目标,需要一个持续开火无法命中时的补偿手段

对于高水平玩家而言,辅助瞄准低的情况下依然能够瞄准目标,不影响实际TTK

对于普通玩家而言,开火过程中逐渐提升吸附速度和吸附范围,能够有效缩短实际作战的TTK,也没有子弹保底那么暴力

对于整体战斗节奏而言,吸附变大的过程留出了高水平玩家和普通玩家之前的TTK差值,保留了一定的技巧成长空间,恶意使用这个机制的玩家也会因为弹量不足导致整体TTK拉长,影响有限

当然我这里说话都是放屁,这个手段没经过验证,可能问题更大,纯粹口嗨

  • 拉枪阶段的各距离的吸附速度差异

不同距离配置配置不同大小的吸附框和吸附速度是吸附类辅助瞄准的标配,但不同距离的框体做多大,吸附速度做多快,也是需要考量的点

假设吸附配置的速度为角速度,那么10M和20M的目标吸附到目标位置的时间都是50ms,但武器不同距离的TTK是有差异的,50ms的吸附时间在200ms和500ms的作战TTK场景下感受不一致,对于近距离目标,这个速度可能慢了,对于远距离目标这个速度可能又偏快了,一个精细化调整的路子是根据期望TTK的预期占比来反算时间,例如占比都是20%,再反算到具体的角速度上面去

虽然目前市面上的产品能做到不同距离的区分,也许就已经足够了,不太需要抠体验抠到毫秒级别

2.3.2 阻尼

阻尼示意

阻尼类辅瞄按图示从左到右也可以分成 判定框生效 → 胶囊体生效 → 逃逸 三个过程

阻尼的生效框体

常见参数层面包含:生效条件、生效区域,阻尼系数,阻尼变化曲线,逃逸阈值

拉枪阶段稍微值得聊一下的是生效区域:

A.各区间阻尼系数差异:一般来说会拆成判定框(黄色)和胶囊体(绿色)两个部分,碰撞盒的位置越靠近胶囊体,阻尼系数越大,进入胶囊体之后,阻尼系数保持一个恒定值(如果再以中轴线为阻尼最大值,一般来说会导致胶囊体打高伤害位置的时候滑屏不顺畅)

B.阻尼框体大小:生效的区域也需要谨慎考虑,如果生效的框体过大,那么在怪物数量密集的时候,玩家滑屏会持续的受到各个框体的阻尼系数的影响,直接表现为划不动屏幕

假设这些怪都有阻尼框

同时关于生效条件,有一个还没有验证过的想法

绝大多数场景下,阻尼的出发点都是为了避免高速滑屏时无法定位目标,那么换位思考,低速的状态下是否就不需要生效阻尼了,否则在小角度微调的过程中移动会有明显迟滞感,后续会看看这个好不好用

2.4 开火-跟枪阶段(开火吸附&阻尼&磁力)

2.4.1 开火吸附:

跟枪阶段对比拉枪阶段,平滑性差的表现会更隐晦

在拉枪阶段,由于有明确的镜头偏移过程,可以相对清楚的观察到每帧偏移的速度差异和异常抖动

而在跟枪阶段,玩家会主动有压枪行为,整体偏移幅度有限,叠加武器的后坐力和镜头动画,观察起来相对有难度

跟枪阶段导致拖拽,影响平滑的常见问题有以下几个:

  • 吸附点与玩家期望瞄准位置存在偏差

开火吸附一定会有一个最终的吸附目标点,如果点位和玩家和玩家期望的瞄准点位不一致(吸附点是质心,而玩家想打头),玩家在持续开火的过程中就会不断的与吸附做对抗,感受到镜头拖拽

多吸附点/骨骼吸附示意

一种解决方式是取多吸附点或者骨骼吸附,同时降低逃逸阈值,玩家在跟枪的过程中手动微调的过程就转变成了不断的逃逸吸附,再根据玩家微调后的位置寻找最近的吸附点开始吸附

还有一种方式更加考验玩家的微调能力,即人物碰撞盒内部不再生效开火吸附,镜头被快速拉到人物碰撞盒周围后吸附速度插值归零,碰撞盒内部只靠阻尼辅助玩家瞄准。对于TTK时间短的项目,可以尝试这一种方式,能够彻底杜绝开火吸附对于玩家主动瞄准的影响

  • 后坐力/受击上抬的等镜头偏移参数影响开火吸附逃逸计算

玩家压枪/跟枪阶段持续开火期间,武器的后坐力会不断叠加,同时也会收到受击上抬的影响(如果有),这部分上抬的数值会持续和开火吸附做对抗,正常的对抗吸附没问题

但需要注意的是,这部分对抗的数值不能纳入逃逸的计算

某些枪械在设计上可能出现一段后坐力区间累计度数较大,考验玩家控枪能力的场景,如果不做单独处理,会出现准心仍然在吸附框内,但是单位时间累计镜头偏移或是单帧镜头偏移过大,出现被动突破阈值,开火吸附失效的场景

2.4.2 磁力吸附:

磁力吸附示意

磁力吸附实现方式也是吸附类的辅助瞄准,相关参数和上文提到的开镜吸附类似

比较大的变化是在 生效条件各距离吸附速度

A.生效条件

首先我们明确:磁力吸附的意义在于补偿持续开火过程中怪物移动带来的角速度变化

那么这里的生效条件就需要增加辨别条件:怪物移动经过准心时生效,玩家主动滑屏经过怪物时不生效

否则单纯的以准心和怪物的相对位置做判定,就会收获一个镜头向右滑,辅助瞄准把你往左扯的鬼东西

B.各距离吸附速度

和开火/开镜吸附这类我们需要手动给到速度的吸附方式不同,既然是补偿怪物移动带来的角速度变化,那么吸附速度需要和怪物移动速度挂钩

简单来说,怪跑多快,磁力吸附补偿多快,但有上限

建议的实现方式是记录单位时间内怪物移动的距离,再反算到镜头的角速度上去,乘上设定好的系数,算出最终的补偿角速度,需要设置最大的角速度上限和最大生效时间控制住磁力吸附的强度

这里的强度如何评估,还是从预期的战斗体验出发,也可以归一到TTK上

对于PVE游戏,磁力吸附的力度取决于,我们期望一个移动的怪物,对比不能移动的怪物,能够多存活多久?

不同类型的怪物,是否都需要考验玩家控枪的能力,需要考验的怪物位移角速度需要高于磁力吸附的上限

对于PVP游戏,需要考虑的问题也是类似的,我们希望玩家移动起来时,牺牲自己的瞄准精准度获得多少ms的理论存活时间,或者说,我们希望玩家在对枪过程中,什么样的位移行为是有效的,举镜位移就能逃逸对手的磁力吸附,还是需要步行,甚至是需要奔跑或者滑铲才能逃逸

2.5转火-逃逸阶段(吸附&阻尼的逃逸处理)

比较流畅的开火吸附逃逸,缓慢加速不拔瓶塞

逃逸阶段和开始吸附的阶段一样,都涉及到玩家镜头主观移动和辅助镜头偏移的冲突处理,处理不好会有很明显的“拔瓶塞”的感觉,尤其是在灵敏度设计为速度加速的情况下,玩家一段时间拖不动就会主观加大力度/速度,而一旦跨过阈值,客户端拿到的速度又会偏大,叠加开火吸附的瞬间消失,转向角度会极大

2.5.1 阻尼类逃逸处理

阻尼类的逃逸设计相对比较简单,绝大多数情况下都会采用平滑阻尼的解决方案,也就是从判定框外侧到胶囊体,阻尼的速度是线性变化的,可以说阻尼在不设定阈值的情况下就有比较好的逃逸体验

2.5.2 吸附类逃逸处理

逃逸处理主要取决于上文提及了很多遍的阈值

阈值的作用是:当玩家处于拉枪或者跟枪状态下,避免一些噪点误操作导致吸附失效,只有当玩家单位时间单次或累计的滑屏距离超过设定好的阈值时,才视为玩家在对抗辅助瞄准,此时关闭掉吸附

逃逸阈值自己调下来,有两个关注点

A.阈值的计算:

取玩家单次的位移,还是某段时间内累计的位移

在阈值水平较低的时候,可以取单次的位移,这样的响应会更加灵敏,但如果阈值设置较大,建议取单位时间内的累计阈值,避免玩家持续微调的情况下,无法有效关闭吸附

简单理解 较高的阈值 + 单次位移距离判断阈值 = 极致的拔瓶塞体验

B.关闭吸附的方式

区别于超过阈值的瞬间直接关掉吸附,我比较倾向于将吸附逃逸的阈值,从单个阈值参数,变成阈值区间,在阈值区间内吸附逐渐减弱,到最大值后再关闭吸附

从单纯的1→0,调整为由1插值到0

三、一些辅助瞄准调试的小tips

3.1 搞一个完善的调试工具,事半功倍

辅助瞄准调试工具示例

这是目前我所在的项目使用的辅助瞄准调试工具,能够支持针对单个/多个辅助瞄准的混合调试,实时的碰撞盒、参数显示(速度、距离、剩余时间),实时的距离调整等等

巨TM好用,好用到我一度想去外面搞个手感中台,让客户端爸爸把这个工具卖到全国,感谢luchang

除了工具以外,调试的过程中还需要灵活调整武器的相关属性,必要时刻关闭后坐力、镜头动画等影响判断的东西,上面我为什么一直用nikke举例,除了确实手感和美术都做得好以外,他们的武器开火没有镜头上抬、准心也不在屏幕中心,能够更直观的看准心的变化

3.2 聚焦性价比高的内容,做能做的

同样是做差异化,不同的枪型开启的辅助瞄准类型是不一致的,同样枪型下面不同枪械的辅助瞄准也可以做到不一致,甚至可以将辅助瞄准开放为武器数值的一部分,包进整个商业化体系

同样是做局内强度平衡,可以精打细算算出每一次辅助瞄准缩短了多少毫秒的TTK,也可以参数拍脑袋填一版然后项目下线都没改过,成为项目不可动摇的magic number

有精力,就持续打磨

没精力,就凑合干活

永远解决优先级最高的事,别钻牛角尖

心里有数,相信自己

来源:知乎 www.zhihu.com

作者:Minke

【知乎日报】千万用户的选择,做朋友圈里的新鲜事分享大牛。
点击下载