在许多赛车游戏(例如Burnout Paradise)中,当碰撞将要发生时,游戏会自动切换为慢动作并以缓慢的顺序进行,直到碰撞完成为止。
我一直以为这是为了效果。您不想错过任何碰撞!但是我的一位朋友最近建议这样做是为了确保在发生碰撞时不需要过多的处理速度。
现在我认为这实际上是相反的。当发生碰撞时,慢动作中会显示很多细节,我确信计算和渲染管道会产生开销。
什么是对的?
慢动作场景会增加还是减少CPU / GPU使用率?
在许多赛车游戏(例如Burnout Paradise)中,当碰撞将要发生时,游戏会自动切换为慢动作并以缓慢的顺序进行,直到碰撞完成为止。
我一直以为这是为了效果。您不想错过任何碰撞!但是我的一位朋友最近建议这样做是为了确保在发生碰撞时不需要过多的处理速度。
现在我认为这实际上是相反的。当发生碰撞时,慢动作中会显示很多细节,我确信计算和渲染管道会产生开销。
什么是对的?
慢动作场景会增加还是减少CPU / GPU使用率?
Answers:
如果您以固定的时间步长运行物理模拟(如您所愿),那么慢动作将使物理模拟的负担减少,因为每帧必须进行的计算较少。
假设您以每秒200次更新的速度运行物理学。例如。0.005
仿真时间每秒钟更新一次。以每秒50个更新的速度运行游戏时,每个渲染更新将导致4个物理更新。现在您将以慢动作运行游戏,这意味着您在减慢仿真时间。因此,如果游戏仍然以每秒50次更新(0.02
模拟时间的秒数)运行,但是您以慢动作显示世界(假设速度为一半),则一帧相当于0.01
模拟时间的秒数。因此,每个渲染帧只有2个物理更新。意味着每个渲染帧的物理计算更少。
因此,如果从每个渲染帧的CPU使用率的角度来看它,那么慢动作将减少CPU的负担(除非您选择在慢动作期间提高物理模拟速率)。每帧的GPU负载当然几乎是恒定的。
如果您询问一次碰撞持续时间内的CPU / GPU累计负载,那么很明显,物理模拟是相同的,无论是慢动作还是正常速度。GPU负载会更高,因为您渲染的帧更多。
这是可能的,这可能是这种情况。除非您对GPU上的碰撞进行物理处理,否则就必须蹲下。但是就物理学本身而言...是可能的。
如果您要模拟许多物体的运动,它们往往会以非常可预测的方式运动。力和力场(即重力)很容易预测。可以快速计算移动的位置。
直到一件事击中另一件事。看到,在物理学中,您拥有所谓的时间片。这是物理系统执行所花费的时间。如果您的时间片占1/30秒(物理更新为30fps),则每次物理更新会将对象移动33.3毫秒到未来。
当物体不发生碰撞时,您可以将其从33.3ms的起点移动到终点。这样做的物理学很简单,并且已经有数百年的历史了。您只需从净力中确定加速度,然后将时间片的加速度应用于对象,然后以新的速度移动它即可(请注意:如果需要更高的精度,这可能会更加复杂)。
问题是物体碰撞时。突然,现在您必须在一个时间片内处理物理力,而不是一开始只处理一次。如果物体在物理框架内发生两次或三次碰撞,则您必须重做更多的物理计算。
如果一个时间片内发生很多冲突,则可以杀死帧率。但是,时间片内多次碰撞的机会会随着时间片的大小减小而减小。诸如Forza和Gran Turismo之类的高端赛车模拟游戏以惊人的帧频运行其物理系统。我认为其中之一的物理更新速度可达300 + fps。
慢动作等效于慢动作。通过减少物理时间片而不增加渲染帧速率来进行补偿,世界看起来变慢了。因此,您减少了在时间片内发生多次冲突的可能性。
话虽如此,我确实怀疑这就是为什么这类游戏进入慢动作的原因。通常,它更适合视觉风格和戏剧化的呈现。那些物理系统通常可以在性能上处理它。
首先,这样做是出于视觉效果,而不是出于性能原因。
物理重游戏中处理性能的标准方法是缩放对象的数量,缩放对象的复杂性,并通过调整引擎设置来在仿真精度和性能之间进行缩放。如果有问题,您将放弃您认为最不重要的功能。
不过请记住,过去15年来,该行业已经制作出了非常逼真的汽车游戏,而对于现代计算机而言,并不是说他们必须缩小到3个轮子才能使事情运转。
问题:
确实,碰撞可能会导致额外的工作,这在很大程度上取决于游戏的细节,更详细的物理引擎将在不同部分之间产生很多小的碰撞,这可能会大大增加所需的计算量。但是,在缩放物理比例时应考虑到这一点,获得仍然可以处理某些碰撞的良好物理特性不是问题。
如果只是简单地慢速运行物理模拟以使慢动作,则负载将成比例地下降。但是,应该注意的是,对慢动作和实时物理的要求是不同的,当东西以赛车速度发生时,您可以承受较低的精度。只要玩家没有注意到物理引擎是错误的,这不是什么大问题,慢动作会使滑点更容易捕捉,因此慢动作对精度有更高的要求。
一个人可以选择使用相同的物理学,并按比例缩放以满足这两组要求。该解决方案将需要一些额外的处理能力,但是它易于实现并且现代计算机完全可行。
切换物理设置更为复杂,但可能会导致一些华丽的碰撞,不仅可以提高精度,还可以将汽车的物理模型切换为更精细的模型,从而以更逼真的方式破裂。该模式在物理上应该最终使用与正常模式相同的CPU时间,这仅仅是因为它们都被缩放为以相同的minspec配置运行。
一种中间方法是使用可变步长物理引擎,当您减慢仿真速度时,通常会提高精度,从而至少解决了一部分问题。还有其他原因不使用可变步长物理,但是可变步长在业界仍然很普遍。