【问题标题】:Jelly physics 3d果冻物理 3d
【发布时间】:2011-06-04 13:55:42
【问题描述】:

我想问一下果冻物理学 (http://www.youtube.com/watch?v=I74rJFB_W1k),我在哪里可以找到一些开始制作类似东西的好地方?我想模拟汽车碰撞,我想使用这种果冻物理,但我找不到很多关于它们的信息。我不想使用现有的物理引擎,我想自己写:)

【问题讨论】:

    标签: simulation physics


    【解决方案1】:

    Here 是一个包含一些非常好的教程的页面。您正在寻找的可能是 (逆)运动学质量和弹簧模型 部分。

    提示:果冻可以看作是 3 维的 cloth ;-)

    另外,请尝试查看弹簧压力软体模型的搜索结果 - 它们可能会让您朝着正确的方向前进 :-)

    【讨论】:

      【解决方案2】:

      看这个人的页面Maciej Matyka,软体话题

      【讨论】:

        【解决方案3】:

        那个滚动的果冻立方体视频是用 Blender 制作的,它使用 Bullet physics engine 进行软体模拟。一般来说,子弹文档非常稀少,几乎不存在软体动力学。最好的办法是阅读源代码。

        然后编写你自己的版本;)

        【讨论】:

          【解决方案4】:

          不幸的是,只有 2d,但可能是 JellyPhysicsJellyCar

          【讨论】:

            【解决方案5】:

            类似于您在链接到的视频中看到的东西可以通过质量弹簧系统完成。然而,当你改变质量和弹簧的数量,保持你的弹簧常数不变时,你会得到非常不同的结果。简而言之,质量-弹簧系统并不是物质连续体的良好近似。

            通常,这些类型的动画是使用所谓的Finite Element Method (FEM) 创建的。 FEM 确实收敛到一个连续体,这很好。尽管它确实需要比质量弹簧系统更多的专业知识,但它确实还不错。基本思想,来源于对continuum mechanics的研究,可以这样说:

            1. 将对象的体积分成许多小块(元素),通常是tetrahedra。让我们将这些元素的整个集合称为网格。您实际上需要制作此网格的两个副本。将一个标记为“rest”网格,另一个标记为“world”网格。接下来我会告诉你为什么。

            2. 对于世界网格中的每个四面体,测量它相对于其对应的静止四面体的变形程度。它变形程度的量度称为“应变”。这通常通过首先测量所谓的变形梯度(通常表示为 F)来完成。有 several good papers 描述了如何做到这一点。一旦你有了 F,定义应变 (e) 的一种非常典型的方法是: e = 1/2(F^T * F) - I。这被称为格林应变。旋转不变,非常方便。

            3. 使用您尝试模拟的材料(明胶、橡胶、钢等)的属性,并使用您在上述步骤中测量的应变,推导出每个四面体的“stress”。

            4. 对于每个四面体,访问每个节点(顶点、角、点(这些都表示相同的意思))并平均三个共享该节点的三角形面的面积加权法向量(其余形状)节点。将四面体的应力乘以该平均矢量,由于该四面体的应力,弹性力作用在该节点上。当然,每个节点都可能属于多个四面体,因此您需要能够总结这些力。

            5. Integrate!有简单的方法可以做到这一点,也有困难的方法。无论哪种方式,您都需要遍历世界网格中的每个节点,并将其力除以其质量来确定其加速度。从这里开始的简单方法是:

              • 将其加速度乘以某个小的时间值dt。这会改变速度,dv
              • dv 添加到节点的当前速度以获得新的总速度。
              • 将该速度乘以 dt 以获得位置变化 dx
              • dx 添加到节点的当前位置以获得新位置。

              这种方法称为explicit forward Euler integration。您必须使用非常小的 dt 值才能使其正常工作而不会崩溃,但它很容易实现,因此可以很好地作为起点。

            6. 根据需要重复步骤 2 到 5。

            我遗漏了很多细节和花哨的附加功能,但希望您能推断出我遗漏的很多内容。 Here is a link 我第一次这样做时使用的一些说明。该网页包含一些有用的伪代码,以及一些相关材料的链接。

            http://sealab.cs.utah.edu/Courses/CS6967-F08/Project-2/

            下面的链接也很有用:

            http://sealab.cs.utah.edu/Courses/CS6967-F08/FE-notes.pdf

            这是一个非常有趣的话题,祝你好运!如果您遇到困难,请给我留言。

            【讨论】:

            • +1 很清楚!您对四面体应变使用什么度量?两点之间的距离?
            • 好问题!我很抱歉我把它漏掉了。我已经用更多信息编辑了我的答案(特别是第 2 步)。简短的回答是您想要对应变进行一些 3 维测量,但距离是 1 维的,所以这不起作用。
            猜你喜欢
            • 2011-06-26
            • 1970-01-01
            • 2011-03-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多