太空战斗模拟中光信息传播的建模速度


29

我正在研究一个太空战斗模拟游戏,该模拟游戏发生在相对广阔的区域(一个侧面的空间约20光分钟),并使用(主要是)逼真的物理学。我要建模的关键要素之一是信息在战斗空间中的传播速度-也就是说,如果玩家A在战斗空间的一侧接合主驱动器,那么玩家B看到它就会有20分钟的延迟,然后可以对此做出反应

考虑到速度,即使是相对较小的战斗空间,这也是一个重要因素。一艘500m长,速度为30kps的船将在十分之一秒的时间内位移自己的全长,因此即使瞄准对手,也只有十分之几秒的距离会受到光滞后的影响。

我以前从未见过这样做,我想知道是否有一些最佳实践来对此建模。现在,我要为每个事件加上时间戳,并标记一个位置,将其放入队列中,然后对每个刻度进行检查,以查看游戏世界中是否有任何对象刚在光锥的边缘,并添加事件到他们的传感器队列。我将(但尚未)通过删除所有可能感知到它的对象已经感知到的事件来对其进行优化,但是,我仍然认为这将使繁琐的工作变得非常麻烦,并且会吃掉很多东西如果有数百个感测物体在播放(这是很常规的),则周期为。

有没有应该更适合我检查的数据模型?


7
邓诺(Dunno)给出了答案,但我会说一个好问题!
蒂姆·霍尔特

哇!游戏主要是关于可视化的。我需要知道当像素太大时您打算如何可视化对手?简单的HUD指标?文字模式冒险游戏?请赐教!
乔纳斯·比斯特罗姆(JonasByström),

1
您说模型在物理上是准确的。那是牛顿的还是相对论的?在这样的规模上,这可能会有很大的不同。
MSalters 2013年

1
并不是说它回答了这个问题,但是也许看看“ 光速慢”会给您一些想法。
Michael Pankov

@JonasByström-远程视图非常复杂,我正在尝试对其进行清理。基本上,我希望它是根据光滞后和您的舰船计算机对目标的最大delta-v的估计得出的未来目标的概率视图。不过,现在它还
不算

Answers:


9

只是在这里集思广益...

有趣的是,在这种情况下,网络延迟是您的朋友。就像您希望的那样,某些数据包至少在绘图时会延迟。但是,对于每个受其网络速度影响的数据包,每个播放器通常都不会具有基本滞后,而是需要根据光速延迟将每个事件的特定延迟应用于每个播放器。

通常,服务器会同时向所有客户端发送更新,但是您需要服务器为每个事件计算“光滞”(基于查看者的距离),然后在此之前不发送更新时间。

因此,对于每个事件,计算事件与每个玩家之间的时间延迟,然后将该事件排队,直到延迟时间过去后才发送给该玩家以吸引该玩家。

这不能解决事件发生后播放器更改位置或速度的影响,但是您可以根据播放器更改来调整已排队的事件。玩家开始靠近,及时将事件移近。玩家离开,及时离开。

根据观众和事件之间的运动差异,将多普勒频移混入混合中将是一件有趣的事情。


我已经对不断变化的位置和速度进行了建模。尽管规模很大,但是游戏中的物体通常不会以光速的相当一部分前进,因此事件相对容易地超越了它们,但是在每个刻度上都会检查接收器是否在可以看到的范围内事件,因此,如果您正朝一个好的剪辑前进或后退,则可能会受到一些滴答声的影响。不过,多普勒确实会很有趣!需要研究的东西。:-)
John Biesnecker 2013年

2
有一点要注意,如果使用此方法,则没有人扫描数据包将能够先获取信息。夏娃在线与潜艇做类似的事情。当任何船只在某个区域移动时,都会通知所有客户,但是当隐身的船只在移动时,则不会告诉客户任何信息。否则,尽管客户端未显示飞船,但数据包仍会显示。
雷·布里顿

5

问题是:您需要什么样的延迟图像才能真正显示出来?如果要获得100%的准确性,则需要在每个刻度上保存地图上每个对象的动作或状态,并说,要根据距离延迟播放它们。如果您不太关心精确度(在游戏中很少需要),则可以间隔保存状态,并在延迟赶上时在它们之间进行推断。您可以通过不保存相同的更新来进行优化。

或者,您可以矢量化所有运动并保存每个对象的路径以及从通用观察器看到的开始时间。然后,您可以根据通用时间计数器为每个观察者计算对象的预期位置,并根据其保存的路径节点计算本地时间。当路径节点的时间戳落在所有相关对象的灯光锥后面时,您将其丢弃。

编辑:以上假设您将通过拥有绝对的观察者(我假设是玩家)来作弊相对论。这会使您失去一些时间膨胀方面更有趣的方面,但是对这些方面进行建模本身就是一个项目> _>

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.