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

耳機應(yīng)該算作腦袋的一部分嗎?

編輯牛旭2019年11月14日 14時52分

“人被殺,就會死”;子彈射出,就要碰到目標(biāo),這是個直白的因果關(guān)系,在電子游戲里也適用。不過,這個世界上所有簡單的因果都有復(fù)雜的時候。很久以前,我嘗試某款射擊游戲的私服時,面對半棟樓那么高的怪物打空了整個彈匣,卻驚訝地發(fā)現(xiàn)子彈并沒能阻止它朝我走來;當(dāng)我扮演一只公文包那么小的怪物時,敵人卻可以通過射擊我頭頂上的空氣對我造成傷害,那天以后,我才認(rèn)識到電子游戲里有一個能夠“超越因果關(guān)系”的東西——碰撞體積(Hitbox)。

從白色條狀物到睪丸

什么是碰撞體積?它和電子游戲幾乎同一時間誕生,幾乎任何需要與物體互動的游戲都離不開它。在電子游戲起源之一的《乓》里,畫面兩側(cè)的白色條狀物就相當(dāng)于完整的碰撞體積,當(dāng)白色小球撞擊到條狀物上,它們會按照一個計算出來的物理效果,把小球彈回給對手。

《乓》,最上面的0和1是分?jǐn)?shù)

隨著電子游戲的發(fā)展,把碰撞體積展示在玩家面前已經(jīng)不是開發(fā)者的最優(yōu)選項。為了賦予玩家真實的感覺,角色模型擁有更加細(xì)致的貼圖,頭發(fā)變得可以隨風(fēng)飄揚,就連他們騎的馬兒的睪丸也變得可以隨氣溫降低而縮小。有一點不變的是,只要涉及到碰撞和傷害,那么藏在這些復(fù)雜精致貼圖里的,就還會有一些形體簡陋的碰撞體積。

就像是模型的骨架,或者是“靈魂”,碰撞體積負(fù)責(zé)記錄傷害,或產(chǎn)生物理效果來影響其他模型。舉個簡單的例子,當(dāng)你在游戲中被末日鐵拳打了個正著,就是他拳頭上的碰撞體積碰到了你角色頭部的碰撞體積。于是,游戲計算出一個虛擬的物理效果,導(dǎo)致你的角色從地上飛起來,跌落地圖外——然后你的淚腺會受到刺激,產(chǎn)生哭泣本能。

只有碰撞體積存在,模型才會出現(xiàn),否則就是由空氣撐起來的貼圖。為了節(jié)省復(fù)雜計算產(chǎn)生的資源消耗,大多數(shù)游戲把碰撞體積打造成簡易的方塊狀或是一些扭曲的球狀物。于是,它們不會像骨架那樣嚴(yán)實地契合在肉體的包裹中,也不會像塑料膜那樣貼合地包裹在模型表面,而是像個淘氣包,總“嘗試著”跑出模型,給玩家惹出無限的亂子。

射擊游戲《軍團要塞2》中部分角色的碰撞體積

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

從左到右,正常人類、小怪和大怪的碰撞體積以及建模示意

說到頭部,我似乎聽到了一些游戲角色的笑聲和哭泣。

無頭怪人和腦部手術(shù)

在人類約700萬年的發(fā)展進程中,人類的腦袋仍舊是脆弱而易于受到傷害的關(guān)鍵部位,我們的祖先發(fā)明頭盔、面罩,卻還是不能完全保護住大腦,富有經(jīng)驗的射手會尋求擊中頭部確保目標(biāo)死亡,大多數(shù)以人類為主要角色的射擊游戲也都遵循了現(xiàn)實的規(guī)則,擊中頭部的碰撞體積可以造成最高傷害,這自然讓關(guān)于頭部碰撞體積的問題變得格外受關(guān)注——《彩虹六號:圍攻》中發(fā)生過的怪事就是個好例子。

戰(zhàn)術(shù)射擊游戲《彩虹六號:圍攻》里的擊殺時間很快,還有“爆頭就死”、對團隊和個人能力要求較高的門檻,以及一個“恐怖游戲”的諢名。這不僅是因為育碧推出過造型超贊的萬圣節(jié)皮膚,一些詭異的Bug、暗搓搓跟在身后的敵人、突然秒殺對手的強力玩家也同樣可以打造短暫的驚嚇。比起這些直白的驚嚇,一些匪夷所思的細(xì)節(jié)更加讓人“頭皮發(fā)麻”。

Smoke的防毒面具真是個百搭的創(chuàng)作素材

游戲中負(fù)責(zé)攻堅的女性干員Ash身材相對苗條,相比部分干員包含頭盔的建模,Ash通常只戴一頂帽子,顯得頭部相對小一些。不僅如此,在激烈的槍戰(zhàn)中,Ash的移動速度(屬于游戲中3個速度級別中最快的)也給予她更快轉(zhuǎn)移位置,或通過身法躲避攻擊的機會,不少玩家面對Ash時總是很難命中她的頭部,久而久之,就把她叫做“無頭怪”。

這當(dāng)然只是玩家們不斷玩梗的結(jié)果,實際上,Ash的頭部擁有正常尺寸的碰撞模型,只是建模比其他干員的要小,讓人看得不清楚,感覺不好命中罷了。

網(wǎng)友惡搞的Ash造型

正常的Ash

相比Ash的先天優(yōu)勢,游戲中一些戴著頭盔的男性干員(這樣分明應(yīng)該更安全)則有著完全反過來的悲慘體驗。就拿曾經(jīng)經(jīng)歷過“腦部手術(shù)”的耶格來說,這位來自德國聯(lián)邦警察第九邊防大隊(GSG 9)的探員佩戴了一個結(jié)合陸航頭盔(符合他直升機技師的身份)鏡片和AM-95盔外形的頭盔,后者兩側(cè)都有為容納耳機而突出的鼓包。因此,在游戲推出后的很長一段時間內(nèi),因為頭盔體積較大、兩側(cè)鼓包也包含碰撞體積,耶格被玩家稱作“耶大頭”,打中耳機也算傷害的設(shè)定讓玩家感嘆,耶格的大腦已經(jīng)長到耳機里面了……

實際上,不只是耶格一個人受到這種“不公平待遇”,游戲中的俄國狙擊手Glaz佩戴的耳機也曾包含碰撞模型,甚至大多數(shù)角色的背包、戰(zhàn)術(shù)腿掛包、腰包等建模都能被子彈打傷。在一款很多情況下連敵人正臉都看不清的快節(jié)奏射擊游戲中,這些受傷害細(xì)節(jié)似乎并不重要,但它無疑割裂了玩家對一款游戲真實度上的期待。

耶格的耳機有多大,看看這圖就能感受到

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

不僅是耶格,其他干員也在更新中受益

隨著碰撞體積整體縮水,游戲的難度實際上也相對提升了。在快節(jié)奏射擊的場景下,玩家必須抓住有效區(qū)域射擊,對于《彩虹六號:圍攻》來說,這不算是壞事,畢竟這款游戲?qū)τ趹?zhàn)術(shù)和操控能力的需求較強,減少渾水摸魚的射擊機會是給常駐玩家的福利,不過對于其他類型的FPS游戲來說,縮小碰撞體積似乎就不那么重要了。

不是“隨緣箭”,是“磁力箭”

沒有嘗試過《守望先鋒》的玩家會對名為半藏的英雄產(chǎn)生很大的疑問,為什么在一個連小女孩都可以拿著激光手槍大開殺戒的未來科幻世界里,會混著一位經(jīng)常裸著半截身子、手持弓箭的家伙?嘗試過《守望先鋒》的玩家則會產(chǎn)生另一種疑問,為什么半藏的弓箭能擊中我——在一個充滿連發(fā)激光槍、大口徑炮彈的世界里?

常用半藏的玩家可能會謙虛地說這叫“隨緣箭”,打中和打空都靠佛祖保佑,但這并不完全對。在某些情況下,半藏射出的箭實際上是“磁力箭”,或者說是“半自動追蹤箭”,當(dāng)它擦過玩家的臉龐時,會受到“不可抗拒力”的吸引,直接粘到玩家臉上,造成這種現(xiàn)象的罪魁禍?zhǔn)滓琅f是碰撞體積。

明明準(zhǔn)星離目標(biāo)還遠(yuǎn)......(圖片來自“油管”播主Nateson)

幾乎每一位《守望先鋒》中的英雄都擁有超過自己建模的碰撞體積。游戲推出沒多久時,這種現(xiàn)象就受到了一定程度的關(guān)注,玩家們發(fā)現(xiàn)自己可以通過射擊角色的兩腿中間和腦袋上方造成傷害。即便半藏沒能瞄準(zhǔn)目標(biāo),而是瞄著目標(biāo)不遠(yuǎn)處的空氣,射出去的箭也會扎在目標(biāo)身上——碰撞體積感應(yīng)到攻擊,建模就展現(xiàn)出受到進攻的樣子,簡單的道理。

不只是打出去的子彈,類似于角色路霸的特殊技能抓鉤本身也包含碰撞體積,會對自己接觸的目標(biāo)做出響應(yīng),這讓路霸在抓取玩家時甚至不用刻意瞄太準(zhǔn),抓鉤投到對手腦袋上方,或是敵人躲藏的那面墻上,通過穿模照樣可以把敵人抓過來。

理想狀態(tài)下,路霸的抓鉤應(yīng)該是這樣纏住玩家的

雖然不少玩家發(fā)現(xiàn)了這一現(xiàn)象,但除了路霸的抓鉤后續(xù)得到修復(fù),暴雪并沒有對碰撞體積進行貼身裁剪,英雄到底有多“肥”成了玩家之間極度想要弄清楚的秘密。

隨著去年創(chuàng)意工坊的推出,有位外國玩家借助專門用來測試碰撞體積的地圖,對《守望先鋒》中不同英雄的碰撞體積做出了具體記錄。這是個痛苦的過程,需要測試者不斷朝目標(biāo)射擊,需要按照“擊中”和“未擊中”的提示來反復(fù)試驗。這次試驗結(jié)束后,玩家們算是搞清楚不同英雄角色的碰撞體積究竟有多大了。

這份記錄以安娜為基礎(chǔ)數(shù)值(100%),分為紅色區(qū)域(頭部)和綠色區(qū)域(其他軀體部分),記錄了不同英雄相比安娜來說是“肥還是瘦”。結(jié)果顯示,游戲中建模比較苗條的部位都有比看上去更大的碰撞體積,比如禪雅塔的腦袋、黑百合的腿……

就算是身材很苗條的英雄也有超過軀體面積很多的可命中范圍

為什么不修復(fù)碰撞體積,讓角色變得和《彩虹六號:圍攻》那樣貼合呢?想知道這個問題,也許得先看一下兩款FPS游戲的不同設(shè)計思路?!恫屎缌枺簢ァ纷⒅貞?zhàn)術(shù)、反應(yīng)速度,每一發(fā)子彈都能改變局勢;《守望先鋒》更注重團隊合作,戰(zhàn)斗節(jié)奏和擊殺時間也沒有前者那么快,部分英雄的技能和機制擁有先天優(yōu)勢,不需要槍法多么厲害也可以擁有出色的成績。

體積較大的角色建模無疑幫助玩家拉低了槍法上的門檻,保證人人都能擊中目標(biāo),身材嬌小的目標(biāo)面對身材巨大的目標(biāo)時,也不至于太吃虧(個頭大的往往血量也厚),像黑百合這種擁有纖細(xì)身材的英雄,離遠(yuǎn)了連看清楚都費勁,如果不把碰撞體積調(diào)整大一些,被擊中都很難。

黑百合的身材苗條,看上去很難被擊中

只要移動足夠快,建模就追不上我

不管建模是大是小,在槍法超群的玩家面前,大家都是“活靶子”,即便如此,就算是職業(yè)玩家也要在碰撞體積面前折服,因為建模被瞄準(zhǔn),碰撞體積也可以借助網(wǎng)絡(luò)延遲上演一出金蟬脫殼,幫玩家躲開子彈。

盡管聽上去很“玄學(xué)”,但這一原理還是可以用簡單方式的來解釋。在單機游戲中,玩家打出一槍后子彈會徑直朝著目標(biāo)飛去,開始結(jié)算命中后的效果,并立即反饋給玩家,從某種意義上達(dá)成“指哪打哪”。到了多人模式,為了防止玩家修改本地數(shù)據(jù),影響計算結(jié)果來作弊,大部分游戲中從行走、射擊到命中的過程都要先上傳到服務(wù)器進行計算,再把計算數(shù)據(jù)分發(fā)給每個玩家的客戶端進行響應(yīng)。

如果網(wǎng)絡(luò)夠慢,也許就飛不到目標(biāo)了

也就是說,在多人模式中,子彈要先從槍口飛出去,然后“鉆進”服務(wù)器里計算,再飛到目標(biāo)身上,最后把結(jié)果反饋到客戶端。這枚子彈在服務(wù)器往返的速度,就是我們所熟悉的延遲(ping)。不過,在這些游戲中,行走、命中的數(shù)據(jù)是獨立處理的,目標(biāo)的行走指令可能先于子彈得到服務(wù)器計算后的反饋。當(dāng)服務(wù)器中某位玩家延遲過高時,就會出現(xiàn)一些子彈明明打出去,對面卻借助延遲躲過子彈的情形。如果延遲更加嚴(yán)重的話,在開槍玩家的視野中,目標(biāo)仍舊處在易于擊中的位置,卻無法被命中,玩家只能發(fā)出“我的子彈飛到哪里去了”的疑問。

有趣的是,被延遲影響的有時不只是子彈“飛行”的速度,還有玩家的碰撞體積。就拿《反恐精英:全球行動》來說,有玩家在測試模式里調(diào)試出了碰撞體積,卻地發(fā)現(xiàn)它和建模并不同步。沒錯,即便肉眼看到建模在某個位置,卻不代表玩家可以擊中它,因為建模所在的位置可能只是玩家客戶端記錄的數(shù)據(jù),尤其是在移動的情況下,子彈“飛到”目標(biāo)身上時,目標(biāo)從服務(wù)器上傳輸來的碰撞體積很可能并不在那里。

藍(lán)色框架是服務(wù)器眼里的碰撞體積,紅色則是客戶端展現(xiàn)的碰撞體積(圖片來自“油管”播主3kliksphilip)

這似乎解釋了很多失誤背后的真正原因,當(dāng)你在游戲中看到到手的目標(biāo)毫無損傷地反殺自己時,影響這一結(jié)果的很可能就是在網(wǎng)絡(luò)延遲下“靈魂出竅”的碰撞體積。

《反恐精英:全球行動》對于槍法要求非常高,對于職業(yè)玩家或者說……任何一個看重比賽結(jié)果的玩家來說,碰到這種“靈魂出竅”導(dǎo)致空槍的情況都非常要命。幸好這類情況雖然偶爾發(fā)生,但并沒能嚴(yán)重影響到游戲進行,一些錯失機會的片段倒是在視頻播主手中變成了搞笑集錦,給玩家們提供了不少樂趣。

你看我這一槍,明明打在他身上了啊

關(guān)于碰撞體積的趣事還有很多

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

斯內(nèi)克的“無影腳”

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

沒有人喜歡直布羅陀(最右),因為建模和體格太大,他還會讓玩家產(chǎn)生走路速度很慢的錯覺

在流行的足球游戲“FIFA”系列中,每個現(xiàn)實存在的球員也是擁有碰撞體積的,而且碰撞體積同樣具有很強的實戰(zhàn)意義——小個子球員更靈活,進攻中更容易突破狹窄的防守空間;大個子進攻時往往吃虧,但防守面積大,利于攔截。

由于要模擬高矮胖瘦完全不同的數(shù)萬名球員,“FIFA”的制作者們難以親歷親為,給每個球員都賦予合適的模型。一般來說,制作者會給那些世界知名的球員做出符合現(xiàn)實情況的“模型”,再把這些模型套用到身高、體重類似的球員身上。

這樣做的結(jié)果是,知名球員大多跟現(xiàn)實里一樣好用,只要知道他們本人的數(shù)據(jù),就能大致判斷模型是什么樣子,而次一級的五大聯(lián)賽球員,乃至不知名球員的模型就會出現(xiàn)偏差,往往你看起來操縱的是個大個子,他的實際防守面積其實并沒有那么大。所以,許多玩家在游戲里碰到自己不熟悉的球員時,往往要查查他的模型如何,才能對球員的手感做出更準(zhǔn)確的判斷。

由于玩法調(diào)整,小快靈球員在《FIFA 20》里更受歡迎

在一些游戲中,碰撞模型是個可以忽略的東西。比如《坦克世界》《戰(zhàn)爭雷霆》這兩款以坦克作戰(zhàn)為核心的游戲,在整個車身上都放置了可以映射不同傷害的碰撞模型,卻唯獨放棄了炮管部位。這樣做的理由很簡單,假如戰(zhàn)斗在狹窄環(huán)境展開,徑直伸出去的炮管就成了累贅。

不像現(xiàn)代戰(zhàn)爭中坦克需要合作戰(zhàn)斗,每次轉(zhuǎn)移位置、突襲,甚至是開火都要磨蹭半天,坦克游戲需要進行一些類似于TPS類游戲的位置移動,這期間每個動作都不容耽擱。如果炮管碰到別的坦克會撞壞、碰到建筑還有可能帶動整個載具的物理效果,玩家的感覺自然不好受,所以這兩款游戲在短暫嘗試后,都沒有保留炮管的碰撞模型。

炮管也有保留碰撞體積的例子,經(jīng)典案例就是《俠盜獵車手5》

時至今日,碰撞體積要怎么做仍舊沒有一個嚴(yán)格的規(guī)范,把它做大、做小,是貼合還是泛濫,都要看開發(fā)商的思路和游戲題材再確定。大多數(shù)玩家并不會太在乎碰撞體積帶來的影響,因為從槍法、反應(yīng)速度、幀率和網(wǎng)速等等方面,有太多方式可以解釋自己為什么在游戲中錯失機會。

較真的玩家們在游戲社區(qū)里仔細(xì)寫下自己的猜測和建議,并且利用各種方式反復(fù)測試碰撞體積對游戲的影響。幾乎每款熱門游戲都有這樣那樣關(guān)于碰撞體積的爭論和傳說,有時候開發(fā)商也不得不因玩家們的呼聲而作出改變。

在技術(shù)發(fā)展到可以讓建模貼圖和碰撞體積100%貼合之前,似乎不會有真正“完美”的碰撞體積出現(xiàn),但至少,發(fā)現(xiàn)這團看不見、摸得到的“神秘物質(zhì)”本身還是充滿樂趣的,而且在隊友憤怒地詢問你為什么沒能擊中目標(biāo)時,你可以給出一個足夠靠譜的答案。

“‘垃圾游戲’,我這一槍不算在碰撞體積上!”

4

編輯 牛旭

冥王星不是一顆行星。

查看更多牛旭的文章
關(guān)閉窗口