Houdini_RBD_刚体约束

2024-02-24 16:36
文章标签 约束 houdini 刚体 rbd

本文主要是介绍Houdini_RBD_刚体约束,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

仍然是看视频的笔记,摸着大佬们过河。
有点杂有点乱,如有错误,多多指教。
原视频链接: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案例】

这篇关于Houdini_RBD_刚体约束的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/742710

相关文章

SQL中的外键约束

外键约束用于表示两张表中的指标连接关系。外键约束的作用主要有以下三点: 1.确保子表中的某个字段(外键)只能引用父表中的有效记录2.主表中的列被删除时,子表中的关联列也会被删除3.主表中的列更新时,子表中的关联元素也会被更新 子表中的元素指向主表 以下是一个外键约束的实例展示

poj 3159 (spfa差分约束最短路) poj 1201

poj 3159: 题意: 每次给出b比a多不多于c个糖果,求n最多比1多多少个糖果。 解析: 差分约束。 这个博客讲差分约束讲的比较好: http://www.cnblogs.com/void/archive/2011/08/26/2153928.html 套个spfa。 代码: #include <iostream>#include <cstdio>#i

poj 3169 spfa 差分约束

题意: 给n只牛,这些牛有些关系。 ml个关系:fr 与 to 牛间的距离要小于等于 cost。 md个关系:fr 与 to 牛间的距离要大于等于 cost。 隐含关系: d[ i ] <= d[ i + 1 ] 解析: 用以上关系建图,求1-n间最短路即可。 新学了一种建图的方法。。。。。。 代码: #include <iostream>#include

POJ 1364差分约束

给出n个变量,m个约束公式 Sa + Sa+1 + .... + Sa+b < ki or > ki ,叫你判断是否存在着解满足这m组约束公式。 Sa + Sa+1   +   .+ Sa+b =  Sum[a+b] - Sum[a-1]  . 注意加入源点n+1 。 public class Main {public static void main(Strin

创建表时添加约束

查询表中的约束信息: SHOW KEYS FROM 表名; 示例: 创建depts表包含department_id该列为主键自动增长,department_name列不允许重复,location_id列不允许有空值。 create table depts(department_id int primary key auto_increment,department_name varcha

非空约束(Not Null)

修改表添加非空约束 使用DDL语句添加非空约束 ALTER TABLE 表名 MODIFY 列名 类型 NOT NULL; 示例: 向emp表中的salary添加非空约束。 alter table emp modify salary float(8,2) not NULL; 删除非空约束 使用DDL语句删除非空约束 ALTER TABLE 表名 MODIFY 列名 类型 NULL;

机器学习模型中的因果关系:引入单调约束

单调约束是使机器学习模型可行的关键,但它们仍未被广泛使用欢迎来到雲闪世界。 碳ausality 正在迅速成为每个数据科学家工具包中必不可少的组成部分。 这是有充分理由的。 事实上,因果模型在商业中具有很高的价值,因为它们为“假设”情景提供了更可靠的估计,特别是在用于做出影响业务结果的决策时。 在本文中,我将展示如何通过简单的更改(实际上添加一行代码)将传统的 ML 模型(如随机森林、L

javaweb-day01-3(XML 的 dtd 约束)

XML 的约束方式有两种:dtd 和 schema  DTD约束: Document Type Definition    文档类型定义、文档类型界定。 入门示例: book.xml : <?xml version="1.0" encoding="gb2312"?><!DOCTYPE 书架 SYSTEM "book.dtd"><书架><书><书名>J

oracle2之约束

《1》子查询和关联查询 建立表如下: 学生基本信息表 CREATE Student( [Studentid][Int]IDENTITY(1,1)NOT NULL primary key,--主键 [StudentName][char]NOT NULL ) 课程信息表 CREATE Subject( [SubjectID][char]NOT NUL

Leetcode3258. 统计满足 K 约束的子字符串数量 I

Every day a Leetcode 题目来源:3258. 统计满足 K 约束的子字符串数量 I 解法1:暴力 暴力枚举每一个子字符串,看是否满足 k 约束。 代码: /** @lc app=leetcode.cn id=3258 lang=cpp** [3258] 统计满足 K 约束的子字符串数量 I*/// @lc code=startclass Solution{publ