讓子彈再飛一會(huì):游戲中關(guān)于碰撞體積的趣聞

耳機(jī)應(yīng)該算作腦袋的一部分嗎?
編輯丨牛旭
“人被殺,就會(huì)死”;子彈射出,就要碰到目標(biāo),這是個(gè)直白的因果關(guān)系,在電子游戲里也適用。不過(guò),這個(gè)世界上所有簡(jiǎn)單的因果都有復(fù)雜的時(shí)候。很久以前,我嘗試某款射擊游戲的私服時(shí),面對(duì)半棟樓那么高的怪物打空了整個(gè)彈匣,卻驚訝地發(fā)現(xiàn)子彈并沒(méi)能阻止它朝我走來(lái);當(dāng)我扮演一只公文包那么小的怪物時(shí),敵人卻可以通過(guò)射擊我頭頂上的空氣對(duì)我造成傷害,那天以后,我才認(rèn)識(shí)到電子游戲里有一個(gè)能夠“超越因果關(guān)系”的東西——碰撞體積(Hitbox)。
丨 從白色條狀物到**
什么是碰撞體積?它和電子游戲幾乎同一時(shí)間誕生,幾乎任何需要與物體互動(dòng)的游戲都離不開(kāi)它。在電子游戲起源之一的《乓》里,畫(huà)面兩側(cè)的白色條狀物就相當(dāng)于完整的碰撞體積,當(dāng)白色小球撞擊到條狀物上,它們會(huì)按照一個(gè)計(jì)算出來(lái)的物理效果,把小球彈回給對(duì)手。

隨著電子游戲的發(fā)展,把碰撞體積展示在玩家面前已經(jīng)不是開(kāi)發(fā)者的最優(yōu)選項(xiàng)。為了賦予玩家真實(shí)的感覺(jué),角色模型擁有更加細(xì)致的貼圖,頭發(fā)變得可以隨風(fēng)飄揚(yáng),就連他們騎的馬兒的**也變得可以隨氣溫降低而縮小。有一點(diǎn)不變的是,只要涉及到碰撞和傷害,那么藏在這些復(fù)雜精致貼圖里的,就還會(huì)有一些形體簡(jiǎn)陋的碰撞體積。
就像是模型的骨架,或者是“靈魂”,碰撞體積負(fù)責(zé)記錄傷害,或產(chǎn)生物理效果來(lái)影響其他模型。舉個(gè)簡(jiǎn)單的例子,當(dāng)你在游戲中被末日鐵拳打了個(gè)正著,就是他拳頭上的碰撞體積碰到了你角色頭部的碰撞體積。于是,游戲計(jì)算出一個(gè)虛擬的物理效果,導(dǎo)致你的角色從地上飛起來(lái),跌落地圖外——然后你的淚腺會(huì)受到刺激,產(chǎn)生哭泣本能。
只有碰撞體積存在,模型才會(huì)出現(xiàn),否則就是由空氣撐起來(lái)的貼圖。為了節(jié)省復(fù)雜計(jì)算產(chǎn)生的資源消耗,大多數(shù)游戲把碰撞體積打造成簡(jiǎn)易的方塊狀或是一些扭曲的球狀物。于是,它們不會(huì)像骨架那樣嚴(yán)實(shí)地契合在肉體的包裹中,也不會(huì)像塑料膜那樣貼合地包裹在模型表面,而是像個(gè)淘氣包,總“嘗試著”跑出模型,給玩家惹出無(wú)限的亂子。

在開(kāi)頭我提到的那個(gè)尷尬情景里,其實(shí)就是碰撞體積在作祟。由于模型創(chuàng)作者忘記(或者是懶得)調(diào)整碰撞體積,巨大的怪物其實(shí)只是在人類的碰撞體積上套的一層皮。如果我那時(shí)朝著它的下三路瞄準(zhǔn),才會(huì)對(duì)它造成傷害,小到只有公文包大的怪物也是一樣,如果把槍往上抬一抬,說(shuō)不定就能打到它實(shí)際存在的頭部。這倒不是說(shuō)我不能攻擊它的腳,而是說(shuō)在大多數(shù)射擊游戲中,碰撞體積和傷害體積同時(shí)存在,不同部位被擊中造成的傷害并不一樣,而一般情況下,子彈對(duì)四肢和胸口造成的傷害總是不如頭部大。

說(shuō)到頭部,我似乎聽(tīng)到了一些游戲角色的笑聲和哭泣。
丨 無(wú)頭怪人和腦部手術(shù)
在人類約700萬(wàn)年的發(fā)展進(jìn)程中,人類的腦袋仍舊是脆弱而易于受到傷害的關(guān)鍵部位,我們的祖先發(fā)明頭盔、面罩,卻還是不能完全保護(hù)住大腦,富有經(jīng)驗(yàn)的射手會(huì)尋求擊中頭部確保目標(biāo)死亡,大多數(shù)以人類為主要角色的射擊游戲也都遵循了現(xiàn)實(shí)的規(guī)則,擊中頭部的碰撞體積可以造成最高傷害,這自然讓關(guān)于頭部碰撞體積的問(wèn)題變得格外受關(guān)注——《彩虹六號(hào):圍攻》中發(fā)生過(guò)的怪事就是個(gè)好例子。
戰(zhàn)術(shù)射擊游戲《彩虹六號(hào):圍攻》里的擊殺時(shí)間很快,還有“爆頭就死”、對(duì)團(tuán)隊(duì)和個(gè)人能力要求較高的門(mén)檻,以及一個(gè)“恐怖游戲”的諢名。這不僅是因?yàn)橛掏瞥鲞^(guò)造型超贊的萬(wàn)圣節(jié)皮膚,一些詭異的Bug、暗搓搓跟在身后的敵人、突然秒殺對(duì)手的強(qiáng)力玩家也同樣可以打造短暫的驚嚇。比起這些直白的驚嚇,一些匪夷所思的細(xì)節(jié)更加讓人“頭皮發(fā)麻”。

游戲中負(fù)責(zé)攻堅(jiān)的女性干員Ash身材相對(duì)苗條,相比部分干員包含頭盔的建模,Ash通常只戴一頂帽子,顯得頭部相對(duì)小一些。不僅如此,在激烈的槍?xiě)?zhàn)中,Ash的移動(dòng)速度(屬于游戲中3個(gè)速度級(jí)別中最快的)也給予她更快轉(zhuǎn)移位置,或通過(guò)身法躲避攻擊的機(jī)會(huì),不少玩家面對(duì)Ash時(shí)總是很難命中她的頭部,久而久之,就把她叫做“無(wú)頭怪”。
這當(dāng)然只是玩家們不斷玩梗的結(jié)果,實(shí)際上,Ash的頭部擁有正常尺寸的碰撞模型,只是建模比其他干員的要小,讓人看得不清楚,感覺(jué)不好命中罷了。


相比Ash的先天優(yōu)勢(shì),游戲中一些戴著頭盔的男性干員(這樣分明應(yīng)該更安全)則有著完全反過(guò)來(lái)的悲慘體驗(yàn)。就拿曾經(jīng)經(jīng)歷過(guò)“腦部手術(shù)”的耶格來(lái)說(shuō),這位來(lái)自德國(guó)聯(lián)邦警察第九邊防大隊(duì)(GSG 9)的探員佩戴了一個(gè)結(jié)合陸航頭盔(符合他直升機(jī)技師的身份)鏡片和AM-95盔外形的頭盔,后者兩側(cè)都有為容納耳機(jī)而突出的鼓包。因此,在游戲推出后的很長(zhǎng)一段時(shí)間內(nèi),因?yàn)轭^盔體積較大、兩側(cè)鼓包也包含碰撞體積,耶格被玩家稱作“耶大頭”,打中耳機(jī)也算傷害的設(shè)定讓玩家感嘆,耶格的大腦已經(jīng)長(zhǎng)到耳機(jī)里面了……
實(shí)際上,不只是耶格一個(gè)人受到這種“不公平待遇”,游戲中的俄國(guó)狙擊手Glaz佩戴的耳機(jī)也曾包含碰撞模型,甚至大多數(shù)角色的背包、戰(zhàn)術(shù)腿掛包、腰包等建模都能被子彈打傷。在一款很多情況下連敵人正臉都看不清的快節(jié)奏射擊游戲中,這些受傷害細(xì)節(jié)似乎并不重要,但它無(wú)疑割裂了玩家對(duì)一款游戲真實(shí)度上的期待。

衣服和裝備應(yīng)該算作身體的一部分嗎?在現(xiàn)實(shí)世界中,子彈打中貼身設(shè)備后如果出現(xiàn)旋轉(zhuǎn)和偏移,自然就有可能傷及目標(biāo),但沒(méi)有任何一款游戲能做到花費(fèi)資源模擬這種無(wú)關(guān)緊要的細(xì)節(jié),玩家只需要知道一個(gè)答案——能或者不能。一段時(shí)間后,育碧給出了自己的答案。更新后的干員建模變得更加貼合身材,耶格完成了“腦部手術(shù)”,其他干員的帽兜、背包等位置的碰撞體積都被取消。

隨著碰撞體積整體縮水,游戲的難度實(shí)際上也相對(duì)提升了。在快節(jié)奏射擊的場(chǎng)景下,玩家必須抓住有效區(qū)域射擊,對(duì)于《彩虹六號(hào):圍攻》來(lái)說(shuō),這不算是壞事,畢竟這款游戲?qū)τ趹?zhàn)術(shù)和操控能力的需求較強(qiáng),減少渾水摸魚(yú)的射擊機(jī)會(huì)是給常駐玩家的福利,不過(guò)對(duì)于其他類型的FPS游戲來(lái)說(shuō),縮小碰撞體積似乎就不那么重要了。
丨 不是“隨緣箭”,是“磁力箭”
沒(méi)有嘗試過(guò)《守望先鋒》的玩家會(huì)對(duì)名為半藏的英雄產(chǎn)生很大的疑問(wèn),為什么在一個(gè)連小女孩都可以拿著激光手槍大開(kāi)殺戒的未來(lái)科幻世界里,會(huì)混著一位經(jīng)常裸著半截身子、手持弓箭的家伙?嘗試過(guò)《守望先鋒》的玩家則會(huì)產(chǎn)生另一種疑問(wèn),為什么半藏的弓箭能擊中我——在一個(gè)充滿連發(fā)激光槍、大口徑炮彈的世界里?
常用半藏的玩家可能會(huì)謙虛地說(shuō)這叫“隨緣箭”,打中和打空都靠佛祖保佑,但這并不完全對(duì)。在某些情況下,半藏射出的箭實(shí)際上是“磁力箭”,或者說(shuō)是“半自動(dòng)追蹤箭”,當(dāng)它擦過(guò)玩家的臉龐時(shí),會(huì)受到“不可抗拒力”的吸引,直接粘到玩家臉上,造成這種現(xiàn)象的罪魁禍?zhǔn)滓琅f是碰撞體積。

幾乎每一位《守望先鋒》中的英雄都擁有超過(guò)自己建模的碰撞體積。游戲推出沒(méi)多久時(shí),這種現(xiàn)象就受到了一定程度的關(guān)注,玩家們發(fā)現(xiàn)自己可以通過(guò)射擊角色的兩腿中間和腦袋上方造成傷害。即便半藏沒(méi)能瞄準(zhǔn)目標(biāo),而是瞄著目標(biāo)不遠(yuǎn)處的空氣,射出去的箭也會(huì)扎在目標(biāo)身上——碰撞體積感應(yīng)到攻擊,建模就展現(xiàn)出受到進(jìn)攻的樣子,簡(jiǎn)單的道理。
不只是打出去的子彈,類似于角色路霸的特殊技能抓鉤本身也包含碰撞體積,會(huì)對(duì)自己接觸的目標(biāo)做出響應(yīng),這讓路霸在抓取玩家時(shí)甚至不用刻意瞄太準(zhǔn),抓鉤投到對(duì)手腦袋上方,或是敵人躲藏的那面墻上,通過(guò)穿模照樣可以把敵人抓過(guò)來(lái)。

雖然不少玩家發(fā)現(xiàn)了這一現(xiàn)象,但除了路霸的抓鉤后續(xù)得到修復(fù),暴雪并沒(méi)有對(duì)碰撞體積進(jìn)行貼身裁剪,英雄到底有多“肥”成了玩家之間極度想要弄清楚的秘密。
隨著去年創(chuàng)意工坊的推出,有位外國(guó)玩家借助專門(mén)用來(lái)測(cè)試碰撞體積的地圖,對(duì)《守望先鋒》中不同英雄的碰撞體積做出了具體記錄。這是個(gè)痛苦的過(guò)程,需要測(cè)試者不斷朝目標(biāo)射擊,需要按照“擊中”和“未擊中”的提示來(lái)反復(fù)試驗(yàn)。這次試驗(yàn)結(jié)束后,玩家們算是搞清楚不同英雄角色的碰撞體積究竟有多大了。
這份記錄以安娜為基礎(chǔ)數(shù)值(100%),分為紅色區(qū)域(頭部)和綠色區(qū)域(其他軀體部分),記錄了不同英雄相比安娜來(lái)說(shuō)是“肥還是瘦”。結(jié)果顯示,游戲中建模比較苗條的部位都有比看上去更大的碰撞體積,比如禪雅塔的腦袋、黑百合的腿……

為什么不修復(fù)碰撞體積,讓角色變得和《彩虹六號(hào):圍攻》那樣貼合呢?想知道這個(gè)問(wèn)題,也許得先看一下兩款FPS游戲的不同設(shè)計(jì)思路?!恫屎缌?hào):圍攻》注重戰(zhàn)術(shù)、反應(yīng)速度,每一發(fā)子彈都能改變局勢(shì);《守望先鋒》更注重團(tuán)隊(duì)合作,戰(zhàn)斗節(jié)奏和擊殺時(shí)間也沒(méi)有前者那么快,部分英雄的技能和機(jī)制擁有先天優(yōu)勢(shì),不需要槍法多么厲害也可以擁有出色的成績(jī)。
體積較大的角色建模無(wú)疑幫助玩家拉低了槍法上的門(mén)檻,保證人人都能擊中目標(biāo),身材嬌小的目標(biāo)面對(duì)身材巨大的目標(biāo)時(shí),也不至于太吃虧(個(gè)頭大的往往血量也厚),像黑百合這種擁有纖細(xì)身材的英雄,離遠(yuǎn)了連看清楚都費(fèi)勁,如果不把碰撞體積調(diào)整大一些,被擊中都很難。

丨 只要移動(dòng)足夠快,建模就追不上我
不管建模是大是小,在槍法超群的玩家面前,大家都是“活靶子”,即便如此,就算是職業(yè)玩家也要在碰撞體積面前折服,因?yàn)榻1幻闇?zhǔn),碰撞體積也可以借助網(wǎng)絡(luò)延遲上演一出金蟬脫殼,幫玩家躲開(kāi)子彈。
盡管聽(tīng)上去很“玄學(xué)”,但這一原理還是可以用簡(jiǎn)單方式的來(lái)解釋。在單機(jī)游戲中,玩家打出一槍后子彈會(huì)徑直朝著目標(biāo)飛去,開(kāi)始結(jié)算命中后的效果,并立即反饋給玩家,從某種意義上達(dá)成“指哪打哪”。到了多人模式,為了防止玩家修改本地?cái)?shù)據(jù),影響計(jì)算結(jié)果來(lái)作弊,大部分游戲中從行走、射擊到命中的過(guò)程都要先上傳到服務(wù)器進(jìn)行計(jì)算,再把計(jì)算數(shù)據(jù)分發(fā)給每個(gè)玩家的客戶端進(jìn)行響應(yīng)。

也就是說(shuō),在多人模式中,子彈要先從槍口飛出去,然后“鉆進(jìn)”服務(wù)器里計(jì)算,再飛到目標(biāo)身上,最后把結(jié)果反饋到客戶端。這枚子彈在服務(wù)器往返的速度,就是我們所熟悉的延遲(ping)。不過(guò),在這些游戲中,行走、命中的數(shù)據(jù)是獨(dú)立處理的,目標(biāo)的行走指令可能先于子彈得到服務(wù)器計(jì)算后的反饋。當(dāng)服務(wù)器中某位玩家延遲過(guò)高時(shí),就會(huì)出現(xiàn)一些子彈明明打出去,對(duì)面卻借助延遲躲過(guò)子彈的情形。如果延遲更加嚴(yán)重的話,在開(kāi)槍玩家的視野中,目標(biāo)仍舊處在易于擊中的位置,卻無(wú)法被命中,玩家只能發(fā)出“我的子彈飛到哪里去了”的疑問(wèn)。
有趣的是,被延遲影響的有時(shí)不只是子彈“飛行”的速度,還有玩家的碰撞體積。就拿《反恐精英:全球行動(dòng)》來(lái)說(shuō),有玩家在測(cè)試模式里調(diào)試出了碰撞體積,卻地發(fā)現(xiàn)它和建模并不同步。沒(méi)錯(cuò),即便肉眼看到建模在某個(gè)位置,卻不代表玩家可以擊中它,因?yàn)榻K诘奈恢每赡苤皇峭婕铱蛻舳擞涗浀臄?shù)據(jù),尤其是在移動(dòng)的情況下,子彈“飛到”目標(biāo)身上時(shí),目標(biāo)從服務(wù)器上傳輸來(lái)的碰撞體積很可能并不在那里。

這似乎解釋了很多失誤背后的真正原因,當(dāng)你在游戲中看到到手的目標(biāo)毫無(wú)損傷地反殺自己時(shí),影響這一結(jié)果的很可能就是在網(wǎng)絡(luò)延遲下“靈魂出竅”的碰撞體積。
《反恐精英:全球行動(dòng)》對(duì)于槍法要求非常高,對(duì)于職業(yè)玩家或者說(shuō)……任何一個(gè)看重比賽結(jié)果的玩家來(lái)說(shuō),碰到這種“靈魂出竅”導(dǎo)致空槍的情況都非常要命。幸好這類情況雖然偶爾發(fā)生,但并沒(méi)能嚴(yán)重影響到游戲進(jìn)行,一些錯(cuò)失機(jī)會(huì)的片段倒是在視頻播主手中變成了搞笑集錦,給玩家們提供了不少樂(lè)趣。

丨 關(guān)于碰撞體積的趣事還有很多
格斗游戲是碰撞體積問(wèn)題的“高發(fā)區(qū)”,比如《任天堂明星大亂斗》中的斯內(nèi)克,就因?yàn)閾碛幸粋€(gè)個(gè)頭遠(yuǎn)超過(guò)建模的碰撞體積而變得“臭名昭著”;在MOBA類游戲中,碰撞體積的大小也有著類似的影響,如果你熟悉《英雄聯(lián)盟》,也許就會(huì)記得拉克絲的大招曾經(jīng)受皮膚影響變得比動(dòng)畫(huà)范圍還大,是的,大招打出去那條光柱,也有著自己的碰撞體積。

不同類型的游戲?qū)τ谂鲎搀w積的設(shè)置也有自己的風(fēng)格。比如說(shuō),今年大火的《Apex英雄》就因?yàn)榘烟铰氛叩呐鲎搀w積設(shè)計(jì)得過(guò)大,引來(lái)了玩家要求修改的呼聲。按理說(shuō),一款射擊游戲應(yīng)該強(qiáng)調(diào)公平——也就是像“反恐精英”系列那樣,把角色的碰撞體積設(shè)置成完全一樣大小,但《Apex英雄》明顯走了另一種風(fēng)格,游戲中不同角色有不同技能和自己對(duì)應(yīng)的位置,給角色設(shè)置不同大小的碰撞體積也可以算是一種平衡。

在流行的足球游戲“FIFA”系列中,每個(gè)現(xiàn)實(shí)存在的球員也是擁有碰撞體積的,而且碰撞體積同樣具有很強(qiáng)的實(shí)戰(zhàn)意義——小個(gè)子球員更靈活,進(jìn)攻中更容易突破狹窄的防守空間;大個(gè)子進(jìn)攻時(shí)往往吃虧,但防守面積大,利于攔截。
由于要模擬高矮胖瘦完全不同的數(shù)萬(wàn)名球員,“FIFA”的制作者們難以親歷親為,給每個(gè)球員都賦予合適的模型。一般來(lái)說(shuō),制作者會(huì)給那些世界知名的球員做出符合現(xiàn)實(shí)情況的“模型”,再把這些模型套用到身高、體重類似的球員身上。
這樣做的結(jié)果是,知名球員大多跟現(xiàn)實(shí)里一樣好用,只要知道他們本人的數(shù)據(jù),就能大致判斷模型是什么樣子,而次一級(jí)的五大聯(lián)賽球員,乃至不知名球員的模型就會(huì)出現(xiàn)偏差,往往你看起來(lái)操縱的是個(gè)大個(gè)子,他的實(shí)際防守面積其實(shí)并沒(méi)有那么大。所以,許多玩家在游戲里碰到自己不熟悉的球員時(shí),往往要查查他的模型如何,才能對(duì)球員的手感做出更準(zhǔn)確的判斷。

在一些游戲中,碰撞模型是個(gè)可以忽略的東西。比如《坦克世界》《戰(zhàn)爭(zhēng)雷霆》這兩款以坦克作戰(zhàn)為核心的游戲,在整個(gè)車身上都放置了可以映射不同傷害的碰撞模型,卻唯獨(dú)放棄了炮管部位。這樣做的理由很簡(jiǎn)單,假如戰(zhàn)斗在狹窄環(huán)境展開(kāi),徑直伸出去的炮管就成了累贅。
不像現(xiàn)代戰(zhàn)爭(zhēng)中坦克需要合作戰(zhàn)斗,每次轉(zhuǎn)移位置、突襲,甚至是開(kāi)火都要磨蹭半天,坦克游戲需要進(jìn)行一些類似于TPS類游戲的位置移動(dòng),這期間每個(gè)動(dòng)作都不容耽擱。如果炮管碰到別的坦克會(huì)撞壞、碰到建筑還有可能帶動(dòng)整個(gè)載具的物理效果,玩家的感覺(jué)自然不好受,所以這兩款游戲在短暫嘗試后,都沒(méi)有保留炮管的碰撞模型。

時(shí)至今日,碰撞體積要怎么做仍舊沒(méi)有一個(gè)嚴(yán)格的規(guī)范,把它做大、做小,是貼合還是泛濫,都要看開(kāi)發(fā)商的思路和游戲題材再確定。大多數(shù)玩家并不會(huì)太在乎碰撞體積帶來(lái)的影響,因?yàn)閺臉尫ā⒎磻?yīng)速度、幀率和網(wǎng)速等等方面,有太多方式可以解釋自己為什么在游戲中錯(cuò)失機(jī)會(huì)。
較真的玩家們?cè)谟螒蛏鐓^(qū)里仔細(xì)寫(xiě)下自己的猜測(cè)和建議,并且利用各種方式反復(fù)測(cè)試碰撞體積對(duì)游戲的影響。幾乎每款熱門(mén)游戲都有這樣那樣關(guān)于碰撞體積的爭(zhēng)論和傳說(shuō),有時(shí)候開(kāi)發(fā)商也不得不因玩家們的呼聲而作出改變。
在技術(shù)發(fā)展到可以讓建模貼圖和碰撞體積100%貼合之前,似乎不會(huì)有真正“完美”的碰撞體積出現(xiàn),但至少,發(fā)現(xiàn)這團(tuán)看不見(jiàn)、摸得到的“神秘物質(zhì)”本身還是充滿樂(lè)趣的,而且在隊(duì)友憤怒地詢問(wèn)你為什么沒(méi)能擊中目標(biāo)時(shí),你可以給出一個(gè)足夠靠譜的答案。
“‘垃圾游戲’,我這一槍不算在碰撞體積上!”

歡迎在B站或微信(chuappgame)關(guān)注觸樂(lè),閱讀更多高質(zhì)量、有趣的游戲文章。