讓子彈再飛一會:遊戲中關於碰撞體積的趣聞

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

從白色條狀物到睪丸

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

让子弹再飞一会:游戏中关于碰撞体积的趣闻

《乓》,最上面的0和1是分數

隨著電子遊戲的發展,把碰撞體積展示在玩家面前已經不是開發者的最優選項。為了賦予玩家真實的感覺,角色模型擁有更加細緻的貼圖,頭髮變得可以隨風飄揚,就連他們騎的馬兒的睪丸也變得可以隨氣溫降低而縮小。有一點不變的是,只要涉及到碰撞和傷害,那麼藏在這些複雜精緻貼圖裡的,就還會有一些形體簡陋的碰撞體積。

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

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

让子弹再飞一会:游戏中关于碰撞体积的趣闻

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

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

让子弹再飞一会:游戏中关于碰撞体积的趣闻

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

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

無頭怪人和腦部手術

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

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

让子弹再飞一会:游戏中关于碰撞体积的趣闻

Smoke的防毒面具真是個百搭的創作素材

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

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

让子弹再飞一会:游戏中关于碰撞体积的趣闻

網友惡搞的Ash造型

让子弹再飞一会:游戏中关于碰撞体积的趣闻

正常的Ash

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

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

让子弹再飞一会:游戏中关于碰撞体积的趣闻

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

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

让子弹再飞一会:游戏中关于碰撞体积的趣闻

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

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

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

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

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

让子弹再飞一会:游戏中关于碰撞体积的趣闻

明明準星離目標還遠......(圖片來自“油管”播主Nateson)

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

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

让子弹再飞一会:游戏中关于碰撞体积的趣闻

理想狀態下,路霸的抓鉤應該是這樣纏住玩家的

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

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

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

让子弹再飞一会:游戏中关于碰撞体积的趣闻

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

為什麼不修復碰撞體積,讓角色變得和《彩虹六號:圍攻》那樣貼合呢?想知道這個問題,也許得先看一下兩款FPS遊戲的不同設計思路。《彩虹六號:圍攻》注重戰術、反應速度,每一發子彈都能改變局勢;《守望先鋒》更注重團隊合作,戰鬥節奏和擊殺時間也沒有前者那麼快,部分英雄的技能和機制擁有先天優勢,不需要槍法多麼厲害也可以擁有出色的成績。

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

让子弹再飞一会:游戏中关于碰撞体积的趣闻

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

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

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

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

让子弹再飞一会:游戏中关于碰撞体积的趣闻

如果網絡夠慢,也許就飛不到目標了

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

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

让子弹再飞一会:游戏中关于碰撞体积的趣闻

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

這似乎解釋了很多失誤背後的真正原因,當你在遊戲中看到到手的目標毫無損傷地反殺自己時,影響這一結果的很可能就是在網絡延遲下“靈魂出竅”的碰撞體積。

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

让子弹再飞一会:游戏中关于碰撞体积的趣闻

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

關於碰撞體積的趣事還有很多

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

让子弹再飞一会:游戏中关于碰撞体积的趣闻

斯內克的“無影腳”

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

让子弹再飞一会:游戏中关于碰撞体积的趣闻

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

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

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

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

让子弹再飞一会:游戏中关于碰撞体积的趣闻

由於玩法調整,小快靈球員在《FIFA 20》裡更受歡迎

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

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

让子弹再飞一会:游戏中关于碰撞体积的趣闻

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

時至今日,碰撞體積要怎麼做仍舊沒有一個嚴格的規範,把它做大、做小,是貼合還是氾濫,都要看開發商的思路和遊戲題材再確定。大多數玩家並不會太在乎碰撞體積帶來的影響,因為從槍法、反應速度、幀率和網速等等方面,有太多方式可以解釋自己為什麼在遊戲中錯失機會。

較真的玩家們在遊戲社區裡仔細寫下自己的猜測和建議,並且利用各種方式反覆測試碰撞體積對遊戲的影響。幾乎每款熱門遊戲都有這樣那樣關於碰撞體積的爭論和傳說,有時候開發商也不得不因玩家們的呼聲而作出改變。

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

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


分享到:


相關文章: