让子弹再飞一会:游戏中关于碰撞体积的趣闻
内容速读:
“人被杀,就会死”;子弹射出,就要碰到目标,这是个直白的因果关系,在电子游戏里也适用。不过,这个世界上所有简单的因果都有复杂的时候。很久以前,我尝试某款射击游戏的私服时,面对半栋楼那么高的怪物打空了整个弹匣,却惊讶地发现子弹并没能阻止它朝我走来;当我扮演一只公文包那么小的怪物时,敌人却可以通过射击我头顶上的空气对我成伤害,那天以后,我才认识到电子游戏里有一个能够“超越因果关系”的东西——碰撞体积。
“人被杀,就会死”;子弹射出,就要碰到目标,这是个直白的因果关系,在电子游戏里也适用。不过,这个世界上所有简单的因果都有复杂的时候。很久以前,我尝试某款射击游戏的私服时,面对半栋楼那么高的怪物打空了整个弹匣,却惊讶地发现子弹并没能阻止它朝我走来;当我扮演一只公文包那么小的怪物时,敌人却可以通过射击我头顶上的空气对我成伤害,那天以后,我才认识到电子游戏里有一个能够“超越因果关系”的东西——碰撞体积(Hitbox)。
■ 从白色条状物到睾丸
什么是碰撞体积?它和电子游戏几乎同一时间诞生,几乎任何需要与物体互动的游戏都离不开它。在电子游戏起源之一的《乓》里,画面两侧的白色条状物就相当于完整的碰撞体积,当白色小球撞击到条状物上,它们会按照一个计算出来的物理效果,把小球弹回给对手。
随着电子游戏的发展,把碰撞体积展示在玩家面前已经不是开发者的最优选项。为了赋予玩家真实的感觉,角色模型拥有更加细致的贴图,头发变得可以随风飘扬,就连他们骑的马儿的睾丸也变得可以随气温降低而缩小。有一点不变的是,只要涉及到碰撞和伤害,那么藏在这些复杂精致贴图里的,就还会有一些形体简陋的碰撞体积。
就像是模型的骨架,或者是“灵魂”,碰撞体积负责记录伤害,或产生物理效果来影响其他模型。举个简单的例子,当你在游戏中被末日铁拳打了个正着,就是他拳头上的碰撞体积碰到了你角色头部的碰撞体积。于是,游戏计算出一个虚拟的物理效果,导致你的角色从地上飞起来,跌落地图外——然后你的泪腺会受到刺激,产生哭泣本能。
只有碰撞体积存在,模型才会出现,否则就是由空气撑起来的贴图。为了节省复杂计算产生的资源消耗,大多数游戏把碰撞体积打造成简易的方块状或是一些扭曲的球状物。于是,它们不会像骨架那样严实地契合在肉体的包裹中,也不会像塑料膜那样贴合地包裹在模型表面,而是像个淘气包,总“尝试着”跑出模型,给玩家惹出无限的乱子。
在开头我提到的那个尴尬情景里,其实就是碰撞体积在作祟。由于模型创作者忘记(或者是懒得)调整碰撞体积,巨大的怪物其实只是在人类的碰撞体积上套的一层皮。如果我那时朝着它的下三路瞄准,才会对它造成伤害,小到只有公文包大的怪物也是一样,如果把枪往上抬一抬,说不定就能打到它实际存在的头部。这倒不是说我不能攻击它的脚,而是说在大多数射击游戏中,碰撞体积和伤害体积同时存在,不同部位被击中造成的伤害并不一样,而一般情况下,子弹对四肢和胸口造成的伤害总是不如头部大。
说到头部,我似乎听到了一些游戏角色的笑声和哭泣。
■ 无头怪人和脑部手术
在人类约700万年的发展进程中,人类的脑袋仍旧是脆弱而易于受到伤害的关键部位,我们的祖先发明头盔、面罩,却还是不能完全保护住大脑,富有经验的射手会寻求击中头部确保目标死亡,大多数以人类为主要角色的射击游戏也都遵循了现实的规则,击中头部的碰撞体积可以造成最高伤害,这自然让关于头部碰撞体积的问题变得格外受关注——《彩虹六号:围攻》中发生过的怪事就是个好例子。
战术射击游戏《彩虹六号:围攻》里的击杀时间很快,还有“爆头就死”、对团队和个人能力要求较高的门槛,以及一个“恐怖游戏”的诨名。这不仅是因为育碧推出过造型超赞的万圣节皮肤,一些诡异的Bug、暗搓搓跟在身后的敌人、突然秒杀对手的强力玩家也同样可以打造短暂的惊吓。比起这些直白的惊吓,一些匪夷所思的细节更加让人“头皮发麻”。
游戏中负责攻坚的女性干员Ash身材相对苗条,相比部分干员包含头盔的建模,Ash通常只戴一顶帽子,显得头部相对小一些。不仅如此,在激烈的枪战中,Ash的移动速度(属于游戏中3个速度级别中最快的)也给予她更快转移位置,或通过身法躲避攻击的机会,不少玩家面对Ash时总是很难命中她的头部,久而久之,就把她叫做“无头怪”。
这当然只是玩家们不断玩梗的结果,实际上,Ash的头部拥有正常尺寸的碰撞模型,只是建模比其他干员的要小,让人看得不清楚,感觉不好命中罢了。
相比Ash的先天优势,游戏中一些戴着头盔的男性干员(这样分明应该更安全)则有着完全反过来的悲惨体验。就拿曾经经历过“脑部手术”的耶格来说,这位来自德国联邦警察第九边防大队(GSG 9)的探员佩戴了一个结合陆航头盔(符合他直升机技师的身份)镜片和AM-95盔外形的头盔,后者两侧都有为容纳耳机而突出的鼓包。因此,在游戏推出后的很长一段时间内,因为头盔体积较大、两侧鼓包也包含碰撞体积,耶格被玩家称作“耶大头”,打中耳机也算伤害的设定让玩家感叹,耶格的大脑已经长到耳机里面了……
实际上,不只是耶格一个人受到这种“不公平待遇”,游戏中的俄国狙击手Glaz佩戴的耳机也曾包含碰撞模型,甚至大多数角色的背包、战术腿挂包、腰包等建模都能被子弹打伤。在一款很多情况下连敌人正脸都看不清的快节奏射击游戏中,这些受伤害细节似乎并不重要,但它无疑割裂了玩家对一款游戏真实度上的期待。
衣服和装备应该算作身体的一部分吗?在现实世界中,子弹打中贴身设备后如果出现旋转和偏移,自然就有可能伤及目标,但没有任何一款游戏能做到花费资源模拟这种无关紧要的细节,玩家只需要知道一个答案——能或者不能。一段时间后,育碧给出了自己的答案。更新后的干员建模变得更加贴合身材,耶格完成了“脑部手术”,其他干员的帽兜、背包等位置的碰撞体积都被取消。
随着碰撞体积整体缩水,游戏的难度实际上也相对提升了。在快节奏射击的场景下,玩家必须抓住有效区域射击,对于《彩虹六号:围攻》来说,这不算是坏事,毕竟这款游戏对于战术和操控能力的需求较强,减少浑水摸鱼的射击机会是给常驻玩家的福利,不过对于其他类型的FPS游戏来说,缩小碰撞体积似乎就不那么重要了。
■ 不是“随缘箭”,是“磁力箭”
没有尝试过《守望先锋》的玩家会对名为半藏的英雄产生很大的疑问,为什么在一个连小女孩都可以拿着激光手枪大开杀戒的未来科幻世界里,会混着一位经常裸着半截身子、手持弓箭的家伙?尝试过《守望先锋》的玩家则会产生另一种疑问,为什么半藏的弓箭能击中我——在一个充满连发激光枪、大口径炮弹的世界里?
常用半藏的玩家可能会谦虚地说这叫“随缘箭”,打中和打空都靠佛祖保佑,但这并不完全对。在某些情况下,半藏射出的箭实际上是“磁力箭”,或者说是“半自动追踪箭”,当它擦过玩家的脸庞时,会受到“不可抗拒力”的吸引,直接粘到玩家脸上,造成这种现象的罪魁祸首依旧是碰撞体积。
几乎每一位《守望先锋》中的英雄都拥有超过自己建模的碰撞体积。游戏推出没多久时,这种现象就受到了一定程度的关注,玩家们发现自己可以通过射击角色的两腿中间和脑袋上方造成伤害。即便半藏没能瞄准目标,而是瞄着目标不远处的空气,射出去的箭也会扎在目标身上——碰撞体积感应到攻击,建模就展现出受到进攻的样子,简单的道理。
不只是打出去的子弹,类似于角色路霸的特殊技能抓钩本身也包含碰撞体积,会对自己接触的目标做出响应,这让路霸在抓取玩家时甚至不用刻意瞄太准,抓钩投到对手脑袋上方,或是敌人躲藏的那面墙上,通过穿模照样可以把敌人抓过来。
虽然不少玩家发现了这一现象,但除了路霸的抓钩后续得到修复,暴雪并没有对碰撞体积进行贴身裁剪,英雄到底有多“肥”成了玩家之间极度想要弄清楚的秘密。
随着去年创意工坊的推出,有位外国玩家借助专门用来测试碰撞体积的地图,对《守望先锋》中不同英雄的碰撞体积做出了具体记录。这是个痛苦的过程,需要测试者不断朝目标射击,需要按照“击中”和“未击中”的提示来反复试验。这次试验结束后,玩家们算是搞清楚不同英雄角色的碰撞体积究竟有多大了。
这份记录以安娜为基础数值(100%),分为红色区域(头部)和绿色区域(其他躯体部分),记录了不同英雄相比安娜来说是“肥还是瘦”。结果显示,游戏中建模比较苗条的部位都有比看上去更大的碰撞体积,比如禅雅塔的脑袋、黑百合的腿……
为什么不修复碰撞体积,让角色变得和《彩虹六号:围攻》那样贴合呢?想知道这个问题,也许得先看一下两款FPS游戏的不同设计思路。《彩虹六号:围攻》注重战术、反应速度,每一发子弹都能改变局势;《守望先锋》更注重团队合作,战斗节奏和击杀时间也没有前者那么快,部分英雄的技能和机制拥有先天优势,不需要枪法多么厉害也可以拥有出色的成绩。
体积较大的角色建模无疑帮助玩家拉低了枪法上的门槛,保证人人都能击中目标,身材娇小的目标面对身材巨大的目标时,也不至于太吃亏(个头大的往往血量也厚),像黑百合这种拥有纤细身材的英雄,离远了连看清楚都费劲,如果不把碰撞体积调整大一些,被击中都很难。
■ 只要移动足够快,建模就追不上我
不管建模是大是小,在枪法超群的玩家面前,大家都是“活靶子”,即便如此,就算是职业玩家也要在碰撞体积面前折服,因为建模被瞄准,碰撞体积也可以借助网络延迟上演一出金蝉脱壳,帮玩家躲开子弹。
尽管听上去很“玄学”,但这一原理还是可以用简单方式的来解释。在单机游戏中,玩家打出一枪后子弹会径直朝着目标飞去,开始结算命中后的效果,并立即反馈给玩家,从某种意义上达成“指哪打哪”。到了多人模式,为了防止玩家修改本地数据,影响计算结果来作弊,大部分游戏中从行走、射击到命中的过程都要先上传到服务器进行计算,再把计算数据分发给每个玩家的客户端进行响应。
也就是说,在多人模式中,子弹要先从枪口飞出去,然后“钻进”服务器里计算,再飞到目标身上,最后把结果反馈到客户端。这枚子弹在服务器往返的速度,就是我们所熟悉的延迟(ping)。不过,在这些游戏中,行走、命中的数据是独立处理的,目标的行走指令可能先于子弹得到服务器计算后的反馈。当服务器中某位玩家延迟过高时,就会出现一些子弹明明打出去,对面却借助延迟躲过子弹的情形。如果延迟更加严重的话,在开枪玩家的视野中,目标仍旧处在易于击中的位置,却无法被命中,玩家只能发出“我的子弹飞到哪里去了”的疑问。
有趣的是,被延迟影响的有时不只是子弹“飞行”的速度,还有玩家的碰撞体积。就拿《反恐精英:全球行动》来说,有玩家在测试模式里调试出了碰撞体积,却地发现它和建模并不同步。没错,即便肉眼看到建模在某个位置,却不代表玩家可以击中它,因为建模所在的位置可能只是玩家客户端记录的数据,尤其是在移动的情况下,子弹“飞到”目标身上时,目标从服务器上传输来的碰撞体积很可能并不在那里。
这似乎解释了很多失误背后的真正原因,当你在游戏中看到到手的目标毫无损伤地反杀自己时,影响这一结果的很可能就是在网络延迟下“灵魂出窍”的碰撞体积。
《反恐精英:全球行动》对于枪法要求非常高,对于职业玩家或者说……任何一个看重比赛结果的玩家来说,碰到这种“灵魂出窍”导致空枪的情况都非常要命。幸好这类情况虽然偶尔发生,但并没能严重影响到游戏进行,一些错失机会的片段倒是在视频播主手中变成了搞笑集锦,给玩家们提供了不少乐趣。
■ 关于碰撞体积的趣事还有很多
格斗游戏是碰撞体积问题的“高发区”,比如《任天堂明星大乱斗》中的斯内克,就因为拥有一个个头远超过建模的碰撞体积而变得“臭名昭著”;在MOBA类游戏中,碰撞体积的大小也有着类似的影响,如果你熟悉《英雄联盟》,也许就会记得拉克丝的大招曾经受皮肤影响变得比动画范围还大,是的,大招打出去那条光柱,也有着自己的碰撞体积。
不同类型的游戏对于碰撞体积的设置也有自己的风格。比如说,今年大火的《Apex英雄》就因为把探路者的碰撞体积设计得过大,引来了玩家要求修改的呼声。按理说,一款射击游戏应该强调公平——也就是像“反恐精英”系列那样,把角色的碰撞体积设置成完全一样大小,但《Apex英雄》明显走了另一种风格,游戏中不同角色有不同技能和自己对应的位置,给角色设置不同大小的碰撞体积也可以算是一种平衡。
在流行的足球游戏“FIFA”系列中,每个现实存在的球员也是拥有碰撞体积的,而且碰撞体积同样具有很强的实战意义——小个子球员更灵活,进攻中更容易突破狭窄的防守空间;大个子进攻时往往吃亏,但防守面积大,利于拦截。
由于要模拟高矮胖瘦完全不同的数万名球员,“FIFA”的制作者们难以亲历亲为,给每个球员都赋予合适的模型。一般来说,制作者会给那些世界知名的球员做出符合现实情况的“模型”,再把这些模型套用到身高、体重类似的球员身上。
这样做的结果是,知名球员大多跟现实里一样好用,只要知道他们本人的数据,就能大致判断模型是什么样子,而次一级的五大联赛球员,乃至不知名球员的模型就会出现偏差,往往你看起来操纵的是个大个子,他的实际防守面积其实并没有那么大。所以,许多玩家在游戏里碰到自己不熟悉的球员时,往往要查查他的模型如何,才能对球员的手感做出更准确的判断。
在一些游戏中,碰撞模型是个可以忽略的东西。比如《坦克世界》《战争雷霆》这两款以坦克作战为核心的游戏,在整个车身上都放置了可以映射不同伤害的碰撞模型,却唯独放弃了炮管部位。这样做的理由很简单,假如战斗在狭窄环境展开,径直伸出去的炮管就成了累赘。
不像现代战争中坦克需要合作战斗,每次转移位置、突袭,甚至是开火都要磨蹭半天,坦克游戏需要进行一些类似于TPS类游戏的位置移动,这期间每个动作都不容耽搁。如果炮管碰到别的坦克会撞坏、碰到建筑还有可能带动整个载具的物理效果,玩家的感觉自然不好受,所以这两款游戏在短暂尝试后,都没有保留炮管的碰撞模型。
时至今日,碰撞体积要怎么做仍旧没有一个严格的规范,把它做大、做小,是贴合还是泛滥,都要看开发商的思路和游戏题材再确定。大多数玩家并不会太在乎碰撞体积带来的影响,因为从枪法、反应速度、帧率和网速等等方面,有太多方式可以解释自己为什么在游戏中错失机会。
较真的玩家们在游戏社区里仔细写下自己的猜测和建议,并且利用各种方式反复测试碰撞体积对游戏的影响。几乎每款热门游戏都有这样那样关于碰撞体积的争论和传说,有时候开发商也不得不因玩家们的呼声而作出改变。
在技术发展到可以让建模贴图和碰撞体积100%贴合之前,似乎不会有真正“完美”的碰撞体积出现,但至少,发现这团看不见、摸得到的“神秘物质”本身还是充满乐趣的,而且在队友愤怒地询问你为什么没能击中目标时,你可以给出一个足够靠谱的答案。
“‘垃圾游戏’,我这一枪不算在碰撞体积上!”