射击游戏里的子弹是如何飞行的

栏目: IT技术 · 发布时间: 4年前

内容简介:从第一款FPS游戏《德军总部3D》出现以来,这种类型的游戏广受好评,创新的玩法也层出不穷,比如“吃鸡”。

晓查 发自 凹非寺

量子位 报道 | 公众号 QbitAI

从第一款FPS游戏《德军总部3D》出现以来,这种类型的游戏广受好评,创新的玩法也层出不穷,比如“吃鸡”。

射击游戏里的子弹是如何飞行的

第一款FPS游戏《德军总部3D》

但是你知道游戏里的子弹是怎么飞行的吗?

早期,它和现实世界中的子弹完全不一样,很多玩家合理地利用了这个bug,比如CS里的甩狙。

随着PC运算能力提高,子弹的算法也在不断进步,弹道的效果越来越真实。

最近一位软件工程师Tristan Jung在游戏论坛上总结了FPS游戏的一些子弹轨迹算法。让我们一起来看看FPS游戏这二十多年来发生的变化。

挡住射线的都会死

早期的FPS游戏都采用一种“光线投射”(ray casting)的技术,用枪口发射出去的射线来确定子弹的轨迹。光线投射可以确定与光线相交的第一个对象。

射击游戏里的子弹是如何飞行的

在FPS里,这种算法叫做“命中扫描”(hitscan),当你扣下扳机时,物理引擎会计算下面几件事:

  • 枪口所指的方向;

  • 从枪口射出一束射线,直到达到规定的范围,比如碰到墙;

  • 确定光线投射的路径上是否光线是否撞击物体。

如果引擎发现你有物体挡住了子弹的路径,就是通知系统该物体被击中。

射击游戏里的子弹是如何飞行的

方块挡在了子弹A射向B的路径,引擎告知方块已被击中

hitscan的核心很简单,至于物体被子弹击中后的下一步逻辑是什么,可以根据游戏要求定义:

1、如果允许子弹穿透,那么它将穿透路线上的所有物体;

2、消除最大的射线范围,就可以一直发射出激光,直到命中物体为止;

3、将某些表面设置为具有反射性,可以将子弹弹开。

使用hitscan算法,最大的好处是计算简单快速,不需要额外的内存或处理时间即可构建新的物理对象。这也意味着在多人游戏时,所需的网络资源也最少。

因此,行业中的许多游戏都将hitscan用作射击算法也就不足为奇了。

不仅《德军总部3D》和《毁灭战士》这些经典游戏采用,连近年来的一些热门游戏也是。比如《守望先锋》、《使命召唤》里的一些武器即是采用hitscan算法。

射击游戏里的子弹是如何飞行的

但是hitscan还是存在着一些缺陷。

首先,子弹的速度是无限的,比光速还快,瞬间到达被击中的物体。即使你离目标很远,只要你开枪的一瞬间,对手在准星上,就必死无疑。

射击游戏里的子弹是如何飞行的

扣动扳机和目标上的火光同时出现,说明子弹是瞬间击中

其次,子弹的路径是直线,没有考虑风向、重力等因素,即使建模的时候把路径改成曲线,但是在子弹射出后也无法更改路径。

为了让射击游戏更真实,就需要使用另一种方法。

给子弹加上弹道

这个算法 听起来很花哨,其实很简单。

武器射出的每颗子弹,都会在环境中创建一个新的物理对象,有着自己的质量、速度和引擎要计算的命中框。

由于每个弹丸都是独立存在的,因此可以考虑风力、摩擦、重力和温度等因素。任何作用在子弹上的力都会改变其方向。

射击游戏里的子弹是如何飞行的

而且在这种算法下,子弹不会瞬间移动,还可以实现以下功能:

1、在一些游戏中有“子弹时间”特效;

2、如果长距离狙击移动目标,需要提前目标的估计移动量;

3、实现榴弹等爆炸物的延迟爆炸。

射击游戏里的子弹是如何飞行的

但是在进行多人游戏时,服务器将需要做更多的计算,来确保所有对象都同步,并且必须解决不同客玩家之间的差异或冲突,以免在同一台服务器上给玩家带来不一致的体验。

一个方法是,在游戏时间之前加载对象的“池”,并在需要时“弯曲并启用”它们。一旦撞击到物体表面,就回收这个对象,将其保存以备后用。

这种方法将减少反复创建和销毁对象的计算和内存成本。

至于游戏时间的同步,存在着多种计算方法:

1、时间是与渲染分开计算,即使存在跳帧,游戏也能精确地表示对象。这种方法需要计算自上次渲染之后经过的确切时间。

2、计算每一帧的时间,将物理引擎绑定到帧速率。如果禁用帧速率上限,或开始丢帧,则会看到加速或卡顿的效果。

射击游戏里的子弹是如何飞行的

而且,这种算法在子弹速度足够快时,可能会遇到对象彼此“互穿”的情况,尽管它们在引擎中从未重叠。

混合系统

有没有办法结合了以上两种方法的优点呢?答案是有的。

最简单的办法就是不同武器使用不同的引擎。

大多数FPS游戏引擎可以处理两种类型的子弹模拟。这样就可以选择拥有各种各样的武器。《侠盗猎车手》和《半条命》等游戏都具有可以支持两种物理类型的武器。

比如《光环》中的突击步枪使用命中扫描引擎,而刺针枪使用子弹弹道模型。

射击游戏里的子弹是如何飞行的

游戏开发人员还可以混合使用两种技术来弥补每个系统的弱点,从而提供更加逼真的体验。

例如,要解决物体从弹道互穿的问题,可以在引擎的每个时刻上绘制子弹射线,查看射线是否会相交。

也可以混合两种算法以增强游戏的功能。

《狙击精英》系列就是一个很好的例子。扣动扳机后,引擎将使用hitscan来确定子弹是否足够靠近目标以触发慢动作。如果结果为true,引擎将在子弹时间内计算弹道。

射击游戏里的子弹是如何飞行的

参考链接:

https://www.gamasutra.com/blogs/TristanJung/20191206/355250/How_Do_Bullets_Work_in_Video_Games.php

作者系网易新闻·网易号“各有态度”签约作者

如何关注、学习、用好人工智能? 

每个工作日, 量子位 AI内参 精选全球科技和研究最新动态,汇总新技术、新产品和新应用,梳理当日最热行业趋势和政策,搜索有价值的论文、教程、研究等。

同时,AI内参群为大家提供了交流和分享的平台,更好地满足大家获取AI资讯、学习AI技术的需求。扫码即可订阅:

了解AI发展现状,抓住行业发展机遇

射击游戏里的子弹是如何飞行的

AI社群 | 与优秀的人交流

射击游戏里的子弹是如何飞行的

量子位  QbitAI · 头条号签约作者

վ'ᴗ' ի 追踪AI技术和产品新动态

喜欢就点「在看」吧 !


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

妙手回春

妙手回春

(美)Steve Krug / 袁国忠 / 人民邮电出版社 / 2010-7 / 39.00元

本书是作者Steve Krug继畅销书《点石成金:访客至上的网页设计秘笈》(Don't Make Me Think)后推出的又一力作。多年来,人们就认识到网站可用性测试可以极大地改善产品质量,但鉴于正规的可用性测试流程复杂、费用高昂,很少人这样做。在本书中,作者详细阐述了一种简化的网站可用性测试方法,让任何人都能够尽早并频繁地对其网站、应用程序和其他产品进行可用性测试,从而将最严重的可用性问题消灭......一起来看看 《妙手回春》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具