SPlisHSPlasH:基于SPH方法的物理流体模拟库项目

SPlisHSPlasH is an open-source library for the physically-based simulation of fluids.

分支3Tags21
文件最后提交记录最后更新时间
3 年前
2 年前
3 年前
2 年前
3 年前
2 年前
2 年前
3 年前
3 年前
2 年前
2 年前
3 年前
2 年前
2 年前
2 年前
3 年前
2 年前
9 年前
6 年前
2 年前
6 年前
3 年前
2 年前

SPlisHSPlasH 是一个开源库,用于基于物理的流体模拟。该库采用了一种流行的无网格拉格朗日方法——平滑粒子水动力学(Smoothed Particle Hydrodynamics,简称SPH),来逼真地模拟复杂的流体效果。SPH形式允许通过仅考虑有限数量的邻近粒子高效计算流体粒子的特定量。在SPH方法领域,模拟不可压缩流体是最关键的研究课题之一,SPlisHSPlasH实现了当前最先进的压力求解器(包括WCSPH、PCISPH、PBF、IISPH、DFSPH、PF),以仿真不可压缩性。此外,该库提供了多种方法来模拟粘度、表面张力和涡度。

该库依赖于以下外部库:Eigen、json、partio、zlib、cxxopts、tinyexpr、toojpeg、pybind11、glfw、hapPLY、nfd和imgui,所有这些依赖项都已包含在内。

它还使用了我们自己开发的库:

  • PositionBasedDynamics,用于动态刚体的模拟;
  • Discregrid,用于检测刚体之间的碰撞;
  • CompactNSearch,执行邻域搜索;
  • cuNSearch,在GPU上执行邻域搜索;
  • GenericParameters,处理通用参数。

SPlisHSPlasH能导出为partio和vtk格式的粒子数据。如果您想在Maya或Blender中导入partio文件,可以试试我们的插件:Blender Sequence Loader和MayaPartioTools。

作者: Jan Bender

许可证

SPlisHSPlasH库代码遵循MIT许可证。详情请见LICENSE文件。

外部依赖项受不同的许可条款覆盖,具体条款可见extern文件夹中的代码及各自许可说明。

文档

论坛

在我们的GitHub讨论区,您可以提问、探讨仿真话题并分享想法。

编译指南

本项目基于CMake构建。只需使用CMake生成项目文件或Makefile,并用支持C++11的编译器编译即可。测试过的配置包括:

  • Windows 10 64位系统,CMake 3.18.3,Visual Studio 2019;
  • Debian 11.5 64位系统,CMake 3.18.4,GCC 10.2.1。

注意:请在64位操作系统上针对64位目标进行编译。不支持在64位OS上的32位构建。

Python安装指导

对于Windows和Linux目标,存在预构建的Python轮子文件,可以通过以下命令安装:

pip install pysplishsplash

适用于Python版本3.6至3.10。如不符合条件,请参照构建指南和Python绑定的快速入门指南

通过运行以下命令可启动命令行模拟器:

splash
splash --help

特性

SPlisHSPlasH实现的功能包括:

  • 开源的SPH流体模拟(支持2D和3D)
  • CPU或GPU上的邻域搜索
  • 支持AVX向量化
  • Python绑定
  • 支持嵌入式Python脚本
  • 多种隐式压力求解器
  • 显式与隐式粘度方法
  • 当前表面张力技术
  • 不同的涡度方法
  • 拖拽力计算
  • 支持多相流模拟
  • 可变形固体的模拟
  • 刚体-流体耦合,涉及静态与动态刚体
  • 与可变形固体双向耦合
  • XSPH速度修正
  • 流体发射器
  • 脚本动画场
  • 基于JSON的场景文件导入
  • 自动表面采样
  • 封闭几何体体积采样工具
  • 后处理步骤中生成喷溅、泡沫和气泡粒子的工具
  • 弹性固体移动粒子上的视觉网格皮肤化后处理工具
  • 所有粒子数据的partio文件导出
  • 所有粒子数据的VTK文件导出(便于ParaView的数据导入)
  • 刚体导出
  • Maya插件支持场景建模和文件生成
  • ParaView插件,以便导入粒子数据

完整的实现模拟方法列表可在此处查看: https://splishsplash.physics-simulation.org/features

截图与视频

访问画廊 →

引用

如需引用 SPlisHSPlasH,您可以使用以下 BibTeX 条目:

@software{SPlisHSPlasH_Library,
  author = {Jan Bender and others},
  license = {MIT},
  title = {SPlisHSPlasH 库},
  url = {https://github.com/InteractiveComputerGraphics/SPlisHSPlasH},
}

这段代码提供了标准的学术引用格式,便于在研究工作中参考 SPlisHSPlasH 这个库。