在游戏中如何进行结构分析(例如:桥梁建筑,挖掘或死亡以及3D)?


11

据我了解,典型的交互式桁架系统将需要进行大量计算,因为每个组件都会影响整个系统。我认为您可以在仿真中以准确性为代价随意停止给定的迭代次数,但是我不知道这些游戏是否使用了这种方法(桥梁游戏是桁架系统的一个示例)。另一方面,像Dig或Die这样的游戏具有非常复杂的结构系统,该系统还考虑了扭矩(我认为)和压缩,并且运行速度非常快,并且可以在非常广泛的系统上运行。我猜基本计算可能是相似的,但是如果没有,我对两种方法都感兴趣。

你们知道这些是怎么制成的吗?它们有任意限制吗?还是完全使用了不同的算法?另外,我想你们想出的任何方法都可以应用于3D系统,但如果不是,或者如果不明显,请至少提供一个有关如何将其用于3D的线索,因为我对2D和3D都感兴趣游戏。

我知道我不应该在这里感谢,但是我发现不至少要感谢您的时间是不公平的,我希望不要删除此段。

编辑:如果我要猜测,我会说Dig或Die为每个块存储矢量,然后运行一个迭代算法,直到模拟的额外精度对于系统的限制毫无意义(例如,系统太大而无法崩溃),因此受到半任意(因为它基于应用程序)迭代次数的限制。但是我可能是错的。


简而言之,是的,通常它是迭代的,具有可以针对速度与质量进行调整的时间步长和迭代计数。也可以建立一个大矩阵并同时满足所有约束,但这在某些情况下可能更具挑战性,不切实际或不可能。
艾伦·沃尔夫

Answers:


5

我是Dig或Die的开发者,所以我可以提供更多有关游戏物理的细节

确实,最关键的一点是性能,因为在游戏中您可以构建数千个物理块,而且非常重要的是我还需要模拟其他复杂的事情(雨/水),因此我可以将很少的CPU时间用于建筑物理。

所以我实际上做了某种...我不知道,自定义的个人算法不是很准确,但是对于游戏来说足够好了。每个街区交点有1个向量(因此每个街区最多由4个向量链接,在每个边上各有一个)。每个块都有一个“权重”,并“推动”周围的向量(相等),因此向量大小的总和等于其高度。当一个块固定在地面上时,所有推入其中的力/重量都不会被“推回”,因此,经过足够的迭代,整个系统自然会找到一个平衡点。重量/力将“流”到固定点,并很好地控制结构的变化。您可以在此处查看结果(使用游戏中的“埃菲尔眼镜”项目): 在此处输入图片说明

关于扭矩,我通过乘以水平传递的力来模拟它。虽然并不完美,但足以感觉到水平和垂直构建之间的巨大差异

但老实说,我不太喜欢我的系统,在某些情况下,它不是很准确;主要是因为我不管理压缩和扩展。在没有更多CPU的情况下,可能有比我更精确的模拟的方法,但是我的技术(和时间)非常有限,所以我做了我能做的:-)

(PS:您的猜测非常好:-))


4

我个人在“ 迭代放松”方面取得了不错的成绩。我认为在处理由团块聚集体制成的物体时,它很好地遵循了物理定律。我相信BridgeBuilder系列基于这种方法,尽管我没有消息来源对此进行确认。

迭代松弛法广泛用于桁架,但我已经成功地用它模拟了大型固体物体(混凝土):这很简单,是一个桁架,其接点承受载荷而不是自由旋转。


有趣的是,松弛是一种解决静态桁架的技术,因此它是准确的。在这方面,它用于迭代计算使结构达到平衡的位移。

但是,游戏的附加值(我们对动态环境感兴趣,因为静态的非平衡结构很无聊)是,我们有机会根据到目前为止计算出的约束,在每次迭代之间实际置换结构的接缝。您有两个主要好处:

  • 您具有动态结构,可以正确响应任何外部扰动
  • 您拥有一个结构,可以通过将其应力转移到其他构件上来对松动的支撑构件做出准确的响应(请考虑快速进行无计划的拆卸)。看着压力在链条事件中断裂时移动,这实际上是非常令人愉快的
  • 您有一个非线性模拟!我的意思的进一步解释:
    通常,静态分析会得出小变形的假设,即结构不会偏离其初始状态。在这些范围内,静态分析是正确的,因为关节实际上并没有太多位移。但是,随着结构在不断破碎的重量下变形,通过非线性仿真,您将一直获得精确的结果,而从线性求解器中获得的状态只是简单的

迭代松弛很容易实现,即数值稳定性。我已成功使用RK4方案来实现大型混凝土结构的稳定性。缺点是由于性能原因通常具有很小的刚度,因此有时可能感觉像软胶。

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.