什么时候应该推断,什么时候应该推断?


16

我无法理解何时进行推断以及何时进行推断。在游戏中,他说要进行插值,但是在另一篇文章中,他建议对玩家进行插值。所以我的问题是,什么时候可以更好地推断,什么时候可以更好地推断?


22
有两种人。那些可以从不完整数据中推断出来的人
Almo

2
@Almo,又是什么?请告诉我,我必须知道!
DJMcMayhem '16

4
@DJMcMayhem ...以及那些喜欢吃鱼手指的人。
user253751 '16

4
我不明白这个问题。您能解释一种“插值”点{(1,a),(2,b)}以预测(3,c)中的c的方法吗?您将如何推断呢?
user541686 '16

Answers:


29

知道 “之前”和“之后”值时进行插值。

例如:在点击游戏中,玩家当前位于X位置,并且从界面上单击点Y。您必须在X和Y之间插入位移,因为您知道这两个值。

当您根据已经知道的知识猜测未来的价值时,可以进行推断。

例如:在第一人称射击游戏中,玩家位于X位置,并且在最后一秒钟一直按下键盘上的UP箭头,您可以假设他将在下一秒钟再次进行此操作,因为这基本上是游戏中最常见的行为;因此,您可以推断他将成为下一帧的位置。服务器将其发送给其他游戏客户端,这说明了从服务器到玩家的传输延迟。

外推主要用于运动预测。游戏服务器不需要它,但是游戏客户需要它来显示游戏状态的某种现实和当前的视觉,以便为玩家提供流畅的视觉体验。


我理解这一部分,但我不了解的是何时应该使用每个部分。例如,如果我对一个球员进行插值,则他实际看到动作会有一定的延迟,但是如果我对它进行推断,则该延迟会更加即时,但可能并不准确,需要进行更正。通常是希望通过外推获得瞬时运动,还是通过插值获得更一致的运动?
J梁长

@Jleong您希望游戏尽可能流畅地呈现给用户。您可以对游戏的当前状态进行插值,并可以在几帧中推断其状态。您将推断的值发送给其他播放器以解决网络传输中的延迟。如果您要发送插值,则游戏似乎会滞后,并且不会很有趣。(我编辑了答案。希望它能使它更多。)
Vaillancourt

哦,好吧,这样,当您希望客户端预测将要发生的情况时,便可以使用推断法?如果是这样,那么如果您始终可以外推以保持游戏接近实时,那么内插的意义是什么?因此对于像FPS一样,是否可以推断一个玩家,而其他玩家可以插值呢?
梁长

通常,服务器会做所有事情:根据它所知道的内容进行插值,然后基于该值推断值并将其发送给客户端,以便它们及时到达并呈现给玩家。在FPS中,插值用于显示弹丸,AI等内容。当执行帧B(来自帧A)时,它将对帧B的状态进行插值;它也可以通过内插已知值来开始预测帧C ,但是必须外推未知的值(玩家输入)。然后它将“未来”状态发送给客户端。
Vaillancourt

@Jleong无需考虑客户端和服务器之间的区别,我可以使用插值法得出两个已知点之间的某个位置(例如检查帧之间可能发生的碰撞之类的东西),或者进一步获取该数据集并得出类似的信息速度/轨迹和加速度,给定一组点,并给定最后一个已知的速度/加速度/轨迹,我可以推断出这些对象在未来的时间范围(假设时间框架)是一致的。对于服务器-客户端通信,使用“乐观”外推位置。
Norguard '16

14

当您既有起始值又有结束值,并且想要估计此起始值和结束值之间会发生什么时,便会完成插值。一个示例是以流畅的运动将玩家从位置A移动到位置B。

当您有一个起始值,但还没有结束数据时,便会进行推断。然后,您可以根据所拥有的数据进行推断。例如,根据玩家的先前动作,您可以确定下一帧中他可能的位置。


2

尽可能插值。

如果您没有足够的信息进行插值,则需要进行插值。

真的就是这么简单,不要想太多了:)

进一步说明:

通常,插值更好,因为插值总是正确的。要推断,您必须猜测。然后,您必须处理当您猜错时会发生的情况,这会导致橡皮筋或弹跳以及各种系统来处理所有这些情况并掩盖它。

如果您推断蝙蝠的位置并显示它到正确的位置并弹跳球,然后又意识到自己错了并且没有弹跳球,会发生什么?没有解决这种情况的好方法。


哦,好了,这样在Pong中,可以预测用户的球拍并且对球和其他球拍进行插值吗?
J梁长

这完全取决于您如何实现它。有关更多信息,请参见我的编辑。
Tim B

2

您进行插值以查找已知值之间的状态,然后进行插值以查找将来的状态。

从状态变量(例如位置和速度)的角度考虑问题。在所有情况中,最好的情况是,每台需要使用状态的计算机都可以在他们想要使用的时间内访问状态数据。例如,使用碰撞算法来查看X射线步枪是否会触及玩家A的头部,所有情况中最好的情况是,该算法知道在发射激光时每个物体的确切位置。

在现实世界中,我们并不总是那么幸运。有时,我们收到的真相信息很少。例如,如果播放器A是另一台计算机上的远程播放器,则当您发射激光并需要计算击球次数时,您可能并不确切知道他们要去哪里。在这种情况下,您需要为A的位置创建一个估算器,通常使用内插法或外推法。

两者之间的区别在于,您是在两侧还是仅在一侧限制数据。假设玩家A已经宣布了t = 0和t = 1的真实位置。玩家B在t = 0.5时发射激光。在许多情况下,玩家A可能会在玩家B扣动扳机之前宣布他们在t = 1的位置。为什么?在许多游戏中,控件的响应能力并非瞬间完美。在赛车模拟中,玩家的大部分位置都受到移动车辆物理特性的限制。您可能会选择宣布“未来职位”,因为您知道自己确实无法在短时间内充分掌控一切。如果将来有信息,则可以在两个值之间进行插值。

如果您没有足够的幸运值达到1怎么办?如果玩家A不能宣布他们的未来位置,而您只想决定是否从t = 0的信息中击中或错过,该怎么办?在这种情况下,您必须进行推断。在推论中,您将利用对运动的了解来扩展所拥有的任何数据。您可能知道玩家A具有一定的速度,因此假设您将其乘以时间,就可以每次获得一个位置。

区别在于行为。插值要求您有一个上限和一个下限,而并非总是如此。但是,在几乎所有情况下,其结果都比外推要好得多。外推很容易导致不切实际的运动。考虑一个为避免前进时被枪击而向左和向右回避的玩家的情况。在任何给定的点上,它们的速度都沿着对角线,因此,如果您进行推断,则实际上玩家可能从不向一侧跑去。如果仅进行插值,则这些值往往不会偏离实际值。

内插和外推是过滤领域的两个极端。有很多很多很多很多过滤器用于处理这样的数据,这些数据在插值和外推之间混合并匹配属性。因此,如果您看到的算法没有明显的内插或外推,请不要感到惊讶。那两个只是冰山一角。


1

插值使用已知数据来计算数据集范围内的数据(即“内部”前缀)。外推法计算的是现有数据范围之外的数据(额外为“外部”前缀)。两者都用于合成其他数据,精确的计算方法定义了所生成数据的预期可靠性。

或放入一个非常简单的图表中:

A - - - - - B - - - - - C - - - - - D

给定数据点AC您就可以进行内插B和外推D


内插或外推的精度完全取决于您在计算中对每个变量的解释能力。如果您知道所有变量,并且有一个方程式说明了所有变量,则可以轻松进行内插或外推。

对于游戏机制而言,限制因素将是变量受玩家或某些随机或伪随机元素以不可预测的方式影响的点。

例如,可以将“突破”中球的运动(以最简单的形式)一直推算到可能与玩家的球拍交互的点。到那时为止,所有变量都可以被考虑,因此您可以精确地模拟球的动作。当达到可能与玩家互动的地步时,就会有许多可能的结果,并且没有办法准确模拟其中的哪种情况,直到实际发生为止。这是游戏物理模型的预测极限。

插值在游戏中更简单,因为您正在处理已知点,而不必怀疑条件是否会改变。此外,您可以完全控制所涉及的变量,并且可以使用定义的任何规则来确定对象的路径。规则越复杂,插值就越困难。

对于在无重力的游戏空间(例如Breakout或Pong)中具有简单碰撞的对象运动,沿路径上的直线进行插值的机制是对点进行简单的线性插值,并且可以使用相同的计算方法将线外推到测试未来的碰撞。一旦检测到碰撞,您就可以推断该碰撞对所涉及对象的影响。


这恰恰是单词之间的区别。当我们只有A和C时,我们猜测B和D会有不同的单词的原因是因为正确猜测B比正确猜测D容易得多。炮兵专家称内插法。他们在您的每一侧进行了两次标记,如果您不动,您就死定了。查看股票价格图表后,当您进入股市时,外推就是您想要做的事情。外推很难。
candied_orange

@CandiedOrange很难对复杂系统进行外推,但是对内插也是如此。这取决于数据点的质量以及系统的可预测性。如果您可以得出描述系统的精确方程式,则可以精确地进行内插或外推-线条容易外推,曲线可以外推,股市就不那么容易了。
科里

很难的意思是,内插给您微积分的基本定理。推断不是。A和C告诉您B在使A成为C的地方。要求D要求预测未来。就您所知,C是玩家死亡的地方。 哪一个更可靠和可以接受:插值还是外推? 为什么外推风险大于内推
candied_orange

@CandiedOrange当然,外推仅限于您可以控制和预测所有相关变量的程度。插值也是如此。给定玩家过去占据的两个位置,您不一定能准确地插补中点,因为玩家可能偏离了直接或最佳路径。两种方法都有局限性。
科里

当然,两者都是有限的。但是,一个人比另一个人更容易破坏职业。猜猜哪个。我的说法不是插值是完美的。认为他们具有相同的预测能力是危险的。
candied_orange

0

简短的答案:在必须估计两个已知值之间的值时进行插值(即:在一小时内该值为1,在3小时内为三个,则以给定值2在最可能的值2处插值)值)。外推法是当未知数超出您所知道的范围时,因此当已知1和2时,您可以对3进行有根据的猜测。

插值:在之间插值:在外部

这里的长答案很可能更准确,更科学地正确,但我希望我的简单解释对某些人有意义

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.