射擊游戲里的子彈是如何飛行的
曉查 發(fā)自 凹非寺
量子位 報道 | 公眾號 QbitAI
從第一款FPS游戲《德軍總部3D》出現(xiàn)以來,這種類型的游戲廣受好評,創(chuàng)新的玩法也層出不窮,比如“吃雞”。
△?第一款FPS游戲《德軍總部3D》
但是你知道游戲里的子彈是怎么飛行的嗎?
早期,它和現(xiàn)實世界中的子彈完全不一樣,很多玩家合理地利用了這個bug,比如CS里的甩狙。
隨著PC運(yùn)算能力的提高,子彈的算法也在不斷進(jìn)步,彈道的效果越來越真實。
最近一位軟件工程師Tristan Jung在游戲論壇上總結(jié)了FPS游戲的一些子彈軌跡算法。讓我們一起來看看FPS游戲這二十多年來發(fā)生的變化。
擋住射線的都會死
早期的FPS游戲都采用一種“光線投射”(ray casting)的技術(shù),用槍口發(fā)射出去的射線來確定子彈的軌跡。光線投射可以確定與光線相交的第一個對象。
在FPS里,這種算法叫做“命中掃描”(hitscan),當(dāng)你扣下扳機(jī)時,物理引擎會計算下面幾件事:
- 槍口所指的方向;
- 從槍口射出一束射線,直到達(dá)到規(guī)定的范圍,比如碰到墻;
- 確定光線投射的路徑上是否光線是否撞擊物體。
如果引擎發(fā)現(xiàn)你有物體擋住了子彈的路徑,就是通知系統(tǒng)該物體被擊中。
△?方塊擋在了子彈A射向B的路徑,引擎告知方塊已被擊中
hitscan的核心很簡單,至于物體被子彈擊中后的下一步邏輯是什么,可以根據(jù)游戲要求定義:
1、如果允許子彈穿透,那么它將穿透路線上的所有物體;
2、消除最大的射線范圍,就可以一直發(fā)射出激光,直到命中物體為止;
3、將某些表面設(shè)置為具有反射性,可以將子彈彈開。
使用hitscan算法,最大的好處是計算簡單快速,不需要額外的內(nèi)存或處理時間即可構(gòu)建新的物理對象。這也意味著在多人游戲時,所需的網(wǎng)絡(luò)資源也最少。
因此,行業(yè)中的許多游戲都將hitscan用作射擊算法也就不足為奇了。
不僅《德軍總部3D》和《毀滅戰(zhàn)士》這些經(jīng)典游戲采用,連近年來的一些熱門游戲也是。比如《守望先鋒》、《使命召喚》里的一些武器即是采用hitscan算法。
但是hitscan還是存在著一些缺陷。
首先,子彈的速度是無限的,比光速還快,瞬間到達(dá)被擊中的物體。即使你離目標(biāo)很遠(yuǎn),只要你開槍的一瞬間,對手在準(zhǔn)星上,就必死無疑。
△?扣動扳機(jī)和目標(biāo)上的火光同時出現(xiàn),說明子彈是瞬間擊中
其次,子彈的路徑是直線,沒有考慮風(fēng)向、重力等因素,即使在建模的時候把路徑改成曲線,但是在子彈射出后也無法更改路徑。
為了讓射擊游戲更真實,就需要使用另一種方法。
給子彈加上彈道
這個算法聽起來很花哨,其實很簡單。
武器射出的每顆子彈,都會在環(huán)境中創(chuàng)建一個新的物理對象,有著自己的質(zhì)量、速度和引擎要計算的命中框。
由于每個彈丸都是獨(dú)立存在的,因此可以考慮風(fēng)力、摩擦、重力和溫度等因素。任何作用在子彈上的力都會改變其方向。
而且在這種算法下,子彈不會瞬間移動,還可以實現(xiàn)以下功能:
1、在一些游戲中有“子彈時間”特效;
2、如果長距離狙擊移動目標(biāo),需要提前目標(biāo)的估計移動量;
3、實現(xiàn)榴彈等爆炸物的延遲爆炸。
但是在進(jìn)行多人游戲時,服務(wù)器將需要做更多的計算,來確保所有對象都同步,并且必須解決不同客玩家之間的差異或沖突,以免在同一臺服務(wù)器上給玩家?guī)聿灰恢碌捏w驗。
一個方法是,在游戲時間之前加載對象的“池”,并在需要時“彎曲并啟用”它們。一旦撞擊到物體表面,就回收這個對象,將其保存以備后用。
這種方法將減少反復(fù)創(chuàng)建和銷毀對象的計算和內(nèi)存成本。
至于游戲時間的同步,存在著多種計算方法:
1、時間是與渲染分開計算,即使存在跳幀,游戲也能精確地表示對象。這種方法需要計算自上次渲染之后經(jīng)過的確切時間。
2、計算每一幀的時間,將物理引擎綁定到幀速率。如果禁用幀速率上限,或開始丟幀,則會看到加速或卡頓的效果。
而且,這種算法在子彈速度足夠快時,可能會遇到對象彼此“互穿”的情況,盡管它們在引擎中從未重疊。
混合系統(tǒng)
有沒有辦法結(jié)合了以上兩種方法的優(yōu)點(diǎn)呢?答案是有的。
最簡單的辦法就是不同武器使用不同的引擎。
大多數(shù)FPS游戲引擎可以處理兩種類型的子彈模擬。這樣就可以選擇擁有各種各樣的武器?!秱b盜獵車手》和《半條命》等游戲都具有可以支持兩種物理類型的武器。
比如《光環(huán)》中的突擊步槍使用命中掃描引擎,而刺針槍使用子彈彈道模型。
游戲開發(fā)人員還可以混合使用兩種技術(shù)來彌補(bǔ)每個系統(tǒng)的弱點(diǎn),從而提供更加逼真的體驗。
例如,要解決物體從彈道互穿的問題,可以在引擎的每個時刻上繪制子彈射線,查看射線是否會相交。
也可以混合兩種算法以增強(qiáng)游戲的功能。
《狙擊精英》系列就是一個很好的例子??蹌影鈾C(jī)后,引擎將使用hitscan來確定子彈是否足夠靠近目標(biāo)以觸發(fā)慢動作。如果結(jié)果為true,引擎將在子彈時間內(nèi)計算彈道。
參考鏈接:https://www.gamasutra.com/blogs/TristanJung/20191206/355250/How_Do_Bullets_Work_in_Video_Games.php
- 具身智能洶涌,激光雷達(dá)爆單:頭部玩家600%年增長,出貨超20萬臺2025-08-08
- 智能座艙率先L3!AI Agent上車顛覆體驗,千里科技WAIC交卷2025-07-28
- 千里科技聯(lián)手階躍星辰、吉利發(fā)布下一代智能座艙Agent OS2025-07-26
- 老黃剛走,全球最強(qiáng)算力Robotaxi方案落地中國2025-07-24