1

我正在尝试了解 Unity 物理引擎 (PhysX),有人可以解释一下默认求解器迭代默认求解器速度迭代到底是什么吗?

在此处输入图像描述

这来自 Unity 文档:

默认求解器迭代:定义 Unity 在每个物理帧上运行的求解器进程数。求解器是小型物理引擎任务,可确定许多物理交互,例如关节的运动或管理重叠刚体组件之间的接触。这会影响求解器输出的质量,建议在使用非默认 Time.fixedDeltaTime 或配置要求更高的情况下更改属性。通常,它用于减少由关节或接触引起的抖动。

请提供一些例子说明它是如何工作的,增加或减少它如何影响最终结果?

4

1 回答 1

2

我在 Unity 论坛上问了这个问题,Hyblademin回答了这个问题:

在数学中,迭代求解方法是通过重复一组步骤(迭代)来近似求解未知值系统(如 [x1, x2, x3 ... xn])的任何算法。通常,感兴趣的系统是一组线性方程组,与代数课中的方程组完全相同,但未知数非常多。

从对每个未知数的解的猜测开始,这可能基于相似的已知系统,也可能从一个共同的起点,如 [1, 1, 1 ... 1],执行一个过程,给出一个接近精确值的近似解。仅在一次迭代之后,除非最初的猜测已经接近,否则近似值不会很好。但是可以使用第一个近似值作为新输入重复该过程,这将给出更接近的近似值。

在重复几次之后,我们可以期待一个可靠的近似值。它仍然不准确,我们可以通过将答案插入原始系统并看到它不太正确来确认(简化后,我们最终会得到 10=10.001 或类似的东西) . 也就是说,如果近似值对于我们的应用程序来说足够接近,我们就会停止迭代并使用它。

这些由 Notre Dame 课程提供的讲义提供了一个很好的例子,说明了使用著名的 Jacobi 方法。执行迭代方法的迭代会输出一个比输入更好的近似值,因为这些方法的定义方式会导致这种情况发生,这是一种称为收敛的属性。在查看任何给定方法为何会收敛时,事情很快就会变得抽象。我认为这超出了您的问题范围,特别是因为我不知道 Unity 使用什么方法。

在 Unity 中计算物理时,我们最终会得到很多方程组。我们可以绘制一个自由体图来显示在 Unity 运行时中给定 FixedUpdate 的碰撞期间的力和扭矩以显示这一点。我们可以尝试“直接”解决它们,这意味着使用逻辑关系来确定值的确切结果(例如在代数类中求解 x),但即使系统是简单的,也需要做很多会减慢执行速度。幸运的是,可以使用迭代的“间接”方法以一小部分计算成本获得相当好的近似值。

增加迭代次数将导致更精确的近似解。有一点是,增加迭代次数会提高精度,这根本不值得进行另一次迭代的处理开销。但是这一点的迭代次数取决于你需要你的项目做什么。有时,物理对象的给定排列会导致默认设置的抖动,这可能会通过更多求解器迭代得到改善,这在手册条目中有所提及。没有一个很好的方法可以确定更改求解器迭代计数是否会以您需要的方式改善行为或性能,除了反复试验(使用 Profiler 更客观地指示性能影响)。

https://forum.unity.com/threads/what-does-default-solver-iteration-means.673912/#post-4512004

于 2019-05-07T20:50:58.080 回答