SHP(光滑粒子流体动力学)流体模拟实现:算法总览

流体模拟(一)

流体模拟算法总体流程:

流体现象广泛存在于自然界、日常生活以及工 业生产中,对流体的模拟即流体动画, 一直是基于物理的动画以及计算机图形学的重要研究内容。目前, 基于物理模拟的流体动画按照其空间离散化的不同方式主要分为两大类: 网格法与无网格法。网格法将模拟域离散到网格点,而网格点的物理属性值(如速度、密度等)通过求解控制方程获得;无网格法则是将流体体积离散到采样粒子, 每个粒子具有相应的物理属性, 粒子受控制方程作用 在空间中流动。无网格法具有质量守恒、无边界区域等优势,更容易模拟复杂现象(如卷浪、水滴、流体和固体运动等),在无网格法中, 基于光滑粒子流体动力学(smoothed particle hydrody- namics, SPH)方法由于计算简单高效, 成为最受关注的方法.

该方法可以产生十分真实的效果,下图是由该算法生成的效果。

在构建流体的同时,我们不仅需要用物理仿真出粒子的运动,还需要模拟出良好的流体表面,在表面重建中,Marching Cube算法则是一种非常实用且高效的算法,因此我选择用SPH算法算出粒子运动后,利用Marching Cube算法重建表面,在最后还利用一个各项异性算法来实现表面的光滑效果。

下图是我们的程序流程图:

根据流程图,设计的效果如下图所示:

我们在加入一点简单的冯氏光照模型进行渲染:

加上一个天空盒之后其实发现效果还不错,但是最初版的Maching Cube重建出来的表面有比较大的问题就是颗粒感过于明显了,比如下图的静止图:

我们可以发现表面不是很平坦,然后看了Yu, Jihun这个人的“Reconstructing surfaces of particle-based fluids using anisotropic kernels”这篇文章,他提出了一个用SVD来给每个粒子进行旋转和附加缩放权重,来达到各个粒子各向异性的目的。这是论文中最重要的一点,图解如下图所示:

我们可以明显的看到改论文的主要方法就是改变了每个粒子的形态达到平滑的作用。

我根据他的方法完善了表面,如下图所示:

这就是流体模拟的一个总体思路。

下一章节就先介绍一下SPH(光滑粒子流体动力学)算法。

发布了22 篇原创文章 · 获赞 22 · 访问量 2577

猜你喜欢

转载自blog.csdn.net/qq_39300235/article/details/100981656