2.3.2 基于 3D 位置的流体模拟 (难度等级:2.5)
https://www.bilibili.com/video/bv1RR4y1H7Wj
1: for all particles i do
2: - apply gravity force
3: - integrate
4: - find particle neighbors
5: - calculate
6: end for
7: for all particles i do
8: - calculate
9: - update position
10: - handle boundary collisions
11: - apply XSPH viscosity
12: - update velocity
13: - update position
14: end for
W表示核函数,h为核半径,$m_j$表示粒子质量,此处我们架设所有粒子质量相同,后面的公式中将省略
我们希望求得$\Delta p$使得上式成立
要得$\Delta p$需要先求得$\lambda$,上式中$\epsilon$表示很小的实数,以防除零错误
$\nabla_{p_k}{C_i} = \frac{1}{\rho_0}\begin{cases}\sum_j \nabla_{p_k}W(p_i - p_j, h)& \text{k = j}\-\nabla_{p_k}W(p_i - p_j, h)& \text{k = j}\end{cases}$
当粒子为邻居时,计算其核函数的梯度;当为自身时,对所有邻居的梯度求和
核函数使用的是Poly6 kernel
而核函数的梯度函数使用的是Spiky kernel
一般取$\mid\Delta q\mid$ = 0.1h ... 0.3h, k = 0.1, n = 4
- github地址: https://github.com/zhanll/NiagaraFluid
- 安装4.26及以上版本UE4引擎,打开FluidSimulation.uproject即可