PBD相关节点手册
PBF流体模拟(WIP)
PBD软体模拟(WIP)
PBD布料模拟
PBD模拟的通用原理和步骤
-
+
首页
PBD布料模拟
我们先讲解原理,然后讲解实践。 ## 原理 对于布料来说,只需要额外关心一下几点: 1. 弯折约束(Bending Constraint)。弯折约束的实现方式有多种。Muller原始论文中的方法是通过相邻面之间的二面角(dihedral)来实现的。 2. 距离约束(Distance Constraint)。在布料仿真中,又叫拉伸约束(Strech Constraint)。 这与软体模拟的距离约束没有什么区别。唯一注意的是:通常布料的刚度要非常高,并且很少会去调节距离刚度。 3. 增加厚度(Cloth Thickness)以防止自碰撞。这也可以认为是一种约束。做法是考察粒子到三角面的距离和三角面的法向是否方向一致(换种说法,粒子是否与三角面处于同侧)。 距离约束我们不再赘述。 ### 弯折约束 我们这里采用二面角的方法实现距离约束。这也是Muller PBD原始论文中的方法。 为了计算二面角,我们必须首先知道邻接三角面(adjacent triangle)。 如下图所示,我们有一个三角面(p1,p2,p3)。它的邻接三角面是(p1,p2,p4)。它们的共享边(shared edge)是(p1,p2)。 ![](/media/202211/2022-11-16_041823_097047.png) 我们只需要找到这两个三角面的法向,即n1和n2,然后计算法向的夹角即可知晓两个面之间的夹角。 #### 邻接三角面 那么,如何找到邻接三角面呢? 显然,一个三角面最多有三个邻接三角面,最少有一个邻接三角面。或者我们想象一个矩形布料的例子:处在中间位置的三角面有三个邻接三角面,位于四个角的三角面只有一个邻接三角面,位于边缘的三角面则有两个邻接三角面。 所以思路如下:每个共享边,对应一个三角面。因此,我们只需要找到哪些是共享边(也就是同时被两个三角面都当做边的边),然后通过共享边找到对应的两个三角面,不是自己的那个就是邻接三角面。 要找到边所对应的三角面,要建立边到面的映射。 总结起来,为如下2步: 1. 建立边到面的映射。 2. 遍历所有边, 如果一个边同时属于两个三角面,那么这两个三角面互为邻接三角面。这样,我们就能维护一个邻接三角面的哈希表。这个哈希表的作用是:给定任意一个面,得到其邻接三角面。 #### 二面角约束 有了邻接三角面,我们就能找到这两个面的法线n1和n2。 所以他们的夹角就是: $$ \varphi = arccos(\mathbf{n_1} \cdot \mathbf{n_2}) $$ 然后,类比距离约束,我们要求(1)当前角与原角度的差值(即约束C)(2)二面角的梯度(即约束梯度gradC),从而让粒子产生回到原角度的运动趋势。 换成数学语言就是: 约束: $$ C = \varphi - \varphi_0 $$ 约束梯度: ![](/media/202211/2022-11-16_044147_881752.png) 上式中,p2, p3, p4都是四个粒子相对于p1的位置。也就是p2 = p2 - p1, p3=p3-p1, p4= p4 - p1。 其中d是法线的点积。 法向量也是经过了归一化的。 读者请注意,其中前面的系数(也就是负根号那个)是来源于对arccos的求导。 当然上述公式仍不能直接使用。实际发挥作用的公式如下: ![](/media/202211/2022-11-16_044639_486113.png) 其中 ![](/media/202211/2022-11-16_044621_499281.png) wi代表粒子质量倒数。 以上公式均来源自Muller2007附录。 ### 自碰撞处理 为了防止自碰撞,让粒子与三角面之间保持一定的距离。这个距离被称为布料的厚度h。 如图所示。q点是任意一个粒子。p1,p2,p3则是任意一个三角面。为了防止q点穿透三角面。需要让q与三角面之间保持一定厚度h。 ![](/media/202211/2022-11-16_045235_878781.png) 保持厚度的实质是让粒子永远处于三角面的同一侧。要么是正面侧,要么是反面侧。而正反面可以由法线来定义。当与法线处于同一侧的时候,就定义为正面测。 因此我们先找到三角面的法线(归一化了的),然后计算q与三角面的距离。可以先用三角形任何一个顶点(比如p1)与q之间作差得到距离向量,然后让距离向量与法向量进行点积(因为点积会消除非法线方向的分量)。这样就得到了距离。 由于粒子可能一开始就处于三角面的反面,因此我们需要分类讨论。 假如粒子处于正面: ![](/media/202211/2022-11-16_050249_515325.png) 假如粒子处于反面: ![](/media/202211/2022-11-16_050301_344212.png) 以上公式来自Muller2007。请读者不要害怕,第一项中的那个分式,只不过是归一化之后的法向量罢了。 ## 实践
beidou
2022年11月16日 05:06
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
关于 MrDoc
文档MrDoc
是
州的先生
开发并开源的在线文档系统,其适合作为个人和小型团队的云笔记、文档和知识库管理工具。
如果文档给你或你的团队带来了帮助,欢迎对作者进行一些打赏捐助,这将有力支持作者持续投入精力更新和维护文档,感谢你的捐助!
>>>捐助鸣谢列表
微信
支付宝
QQ
PayPal
None
None
None
None
None
Markdown文件
分享
链接
类型
密码
更新密码