【问题标题】:Choose between fixed and variable timestep in different physics simulations在不同的物理模拟中选择固定时间步长和可变时间步长
【发布时间】:2016-09-21 23:46:17
【问题描述】:

我知道固定时间步长的物理模拟可能对 CPU 要求很高。 我是否应该以这种方式优先考虑物理(以获得最佳性能):

可变时间步长:

  • 基于物理的仅视觉粒子效果(例如速度 verlet 与恒定加速度的积分)
  • 其他基于物理的视觉材料,但不与场景交互。
  • 对象基于这个简单的公式:p_new(dt) = p_old + v * dt,其中 v 是常数。
  • 基于此等式的对象:p(dt) = p_0 + v_0 * dt + 1/2 * a * dt^2, 其中 v_oa 是常数。

固定时间步长,物理 + 碰撞检测。

  • 布娃娃
  • 基于物理的玩家运动。
  • 根据物理学发射弹丸。

这样好吗?碰撞检测是否应该使用固定时间步长?

【问题讨论】:

    标签: game-physics timedelta


    【解决方案1】:

    这样好吗?碰撞检测是否应该使用固定时间步长?

    这取决于您的项目。如果您描述的“视觉材料”表现出物理行为(即受到物理力、相互作用或碰撞的影响),那么如果将它们设置为与物理引擎不同的时间步长,您可能会开始遇到问题.

    但是,由于它们是“视觉材料”,因此我假设它们对游戏玩法并不重要,那么问题可能不会引人注目或者可能足够稀有让你的游戏侥幸逃脱。

    换句话说,你当然可以尝试...但是否 *"it's ok"(你会不会遇到问题)取决于项目。


    PS:如果你想优化,有些东西会产生更大的影响(假设你还没有优化它们)。

    对游戏性能有巨大影响的特定事物的主要示例之一(如果不是主要示例)是减少draw calls。但是在这里解释它或其他优化是不合适的,因为这不是问题,并且在 SO 和 GameDev 上还有很多其他问答,已经讨论并回答了这些优化是什么,为什么它们有这样的影响,以及如何应用它们。

    【讨论】:

    • 是的,因为我的“视觉”东西完全是在 GPU 上模拟的,当模拟需要赶上固定的时间步长时,运行多个绘图调用将是一场灾难……这个函数:p(dt) = emiterPos + v * dt 对于不同的(可变)时间步是完全安全的,但是 p(dt) =emitterPos + v * dt + 1/2 * a * dt^2 呢?如果速度和加速度(在本例中为重力)是恒定的。
    • 是的,绘制调用越少越好。当我需要绘制多个相同类型的粒子系统时,我正在使用实例化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    • 2012-01-23
    • 2013-04-11
    • 1970-01-01
    相关资源
    最近更新 更多