果冻物理3d

时间:2011-01-06 10:36:47

标签: simulation physics

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

5 个答案:

答案 0 :(得分:4)

您在链接到的视频中看到的内容可以通过质量弹簧系统完成。但是,当您改变质量和弹簧的数量时,保持弹簧常数不变,您将得到各种各样的结果。简而言之,质量弹簧系统并不是连续物质的良好近似值。

通常,使用所谓的Finite Element Method(FEM)创建这些类型的动画。 FEM 确实收敛到连续体,这很好。虽然它确实需要比质量弹簧系统更多的技术诀窍,但它确实不是太糟糕。从continuum mechanics的研究中得出的基本思想可以这样说:

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

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

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

  4. 对于每个四面体,访问每个节点(顶点,角点,点(这些都意味着相同的东西))并平均三个三角形面的面积加权法向量(在其余形状中)节点。将四面体的应力乘以该平均向量,并且由于该四面体的应力,存在作用在该节点上的弹力。当然,每个节点都可能属于多个四面体,所以你希望能够总结这些力量​​。

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

    • 将其加速度乘以一些小的时间值 dt 。这样可以改变速度, dv
    • dv 添加到节点的当前速度以获得新的总速度。
    • 将此速度乘以 dt 以获得位置变化 dx
    • dx 添加到节点的当前位置以获得新位置

    这种方法称为explicit forward Euler integration。您必须使用非常小的 dt 值才能使其工作而不会爆炸,但它很容易实现,因此它很适合作为起点。

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

  7. 我遗漏了很多细节和花哨的演员,但希望你能推断出我遗漏的很多东西。 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 :(得分:1)

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

然后编写自己的版本;)

答案 2 :(得分:0)

Here是一个包含一些相当不错的教程的页面。您正在寻找的那个可能是(反向)运动学 Mass& Spring模型部分。

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

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

答案 3 :(得分:0)

查看此人的页面Maciej Matyka,软体主题

答案 4 :(得分:0)

不幸的是,只有2d可能会开始JellyPhysicsJellyCar