What & How & Why

Colliding Objects

All about Houdini’s dynamics networks / simulations.


Rigid Body Dynamics

在 Houdini 中,Rigid Body solver 用于模拟刚体对象的运动以及碰撞。我们将该种类型的模拟称为刚体动力模拟(Rigid Body Dynamics) 简称 RBD

RBD 对象分为主动(active)和被动 (passive)对象。主动的对象受力和碰撞的影响;被动的对象可以与主动对象碰撞,但不会移动,同时也不受力的影响。

常见的,可以通过 shelf 创建的 RBD 对象有:

  • RBD Object
  • RBD Fractured Object:该对象基于 name 属性创建。
  • Static Object:该对象为被动对象,参与并影响模拟中的其他对象,但自身的运动并不受模拟影响
  • RBD point object:在源几何体的每个点上创建一个新的模拟对象。
  • Ground Plane:无限的地面,本身为静态对象。
  • Terrain Object:同为静态对象,与 Ground plane 类似。该对象允许创建凹凸不平的 3D 表面。该对象的大小与源几何体相同。1

Constraints in RBD

待完善

Solver type

Rigid Body Solver 内置三种物理引擎:BulletHoudini RBDODE。每一种都有自己的优势和劣势:

  • Bullet
    • 该引擎速度比 RBD 快,可以用于带有大量的数据的场景,支持破碎,同时也是唯一一个支持 glue adjacent 功能的引擎。
    • 没有选项可以区分 impact data 中的 resting impact,不支持在对象层级的缩放。
  • Houdini RBD
    • Houdini 原生物理引擎,支持所有 Houdini 的模拟内容。可以很好的模拟任何形状物体之间的碰撞。
    • 速度最慢
  • ODE(Open Dynamics Engine)
    • 支持高速模拟简单的几何体(盒子、球、圆柱、胶囊状几何体)。如果被模拟的几何体符合 ODE 中的简化形状(simplified shapes) ,那么解算的速度回大大提高。因为这些特性,ODE 在模拟大量的简单物体上非常有优势。同时,因为 ODE 与 RBD 之间非常容易切换,因此我们也可以利用 ODE 完成初始的模拟,再到 RBD 中进行更细致的模拟。
    • ODE 只支持简单几何体的碰撞,即便我们的几何体看上去很不规则,但如果使用 ODE 模拟,结果也会像简单几何体一样碰撞。同时,ODE 不支持破碎,不支持 glue,不支持三角面几何体之间的碰撞,不支持在对象层级的缩放。

Glue

Houdini 中允许使用 glue 将两个不同的 RBD 对象粘连起来。在物体受力的程度超过 glue 的上限之前,两个对象都会作为一个整体。

使用 glue 主要有两种工作流程:

  • 将指定的 RBD 对象与其他对象粘合在一起
  • 创建一个碎片化的整体(也就是很多碎片组成的整体),然后将其作为被 glue 粘合好的整体导入。

该工作流程在我们希望模拟破碎的场景时非常有用。

Gule adjacent

待完善

重要的 RBD 对象属性

  • Use deforming geometry
    • 因为效率的原因,默认情况下动力学引擎并不会使用带动画的对象。如果需要使用带动画的几何体作为对象,使用该选项即可。该选项可以进行关键帧设置,因此我们可以只在需要的时候将其值设为 1
  • Number of objects
    • 使用该选项将会创建一系列对象的副本,但会在同一个位置创建这些副本。因此这些副本是重合的,看上去任然是一个物体。如果不想其充电,可以使用 Position 属性对其进行分离。通常我们使用 $OBJ 本地变量来控制(该值为 object number,1 等于 1个 copy 的间隔。)