Cesium中实现SPH流体模拟

SPH 流体模拟

在前面的文章Cesium中实现流体模拟中,提到过,常见的流体模拟方式有网格方法、粒子方法、边界元方法和体积随机法。这里使用的 SPH 属于粒子方法

SPH(Smoothed Particle Hydrodynamics)粒子法,即光滑粒子流体动力学方法,起源于20世纪70年代,是一种基于拉格朗日观点的无网格数值模拟技术。该方法的发展历程可以追溯至天文学中的复杂问题求解,并逐渐扩展到包括工程、计算机图形学以及多物理场耦合模拟在内的多个领域。

在 SPH 方法中,流体被离散化成大量粒子。每个粒子代表流体的一部分,并具有相应的物理属性,如位置、速度、压力和密度。这些粒子通过光滑的核函数相互作用,核函数使得粒子间的相互作用力随着距离的增加而平滑地减小。

sph流体模拟

在 Cesium 中实现 SPH 流体模拟

事实上,SPH 在 Web 端的实现有很多,这里是采用将其他 Web 端的方法进行移植,来在 Cesium 中实现的。

该示例实现的代码逻辑大致如下:

  1. 创建一张纹理用来存储 SPH 的粒子信息,以方便在 GPU 中计算
  2. 将该纹理切分成若干等大的小纹理,以组成类似 sample2DArray 的形式(一小张代表一个平面上的粒子信息,多张堆叠即可表示粒子的立体信息)
  3. 根据用户操作/初始状态来添加/删除纹理中的粒子
  4. 每帧判断当前粒子与周围相邻粒子之间的相互作用力(收到的重力、压力、粘力、推力等)
  5. 每帧再判断每个粒子是否碰到障碍物,如果碰到,那么障碍物给到粒子的力有多大,方向如何等信息
  6. 应用每个粒子收到的力,并更新位置
  7. 单独编写着色器来呈现 SPH 的计算结果

Cesium 中实现的效果展示


Cesium中实现SPH流体模拟
https://www.liaomz.top/2024/06/03/cesium-zhong-shi-xian-sph-liu-ti-mo-ni/
作者
发布于
2024年6月3日
许可协议