RBD —— DOP Nodes

本文介绍了如何利用RBDPackedObject在DOP中高效表示大量刚体,特别是与BulletSolver结合时的优势,包括点属性的详细说明以及与BulletSolver相关的碰撞处理和解算器内部机制。还提到了与cloth、solid和wire碰撞的支持,以及ConstraintSolver的并行算法在不同场景下的性能优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

RBD Packed Object —— 创建表示大量刚体的单个DOP对象

Bullet Solver —— 子弹解算器


RBD Packed Object —— 创建表示大量刚体的单个DOP对象

        在DOP内创建单个DOP对象,从SOP导入几何体,使用每个primitive(包含变换和表示RBD的单个点),如packed primitive、sphere、tube等;每个primitive提供碰撞体,和点属性(用于储存方向、质量、速度的信息);

        所得到的DOP对象在表示大量的对象方面,比RBD Fractured Object DOP、RBD Point Object DOP更有效;当前仅适用于Bullet Solver;

Bullet Solver使用的点属性
NameTypeDescription
activeint指定是否对其他对象做出反应,默认由initial object type设置;
animatedint指定变换transform(pack后的)是否更新,仅active为0时使用,默认由initial object type设置;
deformingint指定是否重建碰撞外形(即变形),默认由initial object type设置;
namestring对象唯一名字,会被Constraint Network用于识别约束赋予的对象;
orientquaternion围绕pivot的方向;当调整此属性时,解算器会自动更新变换;
Pvector对象质心的当前位置;
pivotvector应用方向的枢轴点;如computecom不为0,将从碰撞形状解算,否则由Center of Mass设置;
vvector对象线速度,可由Velocity参数设置;
wvector对象角速度(弧度),可由Angular Velocity参数设置;
agefloat对象年龄(秒);
lifefloat最大年龄(秒);
deadint指定对象在下次解算中是否被删除;POP Kill可被用于生成此属性;
pscalefloat围绕pivot统一的缩放,与scale相乘;
scalevector围绕pivot统一的缩放,与pscale相乘;解算器会自动更新碰撞体和inertial tensor;
restxformmatrix初始变换,当前变换是初始变换和position transform的合并;position transformPrestpivotorientpscale, scale定义,这些属性会自动初始化;
inheritvelocityint非零则使用原v/w覆盖参数设置;
computecomint是否从对象的碰撞形状自动计算质心,默认由Compute Center of Mass参数设置;
computemassint是否从对象的碰撞形状和density参数自动计算质量,默认由Compute Mass参数设置;
densityfloatmass=volume*density,默认由Density参数设置;
massfloat对象质量;如computemass非零将自动计算质量,否则由Mass参数设置;
inertialtensorstiffnessfloat缩放惯性张力(inertial tensor),值越高越难旋转,默认值由Rotation Stifffness参数设置;
bouncefloat弹力,当两对象均为1时反弹不损失能量,均为0时碰撞后会保持静止,默认由Bounce参数设置;
frictionfloat摩擦系数,值为0则为无摩擦,默认值由Friction参数设置;
creationtimefloat储存创建对象的解算时间$ST;
bullet_ignoreint指定是否完全被bullet solver忽略,将无法与其他对象碰撞;
bullet_add_impactint在解算中发生的任何撞击,均会记录在Impacts或Feedback数据;可能会增加解算时间或内存;
bullet_want_deactivateint禁止不移动对象的解算,直到对象再次移动为止;线速度和角速度阈值用于确定对象是否不一定;如Display Geometry关闭,可查看Deactivated Color;
bullet_angular_sleep_thresholdint角速度的睡眠阈值,角速度在此值以下达到指定时间即视为不移动;
bullet_linear_sleep_thresholdint线速度的睡眠阈值,线速度在此值以下达到指定时间即视为不移动;
用于自定义碰撞形状属性
NameTypeDescription
bullet_colorvector指定形状引导几何体的颜色;
bullet_deactivated_colorvector指定对象不移动或失活时形状引导几何体的颜色;
bullet_georepstring表示对象的碰撞外形,convexhull,concave,box,capsule,cylinder,compound,sphere,plane;设置为none将产生禁用碰撞的static对象,但约束仍会被赋予;
bullet_groupconnectedint当为Convex Hull时,指定是否为每个prim单独创建Convex Hull;
bullet_collision_marginfloat增加外形间隙距离,以提高碰撞检测的稳定性和高效性;与Shrink Collision Geometry配合使用;不支持Concave或Plane;
bullet_adjust_geometryint收缩碰撞几何体以避免collision padding增加对象有效尺寸;可避免初始碰撞外形相互渗透以提高性能,也可消除Collision Padding引起的间隙;
bullet_shrink_amountfloat指定收缩碰撞体的量;
bullet_autofitint是否使用对象边界框计算碰撞形状(当Geometry Representation是Box, Capsule, Cylinder, Sphere, Plane时)
bullet_primRvectorBox, Capsule, Cylinder, Plane碰撞外形的方向,如AutoFit,此值会自动计算;
bullet_primSvectorBox碰撞外形的尺寸,如AutoFit,此值会自动计算;
bullet_primTfloatBox, Sphere, Capsule, Cylinder, Plane碰撞外形的位置,如AutoFit,此值会自动计算;
bullet_radiusfloatSphere, Capsule, Cylinder碰撞外形的半径,如AutoFit,此值会自动计算;
bullet_lengthfloatCapsule或Cylinder碰撞外形的Y方向长度,如开启AutoFit,此值会自动计算;
碰撞属性
NameTypeDescription
activationignorestring如对象非激活,min_activation_impulse属性为正值,将不被任何对象碰撞激活;
activationxformgroupstring对agent,当使用min_activation_impulse时,激活刚体;默认是激活所有的agent刚体;该属性应包含transform group名字(指定哪个关节刚体被激活);
collisiongroupstring由collisionignore属性使用,用于忽略碰撞;
collisionignorestring该对象将不与任何匹配的对象碰撞;可使用DOP对象的名字,ID,DOP组,collisiongroup点属性;可使用POP Collision Ignore;
min_activation_impulsefloat最小碰撞impluse,使对象从非激活切换到激活;activationignore用于避免被碰撞激活;
stickycollisionignorestring忽略粘性碰撞,类似collisionignore;
minstickycollisionimpulsefloat最小碰撞impluse,使对象产生粘性;stickycollisionignore用于避免被碰撞激活;
maxstickycollisionobjectsint被粘住的最大数量,小于大于0则可粘住任何数量;
numstickycollisionobjectsint粘住对象的数量;
maxstickycollisionpointsint最大锚点数(约束),用于将该对象粘住其他对象;默认为1,将在一对对象间创建一个约束;
速度限制属性
NameTypeDescription
speedminfloat最低速度(单位/秒)
speedmaxfloat最高速度(单位/秒)
spinminfloat最低角速度(弧度/秒)
spinmaxfloat最大角速度(弧度/秒)
accelmaxfloat限制速度的变化
angaccelmaxfloat限制角速度的变化
Force属性
NameTypeDescription
forcevector指定应用到质心的力
torquevector指定应用的扭转力
dragfloat当对象被targetv、targetw属性阻尼时,此属性用于进一步缩放;
dragexpfloat更高的拖拽阻尼指数,将引起离目标速度或角速度(targetv/targetw)更远的对象比离目标较近的对象,更快的恢复;
airresistfloat指定匹配目标速度targetv的强度;
spinresistfloat指定匹配目标角速度targetw的强度;
targetvvector指定的目标速度,与airresist一起去计算将对象移动到目标速度的力force;
targetwvector指定的目标角速度,与spinresist一起去计算将对象移动到目标角速度的扭矩torque;
解算器内部保留的属性
NameClassTypeDescription
bullet_autofit_validpointint当AutoFit开启,此值储存解算器是否已经计算碰撞外形属性(如bullet_length、bullet_primT);
bullet_sleepingpointint跟踪对象是否已被求解器置于休眠状态;会发生在对象和附近或受约束的对象低于线性阈值和角度阈值一段时间后;当手动唤醒对象时,应将deactivation_time设置为0,避免对象立即又回到睡眠状态;
deactivation_timepointfloat对象已低于线性阈值或角度阈值的时间,解释器会使用该值去禁用解算对象(已失活一段时间);
found_overlappointint当解算器首次识别到对象时,会检测对象初始是否与其他对象重叠,避免被强制分开;解算器使用此属性值判断是否对前一帧执行此过程;
idpointint对象唯一识别属性,可被解释器使用去标识已添加的对象或从解算中移除;
nextiddetailint储存解算器将分配给下个新添加的对象;

Bullet Solver —— 子弹解算器

        此解算可使用简化的对象表示,如boxes、spheres、这些节点形状的组合;还可使用凸面体convex(基于几何体点的);也可与cloth、solid、wire碰撞;

注,与wire碰撞时,wire solver的collision handling参数应设置为SDF ;凹面体concave碰撞有些问题,不能完全支持;

Constraint Solver 解析碰撞和约束,都可并行,质量差异很小;

  • Parallel Gauss-Seidel (Islands),大量小的碎片更快(如堆叠的书);
  • Parallel Gauss-Seidel (Graph Coloring),对少而大的碎片更好(如巨大的坍塌建筑物);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值