基于位置运动学的一些研究(二)

PBD之多重网格解算器(Multi-Grid Solver)

在2008年Muller等人提出了一种用于加速PBD解算器收敛的方法——Multi-Grid solver。而其中重要的内容就是数据结构的创建,一旦数据结构创建完成,求解过程也就很简单了。


如图,是一个简单的2级分层结构。黑点是粗糙层,白点是精细层。每个白点至少要与k(=2)个黑点(父节点)相连。创建过程:开始先将所有的质点全都标记为粗糙层,每个点还要存储在该层的所有相邻质点。然后以任意的方向遍历网格,当满足(1)该点的粗糙层相邻节点>=k(2)精细层中所有相邻节点严格>k   条件时则标记为精细层。当粗糙层中的质点被标记为精细层时,粗糙层节点的相邻节点会相应的减少。如果相关节点在粗糙层时,解算器的收敛速度就会被提高。但是当如果把所有的相关节点都放到粗糙层级上的话,会使得更粗糙的层级变得多余的稠密。

一种解决方法是根据具体的问题把相关粗糙层级上的节点当作为精细层处理。



如何把一个精细l-1)层的约束变成一个粗糙(l)层的约束——collapsed(塌陷)。比如距离约束,遍历精细层的所有节点,将pi(精细层)和pj(粗糙层)之间的约束移除掉。对于pi的所有相邻节点pk,如果pk也是pj的相邻节点,那么pk和pi之间的约束也要移除掉;否则用pk和pj约束来代替pk和pi的约束。那么又有两个问题出来了,如何去选择pj以及如何去计算新的pk和pj约束。pj的选择,计算pi粗糙层所有相邻节点的平均位置值,然后在相邻节点中选择距离平均值最近的节点作为pj。而对于pk和pj距离计算,我们可以通过pk-pi和pi-pj来得到。

Hierarchical Solver

在创建好了层级数据结构之后,多重网格算法实现起来会变得很简单。

1、从最粗的网格层级l开始。

2、存储l层所有质点的位置信息pi,并增加一个状态变量qi

3、在该层级执行一个PBD解算器运算

4、从粗糙层到精细层一级一级运算,直到l=0层

5、在l层纠正每一个质点的位置信息


6、继续执行步骤2


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值