為什麼射擊遊戲的 Hitbox 多為長方體而不是其他多面體或球體?
如果採用圓柱體,或多面體,效果是否會更好。為什麼很多遊戲的 Hitbox 採用機器人一樣的長方體來構建呢?Hitbox 與人物建模不貼合,不會出現異次元爆頭影響玩家遊戲體驗么?
圖片轉自知乎用戶 @cyba 的文章,圖為 CS 1.6 的 Hitbox。
其實,按單個形狀的相交、碰撞運算成本,通常是:
用球體、膠囊體是性能更好的,而且膠囊體的形狀比長方體更接近四肢。
至於為什麼某個遊戲統一用長方體,可能是因為長方體更通用一些,例如軀幹就不太適合用膠囊體。只支持一種形狀可能會較為統一及簡單。
我也無法理解為什麼是box……腳且不說,四肢怎麼都應該是膠囊,比box快。新版的也確實是膠囊+box:
人體模型是柔體mesh,不能直接mesh碰撞。碰撞mesh實時變化簡直就是噩夢,沒這麼乾的。
不過如果僅僅是hitbox,用剛體三角面mesh其實問題不算太大,適當控制面數是可行的,作為碰撞體,幾百面怎麼都夠了。
下面這幾位純粹就是胡扯,物理碰撞跟渲染完全不是一回事,球是最快的,因為只計算一個半徑,box計算量比球高出起碼一個數量級。
提問者問的是「很多遊戲」,但只給了 CS 1.6 的截圖。針對早期 CS 的話,它最開始是 Half Life 的一個 mod,而 Half Life 的 mod 編輯器就只提供了長方體這一種 hitbox 組件。
至於為什麼 Half Life 只支持長方體,因為 Half Life 的引擎 GoldSrc (乃至上面這個編輯器)源自 Quake,Quake 引擎畢竟是九三年左右的遊戲業界(最高)水準,受限於人力、時間和資金,做長方體的 hitbox 最普適。而 Half Life 是 Valve 一個創業公司的第一款作品,也只是第一人稱的 RPG,他們並沒有動力去改善一個 FPS 都沒有做精細的 hitbox 機制。
球體如果不渲染只查碰撞的話不是不需要三角化的嘛?為什麼那麼多答案都在說球體運算量大?
樓主所說的hitbox,其實是目前最精準的模型,因為hitbox的全稱叫obb tree
如果只是obb,自然無法稱之為最精準模型,關鍵他是tree,也就是說只要有需求,obb tree是可以精確到triangle級別,因為任何三角面都是可以被一個矩形所覆蓋。用球體和CAPSULE同樣會面臨不能完全貼合的問題,畢竟人體不是靠幾個簡單幾何形狀就可以描述的。
用BOX可能只是個習慣而已。從物理引擎的角度來看,球體和CAPSULE比BOX還要更節約計算資源。所以我也覺得無非是習慣問題。
另外R6的HITBOX有很多球體和CAPSULE, BOX 很少。
看到很多回答講,半徑計算性能上優於AABB的,邏輯上這樣是沒錯了。實際應用中,我了解用了BSP這一套的,一般都是用AABB的,估摸著大概是半徑計算帶來的性能優勢,不足以說服程序員引入一整套有差異的邏輯,帶給底層更高的工程複雜性。很多時候一個完整的項目里,簡單可靠比那點點性能重要的多。
在精度要求不是很苛刻的情況下,這是實現起來最快而且最省事的做法。
首先我們pass掉多面體,那麼剩下的就只有膠囊,球形,長方體,如果想精確,就要做這幾個的組合,那麼程序這邊需要實現的功能有,膠囊與球形的碰撞檢測,膠囊與長方體的碰撞檢測,球形與長方體的碰撞檢測,一旦這其中的一個檢測出了問題,改bug就改吐了。
全部用長方體,就只需要做長方體與長方體的碰撞檢測,包括子彈也可以做成長方體,設計上和實現上都保持簡單統一,能省去不少麻煩。
如果精度要求高,那就是另一回事了。
http://counterstrike.wikia.com/wiki/Hitbox
新版的,用的膠囊體,長方體,
性能和 精確性之間平衡
球體精確擬合模型,用的球量大,ps上的 旺達與巨像,玩家就是一個球體
網路遊戲再考慮到延遲,就算用多邊形擬合,也沒用,延遲誤差就吃掉你的擬合精度了為什麼最早使用BOX我不知道,感覺高票答案比較可信
但我給所有回答說球體面數多計算量大的點了反對+沒有幫助
碰撞檢測中球體根本不需要三角化,方形和膠囊也不是三角化的,只有凸包有面的概念不懂不要隨便誤導人機能問題啊,現在用方盒子hitbox不多了,你看csgo的變化應該可以理解。電子玩樂 - CSGO深度教學1——Hitbox、傷害與護甲(分享自知乎網)https://zhuanlan.zhihu.com/p/24105641?utm_source=qqutm_medium=social
早年遊戲比較通用檢測技術就是 aabb 和 obb, 比較方便做空間切割。而且早期電腦性能不行的時候, 檢查box只需要加減法,檢查 球體 和 膠囊需要 開方運算或者三角函數,估計當時為了性能考慮選擇了 box吧。 現在電腦性能高了已經不在乎這點運算量了。
如果只能用一種形狀的話,比方塊更像的算起來沒方塊快,算得比方塊快的(球形)拼不起來
圓柱體 球體 膠囊體 效果不會比長方體更好...
而Mesh碰撞,即使是簡化再簡化的Mesh,效率依然和上面的幾種不是一個量級
至於異次元爆頭,只要不是太離譜,這顯然是提高玩家體驗而不是降低嘛,你想想cs的甩狙
查資料寫的回答:
關於Hitbox的種種,整合了n多前人的文字圖片 What is a hit box? Hitbox - Wikipedia
什麼是Hit box
Hitbox是3D遊戲中用於判定物體命中、物體碰撞等情況的物理模型。與邊緣平滑做工細緻的外觀模型(Model)不同,為了減少計算量,看不見的hitbox一般使用與外觀模型大體匹配的簡單的多邊形構建。Model是由你的顯卡處理出來的你所看到的玩家的位置(虛像),而Hitbox是處理器中玩家(bot)實際所存在的位置(實像)。
Hitbox在正常遊戲狀態是看不見的,不過這些隱型的方框卻和我們射擊目標的時候命中哪個部位有很大的關係!我們射擊目標的時候其實同時也是射擊那些看不見的小方框,射擊中相應的方框,程序就會決定扣血、爆頭之類的各種結果。對於我們的一切操作,對計算機程序而言都是對各個人物的Hitbox進行不斷的檢測。
CS里的玩家模型共有20個射擊模塊。20個射擊模塊分別是:骨盆、2大腿、2小腿、2腳、3個脊背模塊(上、中、下)、頸、頭、2肩、2上臂、2前臂和2手。
為什麼Hit box用盒子
- 採用碰撞來檢測hitbox,越複雜的幾何體計算越複雜,針對矩形框做命中測試的數學運算非常快,這是用來優化演算法的一個方案。
- 2D遊戲的Hitbox是矩形;3D遊戲中用長方體,也可以用球體和橢球體。
- Collision detection 相關的看這裡。
- Hit sphere vs hit box? 多重判定可以解決box不精準的問題,比如AABB-&>radius test (circle/sphere)-&>polygon bounding box or pixel mixing。
很簡單,因為好計算
我們可以看到除了碰撞箱以外,還有中間的軸線以及關節點
關節點的連接成為軸,而軸線要相對坐標的xyz軸都±一個數值就可以做成一個長方體
當然了,如果你的精靈(也就是人物)是一個點的話,做成正方形或者圓形都可以
然而正方形不容易出BUG,而圓形很簡單運算但容易出BUG(因為圓形會框更大的圓)當然了,並不是軸線就不能做橢圓形型了,只是不喜歡做真正的橢圓,而是兩個圓形中間用線連接起來,立體的可以想像一個兩頭半圓的圓柱體的樣子。hitbox這不是在說碰撞運算嗎?和渲染有個p關係?那幾位答主在做什麼夢?
瀉藥 大家都說了 就是為了省事 遊戲製作方便 用戶端計算量低 帶弧度的計算量成幾何倍增長 效果還不明顯 其它幾何形狀也有 不過都是用長方形為基礎然後抹掉一些邊角
而且為了追求真實 你真的做成了圓形 是不是又要考慮不同武器的彈頭大小以及擦傷等問題 那就沒邊了
謝邀
退出遊戲圈這麼多年 還被邀請來回答這種問題 真是榮幸啊
如果我沒記錯的話 這個問題好像是因為當初設定的時候就是長方形 所以一直就是這樣。
因為以長方形組成更簡單更容易貼合。
看看cs1.6的Hitbox 真是簡單啊 現在的Hitbox應該更複雜了吧
Hitbox不準確出的BUG當年屢見不鮮了,基本歸為Hitbox在運動時 提前或滯留。不過一般能上線的遊戲都是小幅的這種問題。比如你蹲下的時候 我打你剛才站立胸口的位置,依然可以造成傷害。那種你說的異次元爆頭 基本也只有測試時候能見到吧。當然主要還是看你覺得所謂的異次元是到那個地步么 哈哈哈~~因為一般來說 在時間不允許的情況下,策劃覺得只要不影響太大的問題 這種細小位置的 Hitbox 不需要完全貼合。
而且通過控制遊戲內武器的瞄準細節也可以彌補這個問題。就是說你的瞄準精度很難在某個部位,做出絕對精細的定位。所以一般來講只要不是 你蹲著我打你剛才站著的腦袋位置就能打死你 基本上不算BUG 都是微調的範圍了。
不過這都是當年和其他項目組聊的~得到的經驗。現在怎麼做完全不知道了,畢竟國內的FPS純研發貌似幾乎沒有吧。
先看你建模樣式啊,如果都是天線寶寶那種大頭娃娃,用球體好點,單說常規寫實類的,矩形框已經很好了,稍微一點的異次元爆頭是對遊戲體驗有提升的,畢竟頭那麼小。如果是天線寶寶用矩形那判定範圍有點超出了。
貼合模型,就跟樓上老兄說的Mesh碰撞的效率損耗跟這幾個框框不是一個量級的,搞個單機射擊遊戲可以嚴格控制同屏單位數量尚可一試(實際上沒覺得差別有多大,除非單位都是異形的,但是效率費的太多)不然多人同屏這個前提條件基本殺死了Mesh碰撞的可能性。
推薦閱讀:
※開放世界遊戲中的大地圖背後有哪些實現技術?
※一個完整的遊戲副本包括哪些要素?
※用國外的3d遊戲開源引擎製作遊戲,是否可以說這款遊戲是自己寫的?
※如何有效地學習ue4的源碼?或者說有什麼地方要注意的?
※Unity上面有什麼好的熱更新方案?
TAG:遊戲 | 遊戲設計 | 遊戲開發 | 第一人稱視角射擊遊戲FPS | 遊戲策劃 |