Cesium中实现SPH流体模拟
SPH 流体模拟
在前面的文章Cesium中实现流体模拟中,提到过,常见的流体模拟方式有网格方法、粒子方法、边界元方法和体积随机法。这里使用的 SPH 属于粒子方法。
SPH(Smoothed Particle Hydrodynamics)粒子法,即光滑粒子流体动力学方法,起源于20世纪70年代,是一种基于拉格朗日观点的无网格数值模拟技术。该方法的发展历程可以追溯至天文学中的复杂问题求解,并逐渐扩展到包括工程、计算机图形学以及多物理场耦合模拟在内的多个领域。
在 SPH 方法中,流体被离散化成大量粒子。每个粒子代表流体的一部分,并具有相应的物理属性,如位置、速度、压力和密度。这些粒子通过光滑的核函数相互作用,核函数使得粒子间的相互作用力随着距离的增加而平滑地减小。
在 Cesium 中实现 SPH 流体模拟
事实上,SPH 在 Web 端的实现有很多,这里是采用将其他 Web 端的方法进行移植,来在 Cesium 中实现的。
该示例实现的代码逻辑大致如下:
- 创建一张纹理用来存储 SPH 的粒子信息,以方便在 GPU 中计算
- 将该纹理切分成若干等大的小纹理,以组成类似 sample2DArray 的形式(一小张代表一个平面上的粒子信息,多张堆叠即可表示粒子的立体信息)
- 根据用户操作/初始状态来添加/删除纹理中的粒子
- 每帧判断当前粒子与周围相邻粒子之间的相互作用力(收到的重力、压力、粘力、推力等)
- 每帧再判断每个粒子是否碰到障碍物,如果碰到,那么障碍物给到粒子的力有多大,方向如何等信息
- 应用每个粒子收到的力,并更新位置
- 单独编写着色器来呈现 SPH 的计算结果
Cesium 中实现的效果展示
Cesium中实现SPH流体模拟
https://www.liaomz.top/2024/06/03/cesium-zhong-shi-xian-sph-liu-ti-mo-ni/