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案例】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/406642.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++入门学习(三十六)函数的声明

程序是自上而下运行的&#xff0c;比如我下面的代码&#xff1a; #include <iostream> #include<string> using namespace std;int main() { int a1; int b2;int sumaddNumbers(a,b); cout<<sum;return 0; }int addNumbers(int a, int b) { int sum …

ONLYOFFICE桌⾯应⽤程序v8.0:功能丰富,⽀持多平台

文章目录 可填写的 PDF 表单RTL支持电子表格中的新增功能其他改进和新增功能与 Moodle 集成用密码保护 PDF 文件快速创建文档本地界面主题总结 继 ONLYOFFICE 文档 v8.0 的发布后&#xff0c;很高兴&#xff0c;因为适用于 Linux、Windows 和 macOS 的 ONLYOFFICE 桌面应用程序…

Android studio 安装以及第一个程序

一、配置 1、下载JDK&#xff08;JDK&#xff1a;Java Development Kit Java开发工具包&#xff09; 打开Java Downloads | Oracle下载地址下载相应的JDK版本即可&#xff0c;需要注意的是请下载JDK11以上的版本&#xff0c;并且是64位版 2、安装JDK 双击打开已经下载好的安装…

复刻大模型 Sora 有多难?一张图带你读懂 Sora 的技术路径

近日&#xff0c;OpenAI 发布了视频生成模型Sora&#xff0c;最大的Sora模型能够生成一分钟的高保真视频。同时OpenAI称&#xff0c;可扩展的视频生成模型&#xff0c;是构建物理世界通用模拟器的一条可能的路径。 Sora 能够生成横屏1920*1080视频&#xff0c;竖屏1080*1920视…

MATLAB练习题:估计离开家之前能拿到报纸的概率

​讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 清风订了一份报纸&#xff0c;送报人可能在早上6&#xff1a;…

【论文精读】OS-Copilot: Towards Generalist Computer Agents with Self-Improvement

OS-Copilot: Towards Generalist Computer Agents with Self-Improvement 前言ABSTRACT1 INTRODUCTION2 THE OS-COPILOT FRAMEWORK2.1 PLANNER2.2 CONFIGURATOR2.2.1 DECLARATIVE MEMORY2.2.2 PROCEDURAL MEMORY2.2.3 WORKING MEMORY 2.3 ACTOR 3 THE FRIDAY AGENT3.1 A RUNNIN…

JavaScript原型继承与面向对象编程思想

原型继承与面向对象编程思想 在JavaScript中&#xff0c;原型(prototype)、构造函数(constructor)和实例对象(instance)是面向对象编程中的重要概念&#xff0c;并且它们之间存在着紧密的关系。 原型(prototype)&#xff1a;原型是JavaScript中对象之间关联的一种机制。每个Ja…

Clickhouse系列之连接工具连接、数据类型和数据库

基本操作 一、使用连接工具连接二、数据类型1、数字类型IntFloatDecimal 2、字符串类型StringFixedStringUUID 3、时间类型DateTimeDateTime64Date 4、复合类型ArrayEnum 5、特殊类型Nullable 三、数据库 一、使用连接工具连接 上一篇介绍了clickhouse的命令行登录&#xff0c…

mysql 事务详解一

前言 提到事务&#xff0c;大家肯定不陌生。在我们现实生活中也是存在的&#xff0c;比如我们去超市购物&#xff0c;然后去支付。虽然是两个步骤&#xff0c;必须保证同时成功&#xff0c;这个交易才可以完成。 如果这个场景&#xff0c;拿到我们购物系统&#xff0c;就是几…

【kubernetes】kubeadm部署k8s集群(3主3从+keepalived/nginx负载均衡高可用)

目录 一、完成系统初始化 步骤一&#xff1a;常规环境初始化 步骤二&#xff1a;内核版本升级以及内核限制文件参数修改 步骤三&#xff1a;提前准备好负载均衡器和keepalived(接着之前的二进制部署修改的) 二、所有节点部署docker&#xff0c;以及指定版本的kubeadm 步骤…

大厂面试-美团高频考察算法之重排链表

本文学习目标或巩固的知识点 学习如何处理链表重排类题目 巩固反转链表巩固快慢指针巩固合并链表 提前说明&#xff1a;算法题目来自力扣、牛客等等途径 &#x1f7e2;表示简单 &#x1f7e1;表示中等 &#x1f534;表示困难 &#x1f92e;表示恶心 博主真实经历&#xff0c;…

pikachu靶场-File Inclusion

介绍&#xff1a; File Inclusion(文件包含漏洞)概述 文件包含&#xff0c;是一个功能。在各种开发语言中都提供了内置的文件包含函数&#xff0c;其可以使开发人员在一个代码文件中直接包含&#xff08;引入&#xff09;另外一个代码文件。 比如 在PHP中&#xff0c;提供了&…

unity学习(40)——创建(create)角色脚本(panel)——UI

1.点击不同的头像按钮&#xff0c;分别选择职业1和职业2&#xff0c;create脚本中对应的函数。 2.调取inputfield中所输入的角色名&#xff08;限制用户名长度为7字符&#xff09;&#xff0c;但愿逆向的服务器可以查重名&#xff1a; 3.点击头衔&#xff0c;显示选择的职业&a…

二手货wordpress企业网站主题模板

二手车wordpress主题模板 简洁的二手车wordpress主题模板&#xff0c;适合做二手车业务的公司官方网站使用。 https://www.jianzhanpress.com/?p3473 wordpress二手物资回收主题 绿色wordpress二手物资回收主题&#xff0c;用于二手物资回收公司WP建站使用。 https://www.…

算法【查找算法的概念】

查找算法概念 1、查找的基本概念2、评价查找算法3、问题: 查找过程中我们要研究什么? 1、查找的基本概念 查找的概念&#xff1a; 根据给定的某个值&#xff0c;在查找表中确定一个其关键字等于给定值的数据元素或者记录。 查找算法也可以叫搜索算法。查找算法就是从一个有序…

HTMLElement.click()的回调触发踩坑

先看看以下代码 const el document.getElementById("btn") el.addEventListener("click", () > {Promise.resolve().then(() > console.log("microtask 1"));console.log("1"); }); el.addEventListener("click", (…

深度学习基础——U-Net图像分割

图像分割&#xff0c;就是根据图像的某种相似性特征(如亮度、颜色、纹理、面积、形状、位置、局部统计特征或频谱特征等&#xff09;将医学图像划分为若干个互不相交的“连通”区域。 相关特征在同一区域内表现出一致性或相似性&#xff0c;而在不同区域间表现出明显的…

yolov8-seg dnn调用

接上篇一直更换torch、opencv版本都无法解决这个问题&#xff08;seg调用dnn报错&#xff09;。那问题会不会出在yolov8源码本身呢。yolov8的讨论区基本都看过了&#xff0c;我决定尝试在其前身yolov5的讨论区上找找我不信没人遇到这个问题。很快找到下面的讨论第一个帖子&…

八、线性代数二 ,矩阵的秩

目录 1、矩阵子式的定义与子式个数的计算&#xff1a; 2、矩阵秩的定义&#xff1a; 3、矩阵秩的计算方法&#xff1a; 4、矩阵秩的 性质&#xff1a; 线性代数四——几个重要的矩阵点积_线性代数 矩阵点积-CSDN博客 1、矩阵子式的定义与子式个数的计算&#xff1a; 概念&…

RocketMQ高性能核心原理与源码架构剖析

RocketMQ高性能核心原理与源码架构剖析 读、写队列 采用读写分离的方式&#xff0c;RocketMQ在创建Topic的时候会单独设置读队列和写队列&#xff0c;写队列负责写入以及同步数据到读队列&#xff0c;读队列会记录消费者的offset&#xff0c;负责消息拉取&#xff0c;通过Mes…
最新文章