模拟体素结构的物理学(Minecraft,Dwarf Fortress等)?

时间:2014-01-14 22:25:19

标签: simulation physics minecraft voxel

我希望能为“Minecraft”和“Dwarf Fortress”这样的“基于体素的”游戏制作一些非常基本的物理/静力学模拟原型,以便游戏可以检测到玩家何时构建了一个不能站起来的结构显然,这是一个非常模糊的定义 - 结构是否不可能取决于多种材料和环境属性 - 但总体思路是激励玩家建造类似于我们在现实世界中看到的建筑物的结构。 。我将在下面更详细地描述我的意思,但我通常想知道是否有人可以建议问题的潜在方法或我可以使用的资源

如果材料不够坚固,这里有一些建筑物的例子是不可能的。 这是一些示例情况。我对这个问题的理解不是很好,但请耐心等待。

an L shape 如果这个结构由尺寸为4米乘200米的混凝土制成,那么它可能无法站起来。因为质心并没有超过它与地面的连接,我认为它会翻倒或在底部裂缝。

An arch 这个拱门的重心位于支撑它的柱子之间,但如果它非常大并且由一种薄而重的材料制成,它会在自重下崩溃。

A tower 这座塔的重心恰好位于其基座上方,但如果它足够高,那么只需要一点力就可以将风推倒。

现在,我希望这些物理学的全面实时模拟真的不可能......但是有很多方法可以简化模拟。例如:

  • 对物理反抗结构的测试可能很少和随机进行,所以一个坏的建筑物一旦建成就不会崩溃,但几分钟之后就会崩溃。
  • 我的世界和矮人堡垒几乎不能进行刚体或软体物理。出于这个原因,任何被认为是物理上不可能的建筑物都可以简单地“弹出”成瓦砾而不是产生一堆准确的物理道具。

3 个答案:

答案 0 :(得分:2)

您是否考虑过使用现有的3d环境物理引擎并“对齐”对象的方向?对于您的第一个物体(L形物体),您可以在幕后运行模拟相似形状的连续非体素化物体,然后监视该物体的方向变化。在一个简单的例子中,如果对象的连续表示击中地面,则体素化游戏世界中的对象可以将其块移动到地面。

答案 1 :(得分:0)

我认为没有可行的方法来做到这一点。 Minecraft没有物理结构的概念。因此,您必须单独查看每个块以确定它是否应该下降(还有其他注意事项,但这是最小的)。因此,您需要一种区分地面和“非地面”的方法。这首先是建模问题,而不是编程问题(甚至不是仿真设计)。我认为这个问题超出了SO的范围。

例如,考虑以下模型,它可以指示所涉及的复杂性:

  • 高于= 0的每个块经历“向下拉”= P,P可以是以下任何一个:
      如果该框由另一个框支持,则
    • 0
    • m * g(其中m是质量,取决于材料密度*体素体积),否则如果它是免费的
  • F代表盒子垂直面之间的一些“摩擦”或“胶水”,它抵消了P.
    • 这种摩擦力应该有一个阈值,超过该阈值时它会“断裂”,然后该块会向下拉净。
    • 如果m * g <总和F,盒子保持原样。否则,盒子会掉下来。
    • F取决于接触的材料对
    • 对于n = 2,因此您可以在两个塔之间形成一排块
  • F是导致盒子的净拉力大于m * g的原因。例如,如果你有两个块a-b-c,其中c在d上,则a拉上b,所以b应该比m * g“更重”,它接触c。如果这个网是> F,然后a-b对应该下降。

你可能能够模拟上面的结果并得到有趣的结果,但是你会发现处理这两种情况下它们之间存在一系列障碍物的情况非常具有挑战性:这些塔通过一排块连接在一起,不再是块的“尖端”。在这个阶段你不妨拿出你的物理书籍来创建一个盒子和弹簧系统,并提出你可以用数字方法解决的方程式,但在一个完整的3D系统中,你将有一个3D网格的弹簧来导航迭代地收敛以强制每个盒子上的值并确定哪些移动。

答案 2 :(得分:0)

我的一位教授建议我查看this paper

此外,我找到了关键字,我正在寻找它。 “结构分析。”我买了一本教科书,而且我还有很长的路要走。