仍然是看视频的笔记,摸着大佬们过河。
有点杂有点乱,如有错误,多多指教。
原视频链接:rbd_CONSTRAINT01_哔哩哔哩_bilibili
文章/笔记个人推荐:
1、知乎@刘鹏云_RBD
2、感谢R姐的无偿pdf笔记分享——哔哩哔哩@Rosarita_Art
pdf笔记下载链接。
前面四部分主要是参数之类文字解释,可以先过一遍再回头细看,结合工程文件阅读更佳,工程文件下载链接点这,使用版本Houdini19.5.493。
一、什么是刚体/DOP/RBD
知乎老哥@樱桃小嘴拆拆怪 的解释:一起学习Houdini——刚体动力学
以下为【知乎@樱桃小嘴拆拆怪】文章的部分摘抄,详细可点击上方链接去看看。
刚体:物体在外力作用下不发生形变的物体,刚体通常具有固定的形状和大小,不会压缩、伸展或挤压。
DOP:Dynamic OPerators 的缩写,DOP 用于构建模拟。模拟从 SOP 网络读取几何并将数据传输到 DOP 网络,例如用于刚体和热模拟的碰撞或源几何。
RBD: (Rigid Body Dynamics,即刚体动力学) 是 Houdini 中用于物理仿真的一个子系统。它可以模拟刚性物体的碰撞,弹性,重力等物理行为,使用 RBD,可以创建如碰撞,摔倒,破碎,液体等复杂的动态效果。它与 DOP系统配合使用,可以创建出更为真实的动态效果。
二、基本工作流Basic workflow
本小节来自Rosarita_Art的笔记
三、Dopnet动力学模拟部分节点、参数、属性
1、Constraint Network节点
Constraint Network节点位于Dopnet内,属于primitive层级。
第一个输入点:需要处理的对象
第二个输入点:创建约束
第三个输入点:约束解算器/可以加个SOP solvers
SOP solvers节点:该节点内的最后一个relationship_geometry,默认导入约束,可以试试连这个(工程文件第12个案例)
2、Constraint Network节点参数面板
geometry Source:使用端口选择需要处理的对象更方便
Use Object transform:如果在geo层级有transform变换,则勾选此项
Overwrite with SOP:用 SOP 覆盖。如果为1,则会自动读取dopnet外面的约束(工程文件第14_2实例)
Attach Internal Constraints to Object:勾选前,约束独立;勾选后,(内部)约束附加到刚体/对象;
(详情请看官方文档,具体有啥用暂时看不明白)
3、约束属性
constraint_name:约束的数据name。//需要相同的name才可以创建约束
constraint_type:约束类型/有position、rotation、all,默认position
next_constraint_name:下一个约束的数据name。
next_constraint_type:下一个约束类型
propagate_iteration:粘连约束独有的
4、反馈属性
线性约束(linear constraints): force、distance
旋转约束(angular constraints): torque、angle
Glue约束(glue constraints):impact
反馈属性由dop解算器创建,以提供有关约束在前一个时间步中的行为方式的信息。这些属性可用于控制何时打破约束。
如下图所示,反馈属性在第二帧开始出现,
5、Anchor Attributes锚点属性
可用于控制Anchor如何附加到对象。主要针对旋转约束,锚点的两个属性一般配合使用:
condof_控制约束自由度数(0到3):点属性,Integer
condir_控制约束方向:点属性,Vector;如果约束自由度是0,则旋转位移自由。如果约束自由度1,这个值定义了一个法向平面,物体可以在其中旋转,位移。如果约束自由度是2,这个值定义了一个axis(轴向),物体可以绕它位移旋转。如果约束自由度是3,那就真约束住,几乎不能动了
6、restlength属性:约束长度
7、注意下工程文件里面,使用Name节点进行命名,是方便对象与约束进行“连接”
8、为社么要使用assemble节点进行Pack?
对Primitive进行打包,打包后,作为一个模板几何体来使用,需要的时候可以直接引用。
无需复制那样,生成一个又一个占用内存的副本。(粗暴理解:复制文件与创建快捷方式)
Pack的物体必须在点上。了解更多Pack点这。
9、rigidbodysolver刚体解算器
第一个输入点:需要解算的对象
第二个输入点:在主运算器之前运行
第三个输入点:在主运算器之后运行
10、一些约束节点们
这些节点的的很多参数可以使用VEX修改/提前指定:
hardconrel:硬约束;不会断,使刚体一直保持 rest length 的距离
glueconrel:粘连约束;同约束数量,它最快;超过阈值,会自动断开约束
springconrel:弹簧约束
bulletsoftconrel:软约束
conetwistconrel:锥形约束(设定在一个锥形区域内可形变,一般用于汽车刚体绑定、群集 ragdoll 设置,参数较多)
sliderconrel:滑动约束,在范围内旋转、滑动((官方文档解释:约束对象在单个轴上旋转和平移,并限制该轴上的旋转和平移))
注意:
弹簧约束和软约束差不多,推荐使用软约束,计算更快速;
锥形约束和滑动约束,主要针对生物,比如手腕、手臂之类等约束;只有旋转,所以s@constraint_type得写旋转Rotation。
关于springconrel弹簧约束:(参数如下图所示:弹簧约束)Goal Hing Axis与constrained Hing Axis、Goal Up Axis与constrained Up Axis,
这两组参数一般设置一样(可使用【复制-粘贴引用】使其保持一样 )(conetwistconrel约束也是?)
四、几种使用节点创建约束的方式
eg.【使用方法可参看工程文件第2~5个案例】
1、rbd_constraint_properties节点:创建刚体约束属性。
0端连接模型,1端连接约束,2 端连接代理
会自动删除不用的一些属性,节约内存。
2、rbd_constraints_from_lines节点:创建直线约束。
1、可以自定义直线作为约束;
2、也可以在Scene窗口按Enter按提示创建直线。(选择Group Type,即对产生的约束设置个组)
3、rbd_constraints_from_curves节点:创建曲线约束
1、可以自定义曲线作为约束;
2、也可以在Scene窗口按Enter按提示创建曲线线即可(勾选Use Curve Geometry)
4、rbd_constraints_from_rules:按规则创建约束。
默认所有碎块都产生约束。
Groups参数之All:在所有部分之间创建约束。
Groups参数之All to Group:在组Group中的对象和所有其他对象之间创建约束。
Groups参数之Group to Group:组与组对象之间创建约束。
Use Clusters参数:使用cluster浮动属性连接具有给定公差内匹配值的片段。
五、使用VEX创建基本约束
eg.【参看工程文件第6~7个案例】
6和7案例基本一样,都是粘连约束。但第7个案例多了个【next】约束类型—硬约束,
结果:
六、硬约束Hard的约束类型
eg.【参看工程文件第8~11个案例】
硬约束的约束类型有位置【Position】、旋转【Rotation】、位置和旋转【All】,这几个案例可以大致看出硬约束不同约束类型的区别,
(glueconrel、hardconrel、softconrel节点的的很多参数可以使用VEX修改/提前指定)
七、锚点属性condri、condof
eg.【参看工程文件第13~14个案例】
探讨下硬约束下的锚点属性,其它约束类型可自行尝试。
锚点属性可用于控制Anchor锚点如何附加到对象。主要针对旋转约束,锚点的两个属性一般配合使用:
condof_控制约束自由度数(0到3):点属性,Integer
condir_控制约束方向:点属性,Vector;如果约束自由度是0,则旋转位移自由。如果约束自由度1,这个值定义了一个法向平面,物体可以在其中旋转,位移。如果约束自由度是2,这个值定义了一个axis(轴向),物体可以绕它位移旋转。如果约束自由度是3,那就真约束住,几乎不能动了
1、eg.工程文件第13个案例,在【s@constraint_name = 'Hard'; s@constraint_type = 'position';】 前提下,锚点属性的具体表现,
对应结果为:(加了重力)
2、Position、Rotation可分别设置锚点属性
eg.工程文件第14个案例,前提条件【约束类型Position的锚点属性自由度设为3,仅对约束类型Rotation的锚点属性进行设置】,
结果:更改Rotation的锚点属性自由度,在重力影响下,box没有位移,只有按设置的锚点属性进行旋转,
3、感兴趣可以对第14案例的position、rotation的锚点属性设置不同值,看看具体结果。
八、Constraint Network节点参数面板之Overwrte With SOP
如果参数设置为1,则会自动读取dopnet外面的约束(工程文件第14_2实例),
九、初步认识硬、软、粘连、弹簧约束等
hardconrel:硬约束;不会断,使刚体一直保持 restLength 的距离
glueconrel:粘连约束;同约束数量,它最快;超过阈值,会自动断开约束
springconrel:弹簧约束
bulletsoftconrel:软约束;可以旋转,不会恢复(和弹簧约束差不多,推荐使用软约束,计算更快速)
1、【参看工程文件第15案例】,可自行尝试熟悉不同约束的参数
在【s@constraint_name = 'Hard'; s@constraint_type = 'all'; 】且【i@condof = 3;】的前提条件下,各约束的结果为:(下一案例是升级版,结果更直观)
2、【参看工程文件第16案例】
是第15案例升级版,换了个可碎的猪头模型,及多了个【下一个约束】。
两个约束,直接merge一起即可,记得name一致。
结果:无图
十、滑动约束、锥形约束
conetwistconrel:锥形约束。设定在一个锥形区域内可形变,一般用于汽车刚体绑定、群集 ragdoll 设置,参数较多。
sliderconrel:滑动约束,在范围内旋转、滑动。
这两个约束,因为只有旋转,所以s@constraint_type得写旋转Rotation。
【工程文件第17案例】,工程文件案例不大行。
锥形阅读推荐解释很详细的知乎@刘鹏云_锥形约束,
十一、案例风吹板子
没啥好说的,看图和【参看工程文件第18案例】吧
十二、hardConrel与Angular Motor
硬约束hardConrel里面还有个AngularMotor,直译过来就是角运动/角电机。
参数主要是轴数量、轴向、角速度、最大旋转力等,其可以做旋转、转动等。
【参看工程文件第19案例】,是一个会动的轮子,
(rotation和position分开做约束,轮子更真实。详细做法参看下一个的小车子案例)
十三、小车车案例
【参看工程文件第20案例】
这个车的轮子是rotation和position分开做约束,注意这里是在移动约束这设置Angular Motor,
十四、小车案例升级版_多车
【参看工程文件第21案例】
视频里在周围加了几根圆柱,暂无法复现,先这样吧。有兴趣的可以试试调下参数复现。
十五、毛发约束
类毛发模拟的约束,【参看工程文件第22案例】