What & How & Why

RBD Packed Object

Creates a single DOP object from SOP Geometry that represents a number of RBD Objects.


RBD Packed Object 节点 会在 DOP 中创建一个 DOP 对象,供 DOP 模拟使用。该节点从指定的 SOP 路径获取几何体,并使用一个单独的点和每个具有变换的 primitive 来描述 RBD 对象。这些 primitives 可以是 packed primitivesspherestubes。每个 Primitives 都会为刚体提供碰撞几何体;而在 primitives 上的点则会包含属性,用于存储相关的信息,比如方向(orientation),质量,速度等等。

这导致该节点的效率远远高于 RBD Fractured ObjectRBD Point Object。该节点现在只能被 Bullet Solver 识别。

Point Attributes

之所以要提前讨论属性,是因为这些属性初始状态下只存在于 DOP netowork中(geometry spreadsheet → geometry),但我们可以提前在 SOP 中设置好这些属性供 DOP 使用。而正因为这些都是 point attribute,而 Packed Objects 正是基于点来模拟位移与方向的,因此这些属性可以为每一个实例(instance)添加初始状态。

Bullet Solver 使用如下的点属性(point attributes)来存储 Packed Object 中每一个部分需要的信息。

Name Type Description
active Int 指定对象是否能够与模拟中的其他对象交互。

关联参数initial Object Type
animated Int 指定是否将 SOP 的变换(也就是自带的动画)更新到 DOP中(以 timestep 为单位)。

该选项只在 active0 的时候使用。

关联参数initial Object Type
bullet_add_impact Int 开启该选项后,任何在模拟中出现的冲击将被存储到 impactsFeedback 数据中。
bullet_angular_sleep_threshold Float 速度低于该值(上限)的对象将被视作没有运动
bullet_ignore Int 指定对象是否会被 Bullet Solver 忽略

active 设置为 0 不同的是,该值意味着对象不会再与任何其他对象碰撞。

bullet_linear_sleep_threshold Float 线速度低于该值(上限)的对象将被视作没有运动
bullet_want_deactivate Int 被视作为“没有运动”的对象将不再参与到模拟中,直到他们重新开始运动。“没有运动” 由线 / 角 速度的两个上限判定。
computecom Int 指定是否计算质心

关联参数Compute Center of Mass
computemass Int 指定是否通过对象的形状和密度计算质量。

关联参数Compute Mass
creationtime Float 对象的创建时间($SF
dead Int 指定下次解算中哪些对象应该被删除。POP kill 节点可以用于生成该属性。
deforming Int 指定对象的形状是否在碰撞后进行重建

关联参数Initial Object Type
density Float 指定对象的密度

关联参数Density
friction Float 指定对象的静摩擦力0 代表光滑。

关联参数Friction
inertialtensorstiffness Float inertial tensor 的缩放参数。越高代表对象旋转的趋势越小。

关联参数Rotational Stiffness
inheritvelocity Int 如果该值不为 0,来自 SOP 几何体上的 vw (线速度和角速度点属性)将覆盖对象自身的初始属性。
mass Float 对象的质量。受 computemass 的影响。

关联参数Mass
name Quaternion 对象的方向。
P Vector 对象当前的质心位置
pivot Vector 质心的位置。由自动计算或者手动指定生成。

关联参数Center of Mass
v Float 对象的线速度。

关联参数Velocity
w Float 对象的角速度。

关联参数Angular Velocity

Collision Shape Attributes

下列属性可以用于自定义碰撞形状。该属性来自于 Bullet Data 节点。

Name Type Description
bullet_adjust_geometry Int 收缩碰撞几何体的范围,防止 collision padding 带来的碰撞几何体增大导致模拟发生变化。该属性可以防止碰撞几何体的交叉,去除 collision padding 带来的几何体缝隙。
bullet_autofit Int 当碰撞几何体的表现形式为 box、Capsule、Cylinder、Sphere、Plane 的时候,该参数决定是否使用碰撞几何体的 bounds 来作为碰撞外形。
bullet_collision_margin Float 碰撞外形之间的 padding,用于提升 Bullet 的碰撞检测的稳定性和表现。该属性与场景的比例有关系。

该 padding 会同样增加碰撞外形的大小,因此推荐使用 Shrink Collision Geometry 来防止碰撞外形的变化。该选项不支持 ConcavePlane
bullet_georep String 碰撞外形的表现形式。比如 Convex Hull
bullet_groupconnected Int 当表现形式是 Convex Hull 的时候,指定解算器是否以已连接的 primitives 为单位(Packed Primitives),创建一个包含多个 Convex Hull 的复杂碰撞外形。

Collision Attributes

以下属性用于使指定对象忽略与模拟中其他对象的碰撞行为。

collisionignoreString如果对象处于未激活状态,且min_activation_impulse 的值为正,那么该对象不能通过与任何满足 collisionignore 中表达式的对象进行碰撞而达到激活的效果。
activationxformgroupString
collisionignore String 若指定对象满足该属性中的表达式,那么该对象不会与任何其他对象进行碰撞。

该表达式可以使用 DOP 对象的名字,ID、DOP Groups,或 RBD pakced object 中的 collisiongroup 属性。同时,POP Collision Ignore 节点可以用于生成该属性。以下是语法:

  • * 会关闭所有的碰撞,留空会开启所有的碰撞。
  • * ^object1 会导致对象只与名为 object1 的对象碰撞。
  • wall* 会关闭 Packed primitive 中,所有 collisiongroup 属性中,以 wall 开头的对象。
  • object1/wall* 同上,但指定了 Packed primitive 的来源为 Object1