关于PBF中密度约束关于位置梯度的计算


可以看到相比与文章的公式,示例代码中的
grad_j = spiky_gradient(pos_ji, h)
则直接忽略了常数系数项1/rho0。在我反复实验之后发现示例代码的这种写法是对的。可以这怎么解释它与文章公式的矛盾呢?

虽然不知道是什么,但是墨戏中也有ρ0,并让ρ0=1,也就是没有了

@hyena,非常好的问题。你说的是对的,代码里对梯度的求解确实少了一个系数 \frac{1}{\rho_0}

其实这个系数加不加对效果影响不太大,只会对收敛性有影响。因为梯度的方向是对的,其他的系数都是在计算拉格朗日乘子,也就是约束力的大小 \lambda 。如果你仔细一点,你会发现论文里的公式(7)其实还少乘一个粒子 m_j 质量。只是论文假设每个粒子质量相同,都是单位1,taichi的example也是这样做的,所以省略了。

总体来说,PBF约束和约束的梯度都不是准确的推导,能用就行 :joy: