======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 内置三种物理引擎://Bullet//、//Houdini RBD//、//ODE//。每一种都有自己的优势和劣势:
* //**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 的间隔。)