當前位置:商標查詢大全網 - 會計考試 - 射擊遊戲子彈是怎麽飛的?

射擊遊戲子彈是怎麽飛的?

自第壹款FPS遊戲《德軍總部3D》出現以來,該類型遊戲廣受好評,創新玩法層出不窮,比如《吃雞》。

但是妳知道遊戲裏的子彈是怎麽飛的嗎?

早期和現實世界中的子彈完全不同,很多玩家合理利用了這個bug,比如CS中的狙擊。

隨著PC計算能力的提升,子彈算法也在進步,彈道效果越來越真實。

最近軟件工程師Tristan Jung在遊戲論壇總結了壹些FPS遊戲的子彈軌跡算法。讓我們來看看FPS遊戲在過去的20年裏發生了哪些變化。

早期的FPS遊戲使用了壹種“光線投射”的技術,利用槍口發出的光線來決定子彈的軌跡。光線投射可以確定與光線相交的第壹個對象。

在FPS中,這種算法被稱為“hitscan”。當妳扣動扳機的時候,物理引擎會計算以下事情:

如果引擎發現有物體擋住了子彈的路徑,它會通知系統該物體已被擊中。

hitscan的核心很簡單。至於物體被子彈擊中後接下來的邏輯是什麽,可以根據遊戲的要求來定義:

1.如果讓子彈穿透,它會穿透路線上的所有物體;

2.通過消除最大射線範圍,可以壹直發射激光,直到擊中物體;

3.將壹些表面設置為反射性的,這樣子彈就可以被彈開。

使用hitscan算法最大的優點是計算簡單快速,不需要額外的內存和處理時間就可以構建新的物理對象。這也意味著在多人遊戲中,所需的網絡資源也是最少的。

所以業內很多遊戲使用hitscan作為射擊算法也就不足為奇了。

不僅有德國總部3D、末日等經典遊戲,也有壹些近年來的熱門遊戲。比如《守望先鋒》和《使命召喚》中的壹些武器就使用了hitscan算法。

然而,hitscan仍然存在壹些缺陷。

首先,子彈的速度是無限的,比光速還快,瞬間到達被擊中的物體。即使妳離目標很遠,只要射擊的壹瞬間對手在瞄準鏡上,妳就死定了。

其次,子彈的路徑是壹條直線,不考慮風向、重力等因素。即使建模時將路徑改為曲線,子彈射出後也無法改變路徑。

為了讓射擊遊戲更加真實,我們需要使用另壹種方法。

這個算法聽起來很花哨,但其實很簡單。

武器發射的每壹顆子彈都會在環境中創建壹個新的物理對象,它自己的質量、速度和命中框都要由引擎來計算。

因為每個拋射體都是獨立存在的,所以可以考慮風、摩擦力、重力、溫度等因素。任何作用在子彈上的力都會改變它的方向。

而且在這種算法下,子彈不會瞬間移動,可以實現以下功能:

1,部分遊戲有“子彈時間”特效;

2.如果是遠距離攻擊移動目標,需要事先估計目標的移動量;

3、實現手榴彈等爆炸物的延時爆炸。

但在玩多人遊戲時,服務器會需要做更多的計算,以確保所有對象同步,並且必須解決不同嘉賓玩家之間的差異或沖突,以避免給同壹服務器上的玩家帶來不壹致的體驗。

壹種方法是在遊戲時間之前加載“池”對象,並在需要時“彎曲並啟用”它們。壹旦撞擊到物體表面,它就會被回收並儲存起來以備後用。

這種方法將減少重復創建和銷毀對象的計算和內存開銷。

至於遊戲時間的同步,有很多種計算方法:

1.時間是與渲染分開計算的。即使有跳幀,遊戲也能準確的表現物體。該方法需要計算自上次渲染以來的確切時間。

2.計算每壹幀的時間,將物理引擎綁定到幀率。如果您禁用幀速率上限,或者開始丟幀,您將會看到加速或堵塞的效果。

而且,當子彈速度足夠快時,這種算法可能會遇到物體“互相穿透”的情況,雖然它們在引擎中從不重疊。

有什麽辦法可以把以上兩種方法的優點結合起來?答案是肯定的。

最簡單的辦法就是不同的武器用不同的發動機。

大多數FPS遊戲引擎可以處理兩種類型的子彈模擬。所以妳可以選擇擁有各種武器。俠盜獵車手、半條命等遊戲都有可以支持兩種物理類型的武器。

比如《光暈》裏的突擊步槍用的是命中掃描引擎,而柳葉刀槍用的是子彈彈道模型。

遊戲開發者也可以將兩種技術混合使用,彌補各自系統的弱點,從而提供更真實的體驗。

比如從彈道上解決物體互相穿透的問題,我們可以在發動機的每壹個瞬間畫子彈射線,看看射線會不會相交。

妳也可以混合兩種算法來增強遊戲的功能。

狙擊精英系列就是壹個很好的例子。扣動扳機後,引擎將使用hitscan來確定子彈是否離目標足夠近,以觸發慢動作。如果結果為真,引擎將計算子彈時間內的彈道。

參考鏈接:/blogs/Tristan Jung/20191206/355250/how _ do _ bullets _ work _ in _ video _ games.php。